你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32平衡小车,文末附代码、电路图等资源获取方式

[复制链接]
STMCU小助手 发布时间:2022-9-16 17:47
640 (2).png
+ k$ P  o9 ]4 u, D, _( E& S
& v/ p. J" K% @4 e* o- b7 K
硬件介绍   

6 L( J$ I( a2 p" X9 W) g  {
主控芯片用的是100脚的STM32F103VET6,陀螺仪用的是MPU6050,电机驱动用的是TB6612,蓝牙是汇承的HC05邮票孔封装的,WIFI用的USR-WIFI232-S,小车底盘用的是平衡小车之家的某一款带编码器的(不是我买的,同学的),电池用的是一节7.2的镍镉电池,液晶用的是1.3寸IIC接口的OLED,开关用的是三脚纽子开关,电池接口用的是T插,电阻电容这些用的基本上是0603封装,编码器5V降压用的是ASM1117-5.0,3.3V降压用的是SP6203,拨码开关用的是4P贴片式2.54mm角距的,按键是两脚贴片,microusb接口用的是5针 7.2四脚插板牛角母座,超声波是某宝上几块钱烂大街的那种,蜂鸣器是有源的,编码器是小车底盘自带的,电池电压检测是电阻分压之后通过电压跟随器接入MCU内部AD测量的。    STM32F103VET6主控芯片;两个microusb口,第一个是MCU的串口1,可作为普通的串口收发数据,通过调节板上BOOT选项,也可将其作为ISP下载程序接口;第二个是SWD硬件仿真接口;蓝牙模块,与MCU的串口2连接;WIFI模块,与MCU的串口3相连;一块1.3寸IIC协议的液晶接口;超声波接口;双电机驱动;六轴陀螺仪;电池电压检测;4个用于调试的LED;4个独立式按键;一组4P的拨码开关;有源蜂鸣器;两个6P带AB相编码器的电机接口。    如下是电路原理图:

  }7 `. L* i4 o6 _. O3 Y, B! ^/ r
8 Y" B* @* m! k
; ?8 u4 i3 Q5 M5 G- L
640 (1).png

; q% P% u# F+ b& S- Z+ V
如下打样好的PCB:

- D6 s. W$ T7 j9 h( ^  B; E+ N
640.png
5 x6 P, ?/ g/ t& [
: B! z. ?9 S6 V: c
软件介绍   
# Y* h& ~' C; E  Y& ^" J& K5 ?

2 q! p1 Q2 i5 C1 o9 ^. m1 p1 `& V
这份配套的软件,模块分的很清楚。比如蓝牙的遥控部分,超声波部分在完整版的工程里面都是写好的。最好的办法就是,参照这个程序,一点一点自己粘贴然后修改底层搭建自己的工程。或者你也可以把自己的电路画的跟别人的一样,避免修改别人的底层,这样你粘贴过来甚至都不用改就能用了。 如下是main.c代码:
! b1 E* k& K, v0 j# M5 b
  1. #include "stm32f10x.h"0 K  D" z  y( o
  2. #include "stdio.h"
    / I. \& p7 k6 c! K4 H2 Z6 S' ^
  3. #include "systic.h"5 J+ q, y/ @1 G; K3 G
  4. #include "OLED.h"
    , a0 _3 `& Y! l& G) @$ ^( k4 d2 O1 _% E
  5. #include "MPU6050.h"
    - ?5 K' E; Q. Z  b
  6. #include "LED.h"
    " P$ g, u. f5 Y3 U
  7. #include "Buzzer.h"
    8 `8 r" u- w% b0 z
  8. #include "Switch.h"6 j9 L  {, B& h0 h$ @
  9. #include "Key.h"5 f, v% B5 G6 N9 W7 M
  10. #include "Motor.h"3 J9 J; s1 q+ x: y
  11. #include "USART.h"9 B8 m3 j4 i2 h3 J
  12. #include "TIM.h"! h5 ], F' ?. ~6 S2 o

  13. + z/ n1 N- U& S/ z) S9 `
  14. uint32_t Main_Count = 0;; R& [, W( M: R3 t
  15. uint8_t  Key_num = 0;
    - A: x; r' `9 ]8 W' p
  16. uint32_t Test;
    0 S+ s) A9 S1 X7 f
  17. uint8_t Temp[20];9 G! A! s; O* Z2 K+ x' w

  18. 5 H4 i& ?' y% Z0 h* y# b: h0 i
  19. int main(void)
    * X' b% K, H. E& ]3 A6 o+ U
  20. {9 ~$ V$ p8 |, {4 d. G  q# B% W$ e
  21.     USART_NVIC_Configuration();          // 配置串口中断" r' f) ?( Y- V
  22.    USART_Config();                // 配置串口* R' U! m: E1 F  \& D4 F
  23.     SysTick_Init();      //滴答定时器初始化
    3 t: H4 W! W9 y& e% a& J
  24.   OLED_Init();      //OLED引脚初始化 ) |* p4 G! o( v7 o5 \8 O0 h
  25.   OLED_Clear();      //OLED清屏 : @3 B, g6 t7 b( E; \2 j
  26.   OLED_First_Line();  //OLED第一行显示: 贺梓洹毕业设计
    3 W/ C( B, D+ c8 g& N, R9 R
  27.   LED_Init();        //LED引脚初始化
    ( s5 j- j# \  k" T9 v
  28.   Speak_Init();      //蜂鸣器引脚初始化
    6 V* h' ~; h  ~3 v/ A: z
  29.   Switch_Init();      //拨码开关引脚初始化
    . V, q6 c( A, j9 w; k% T
  30.   Key_Init();        //按键引脚初始化# s8 w1 ]! E" R7 F, U1 Q; t
  31.   MPU6050_Init();* _/ F( E/ V7 g% f* f
  32.   PWM_Init(7199,0);, n0 v2 X) q$ U3 x4 o/ S; }, ^
  33.   TIM_Config();, K6 R0 ~8 @  q6 B( ?& Q
  34. //  Speak=1;
    / N* n# P# f9 G1 N. Q# A# E; J: y
  35. //  Delay_s(1);
    0 z3 P8 X% Z: z
  36. //  Speak=0;
    1 ?! @! j; A$ Q* U+ V' a
  37. while(1)
    1 q: H: B0 }. R, X6 p* }  Z
  38.   {2 r0 X" d9 o7 r' v. W3 G5 J
  39. //    KeyScan();. p! C0 A. L$ \9 M; R
  40.   Q0 C* Q/ W' v- x% v- D$ H
  41. $ u6 _2 j% \, l* y3 d5 N
  42. //    if(Key1_Count==1)
      O! e$ q9 T2 V# a2 F6 u
  43. //    {, _" {0 r5 G. R+ d' N
  44. //      Key1_Count=0;
    ) L' I6 T  F7 B& Y+ l
  45. //    kp=kp+3;
    8 D, K' B/ z6 F
  46. //    }
    3 s9 X1 g) y. Q) R( R0 K! D
  47. //    OLED_ShowNum(0,6,Key1_Count,6,16);//显示ASCII字符的码值
    3 q) i9 `* x( A
  48. //    OLED_ShowNum(0,4,Key2_Count,6,16);//显示ASCII字符的码值8 f: J1 Y& g& g. P! U
  49. //    OLED_ShowNum(0,6,Key3_Count,3,16);//显示ASCII字符的码值
    : T' Q. C; ~* }
  50. //    OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值
    # H: ^9 G1 |8 B- S; E
  51. //    Delay_ms(5);) j) Q4 \- j* V4 |) v- D# v: K% E
  52. //    OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值
    + p! b& k7 o4 c5 p1 P$ _3 m
  53. //   LED2=0;" T6 W0 u3 P, J
  54. //   LED3=0;
    1 Y- i% i4 ~/ v) c" }& K" H
  55. //   LED4=0;/ m, d0 V* A- Y/ ~) K2 H
  56. //   Speak=0;
    . Z0 @2 f  k$ v% F% }
  57. //   Delay_s(1);/ M' s1 B& B. m) k, @
  58. ////   LED1=1;% e! d) h+ p2 M" r, n
  59. //   LED2=1;
    " T$ D5 _9 c) c0 {+ u& w! K
  60. //   LED3=1;; J# A  o$ I! F- [! S' h
  61. //   LED4=1;( @, V& f- H5 V( A2 W7 Z
  62. //   Speak=1;/ e5 s; [1 H. X' W7 {
  63. //   Delay_s(1);
    9 E% M/ V9 {8 P* e0 F) |
  64. 2 u$ _5 ^5 n& X) R

  65. % E. H' w0 H  d2 @9 T2 b0 s
  66. //         READ_MPU6050();
    + K' ]) k/ Z- ~( u  O* `
  67. //       Kalman_Filter(Data_6050.Acc_X , Data_6050.Gryo_Y);  
    . ]3 l9 R0 H/ o
  68. ////     //GyroX++;/ S! X' w3 A# q% f2 m8 f
  69. //     OLED_ShowNum(103,2,Data_6050.Acc_X,3,16);//显示ASCII字符的码值
    6 @! y' t9 P- H  ^/ A: r
  70. ////     //GyroY++;; a/ ]+ I# c2 p" g2 [" W# g
  71. //     OLED_ShowNum(103,4,Data_6050.Gryo_Y,3,16);//显示ASCII字符的码值
    - x0 t) Y4 V" C" U
  72. ////     //GyroZ++;* b* `% W% R, t$ s% K# t
  73. //     OLED_ShowNum(103,6,angle,3,16);//显示ASCII字符的码值 / Q4 V+ l2 X6 I5 `% T% d
  74. //     Delay_ms(100);
    6 Y0 z9 l1 W. n3 y- F' L
  75.   }
    : x* Q6 G$ ~+ J+ M8 s
  76. }
复制代码

& o7 e! C0 i; G$ ?, d, T
' r& |% Y( j$ ]9 ~+ {* G0 u2 C0 }
转载自:STM32嵌入式开发

& k1 P, z3 E& g6 _
. r1 f: \/ S! k# f
- e' U- S5 I, G( v$ S! A3 ]
收藏 评论0 发布时间:2022-9-16 17:47

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版