找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5950|回复: 3
收起左侧

基于STM32的平衡车程序设计

[复制链接]
ID:463841 发表于 2019-1-14 03:42 | 显示全部楼层 |阅读模式
STM32资源使用说明:

1、串口:usart1用于串口调试。 相关引脚:PA9、PA10.
         usart3用于蓝牙通信。 相关引脚:PB10、PB11.
2、定时器:timer1用于进中断控制(采集数据、PID参数调节)。相关引脚:
           timer2用于编码模式测量左电机速度。相关引脚:PA0、PA1.
           timer3用于产生两路PWM波驱动电机。相关引脚:PB0、PB1.
           timer4用于编码模式测量右电机速度。相关引脚:PB6、PB7.
3、模拟IIC: 用于陀螺仪和单片机之间的数据通信。相关引脚:PB8、PB9.
4、模拟SPI:用于oled和单片机之间的数据通信。相关引脚:PB12、PB13、PB14、PB15、PA8.


引脚连接说明:

1、5个VCC,5个GND。
2、PB0、PB1分别接TB6612上的PWMA、PWMB。
3、PA2、PA3分别接TB6612上的BIN1、BIN2。
   PA6、PA5分别接TB6612上的AIN1、AIN2。
   PA4接在TB6612上的STBY。
4、PB4、PB3、PA15、PA12、PA11分别接在5个循迹模块的D0口。
5、PB12、PB13、PB14、PB15、PA8分别接在oled模块上的D0、D1、RES、DC、CS。

单片机源程序如下:
  1. #include "stdio.h"
  2. #include "stm32f10x.h"
  3. #include "delay.h"

  4. /**************************用户头文件区******************************/
  5. #include "bsp_usart1.h"
  6. #include "bsp_usart3.h"
  7. #include "bsp_timer1_irq.h"
  8. #include "bsp_timer2_encoder.h"
  9. #include "bsp_timer3_pwm_ch1234.h"
  10. #include "bsp_timer4_encoder.h"
  11. #include "bsp_timer6_irq.h"
  12. #include "bsp_IIC.h"
  13. #include "bsp_NVIC.h"

  14. #include "filter.h"
  15. #include "mpu6050.h"
  16. #include "led.h"
  17. #include "tb6612.h"
  18. #include "line_finding.h"
  19. #include "control.h"
  20. #include "oled_small.h"


  21. /*********************************变量区***************************/
  22. //extern int Encoder_Left,Encoder_Right;

  23. /*****************************函数区******************************/
  24. int  main(void)
  25. {        
  26.   SystemInit();                                                       //配置系统时钟(72M)
  27.         delay_init();
  28.         bsp_usart1_config(115200);                                          //串口一用作调试  115200  与模拟IIC配合,只能用115200
  29. //        bsp_usart3_config(9600);                                                //串口三用作蓝牙通信 (与蓝牙匹配 9600)

  30. #if 0        
  31. /********************循迹部分**********************/
  32.         TIM3_pwm_init(7199,0);                                              //其中两路通道分别产生两路PWM波用以驱动两个电机
  33.         pid_init();                                                                                                                //PID相关参数初始化
  34.   TIM6_irq_Init(49,7199);                                             //5ms进一次中断服务进行参数采集与控制( T= ( (7199+1)/72M * (99+1) ) )
  35.         LED_Init();
  36.         TB6612_Init();                                                                                          //电机驱动模块初始化
  37.         line_finding_Init();                                                                  //各循迹模块初始化
  38.         
  39. #endif
  40.         
  41. /*******************添加平衡功能********************/        
  42. #if 1
  43.                
  44.           IIC_Init();                                                                                                          //模拟IIC实现MPU6050与单片机之间的数据通信  
  45.                 MPU6050_initialize();                                                                        //MPU6050角度传感器资源初始化        
  46.                 DMP_Init();                                             //MPU6050内置DMP资源初始化                        
  47.                 TB6612_Init();                                                                                          //电机驱动模块初始化
  48.                 pid_init();                                                                                                                //PID相关参数初始化
  49.           target_init();                                                                                                //控制对象的目标赋初值
  50.                 TIM1_irq_Init(49,7199);                           //5ms进一次中断服务进行参数采集与控制( T= (  (7199+1)/72M * (99+1) ) )        
  51.                 TIM3_pwm_init(1999,71);                                              //其中两路通道分别产生两路PWM ch3\ch4 波用以驱动两个电机        
  52.     TIM2_Encoder_Init();                                                                        //用于编码测速        
  53.     TIM4_Encoder_Init();                                                                                
  54.                 line_finding_Init();                                                                  //各循迹模块初始化
  55.                 OLED_Init();                                                                                                        //oled显示屏初始化
  56.                
  57.                 printf("\r\n初始化配置配置完成\r\n");               
  58.                
  59. #endif
  60. /***************************PWM波赋初值***************************/        
  61.                 TIM_SetCompare3(TIM3,initail_pwm);                                //占空比为:x/7200
  62.                 TIM_SetCompare4(TIM3,initail_pwm);
  63.                 go_straight();
  64.                 while(1)
  65.                 {
  66.                                  line_finding_start(); //循迹
  67.                            my_oled_show();
  68.                 }
  69.         
  70. }
复制代码

所有资料51hei提供下载:
平衡小车(succed).7z (256.84 KB, 下载次数: 83)
回复

使用道具 举报

ID:260263 发表于 2019-10-16 11:42 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:221003 发表于 2020-3-27 14:46 | 显示全部楼层
学习路过
回复

使用道具 举报

ID:760164 发表于 2020-5-24 21:51 | 显示全部楼层
有电路图和报告说明书吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表