聚丰项目 > 基于AB32VG1的隔震测试台设计
采用AB32VG1开发板通过PID算法实现隔震测试台的反馈控制器设计。首先通过开发板上的10位ADC,将隔振台上的震动速度传感器上的速度模拟信号进行采样,然后经过主程序PID算法计算反馈控制电压,计算结果再经PWM输出,滤波后控制音圈电机驱动隔振台,驱动力与震动速度方向相反,以达到隔振的目的。
meibin2016
分享meibin2016
团队成员
梅斌 博士生
硬件上主要采用AB32VG1开发板,还需要额外的电路和硬件配合:1、光学平台和支架及悬挂系统;2、Guralp微震仪;3、信号放大电路;4、滤波和压流转换电路;5、音圈电机。
软件开发环境采用RT-Thread Studio2.1.3,设备驱动有:GPIO/ADC/PWM 等。
软件流程图如下:
ADC和PWM根据例程稍作修改就可以用了,PID控制算法要根据单片机PID常用算法来编写。
PID反馈控制采用增量式单片机常用算法。PID算法,大家应该比较熟悉,它在很多地方都有应用,如电机速度控制,恒温箱温度控制,四轴飞行器平衡控制等。作为闭环控制系统重要的一种算法,得到了广泛的应用。
PID算法由比例P,积分I,微分D三部分组成。所谓比例部分,就是与输入残差呈线性关系的部分,此值大,控制反应的速度就快,但快到控制目标时,如果还这么快,那就容易控制过头超过预设值,所以还需要积分部分和微分部分,使最终控制结果逼近目标。
用C语言来实现PID算法,主要是时域上来实现,有位置式和增量式两种:
位置式:
比例部分: Kp:比例系数 SetValue:预设值 FactValue:当前实际值 Error_1:当前误差
则比例部分为: Sp = Kp*(SetValue - FactValue)
或者 Sp = Kp*Error_1
注解:Sp大小反应需要控制的量大小,比如Sp越大,功率越大。当Sp为负值时,表示要超过预设值,如果是电机,则需要反转
积分部分: Ki:积分系数 Error_1:当前误差 Error_2:上一次误差 Error_3:上上一次误差 ........Error_n:开始时的误差
则积分部分为: Si = Ki*(Error_1+Error_2+Error_3+......+Error_n)
注解:因为整个是一个过程,所以上一次误差其实就是上一次的当前误差
微分部分: Kd:微分系数 Error_1:当前误差 Error_2:上一次误差
则微分部分为: Sd = Kd*(Error_1-Error_2)
综上部分的PID得:PID=Sp + Si + Sd = Kp*Error_1 + Ki*(Error_1+Error_2+Error_3+......+Error_n) + Kd*(Error_1-Error_2)
增量式:
将上述推导的PID记作时间为k时刻的PID控制量,则
PID(k) =Sp + Si + Sd = Kp*Error_1(k) + Ki*(Error_1(k)+Error_2(k-1)+Error_3(k-2)+......+Error_n(0)) + Kd*(Error_1(k)-Error_2(k-1))
将上式k=k-1代入得:
PID(k-1) =Sp + Si + Sd = Kp*Error_1(k-1) + Ki*(Error_1(k-1)+Error_2(k-2)+Error_3(k-3)+......+Error_n(0)) + Kd*(Error_1(k-1)-Error_2(k-2))
1-2得:
PID(k) - PID(k-1) = Kp*(Error_1(k)-Error_1(k-1)) + Ki*(Error_1(k)) + Kd*(Error_1(k)-2*Error_2(k-1)+Error_2(k-2))
将PID(k) - PID(k-1)记作detPID
detPID = Kp*(Error_1(k)-Error_1(k-1)) + Ki*(Error_1(k)) + Kd*(Error_1(k)-2*Error_2(k-1)+Error_2(k-2))
这样就得到了增量式的PID算法,其计算的结果为增加的控制量
增量式的PID有个好处就是只与当前三个误差量有关系,与其他无关,这样就简化的处理过程,而且提高了精度。
参考文献:单片机之PID算法 - LSWen - 博客园 (cnblogs.com) 作者: LSWen
程序的输入是ADC采样的隔振台运动速度,输出是控制隔振台反向运动的控制力。
编译成功的固件,用Downloader v1.9.7下载到芯片。
程序运行逻辑图如下:
软件模块由主程序和ADC、PWM、PID组成。
调试时串口打印输出的情况:
地面振动经过“四线摆”被动隔振悬挂系统后滤除了几赫兹以上的高频振动,隔振台上的残余振动经悬挂的光学平台上摆放的微震仪(震动速度传感器)转换为速度电压模拟信号,通过放大电路盒后变成适合数字采集的电压,通过开发板上的10位ADC进行采样,然后经过主程序PID算法计算反馈控制电压,计算结果再经PWM输出,在电路板上滤波后控制音圈电机驱动隔振台,驱动力与震动速度方向相反,以达到隔振的目的。
代码地址:
https://gitee.com/meibiny/rtt-seismic-isolation
(6.79 MB)下载