dsPIC33F电机控制Motor

/****************************************************************
**电机控制专用PWM模块,占空比|死区时间|故障|周期|互补等都可以调**
****************************************************************/

#include
//////////设置配置位/////////////
_FPOR (PWMPIN_ON & HPOL_ON & LPOL_ON);//注意这种格式,置1或置0用ON或OFF
int k=0;
void __attribute__((__interrupt__)) _PWMInterrupt()
{
    k=k+1;
    IFS3bits.PWMIF = 0;
    ///////十秒后关闭PWM,这个可以换成占空比赋值等其他程序////////
   if(k == 10000)  //小心这是等号不是赋值,后者会被当成真值执行
   {
       // PTEN:PWM 时基定时器使能位
       // 1 = 使能 PWM 时基
       // 0 = 禁止 PWM 时基
       PTCONbits.PTEN=0;
   }
}

main()
{
    ///////设置周期和占空比步骤//////////
    //  PWMCON2:PWM 控制寄存器 2
    // UDIS:PWM 更新禁止位
    // 1 = 禁止从占空比缓冲寄存器和周期缓冲寄存器进行更新
    // 0 = 允许从占空比缓冲寄存器和周期缓冲寄存器进行更新
    PWMCON2bits.UDIS = 1;//这个不是多余的,
    // PTPER:PWM 时基周期寄存器
    PTPER = 0x1000;    //因为它可用来控制什么时候更新占空比等寄存器
    ////////注意,实际占空比=PDCx/(2*PTPER)/////////
   // PDC1:PWM 占空比寄存器 1
   PDC1 = 0x0800;
   PDC2 = 0x1000;
   PDC3 = 0x1500;
   PDC4 =0x1800;
   PWMCON2bits.UDIS = 0;
   /////////设置控制寄存器/////////
   // PTCON:PWM 时基控制寄存器
   PTCON = 0;           //以下包括时基的工作模式、PWM工作模式、故障、改写等
   PWMCON1 = 0x00FF;    //直接把PWMCON1bits.PMOD置F即可运行于独立模式
   FLTACON=0;           //置0则直接运行于没有死区时间的互补模式
   FLTBCON=0;
   OVDCON=0XFF00;       //改写寄存器中POVDxH/L位须置1,
                        //否则PWM发生器没有I/O脚的控制权
    /////////设置死区时间///////////
   DTCON1=0X3F1F;          // 死区时间值*死区时间单元=实际死区时间
   DTCON2=0X000F;          //实际死区时间不能超过占空比
   ////////设置中断相关寄存器//////
   IFS3bits.PWMIF=0;
   IEC3bits.PWMIE=1;
   IPC14bits.PWMIP=4;
   ////////开启PWM时基//////////
   PTCONbits.PTEN=1;
   /////////以下这个无限循环不要省,离开它等于跟成功说bye-bye//////////
   while(1)
    {
      ;   //可以写其他程序
     }

}//注意,该程序在运行时有跑飞现象,关闭的时基有时自动开启时基

你可能感兴趣的:(dsPCI33)