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

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

[复制链接]
STMCU小助手 发布时间:2022-9-16 17:47
640 (2).png
. e6 @% |' X8 g; E& V' |

- G9 D) B4 i% J% k7 X
硬件介绍   
! ?) R2 w3 L- \) j9 S
主控芯片用的是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相编码器的电机接口。    如下是电路原理图:

, y7 N+ ~1 D/ ~4 A

0 |7 z% N7 q7 }' ]" d( [
' D0 B. c6 t: v
640 (1).png
" K- z6 x& M- O" o/ \0 D1 R# z
如下打样好的PCB:

+ N8 b+ n' r# R6 t; ~  N, Q9 s
640.png

- s3 m5 T7 B  e+ A/ \0 _

! [* b& Z+ e- J! q& s( j8 M4 t  V: i
软件介绍   

5 x  C: Q- U- V) Q" X! B
2 |; M3 i1 C, {# h
这份配套的软件,模块分的很清楚。比如蓝牙的遥控部分,超声波部分在完整版的工程里面都是写好的。最好的办法就是,参照这个程序,一点一点自己粘贴然后修改底层搭建自己的工程。或者你也可以把自己的电路画的跟别人的一样,避免修改别人的底层,这样你粘贴过来甚至都不用改就能用了。 如下是main.c代码:

6 }( ]2 }) c& G9 _: r$ n
  1. #include "stm32f10x.h"
    5 p; N) C1 L4 g  F7 M- d; L
  2. #include "stdio.h"# |" `4 i0 }# S" s4 ~- _
  3. #include "systic.h"7 Z! ?' O: E& A# e7 R
  4. #include "OLED.h"' r1 G0 C7 F; }9 {+ \
  5. #include "MPU6050.h"
    7 \8 J2 n9 j* H& o4 p
  6. #include "LED.h"% s6 l  X, [! u" w
  7. #include "Buzzer.h"8 s7 j0 r, Q- w- L
  8. #include "Switch.h"
    & j8 O% l$ m! q0 ^1 b0 z) r
  9. #include "Key.h"
    1 F9 |2 g$ o4 [; k9 [( S5 c( e
  10. #include "Motor.h"$ N# @+ i0 M( @3 k5 t( I, _2 I
  11. #include "USART.h"
    ( v: I- V8 Y" W) ?: V
  12. #include "TIM.h"
    0 v: t4 H1 W( M! @- U( t( a( ]
  13. 8 O7 ~% J4 F( Z% C" X( M
  14. uint32_t Main_Count = 0;
    / z  H* E6 R9 n1 D0 }
  15. uint8_t  Key_num = 0;
    0 L/ V2 T% t; t! t! w- _
  16. uint32_t Test;+ q% m- J3 A: L4 \. ]2 b" ~
  17. uint8_t Temp[20];
    2 ?" e" L0 j# d6 s- I

  18. + S, \& ^' M+ J" E& A( w
  19. int main(void)
    5 W1 Q7 q4 E! \$ {' u+ w5 r7 n6 @
  20. {+ K( O0 z( \" B& s
  21.     USART_NVIC_Configuration();          // 配置串口中断  G" z8 O# |/ ~, q. ^7 K
  22.    USART_Config();                // 配置串口
    - |- Z( B' |# F9 Z) {% S, C
  23.     SysTick_Init();      //滴答定时器初始化
    ; U% p0 b) X6 \
  24.   OLED_Init();      //OLED引脚初始化 , B# g* M- Z$ R* m- n/ t
  25.   OLED_Clear();      //OLED清屏 ' L' R4 C3 }9 K3 V: t* q5 d4 p
  26.   OLED_First_Line();  //OLED第一行显示: 贺梓洹毕业设计
    * C0 E# p! j4 d1 x) _4 g
  27.   LED_Init();        //LED引脚初始化
    $ P9 X! F0 z% o" O8 q9 w, ~
  28.   Speak_Init();      //蜂鸣器引脚初始化# B6 R7 I4 o4 A3 K  w. |5 \2 d
  29.   Switch_Init();      //拨码开关引脚初始化- ?+ X' m7 L) T) C( L0 U4 P& f
  30.   Key_Init();        //按键引脚初始化  C" W& S3 k7 s4 }' |- H
  31.   MPU6050_Init();
    8 a+ ]  Y. Z: J" j/ ^- }
  32.   PWM_Init(7199,0);' `% R$ \6 M8 b7 N1 Q3 U# U
  33.   TIM_Config();4 P( v) h3 Y. I4 K
  34. //  Speak=1;
    " T# t: j6 I7 r, p  a
  35. //  Delay_s(1);0 e* f0 Q) N# Y) F& o& F' |3 V6 b" d
  36. //  Speak=0;
    " r" e* N5 g+ R6 {' b
  37. while(1)1 N8 |6 H, J, V5 O, }/ o4 G& ?
  38.   {  E" |4 i& E1 G  O# P4 a0 v" ]
  39. //    KeyScan();9 m. E4 z% T0 C- f% K; @
  40. 0 _# }0 i. o6 u/ i7 h7 o8 ^
  41. * s9 y9 t& Y9 u7 E
  42. //    if(Key1_Count==1)
    ) m6 R, d  e- @$ h9 C' }+ v* o4 ?, E
  43. //    {7 D4 e4 i, ]% p" e  j: Y/ d
  44. //      Key1_Count=0;
    / k7 N; B- U& k- M0 M" X5 w
  45. //    kp=kp+3;
    ! i2 ^4 {- }( p9 |
  46. //    }/ D+ G* V+ J9 o' F  O. B
  47. //    OLED_ShowNum(0,6,Key1_Count,6,16);//显示ASCII字符的码值3 `) t$ r8 K* h* [% Z6 Z
  48. //    OLED_ShowNum(0,4,Key2_Count,6,16);//显示ASCII字符的码值) V( a. F7 z8 i" @
  49. //    OLED_ShowNum(0,6,Key3_Count,3,16);//显示ASCII字符的码值
    7 ~% S& @+ D+ a! ~) X% `
  50. //    OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值
    % S& Q- R4 Q! h/ Q) I3 e
  51. //    Delay_ms(5);
    + z1 l6 k9 H% h. n  Z, l2 ^
  52. //    OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值 $ `! @  Z1 \: h; N' ^" P* \
  53. //   LED2=0;2 |, ~3 m$ T+ J/ [
  54. //   LED3=0;
    9 s+ L( m: g/ x& k* V2 Y5 P
  55. //   LED4=0;* T8 B6 n8 x& K# h# l; [' U* V
  56. //   Speak=0;( E- b' A! x1 L
  57. //   Delay_s(1);' ~' i9 |" Z6 A. c# p( P( V; T
  58. ////   LED1=1;
    / W1 c8 x& k5 i" K% q3 J
  59. //   LED2=1;
    / C  C; W, Y& s
  60. //   LED3=1;1 s2 |$ I; A7 o. h
  61. //   LED4=1;/ ^4 ~+ R  b( O4 X; {
  62. //   Speak=1;. t$ I( _4 t& h! z( [+ h& s# R7 c. m
  63. //   Delay_s(1);
    & T" q" K" I# [; C3 W8 i, v

  64. ) y2 B6 g$ P( M- a: h. E

  65. 8 n6 d  Z5 Q$ K$ J8 z
  66. //         READ_MPU6050();
    / ~0 J9 Y1 ~! L" c( y8 B2 D: V
  67. //       Kalman_Filter(Data_6050.Acc_X , Data_6050.Gryo_Y);  8 ~8 S1 s! S  }4 C6 N. c* ^5 u
  68. ////     //GyroX++;
    ) W- ?) U3 ]( s4 _
  69. //     OLED_ShowNum(103,2,Data_6050.Acc_X,3,16);//显示ASCII字符的码值
    * C7 m3 }- f; i7 H  [" Q' x
  70. ////     //GyroY++;
      G+ T3 l, H4 E5 H
  71. //     OLED_ShowNum(103,4,Data_6050.Gryo_Y,3,16);//显示ASCII字符的码值 4 s! u3 e7 s, u( ^
  72. ////     //GyroZ++;2 U- B0 a' F  U7 d# y- w4 B, K, `* V
  73. //     OLED_ShowNum(103,6,angle,3,16);//显示ASCII字符的码值
    * y1 p* v! ]( m- c3 }; m/ `, i: @
  74. //     Delay_ms(100);
    7 y6 U; i5 n9 L8 U" g
  75.   }1 D* D- F: `5 |8 Q
  76. }
复制代码

  f% F7 i8 E# A+ z
/ }8 P& I3 t5 k
转载自:STM32嵌入式开发

, K1 F2 K. J- n1 ^6 Y
% y1 y/ f9 }+ O  _1 j& X# z9 N, ^; P5 f( F3 P% }$ \# z4 ^/ ?$ K
赞 收藏 评论0 发布时间:2022-9-16 17:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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