dsPIC30F2010 microchip 无刷直流电机
AN957
/********************************************************************InitMCPWM,对PWM做以下初始化:1. FPWM = 16000 hz2. 独立的PWM
3. 使用OVDCON控制输出
4. 使用PI算法和速度误差设置占空比5. 将ADC设置为由PWM特殊触发信号触发
*********************************************************************/void InitMCPWM(void){
PTPER = FCY/FPWM - 1;
PWMCON1 = 0x0700;OVDCON = 0x0000;PDC1 = 100;PDC2 = 100;PDC3 = 100;
SEVTCMP = PTPER;PWMCON2 = 0x0F00;PTCON = 0x8000; }
/************************************************************************Tmr3用于确定速度,因此它被设置为使用Tcy/256作为时钟周期进行计数。
*************************************************************************/void InitTMR3(void){
T3CON = 0x0030;TMR3 = 0;
PR3 = 0x8000;}
// 禁止PWM
// 允许使用OVD控制
// 将PWM1、PWM2和PWM3初始化为100
// 特殊触发值等于16个周期值// 后分频比设为1:16// 启动PWM
// 内部Tcy/256时钟
/************************************************************************GetSpeed,通过使用每个机械周期内TMR3中的值确定 电机的精确速度。
*************************************************************************/void GetSpeed(void){
if (Timer3 > 23000)// 如果TMR3值很大,则忽略此次读取
return;
if (Timer3 > 0)
Speed = RPMConstant/(long)Timer3;// 获得以RPM为单位的速度ActualSpeed += Speed;
ActualSpeed = ActualSpeed >> 1;if (++SpeedCount == 1)
{SpeedCount = 0;CalculateDC();}
}
© 2005 Microchip Technology Inc.DS00957A_CN第15页