dsPIC33F电机控制Motor
来源:互联网 发布:小红帽linux系统下载 编辑:程序博客网 时间:2024/04/28 08:17
/******************************************************************电机控制专用PWM模块,占空比|死区时间|故障|周期|互补等都可以调******************************************************************/#include<p33fj256mc710.h>//////////设置配置位/////////////_FPOR (PWMPIN_ON & HPOL_ON & LPOL_ON);//注意这种格式,置1或置0用ON或OFFint 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) { ; //可以写其他程序 }}//注意,该程序在运行时有跑飞现象,关闭的时基有时自动开启时基