发布于 2008-09-24 19:53:38
0楼
求教:
这是我这几天想用PID的输出控制PWM运行的一个程序,PID模拟量输入采用222自带的模拟电位器0(SMB28)用螺丝刀扭动它便可以改变输入值,PID单独试验没问题(PID设定值为0.5即为模拟电位器0所对应的127.5),采样时间6.4秒;加入PWM(我加在了中断程序0内,和PID的输出在一起,周期设定为3.2秒),现象是:当电位器0所模拟的反馈值为>127时,PID输出从32000逐步减小至0,PWM的脉宽值SMW70的值相应和PID输出一致减小,但是,Q0.0始终闭合,没有出现当脉宽输入值<3.2秒时闭合、断开的脉冲!我很迷惑,是不是PWM不应和PID放在同一个中断内?请各位老大给以指点!小弟感谢了!
主程序:
LD SM0.1
CALL SBR_0:SBR0
CALL SBR_1:SBR1
SBR0:(子程序0)
LD SM0.0
MOVR 0.5, VD204
MOVR 1.0, VD212
MOVR 6.4, VD216
MOVR 2.0, VD220
MOVR 15.0, VD224
SBR1:(子程序1)
LD SM0.0
MOVB 255, SMB34
ATCH INT_0:INT0, 10
ENI
INT_0:(中断程序0)
网络1
LD SM0.0
MOVB SMB28, VB0
BTI VB0, VW2
ITD VW2, VD4
DTR VD4, VD8
MOVR VD8, VD12
/R 255.0, VD12
MOVR VD12, VD16
*R 32000.0, VD16
MOVR VD16, AC0
/R 32000.0, AC0
MOVR AC0, VD200
网络2:
LD SM0.0
PID VB200, 0
MOVR VD208, AC1
*R 32000.0, AC1
ROUND AC1, AC1
DTI AC1, AC1
MOVW AC1, VW30
MOVW VW30, VW32
/I +10, VW32
网络3:
LD SM0.0
MOVB 2#11011010, SMB67
MOVW 3200, SMW68
MOVW VW32, SMW70
PLS 0