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

【经验分享】STM32平衡小车

[复制链接]
STMCU小助手 发布时间:2022-6-1 20:57
OPRUR5J)F74X]1W6R9(DV.png

, }% x, t# X8 `7 Y
( n5 B6 t' `) J: w4 W, `硬件介绍 % Y- J  b5 W7 A& X$ d
   主控芯片用的是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相编码器的电机接口。    如下是电路原理图:
W(~NVA8892Q57)%UG_J5~8O.png
    如下打样好的PCB:
9 T" [- z* F3 G# @; s( f
640.png
( t$ V1 }0 E  b2 h3 M! l( U- e* r+ w: a% E
) B- J! N: Q4 I
软件介绍
8 R% P- Y6 Q, I1 K5 @, t5 b    这份配套的软件,模块分的很清楚。比如蓝牙的遥控部分,超声波部分在完整版的工程里面都是写好的。最好的办法就是,参照这个程序,一点一点自己粘贴然后修改底层搭建自己的工程。或者你也可以把自己的电路画的跟别人的一样,避免修改别人的底层,这样你粘贴过来甚至都不用改就能用了。
0 z7 G; J' R3 L' o5 j7 E1 ^: ^ 如下是main.c代码:0 i8 t0 `! T) E
  1. #include "stm32f10x.h"$ X7 M0 R% c2 R& ?7 z2 P" F
  2. #include "stdio.h"# f+ V+ A9 ?. W+ O
  3. #include "systic.h"
    7 j9 I) Q' _* ~/ }, F! u2 d
  4. #include "OLED.h": r% _, Y: y1 x3 M! O/ s* ]* Y
  5. #include "MPU6050.h"
    8 T# l( b7 }5 ~, O
  6. #include "LED.h"
    % K/ J+ _0 x) g! O+ }: y
  7. #include "Buzzer.h"6 m) {  `6 W: d3 L0 F2 j
  8. #include "Switch.h"
    " ~' u+ \+ I) q9 \- k! P
  9. #include "Key.h"
    6 e2 ?  Q2 {+ y" H
  10. #include "Motor.h"7 N/ R6 A) x% F6 i
  11. #include "USART.h"
    2 @  O5 C  c/ G+ g9 Z7 `* g8 E% ]
  12. #include "TIM.h"
    8 N& m+ j( Y) W
  13. % R7 `. W+ L) e% a, H# H
  14. uint32_t Main_Count = 0;& J' G2 K) k  y$ g& y3 ?2 t8 O
  15. uint8_t  Key_num = 0;4 ~* j. v0 G9 J& g( O
  16. uint32_t Test;
    ) B4 h+ e6 E% Q, c
  17. uint8_t Temp[20];
    % N9 N/ `5 M# D- [$ {" C
  18. 8 l4 m) W9 y$ z! u
  19. int main(void)
    1 E9 {6 p# \- w/ R
  20. {
    1 w3 n; G2 W% j% k& K/ Y  o' M% P9 J, K
  21.     USART_NVIC_Configuration();          // 配置串口中断
      d  X* j+ G* t1 x% J! ^5 R
  22.    USART_Config();                // 配置串口
    8 n! P! E4 q# C  \5 o$ B) l
  23.     SysTick_Init();      //滴答定时器初始化
    4 \2 c7 ?% _/ ~- M
  24.   OLED_Init();      //OLED引脚初始化
    # u" J" A; V4 q* ]( J" G% H
  25.   OLED_Clear();      //OLED清屏
    5 E& c2 b2 y# h' e) N% z6 {
  26.   OLED_First_Line();  //OLED第一行显示: 贺梓洹毕业设计
    " G6 |" t; k( e) k6 b7 V0 D- ~
  27.   LED_Init();        //LED引脚初始化
    . ^  C0 o' W& n2 Z& |
  28.   Speak_Init();      //蜂鸣器引脚初始化
    * s; ~8 h+ T, V+ W
  29.   Switch_Init();      //拨码开关引脚初始化+ ~6 Z. R$ z! @7 \
  30.   Key_Init();        //按键引脚初始化: T+ a; j( P% \
  31.   MPU6050_Init();% u+ d$ b4 h: d  w. b( C
  32.   PWM_Init(7199,0);! D% \, `/ G- E) M8 c/ h: ~
  33.   TIM_Config();
    3 |8 V4 @0 H6 z, A
  34. //  Speak=1;
    ; x8 x. @" Z3 x" s! W# }
  35. //  Delay_s(1);
    % n; A. K6 c2 c( w: q
  36. //  Speak=0;3 V8 t! w. R  N  W5 G9 Q. Z5 v
  37. while(1)
    ! y! W3 P2 Z& w7 T. t4 s
  38.   {
    ; p; Y1 C7 w5 R% K6 w4 S9 Y* J
  39. //    KeyScan();+ R# a" ?0 Z# q
  40. ( Q' W, V1 |+ Y& V& ?- g
  41.   Y: L" ^  W  r$ v- L
  42. //    if(Key1_Count==1)
    9 c0 M6 Q6 i  y) u  c9 [% D
  43. //    {
    " o  `) g4 {% p- p
  44. //      Key1_Count=0;' m1 X0 N  z* D8 P, e1 D* T3 L3 M' \
  45. //    kp=kp+3;$ O; J8 `9 |/ K* F- s
  46. //    }% Y7 r6 Q6 O: K( i- a
  47. //    OLED_ShowNum(0,6,Key1_Count,6,16);//显示ASCII字符的码值
    - \5 W6 E5 o( E4 F0 L, @7 \5 f
  48. //    OLED_ShowNum(0,4,Key2_Count,6,16);//显示ASCII字符的码值/ G. A  y5 s$ `6 x0 I0 x" i
  49. //    OLED_ShowNum(0,6,Key3_Count,3,16);//显示ASCII字符的码值- n; q) u' H: g" }
  50. //    OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值
    9 g. d/ E3 d- G: R" Z+ `! c
  51. //    Delay_ms(5);4 v" o! P* c1 s0 Z
  52. //    OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值 - h/ J( o# s8 o' [
  53. //   LED2=0;% G* o+ A' G6 ]. V5 M" ^- A
  54. //   LED3=0;1 D) C0 J) v$ S9 L8 G% L
  55. //   LED4=0;" v4 |' y3 u) @1 H, z3 c
  56. //   Speak=0;
    # z! T8 T# k8 c3 a' w9 ]
  57. //   Delay_s(1);: A6 d% @( P8 h0 F6 `( \) a
  58. ////   LED1=1;2 b/ R# v/ W% b
  59. //   LED2=1;
    3 e- ~9 k4 v  c
  60. //   LED3=1;
    9 U3 G1 s  E+ O5 d7 l5 x
  61. //   LED4=1;: }4 \: }% K6 U7 K' ?  r3 r
  62. //   Speak=1;
    ) m" Q) u" C, i/ H6 [1 I
  63. //   Delay_s(1);5 {& O5 V- t* U; k3 h/ W7 Q

  64. 2 O9 b& o9 b* \" a5 g6 H

  65. ( z8 `& F  H5 |7 c0 _. @; S5 q! ?
  66. //         READ_MPU6050();
    2 Z+ ~( E8 f3 A7 R0 S+ g* [
  67. //       Kalman_Filter(Data_6050.Acc_X , Data_6050.Gryo_Y);    y5 T+ X1 g+ A3 T
  68. ////     //GyroX++;
    0 \$ r9 b6 ]+ ?8 O1 D
  69. //     OLED_ShowNum(103,2,Data_6050.Acc_X,3,16);//显示ASCII字符的码值 4 j1 [" S! v5 e% V6 [( t
  70. ////     //GyroY++;5 d* b. W! J7 b; n/ g" X6 P1 O
  71. //     OLED_ShowNum(103,4,Data_6050.Gryo_Y,3,16);//显示ASCII字符的码值 $ N! N* h8 `  a9 y  ^/ n# T1 \, R
  72. ////     //GyroZ++;! ^! {5 ?8 X0 k! ~6 \5 ?
  73. //     OLED_ShowNum(103,6,angle,3,16);//显示ASCII字符的码值 : T: L6 g- {8 r  z) r2 z
  74. //     Delay_ms(100);: s% w5 c( r. m
  75.   }
    9 o8 Y2 O- k9 E
  76. }
复制代码

0 h0 D. ^! i. f4 E4 L
" ^1 y" ?3 ^3 F. P" S! C5 p1 j6 N3 m4 A+ \7 \# d
赞 收藏 评论0 发布时间:2022-6-1 20:57

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版