标题:
基于STM32的平衡车程序设计
[打印本页]
作者:
小月亮
时间:
2019-1-14 03:42
标题:
基于STM32的平衡车程序设计
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)
2019-1-14 03:42 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
hua123456
时间:
2019-10-16 11:42
谢谢分享
作者:
yht0816zdl
时间:
2020-3-27 14:46
学习路过
作者:
张云鹏1111
时间:
2020-5-24 21:51
有电路图和报告说明书吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1