基于STM32的四轴飞行器项目总结

STM32F103RCT6 32位处理器

基于STM32的四轴飞行器项目总结_第1张图片

STM32F103RCT6 程序存储器为256K,STM32F103C8T6 程序存储器为64K

系统时钟:最大72M ,一般外部有两个晶振(一个8M,一个32.768KHZ)

带有两个12为模数转换器,1us转换时间,转换范围:0-3.6V

3个16位定时器

PID

PID就是一个闭环控制系统。

​ 对于闭环控制的一个最朴素的想法就只有P 控制,将当前结果反馈回来,再与目标相减,为正的话,就减速,为负的话就加速。现在知道这只是最简单的闭环控制算法

PID控制的基础是比例控制;积分控制可消除稳态误差,但可能增加超调;微分控制可加快大惯性系统响应速度以及减弱超调趋势。

原理:

PID控制器就是根据系统的误差(当前误差和期望误差),利用比例、积分、微分计算出控制量进行控制的。

比例P控制

比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差。

积分I控制

在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。

微分D控制

在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,从而避免了被控量的严重超调。

公式:

基于STM32的四轴飞行器项目总结_第2张图片

串级PID

串级PID:采用的角度P和角速度PID的双闭环PID算法——>角度的误差被作为期望输入到角速度控制器中 (角度的微分就是角速度)
对于本系统则采用了将角度控制与角速度控制级联的方式组成整个串级 PID 控制器。

串级 PID 算法中,角速度内环占着极为重要的地位。在对四旋翼飞行的物理模型进行分析后,可以知道造成系统不稳定的物理表现之一就是不稳定的角速度。因此,若能够直接对系统的角速度进行较好的闭环控制,必然会改善系统的动态特性及其稳定性,通常也把角速度内环称为增稳环节。而角度外环的作用则体现在对四旋翼飞行器的姿态角的精确控制。
外环:输入为角度,输出为角速度
内环:输入为角速度,输出为PWM增量
使用串级pid,分为:角度环控制pid环,和角速度控制环稳定环。主调为角度环(外环),副调为角速度环(内环)。
参数整定原则为先内后外,故在整定内环时将外环的PID均设为0
所谓外环就是只是一个P在起作用,也就是比例在起作用;P也就是修正力度,越大越容易使飞机震荡。
震荡的特点是:频率小、幅度大

基于STM32的四轴飞行器项目总结_第3张图片

基于STM32的四轴飞行器项目总结_第4张图片

串级PID源码:

//----------当前误差和期望误差相减-------------//
    Pitch_out=RC_Pitch-pit; 
//----------积分I和积分限幅-------------//
    if(Rc_D.THROTTLE<13725)     
    {
        Pitch_i+=Pitch_out;
    }
    else
    {
        Pitch_i=0;
    } 
  if(Pitch_i>500) Pitch_i=500;                    
  else if(Pitch_i<-500) Pitch_i=-500;

//----------外环PI--------------------//

  Pitch_shell_out = Pitch_shell_kp*Pitch_out + Pitch_shell_ki*Pitch_i ;             

//-----------内环积分和积分限幅-----------------//
    if(Rc_D.THROTTLE<13725)
    {
    pitchError+=(Pitch_shell_out-Angle_gy);        
    }
    else
    {
        pitchError=0;
    }
    if(pitchError>500) pitchError=500;
  else if(pitchError<-500) pitchError=-500;
//--------------内环+外环PID-----------------// 
    Pitch_core_out=(Pitch_shell_out-Angle_gy)*Pitch_core_kp+pitchError*Pitch_core_ki+(Angle_gy-lastAngle_gy)*Pitch_core_kd;

mpu6050

ALIENTEK 推出的一款高性能三轴加速度+三轴陀螺仪的六轴传感器模块,并可利用自带的数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过主IIC 接口,向应用端输出姿态解算后的数据。

基于STM32的四轴飞行器项目总结_第5张图片

IIC 通信协议:

http://blog.csdn.net/gogomusic/article/details/79344139

NRF24L01

​ NRF24L01是一款无线通信通信芯片,采用FSK 调制。可以实现点对点或是1对6的无线通信。无线通信速度最高可达到2Mbps。

​ NRF24L01采用SPI通信,可以很方便的连接到MCU上面。

SPI通信协议:

http://blog.csdn.net/gogomusic/article/details/54783969

你可能感兴趣的:(项目经历)