void PI() /* PI調(diào)節(jié)算法 */
{
float V_REF=3.3;
Kp=100; /* PI調(diào)節(jié)的比例常數(shù) */
Ti=0.005; /* PI調(diào)節(jié)的積分常數(shù) */
T=0.001; /* 周期,Ki=KpT/Ti=40*0.001/0.005=8 */
Ki=8;
ek=0; /* 偏差e[k] */
ek1=0; /* 偏差e[k-1] */
uk=0; /* u[k] */
uk1=0; /* 對(duì)u[k]四舍五入取整 */
adjust=0; /* 調(diào)節(jié)器輸出調(diào)整量 */
XPWM=0; /* 占空比調(diào)節(jié) */
{
ek=V_REF-AD_SIG0;
if(ek<0.1) /* 偏差小于0.1則調(diào)整值為0 */
{
adjust=0;
}
else
{
uk=Kp*(ek-ek1)+Ki*ek;/* 否則計(jì)算控制增量 */
ek1=ek;
uk1=(signed int)uk;
if(uk>0)
{
if(uk-uk1>=0.5)
{
uk1=uk1+1;
}
}
if(uk<0)
{
if(uk1-uk>=0.5)
{
uk1=uk1-1;
}
}
adjust=uk1;
XPWM=XPWM+adjust;
}
return;
}
asm(" NOP "); /* 請(qǐng)將光標(biāo)移到此處設(shè)置斷點(diǎn),并用debug->Animate監(jiān)測(cè)數(shù)據(jù) */
}
算法如上,,這個(gè)是浮點(diǎn)格式的,,做如何轉(zhuǎn)化為定點(diǎn)??還有就是這個(gè)算法有什么缺點(diǎn)