|
ek=1.5-(adc1.Ch1Out/100);
adc1.Ch1Out=288
这种搞法正常不??
闭环
哪个帮我做个PID程序,,,,
void PI() /* PI调节算法 */
{
{
ek=1.5-(adc1.Ch1Out/100);
if( ek<0.1 )
/* 偏差小于0.1则调整值为0 */
{
adjust=0;
}
else
{
uk=Kp*(ek-ek1)+Ki*ek;/* 否则计算控制增量 */
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 "); /* 请将光标移到此处设置断点,并用debug->Animate监测数据 */
}
void main(void)
{
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.EPWM1_INT = &EPWM1_Z_ISR;
EDIS; // This is needed to disable write to EALLOW protected registers
IER |= M_INT1;
IER |= M_INT3;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER9.bit.INTx1 =1; // PIE Group 9, INT1
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
PieCtrlRegs.PIEIER5.bit.INTx1 = 1;
PieCtrlRegs.PIEIER3.all = M_INT1;
pwmgen.init(&pwmgen);
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
adc1.ChSelect = 0x3210; // for DMC1500 and eZdsp2812/eZdsp2808 boards
adc1.init(&adc1);
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
pwmgen.Close(&pwmgen);
pwmgen.Open(&pwmgen);
while(1)
{
PI();
}
}
interrupt void EPWM1_Z_ISR(void)
{
static int time_inc=0;
pwmgen.MfuncC1 =XPWM;
pwmgen.update(&pwmgen);
time_inc++;
if(time_inc&0x3)
{
goto exit;
}
else
{
// GpioDataRegs.GPACLEAR.bit.GPIO9=1;
}
adc1.read(&adc1);
exit:
EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
这种程序有没有问题????帮我看下 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|