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

STM32平衡小车

[复制链接]
STMCU小助手 发布时间:2022-10-11 19:17
微信图片_20221011191641.png

3 c, m: M, S9 _4 y& C/ G0 M硬件介绍
* u- j, p( f3 O: E    主控芯片用的是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测量的。
! L6 v: l: ^% J+ Z( C# I9 S3 I6 l    STM32F103VET6主控芯片;两个microusb口,第一个是MCU的串口1,可作为普通的串口收发数据,通过调节板上BOOT选项,也可将其作为ISP下载程序接口;第二个是SWD硬件仿真接口;蓝牙模块,与MCU的串口2连接;WIFI模块,与MCU的串口3相连;一块1.3寸IIC协议的液晶接口;超声波接口;双电机驱动;六轴陀螺仪;电池电压检测;4个用于调试的LED;4个独立式按键;一组4P的拨码开关;有源蜂鸣器;两个6P带AB相编码器的电机接口。$ Z1 @0 t4 F" ^: X2 ~
    如下是电路原理图:
7 r5 q6 g, I0 x6 x  w3 s" R. b
微信图片_20221011191638.png
! G+ O3 X* r) u6 s% G0 f5 Q6 r, o
9 @5 U5 o9 E: ]' [
    如下打样好的PCB:: g" E# l5 ]6 M  d& r# t
微信图片_20221011191635.png

" P% P" d) G0 _& |) {) z8 J2 u! E9 K* ~2 V: v
软件介绍- k) @' C& [6 K" Q
    这份配套的软件,模块分的很清楚。比如蓝牙的遥控部分,超声波部分在完整版的工程里面都是写好的。最好的办法就是,参照这个程序,一点一点自己粘贴然后修改底层搭建自己的工程。或者你也可以把自己的电路画的跟别人的一样,避免修改别人的底层,这样你粘贴过来甚至都不用改就能用了。相关推荐:做一个STM32小车很简单吗?
