概述
/****************************************************************
**电机控制专用PWM模块,占空比|死区时间|故障|周期|互补等都可以调**
****************************************************************/
#include<p33fj256mc710.h>
//设置配置位/
_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)
{
; //可以写其他程序
}
}//注意,该程序在运行时有跑飞现象,关闭的时基有时自动开启时基
最后
以上就是坚定大地为你收集整理的dsPIC33F电机控制Motor的全部内容,希望文章能够帮你解决dsPIC33F电机控制Motor所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复