读书人

dsPIC33EP 快速PWM模块初始化设置及应

发布时间: 2013-10-31 12:03:52 作者: rapoo

dsPIC33EP 高速PWM模块初始化设置及应用

//文件 p33pwm6.h#ifndef _P33PWM6_H_#define _P33PWM6_H_//#include "p33pwm6.h"#defineFSYNCOEN(1<<8)//主时基同步使能位#defineFSYNCEN(1<<7)//外步时基同步使能位//输入时钟预分频选择#definePWMCLK_DIV1(0<<0)#definePWMCLK_DIV2(1<<0)#definePWMCLK_DIV4(2<<0)#definePWMCLK_DIV8(3<<0)#definePWMCLK_DIV16(4<<0)#definePWMCLK_DIV32(5<<0)#definePWMCLK_DIV64(6<<0)#defineV_PTPER720//1000 //主控时基周期值#definePOH1_ValidH IOCON1 &= ~(1<<13) //上管引脚高电平有效#definePOH1_ValidL IOCON1 |= (1<<13) //上管引脚低电平有效#definePOH2_ValidH IOCON2 &= ~(1<<13) //上管引脚高电平有效#definePOH2_ValidL IOCON2 |= (1<<13) //上管引脚低电平有效#definePOH3_ValidH IOCON3 &= ~(1<<13) //上管引脚高电平有效#definePOH3_ValidL IOCON3 |= (1<<13) //上管引脚低电平有效#definePWMAH_ENBIOCON1bits.OVRENH = 0 #definePWMBH_ENBIOCON2bits.OVRENH = 0 #definePWMCH_ENBIOCON3bits.OVRENH = 0 #definePWMAH_DISIOCON1bits.OVRENH = 1 #definePWMBH_DISIOCON2bits.OVRENH = 1#definePWMCH_DISIOCON3bits.OVRENH = 1//===============================================extern void Init_Pwm6(uint16 InClkdiv,uint16 CycPwm) ;extern void ToPwmValue(uint16 Tcon) ;#endif //文件 p33pwm6.c#include "global.h"#include "p33pwm6.h"//***************************************// 函数名称:Init_Pwm6// 函数功能:初始化PWM// 入口参数:PWM时钟分频 PWM周期值// 出口参数:无// 返回值:无// pwm 的时钟源为Fosc (即系统时钟)//***************************************void Init_Pwm6(uint16 InClkdiv,uint16 CycPwm){PTCON = 0x0000 ; //PWM模块禁止 每次比较产生触发事件PTCON2 = InClkdiv ; //输入时钟预分频PTPER = CycPwm ; //主控周期值PHASE1 = CycPwm  ; //主移相寄存器PHASE2 = CycPwm  ;PHASE3 = CycPwm ;SEVTCMP = 0X0000 ; //特殊事件比较计数值位CHOP = 0X0000 ; //斩波时钟发生器-- 禁止MDC = 0x0000 ; //主控占空比值PDC1 = 0x0000 ; //pwm占空比寄存器PDC2 = 0x0000 ;PDC3 = 0x0000 ;/*//PTPER 提供周期 mdc为PWM提供占空比PWMCON1 = 0X0180 ; //禁止死区控制 PWMCON2 = 0X0180 ; //禁止死区控制PWMCON3 = 0X0180 ; //禁止死区控制*///PHASEx 提供周期 PDCx为PWM提供占空比PWMCON1 = 0X0280 ; //禁止死区控制 PWMCON2 = 0X0280 ; //禁止死区控制PWMCON3 = 0X0280 ; //禁止死区控制/*//PHASEx 提供周期 PDCx为PWM提供占空比PWMCON1 = 0X0380 ; //禁止死区控制 PWMCON2 = 0X0380 ; //禁止死区控制PWMCON3 = 0X0380 ; //禁止死区控制*/DTR1 = 0X0000 ; //死区寄存器DTR2 = 0X0000 ;DTR3 = 0X0000 ;ALTDTR1 = 0X0000 ; //备用死区寄存器ALTDTR2 = 0X0000 ;ALTDTR3 = 0X0000 ;TRGCON1 = 0X0000 ; //PWM触发控制寄存器TRGCON2 = 0X0000 ;TRGCON3 = 0X0000 ;/*PWM模块控制H管 GPIO控制L管PWM IO引脚模式处于独立模式*/IOCON1 = 0X8c00 ; //PWM IO 控制寄存器 IOCON2 = 0X8c00 ;IOCON3 = 0X8c00 ;POH1_ValidH ; //上管引脚 高电平有效POH2_ValidH ;POH3_ValidH ;TRIG1 = 0X0000 ;//PWM主触发比较值寄存器TRIG2 = 0X0000 ;TRIG3 = 0X0000 ;//PWM故障限流控制寄存器  禁止限流 禁止故障输入FCLCON1 = 0X0003 ;FCLCON2 = 0X0003 ;FCLCON3 = 0X0003 ;LEBCON1 = 0X0000 ;//前沿消隐控制寄存器LEBCON2 = 0X0000 ;LEBCON3 = 0X0000 ;LEBDLY1 = 0X0000 ; //前沿消隐延时寄存器 限流和故障输入消隐LEBDLY2 = 0X0000 ;LEBDLY3 = 0X0000 ;AUXCON1 = 0X0000 ; //PWM附属控制寄存器AUXCON2 = 0X0000 ;AUXCON3 = 0X0000 ;PTCON |= (FSYNCOEN|FSYNCEN) ;//主时基同步使能//当PWM不使能时 PWMH PWML管脚输出的电平状态//第1位为上管 第0位为下管IOCON1bits.OVRDAT = 0X00 ; //PWM禁止时 PWMH PWML输出0IOCON1bits.OVRDAT = 0X00 ; //IOCON1bits.OVRDAT = 0X00 ; //PWMCON1 |= 0X0001 ; //立即更新有效位 PWMCON2 |= 0X0001 ; //立即更新有效位 PWMCON3 |= 0X0001 ; //立即更新有效位 PTCON = 0x8000 ;//PWM模块使能}//***************************************// 函数名称:Init_Pwm6// 函数功能:初始化时钟// 入口参数:时钟来源选择 处理器与CPU时钟分频比 pll倍频比// 出口参数:无// 返回值:无//***************************************void ToPwmValue(uint16 Tcon){PDC1 = Tcon ; //pwm占空比寄存器PDC2 = Tcon ;PDC3 = Tcon ;//MDC = Tcon; //主控占空比值}//应用实例void main(void){uint16 g_wTmp1 ;//初始化PWM//独立时期 独立占空比 PWM固定频率16KInit_Pwm6(PWMCLK_DIV8,V_PTPER) ;//Fosc/8 16k pwm 最大占空比值为720while(1){ToPwmValue(200) ; //设置PWM占空比PWMAH_ENB ; //输出PWM到H1管PWMAH_DIS ;//禁止输出PWM到H1管}}

读书人网 >移动开发

热点推荐