-
小车初步达到【平衡】要求
-
清除了不需要的函数和注释信息,使工程尽量精简
-
将OLED显示基本信息和显示数据封装成函数,使代码更好地模块化
-
移除了Encoder中之前编写的外部中断服务函数(改为在MPU6050的外部中断中实现)
目前已实现功能说明
-
【Encoder】+(【MPU6050】+【EXTI】+【NVIC】):通过MPU6050采集数据时跳变的INT引脚进入外部中断,读取编码器
-
【PID】+(【MPU6050】+【EXTI】+【NVIC】):通过MPU6050采集数据时跳变的INT引脚进入外部中断,进行PID控制并装载至车轮
-
【Motor】+【PWM】:通过PWM驱动车轮
-
【OLED】:显示车辆姿态角、加速度数据、陀螺仪数据、温度值、左右车轮编码器值
//【MPU6050】初始化采集频率为200Hz(5ms),即每5ms对车辆状态进行更新控制
OLED
1、在oled.c编写基本信息显示函数
OLED_ShowBasic和采集数据显示函数
OLED_ShowMessage
-
定义变量(sys.h已extern)
float pitch,roll,yaw; //欧拉角(姿态角)short aacx,aacy,aacz; //加速度传感器原始数据short gyrox,gyroy,gyroz; //陀螺仪原始数据float temp; //温度值//pitch:俯仰角 精度:0.1° 范围:-90.0° <---> +90.0°//roll:横滚角 精度:0.1° 范围:-180.0°<---> +180.0°//yaw:航向角 精度:0.1° 范围:-180.0°<---> +180.0°//左右编码器值int Encoder_Left,Encoder_Right;
基本信息显示函数void OLED_ShowBasic(void){OLED_ShowString(0,0,"Pitch:",12);OLED_ShowString(0,1,"Roll :",12);OLED_ShowString(0,2,"Yaw :",12);OLED_ShowString(0,3,"Temp :",12);OLED_ShowString(0,4,"Left :",12);OLED_ShowString(0,5,"Right:",12);}
采集数据显示函数void OLED_ShowMessage(void){/**************显示俯仰角***************/if(pitch<0){OLED_ShowString(48,0,"-",12);OLED_Float(0,56,-pitch,3);}else{OLED_ShowString(48,0,"+",12);OLED_Float(0,56,pitch,3);}/**************显示俯仰角***************//**************显示翻滚角***************/if(roll<0){OLED_ShowString(48,1,"-",12);OLED_Float(1,56,-roll,3);}else{OLED_ShowString(48,1,"+",12);OLED_Float(1,56,roll,3);}/**************显示翻滚角***************//**************显示航向角***************/if(yaw<0){OLED_ShowString(48,2,"-",12);OLED_Float(2,56,-yaw,3);}else{OLED_ShowString(48,2,"+",12);OLED_Float(2,56,yaw,3);}/**************显示航向角***************//**************显示温度*****************/OLED_Float(3,48,temp/100,2);/**************显示温度*****************//***********显示左右编码器值************/OLED_Num2(29,4,Encoder_Left);OLED_Num2(35,5,Encoder_Right);/***********显示左右编码器值************/}
2、在oled.h中声明基本信息显示函数
OLED_ShowBasic和采集数据显示函数
OLED_ShowMessage
void OLED_ShowMessage(void);void OLED_ShowBasic(void);
3、在sys.h中
#includ
e "oled
.h"
#include "oled.h"
PID参数
#define GB37520#ifdef GB37520 //适合电机GB37520使用的PID参数#define BLC_KP 240 //直立环Kp#define BLC_KD 0.75 //直立环Kd#define SPD_KP 62 //速度环Kp#define SPD_KI 0.31 //速度环Ki#define TURN_KP -40 //转向环Kp
#define TURN_KD -0.6 //转向环Kd#endif
使用大鱼电子的PID示例参数可以让小车达到【初步平衡】(前后)的效果,后期通过实践学习理解进而加以改动完善功能
主程序
#include "sys.h"int main(void){delay_init();NVIC_Configuration();OLED_Init();OLED_Clear();MPU_Init();mpu_dmp_init();MPU6050_EXTI_Init();Encoder_TIM2_Init();Encoder_TIM3_Init();PWM_Init_TIM1(0,7199);Motor_Init();OLED_ShowBasic();while(1){OLED_ShowMessage();}}
实现功能:小车初步平衡,并通过OLED显示姿态数据等信息。当前小车为未精确调整PID控制之前的最精简程序,之后的调参和添加功能都在此基础上进行。