Re: MACHACC(PID)使用問題-PIC16F1614

作者 Ryang 於 2018年05月21日 14:53:25
想問Z0是當前誤差,PIDxZ1是上一筆誤差,PIDxZ2是上上筆誤差這樣理解對嗎?

YES

我看手冊
PIDxK1 = (Kp+Ki*T+kd/T)
PIDxK2 = -(kp+ 2kd/T)
PIDxK3 = (Kd/T)

所以實際到Adder輸出的值是 Kp(Z0-Z1)+Ki*T(Z0) (Kd先假設0不使用)然後輸出的Adder值又會跟PIDxOUT上一筆數值做累加。
這邊的問題是Sample Time 如果設0.1ms的話,每0.1ms Accumulator就會做一次累加嗎?

YES, if T = 0.1, it means it samples every 0.1ms and calculate the PIDOUT every 0.1ms. You need an interrupt every 0.1ms to do it.

那Accumulator的數值會不會很容易溢位?

穩態時, PI參數在合理範圍內,如果輸出一直無法達到命令值就很容易飽和。請參考下面章節說明。
如附圖。

第三個問題是 我最大誤差為20,000 但是我要輸出的數值只有300的解析度。
我看MCC上的Kp與Ki值的設定好像只能到小數點一位,
這樣我最後出來的值還是會比300大很多,這部分我還是需要再程式中用軟體的方式做除法嗎?

Usually the PID output is much larger than the physical register value you specify.
If so, you may shrink the PID output value by “right shift” to fit into the register range.

A divide instruction may also work but cost more execution time.
A Q format multiply method is much more efficient instead of the “Divide”.


附加檔案:



jpg  擷取.JPG (55.54 KB)
16_5b026ce56ffe5.jpg 426X499 px

來自: http://www.microchip.com.tw/newbb/viewtopic.php?forum=1&topic_id=22298&post_id=78179