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。
单片机源程序如下:
- #include "stdio.h"
- #include "stm32f10x.h"
- #include "delay.h"
- /**************************用户头文件区******************************/
- #include "bsp_usart1.h"
- #include "bsp_usart3.h"
- #include "bsp_timer1_irq.h"
- #include "bsp_timer2_encoder.h"
- #include "bsp_timer3_pwm_ch1234.h"
- #include "bsp_timer4_encoder.h"
- #include "bsp_timer6_irq.h"
- #include "bsp_IIC.h"
- #include "bsp_NVIC.h"
- #include "filter.h"
- #include "mpu6050.h"
- #include "led.h"
- #include "tb6612.h"
- #include "line_finding.h"
- #include "control.h"
- #include "oled_small.h"
- /*********************************变量区***************************/
- //extern int Encoder_Left,Encoder_Right;
- /*****************************函数区******************************/
- int main(void)
- {
- SystemInit(); //配置系统时钟(72M)
- delay_init();
- bsp_usart1_config(115200); //串口一用作调试 115200 与模拟IIC配合,只能用115200
- // bsp_usart3_config(9600); //串口三用作蓝牙通信 (与蓝牙匹配 9600)
- #if 0
- /********************循迹部分**********************/
- TIM3_pwm_init(7199,0); //其中两路通道分别产生两路PWM波用以驱动两个电机
- pid_init(); //PID相关参数初始化
- TIM6_irq_Init(49,7199); //5ms进一次中断服务进行参数采集与控制( T= ( (7199+1)/72M * (99+1) ) )
- LED_Init();
- TB6612_Init(); //电机驱动模块初始化
- line_finding_Init(); //各循迹模块初始化
-
- #endif
-
- /*******************添加平衡功能********************/
- #if 1
-
- IIC_Init(); //模拟IIC实现MPU6050与单片机之间的数据通信
- MPU6050_initialize(); //MPU6050角度传感器资源初始化
- DMP_Init(); //MPU6050内置DMP资源初始化
- TB6612_Init(); //电机驱动模块初始化
- pid_init(); //PID相关参数初始化
- target_init(); //控制对象的目标赋初值
- TIM1_irq_Init(49,7199); //5ms进一次中断服务进行参数采集与控制( T= ( (7199+1)/72M * (99+1) ) )
- TIM3_pwm_init(1999,71); //其中两路通道分别产生两路PWM ch3\ch4 波用以驱动两个电机
- TIM2_Encoder_Init(); //用于编码测速
- TIM4_Encoder_Init();
- line_finding_Init(); //各循迹模块初始化
- OLED_Init(); //oled显示屏初始化
-
- printf("\r\n初始化配置配置完成\r\n");
-
- #endif
- /***************************PWM波赋初值***************************/
- TIM_SetCompare3(TIM3,initail_pwm); //占空比为:x/7200
- TIM_SetCompare4(TIM3,initail_pwm);
- go_straight();
- while(1)
- {
- line_finding_start(); //循迹
- my_oled_show();
- }
-
- }
复制代码
所有资料51hei提供下载:
平衡小车(succed).7z
(256.84 KB, 下载次数: 85)
|