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

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

[复制链接]
STMCU小助手 发布时间:2022-9-16 17:47
640 (2).png

" ~; o7 O- T* O) I# g( C
8 t& ?: B' I/ [: ?% K6 E; J
硬件介绍   

' u9 Z5 M( h: c% c
主控芯片用的是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相编码器的电机接口。    如下是电路原理图:

# l2 e3 x( E* G
- c. w$ c! o* e& _5 \. O

- ]6 S/ S9 d. ^6 [* L7 W; W- t
640 (1).png
2 s, ]6 p0 x/ ~. I5 `! h6 L6 k" f
如下打样好的PCB:
: P% s3 {0 u$ X6 M/ Z
640.png

6 D) \) a% _1 H! @

" J' u/ N9 E6 x6 d1 b
软件介绍   
9 i* G& s; {9 D2 j

: ?0 L3 T3 X* _
这份配套的软件,模块分的很清楚。比如蓝牙的遥控部分,超声波部分在完整版的工程里面都是写好的。最好的办法就是,参照这个程序,一点一点自己粘贴然后修改底层搭建自己的工程。或者你也可以把自己的电路画的跟别人的一样,避免修改别人的底层,这样你粘贴过来甚至都不用改就能用了。 如下是main.c代码:

/ p. q9 W; r6 X+ _% W
  1. #include "stm32f10x.h"
    + V8 S% ]7 p/ r  {
  2. #include "stdio.h"
    8 x2 Y4 L3 b5 W$ r7 Y3 }. F' B
  3. #include "systic.h"# U' k6 R* g- y+ `
  4. #include "OLED.h"2 e( \) T/ T3 e( c$ Z# \' r' k& O
  5. #include "MPU6050.h"3 p( f3 s- c+ f1 y3 j  \& D9 t
  6. #include "LED.h"
    8 O" N0 i( ^" x2 R! J: b9 F  i
  7. #include "Buzzer.h"
      k! y* Q- a/ Q- ]
  8. #include "Switch.h"
    ! p! `- E5 o/ q& u
  9. #include "Key.h"" l2 e" ]0 K1 q4 ?
  10. #include "Motor.h"; ?$ i+ U' {" D# c0 \( M  l6 n
  11. #include "USART.h"
    . L% {7 f2 F& I' e/ G- X% {! m/ C
  12. #include "TIM.h"
    ! o* R' x+ T  k; r2 E& Z

  13. 9 O. M3 A. J. d. H
  14. uint32_t Main_Count = 0;
    3 t& i9 M7 Z" W. x- J1 f1 d. I) e
  15. uint8_t  Key_num = 0;
    - u: e9 X8 _, ], {2 h, W
  16. uint32_t Test;
    . P- h3 k. N* Z  ^9 j
  17. uint8_t Temp[20];
    % g8 H$ s9 ]5 l) g. Y* ^

  18. 9 p1 z7 d) {9 l: Z. D) X; m
  19. int main(void)
    : b2 M) I/ x. k: T$ f" ?% }% f
  20. {
    1 h0 }) ?/ _8 ~. f3 ]/ F
  21.     USART_NVIC_Configuration();          // 配置串口中断5 N( Q7 w4 d, S9 z# Z* j% t
  22.    USART_Config();                // 配置串口
    7 j; G7 V, r) w5 u" v
  23.     SysTick_Init();      //滴答定时器初始化   u" c8 p0 Z/ t; c/ l
  24.   OLED_Init();      //OLED引脚初始化
    & Y/ ?3 w# U5 ^* h2 x
  25.   OLED_Clear();      //OLED清屏
    , N+ l+ N. O  N% T* g
  26.   OLED_First_Line();  //OLED第一行显示: 贺梓洹毕业设计
    / }& ~+ z7 v4 v: s8 C% t* a
  27.   LED_Init();        //LED引脚初始化! J  u5 O' T" n! @4 C& Q: H& \3 m# m" Z
  28.   Speak_Init();      //蜂鸣器引脚初始化
    % t" d3 [& J! L' c* L
  29.   Switch_Init();      //拨码开关引脚初始化2 p4 e+ R+ D1 d! H
  30.   Key_Init();        //按键引脚初始化* g; b4 F9 m% U8 O, T/ n) E
  31.   MPU6050_Init();* F" ]+ |! O  H9 w* F/ _
  32.   PWM_Init(7199,0);' }! K& g2 K$ |* p
  33.   TIM_Config();! w- L! v/ I7 n7 E3 u# K
  34. //  Speak=1;9 T8 |6 [! {( g! a* ?9 {
  35. //  Delay_s(1);
    ! ]* L8 o* m9 Q( x7 r: b' p( j
  36. //  Speak=0;. R. V- F! S( v9 r' x& _
  37. while(1)8 E1 F6 z+ L# T: g
  38.   {- p2 h* V: i8 f7 T# s
  39. //    KeyScan();  f! M" m5 y* x4 g( i5 o  x
  40. ! }/ d5 B* t( R% T' V

  41. # I# w; d% B9 t% n, G0 Z1 ?
  42. //    if(Key1_Count==1)
    * b# k& G, ?2 o* |9 X4 F/ @2 @0 \+ U
  43. //    {
    ! ~9 l5 {% g! g
  44. //      Key1_Count=0;# Y" O; k" R1 |% O- Z, h# ]
  45. //    kp=kp+3;5 ~+ k- t7 n% k; M0 m1 H/ O
  46. //    }1 i. A# I& _0 E
  47. //    OLED_ShowNum(0,6,Key1_Count,6,16);//显示ASCII字符的码值
    4 c! i9 X7 b  j. N
  48. //    OLED_ShowNum(0,4,Key2_Count,6,16);//显示ASCII字符的码值
    . O- H9 I/ W  s, W" j& B
  49. //    OLED_ShowNum(0,6,Key3_Count,3,16);//显示ASCII字符的码值- r' K8 K; `0 ]1 q
  50. //    OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值
    ' S, z/ Z2 B  A' O/ @. s6 @6 p5 @2 z
  51. //    Delay_ms(5);
    : G; D2 H" a& Z3 O* y' q( O0 P
  52. //    OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值 " L! h( ^6 q3 x# t" G$ I$ c1 e, F
  53. //   LED2=0;
    : }' g2 f  A: r! A" w5 [3 H8 ~" K
  54. //   LED3=0;# i" W! K* B- S; M% U; u: \  {
  55. //   LED4=0;6 ]+ i" [& r6 s! M$ ^
  56. //   Speak=0;$ O3 j2 w3 }( M7 ?) W& e  n2 X
  57. //   Delay_s(1);
    ( n( y4 R" R: s: q
  58. ////   LED1=1;
    2 B1 K9 T) v0 v  |2 v
  59. //   LED2=1;& p  g) o6 k$ L
  60. //   LED3=1;3 M. A6 W. H4 O9 w+ T6 c8 D
  61. //   LED4=1;
    ; n+ X5 m4 _: N7 J
  62. //   Speak=1;8 z% n2 ]  c5 D; M6 O3 g7 W
  63. //   Delay_s(1);- W9 W" x3 u. _
  64. ' N9 K& d# z  i+ d! W

  65. 4 U7 ~* K3 m9 P. h$ T* f4 @
  66. //         READ_MPU6050();
    ) z: q7 G' F' p3 Y+ U# O6 x. y
  67. //       Kalman_Filter(Data_6050.Acc_X , Data_6050.Gryo_Y);  
    1 s6 n" ]: D$ z8 H- @6 X, y# F
  68. ////     //GyroX++;1 b9 w; b! c! b7 j* U
  69. //     OLED_ShowNum(103,2,Data_6050.Acc_X,3,16);//显示ASCII字符的码值
    / K& B& x, Q3 D1 p/ r$ D
  70. ////     //GyroY++;
      Q/ v$ y- G/ ^$ d2 f- F1 Q! l
  71. //     OLED_ShowNum(103,4,Data_6050.Gryo_Y,3,16);//显示ASCII字符的码值 5 H, G8 L' O' }/ v6 `
  72. ////     //GyroZ++;; r9 S3 M" @# ]; ]4 W
  73. //     OLED_ShowNum(103,6,angle,3,16);//显示ASCII字符的码值 ( v# s0 x. _9 X  `
  74. //     Delay_ms(100);
    2 p4 Y* i: {4 c7 M; V/ P5 ]
  75.   }% X% b, q% z) s9 q* F
  76. }
复制代码

& c, i* p+ w& e5 R

% m6 v* K" x7 l5 U! l
转载自:STM32嵌入式开发

# o! B" |  r( @4 s+ x9 c; h4 ]4 p' h

! k$ E2 ^6 S, ]  Q1 \- V
收藏 评论0 发布时间:2022-9-16 17:47

举报

0个回答

所属标签

相似分享

官网相关资源

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