STM32 四轴无人机设计——读取MPU6050数据并上传匿名上位机

1、前言

在之前的stm32基础篇中,已经实现了软模拟IIC,调用MPU的DMP库输出四元数转化为欧拉角,以及编写匿名上位机的通讯协议。

直接点击可以看。
从程序模块化设计的角度,现在每一个模块已经测试完毕,现在需要将各个模块组合在一起,使数据通用、逻辑顺序正确即可。

2、设计思路

在四旋翼整体设计中分析到,姿态数据的读取储存非常重要,所以安排在1KHz的程序里面。
并且这次我们需要引入一个新的全局变量——report,控制是否将飞控信息发送给匿名上位机,现在设计可以直接将report软件设置为1(默认上报),在后期系统整体设计的时候,可以将report通过遥控器数据改变,比如遥控器上的辅助通道3可以用来控制report的值。
并且新增一个数据结构体,将10个数据储存到专门的结构体中。

3、程序实现

/**  
  *  功能:MPU初始化封装
  *  入口参数:
  *  返回值:
  */

void MPU6050_Init(void)
{
    
    
	MPU_Init();//自定义MPU初始化
	while(mpu_dmp_init())
		BEEP =! BEEP;//dmp库初始化		
}

/**  
  *  功能:MPU获取数据
  *  入口参数:结构体 &out_angle,&acc,&gyro
  *  返回值:
  */
void MPU_GetData(void)
{
    
    
	if(mpu_dmp_get_data(&out_angle.pitch,&out_angle.roll,&out_angle.yaw)==0)
	{
    
    	
		MPU_Get_Accelerometer(&acc.x,&acc.y,&acc.z);	//得到加速度传感器数据
		MPU_Get_Gyroscope(&gyro.x,&gyro.y,&gyro.z);	//得到陀螺仪数据
	}
}

先看第一个程序,我们将之前的MPU_Init()和mpu_dmp_init(),结合到一起,并且在dmp未初始化完成时蜂鸣器提醒。
第二个程序是获取陀螺仪数据函数,也是将之前的三个数据获取函数封装为一个函数。这样主程序调用时简单明了。

if(Count_1ms>=1)
		{
    
    
			Count_1ms=0;
			/*1000Hz任务*/
			MPU_GetData();
			if(report==1)//发送数据给上位机
			{
    
    
				usart1_report_imu(acc.x,acc.y,acc.z,gyro.x,gyro.y,gyro.z,(int)(out_angle.roll*100),(int)(out_angle.pitch*100),(int)(out_angle.yaw*10));
			}			
		}
if(Count_25ms>=25)
		{
    
    	
			Count_25ms=0;
			/*20Hz遥控器接收PPM信号*/			
			PPM_DataArrange(PPM_Databuf);//PPM数据整理 存储在 Rc结构体 中
			DataOutput_ToMOT(Rc_LOCK);
			if(report==1)//发送数据给上位机
			{
    
    				
//				usart1_report_pid(u16 rol_p,u16 rol_i,u16 rol_d,u16 pit_p,u16 pit_i,u16 pit_d,u16 yaw_p,u16 yaw_i,u16 yaw_d);
				usart1_report_rc(Rc.THROTTLE,Rc.YAW,Rc.ROLL,Rc.PITCH,Rc.AUX1,Rc.AUX2,Rc.AUX3,Rc.AUX4,0,(int)((Rc.mot1-1000)/10),(int)((Rc.mot2-1000)/10),(int)((Rc.mot3-1000)/10),(int)((Rc.mot4-1000)/10),0);
			}
		}

在主程序中,我们首先调用第一个封装好的初始化函数,然后在1KHz的程序中调用GET_DATA()函数,这样我们就完成了对MPU数据的读取。
然后加入全局变量report,判断report的值来决定是否向上位机上传数据,并且report可以自己设计让遥控器实现什么样的操作来开启上报。
在上一次设计的遥控器数据中,也要上传给上位机,而通讯协议在之前的匿名上位机通讯协议分析中已经编写完成,只需要带入相应的数据即可

4、实验现象

在这里插入图片描述
图片左侧和右侧上方的数据有变化,说明陀螺仪数据读取、传输正常。
右侧中下方,节流阀,姿态角,辅助通道1、2,以及电机PWM的占空比显示正常,说明遥控器数据读取、解析、传输正常。

5、总结

程序设计到这里,大部分的工作已经完成了,还剩下最后的PID程序加入,以及PID的调参任务。从这次四轴的制作中可以看到,程序模块化设计非常简洁方便,初期只需要将一个大型任务分解为各个小任务,逐个击破,最后整合一起,就能完成我们想要的效果

猜你喜欢

转载自blog.csdn.net/qq_44011116/article/details/113887823