聚豐項(xiàng)目 > 基于AB32VG1的隔震測(cè)試臺(tái)設(shè)計(jì)
采用AB32VG1開發(fā)板通過PID算法實(shí)現(xiàn)隔震測(cè)試臺(tái)的反饋控制器設(shè)計(jì)。首先通過開發(fā)板上的10位ADC,將隔振臺(tái)上的震動(dòng)速度傳感器上的速度模擬信號(hào)進(jìn)行采樣,然后經(jīng)過主程序PID算法計(jì)算反饋控制電壓,計(jì)算結(jié)果再經(jīng)PWM輸出,濾波后控制音圈電機(jī)驅(qū)動(dòng)隔振臺(tái),驅(qū)動(dòng)力與震動(dòng)速度方向相反,以達(dá)到隔振的目的。
meibin2016
meibin2016
團(tuán)隊(duì)成員
梅斌 博士生
硬件上主要采用AB32VG1開發(fā)板,還需要額外的電路和硬件配合:1、光學(xué)平臺(tái)和支架及懸掛系統(tǒng);2、Guralp微震儀;3、信號(hào)放大電路;4、濾波和壓流轉(zhuǎn)換電路;5、音圈電機(jī)。
軟件開發(fā)環(huán)境采用RT-Thread Studio2.1.3,設(shè)備驅(qū)動(dòng)有:GPIO/ADC/PWM 等。
軟件流程圖如下:
ADC和PWM根據(jù)例程稍作修改就可以用了,PID控制算法要根據(jù)單片機(jī)PID常用算法來編寫。
PID反饋控制采用增量式單片機(jī)常用算法。PID算法,大家應(yīng)該比較熟悉,它在很多地方都有應(yīng)用,如電機(jī)速度控制,恒溫箱溫度控制,四軸飛行器平衡控制等。作為閉環(huán)控制系統(tǒng)重要的一種算法,得到了廣泛的應(yīng)用。
PID算法由比例P,積分I,微分D三部分組成。所謂比例部分,就是與輸入殘差呈線性關(guān)系的部分,此值大,控制反應(yīng)的速度就快,但快到控制目標(biāo)時(shí),如果還這么快,那就容易控制過頭超過預(yù)設(shè)值,所以還需要積分部分和微分部分,使最終控制結(jié)果逼近目標(biāo)。
用C語言來實(shí)現(xiàn)PID算法,主要是時(shí)域上來實(shí)現(xiàn),有位置式和增量式兩種:
位置式:
比例部分: Kp:比例系數(shù) SetValue:預(yù)設(shè)值 FactValue:當(dāng)前實(shí)際值 Error_1:當(dāng)前誤差
則比例部分為: Sp = Kp*(SetValue - FactValue)
或者 Sp = Kp*Error_1
注解:Sp大小反應(yīng)需要控制的量大小,比如Sp越大,功率越大。當(dāng)Sp為負(fù)值時(shí),表示要超過預(yù)設(shè)值,如果是電機(jī),則需要反轉(zhuǎn)
積分部分: Ki:積分系數(shù) Error_1:當(dāng)前誤差 Error_2:上一次誤差 Error_3:上上一次誤差 ........Error_n:開始時(shí)的誤差
則積分部分為: Si = Ki*(Error_1+Error_2+Error_3+......+Error_n)
注解:因?yàn)檎麄€(gè)是一個(gè)過程,所以上一次誤差其實(shí)就是上一次的當(dāng)前誤差
微分部分: Kd:微分系數(shù) Error_1:當(dāng)前誤差 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)
增量式:
將上述推導(dǎo)的PID記作時(shí)間為k時(shí)刻的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算法,其計(jì)算的結(jié)果為增加的控制量
增量式的PID有個(gè)好處就是只與當(dāng)前三個(gè)誤差量有關(guān)系,與其他無關(guān),這樣就簡(jiǎn)化的處理過程,而且提高了精度。
參考文獻(xiàn):單片機(jī)之PID算法 - LSWen - 博客園 (cnblogs.com) 作者: LSWen
程序的輸入是ADC采樣的隔振臺(tái)運(yùn)動(dòng)速度,輸出是控制隔振臺(tái)反向運(yùn)動(dòng)的控制力。
編譯成功的固件,用Downloader v1.9.7下載到芯片。
程序運(yùn)行邏輯圖如下:
軟件模塊由主程序和ADC、PWM、PID組成。
調(diào)試時(shí)串口打印輸出的情況:
地面振動(dòng)經(jīng)過“四線擺”被動(dòng)隔振懸掛系統(tǒng)后濾除了幾赫茲以上的高頻振動(dòng),隔振臺(tái)上的殘余振動(dòng)經(jīng)懸掛的光學(xué)平臺(tái)上擺放的微震儀(震動(dòng)速度傳感器)轉(zhuǎn)換為速度電壓模擬信號(hào),通過放大電路盒后變成適合數(shù)字采集的電壓,通過開發(fā)板上的10位ADC進(jìn)行采樣,然后經(jīng)過主程序PID算法計(jì)算反饋控制電壓,計(jì)算結(jié)果再經(jīng)PWM輸出,在電路板上濾波后控制音圈電機(jī)驅(qū)動(dòng)隔振臺(tái),驅(qū)動(dòng)力與震動(dòng)速度方向相反,以達(dá)到隔振的目的。
代碼地址:
https://gitee.com/meibiny/rtt-seismic-isolation
(6.79 MB)下載