dsPIC30F2010 microchip 无刷直流电机
AN957
/*****************************************************************************CalculateDC,使用PI算法来计算新的DutyCycle(占空比)值,该值将被载入PDCx寄存器。
****************************************************************************/void CalculateDC(void){
DesiredSpeed = DesiredSpeed*3;Flags.Minus = 0;
if (ActualSpeed > DesiredSpeed)
SpeedError = ActualSpeed - DesiredSpeed;else
{
SpeedError = DesiredSpeed - ActualSpeed;Flags.Minus = 1;}
SpeedIntegral += SpeedError;if (SpeedIntegral > 9000)
SpeedIntegral = 0;
DutyCycle = (((long)Ksp*(long)SpeedError + (long)Ksi*(long)SpeedIntegral) >> 12);DesiredSpeed = DesiredSpeed/3;if (Flags.Minus)
DutyCycle = DesiredSpeed + DutyCycle;
else DutyCycle = DesiredSpeed - DutyCycle;if (DutyCycle < 100)
DutyCycle = 100;if (DutyCycle > 1250)
{DutyCycle = 1250;SpeedIntegral = 0;} PDC1 = DutyCycle;PDC2 = PDC1;PDC3 = PDC1;}
//---------------------------------------------------------------------// 这是通用的1 ms延迟程序,用于提供1 mS到65.5 秒的延迟。
// 如果N = 1,则延迟为1 mS;如果N = 65535,则延迟为65,535 mS。 // 注意FCY会用于计算。
// 请根据上述定义语句作必要的更改(PLLx4或PLLx8等)// 以计算出正确的FCY。
void DelayNmSec(unsigned int N){
unsigned int j;while(N--)
for(j=0;j < MILLISEC;j++);}
DS00957A_CN第16页© 2005 Microchip Technology Inc.