* S' Z6 @' h8 y6 P, p3 Q    如下是main.c代码:
+ q. S9 h1 R3 Z% z; M( C
  1. #include "stm32f10x.h"
    9 ?* X9 z& t* `7 d& z# z, z9 |: W
  2. #include "stdio.h"
    $ I) A: K0 A3 i7 S) c' N& g$ {
  3. #include "systic.h"
    3 o) m; Y: [+ b4 |- {9 Q5 N* k
  4. #include "OLED.h"1 x' ~: y' S2 k9 H$ b
  5. #include "MPU6050.h"
    , ]9 y0 z+ {7 ~5 x
  6. #include "LED.h"+ Y1 J  m# }. k" m% O# D
  7. #include "Buzzer.h": Q/ I3 i4 h7 F# ]: V6 t, M" C/ i% K  ^
  8. #include "Switch.h"( K, w# W$ p$ P& I. a
  9. #include "Key.h". |7 Y* c0 J3 Q" x! p* G
  10. #include "Motor.h"( v. F# M' i2 X$ S6 O% Z! o7 S
  11. #include "USART.h"% t/ D! t! ?: ~' q! n
  12. #include "TIM.h"- w& Y3 w; C& P
  13. - A. G; F# z2 V& V# ?5 g
  14. uint32_t Main_Count = 0;+ t% f( _. b; c! N% ?
  15. uint8_t  Key_num = 0;3 g3 h3 L( G8 T
  16. uint32_t Test;
    ( p. J9 \) I5 r8 w. X9 n8 w7 m
  17. uint8_t Temp[20];) F& c0 p  V& b. F& A. O+ ^+ _" `

  18.   i" w5 x- X* [* Q
  19. int main(void)
    9 [& I' p) w9 ^: d9 w6 z$ f
  20. {
    4 ]5 ?. Y6 S' J" a
  21.     USART_NVIC_Configuration();          // 配置串口中断! S; K4 M3 {$ ?. ^
  22.    USART_Config();                // 配置串口3 Y( [5 d, F5 ^8 x+ P* _8 f
  23.     SysTick_Init();      //滴答定时器初始化 $ ~8 z9 N/ A  {1 [8 L4 O! H
  24.   OLED_Init();      //OLED引脚初始化 2 y# K+ L1 P, @3 b3 Z( F- _/ F, o
  25.   OLED_Clear();      //OLED清屏
    + [* S* c* L, o, y: d/ W( G3 Z& |
  26.   OLED_First_Line();  //OLED第一行显示: 贺梓洹毕业设计
    2 ]" c* ?' I! r- Q/ u
  27.   LED_Init();        //LED引脚初始化1 C  V6 S' v& d6 _, `% t$ N9 `  f# r
  28.   Speak_Init();      //蜂鸣器引脚初始化
    ( B4 M$ c5 y9 s4 w) o( V
  29.   Switch_Init();      //拨码开关引脚初始化
    2 `: s- Q/ V' L5 d9 r* ~+ R$ X
  30.   Key_Init();        //按键引脚初始化
    7 s8 X  z; h4 Z
  31.   MPU6050_Init();
    9 [+ n3 y( @+ K8 o8 Y' B
  32.   PWM_Init(7199,0);' R& G6 N  K% V  {3 P
  33.   TIM_Config();+ h0 |( b, P0 b# U. n: t- f
  34. //  Speak=1;/ t0 \- w* Q# }  s- L
  35. //  Delay_s(1);! X7 |5 D  S% \) y6 d
  36. //  Speak=0;0 M6 K$ `) a8 K. E, F7 r
  37. while(1)) }$ w& ?+ h+ U9 {+ \: ~& X; x
  38.   {4 G& J: i, J3 a  ^
  39. //    KeyScan();
    " G4 K1 P9 d8 Q6 p2 _, ^

  40. 4 U- w( ]7 B& j: N4 Y# Y4 N" q6 Z

  41. : p' O8 a1 g1 L- E* ~4 w
  42. //    if(Key1_Count==1)* T! ]6 W5 g* \: D* ]7 B
  43. //    {1 Q6 ~5 `, p. [6 _
  44. //      Key1_Count=0;
    / I/ q8 ]" h- j! J8 Y
  45. //    kp=kp+3;
    * i2 `3 p# H  c- H+ C
  46. //    }* r6 o( l- I6 Z
  47. //    OLED_ShowNum(0,6,Key1_Count,6,16);//显示ASCII字符的码值
    * P) p) N  I0 ^$ h( J
  48. //    OLED_ShowNum(0,4,Key2_Count,6,16);//显示ASCII字符的码值
    " ]4 e+ t* `+ l% C/ T- ^( M  o
  49. //    OLED_ShowNum(0,6,Key3_Count,3,16);//显示ASCII字符的码值; P" |# D3 D4 o7 w7 f
  50. //    OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值8 \: c. V$ j' S! y+ n% M+ x, e
  51. //    Delay_ms(5);
    & i- v- @' x3 K+ p
  52. //    OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值
    4 P! E, V; s, y8 y, s/ m
  53. //   LED2=0;
    ; q( d0 w: k0 t( f6 e$ t
  54. //   LED3=0;
    ) h! I# I9 ]7 R$ M' {. N
  55. //   LED4=0;
    % v9 Z# X8 W0 M$ |
  56. //   Speak=0;
    ) _! v; ]* n5 I& X, U0 ?+ G
  57. //   Delay_s(1);; y! k" R5 u$ X! Z
  58. ////   LED1=1;6 j0 G( ~1 \' E  p; R6 @- x- H
  59. //   LED2=1;. y2 E5 Y+ j7 G7 ~' M/ {+ N
  60. //   LED3=1;
    : A9 T8 s+ \% N* \. t% A+ t
  61. //   LED4=1;
      |/ A0 Z  L6 M) t, z9 W
  62. //   Speak=1;
    $ |1 `2 k9 Q8 p0 _
  63. //   Delay_s(1);
      M) B% k0 g, b# u

  64. ' v  l7 a1 r6 v9 y' |
  65. 8 j4 ~' D1 q: l; _
  66. //         READ_MPU6050();
    6 l( S. n4 O2 d& ?
  67. //       Kalman_Filter(Data_6050.Acc_X , Data_6050.Gryo_Y);  
    / e3 ]1 M: H8 V5 k+ E3 A
  68. ////     //GyroX++;
    2 a! b5 j# Q: [7 V! |9 a" H
  69. //     OLED_ShowNum(103,2,Data_6050.Acc_X,3,16);//显示ASCII字符的码值
    + X9 b7 a0 Y* ?/ R; T5 G5 w% Q8 x
  70. ////     //GyroY++;
    0 d4 H4 t( O& a* Z1 V2 J
  71. //     OLED_ShowNum(103,4,Data_6050.Gryo_Y,3,16);//显示ASCII字符的码值
    3 o, N4 W' {) W6 w$ L
  72. ////     //GyroZ++;; @0 r6 g! s7 f
  73. //     OLED_ShowNum(103,6,angle,3,16);//显示ASCII字符的码值
    # E5 L; G$ q8 M5 @8 J
  74. //     Delay_ms(100);8 R( S4 U/ j9 w5 O# O
  75.   }* s8 J7 Q$ b! G
  76. }
复制代码
9 J9 {# {% f3 X& S- l5 ]
转载自:EE时间
+ \5 I; G: [  _
赞 收藏 评论0 发布时间:2022-10-11 19:17

举报

0个回答

所属标签

相似技术帖

官网相关资源

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