[問題] dspic數位PID控制
想請問一下 dspic的數位PID控制這樣寫是否正確
我的目的是要作buck轉換器的定電流控制
底下是我的 ADC中斷程式流程
其中一些function是參考libirary的document寫的
Kp Ki Kd已經在程式一開始執行處設定好了
目前只有給Kp=0.5 而Ki=Kd=0
void _ISR _ADCInterrupt(void)
{
IFS0bits.ADIF=0;
voltage=ADCBUF0;//電壓取樣轉換結果(這邊沒用到)
current=ADCBUF1;//電流取樣轉換結果
fooPID.measuredOutput=current;//把電流取樣結果輸入到PID控制器
PID(&fooPID);//執行PID運算
PDC1 = Fract2Float(fooPID.controlOutput)*PWM_Duty_Range + PWM_Duty_Ref;
//PDC1暫存器決定duty大小
//fooPID.controlOutput為PID運算結果 其格式為fractional 所以須轉為float
//做運算
//由於PID運算結果為-1~1之間的小數 所以把他乘上duty容許變化範圍再加上一
//個定值即為PDC1之值 例如 Duty Max=1058 而 Duty Min=118 則
//PWM_Duty_Ref=(1058+118)/2=588
//而PWM_Duty_Range=(1058-118)/2=470 如此便可將運算出來的Duty值限制在合
//理範圍
}
實測結果顯示 只給Kp時 duty沒有隨我負載改變而改變
(應該說有在調 但是調得很細微 誤差很大)
若Kp給大一點 系統又會不穩
給Ki系統也是不穩
我是掛電子負載作定電壓抽載(模擬電池充電)
不知道有沒有會用這類PID function的大大
給小的指點一下 謝謝
--
※ 編輯: felghana 來自: 140.116.163.131 (12/07 21:27)
推
12/08 00:52, , 1F
12/08 00:52, 1F
→
12/08 00:52, , 2F
12/08 00:52, 2F
推
12/08 06:15, , 3F
12/08 06:15, 3F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):