资源简介
基于Microchip的dispic33fj64gs610芯片的定占空比PWM程序,在实验调试中得到测试验证。
代码片段和文件信息
/**************************************************************************************
*名称:PWM调试程序
*时间:2013年3月8日
*作者:huangcheng
*说明:要求PWM6H输出40%占空比方波,PWM7H输出60%占空比方波,PWM6L和PWM7L始终为高(CS240决定)
*其他:如有能力,要求PWM6H与PWM7H输出180°移相
***************************************************************************************/
//“文件包含“处理
#include “p33FJ64GS610.h“
#define BIT7 0x0080
#define IGBTEN_ON PORTD=LATD&(~BIT7)
//配置文件
_FOSCSEL(FNOSC_FRC) //初始振荡器源选择:000=FRC振荡器
_FOSC(FCKSM_CSECMD & OSCIOFNC_ON) //时钟切换模式:01=使能时钟切换,禁止故障保护时钟监视器
//OSC2引脚功能位(XT和HS模式除外):0=OSC2为通用数字I/O引脚
_FWDT(FWDTEN_OFF) //看门狗定时器使能:0=通过用户软件使能/ 禁止看门狗定时器
_FPOR(FPWRT_PWR128) //上电复位定时器值选择位:111=PWRT=128ms
_FICD(ICS_PGD1 & JTAGEN_OFF) //ICD通信通道选择使能位:11=在PGEC1和PGED1上进行通信
//JTAG使能位:0=禁止JTAG
void init_PWM(void);
//main主函数
int main()
{
/******** Configure Oscillator to operate the device at 39.6288Mhz(MIPS)
Fosc= Fin*M/(N1*N2) Fcy=Fosc/2
Fosc= 7.3728*(43)/(2*2)=79.2576Mhz for Fosc Fcy = 40Mhz *********/
/* Configure PLL prescaler PLL postscaler PLL divisor */
PLLFBD=41; /* M=PLLFBD+2=43 */
CLKDIVbits.PLLPOST=0; /* N2=PLLPOST+2=2 */
CLKDIVbits.PLLPRE=0; /* N1=PLLPRE+2=2 */
__builtin_write_OSCCONH(0x01); /* 快速RC振荡器(FRC)→带PLL的快速RC振荡器(FRC) */
__builtin_write_OSCCONL(0x01); /* Enable Switch */
// Wait for Clock switch to occur
while(OSCCONbits.COSC != 0b001); /* Wait for new Oscillator to become FRC with PLL */
while(OSCCONbits.LOCK != 1); /* Wait for Pll to Lock */
/**************** Setup the ADC and PWM clock for 117.9648MHz
N=APSTSCLR=1
((Posc * 16) / APSTSCLR ) = (7.3728 * 16) / 1 = 117.9648MHz
PWM resolution is 1.0596ns. ****************/
ACLKCONbits.FRCSEL = 1; /* 为附属PLL 选择FRC时钟 */
ACLKCONbits.SELACLK = 1; /* 附属振荡器为附属时钟分频器提供源时钟,Auxiliary Oscillator provides clock source for PWM & ADC */
ACLKCONbits.APSTSCLR = 7; /* 附属时钟输出1分频,Divide Auxiliary clock by 1 */
ACLKCONbits.ENAPLL = 1; /* 使能APLL */
while(ACLKCONbits.APLLCK != 1); /* Wait for Auxiliary PLL to Lock */
/************************ IO端口设定 *********************************/
ADPCFG|=0xFFFF;
ADPCFG2|=0x00FF; //所有模拟口 都设为数字IO口
//PWM模块IO初始
PORTD=LATD|0x2038;
PORTD=LATD&0xFF7F;
TRISD&=0xdf47; //IGBTEN初始为低,配置为输出引脚pwm6H、6L、7H、7L配置为输出引脚,初始高电平
init_PWM();
while(1); /* Infinite Loop */
}
void init_PWM()
{
PTPER=47188; /* PTPER = ((1 / 20kHz) / 1.0596ns) = 47188 where 20kHz
is the desired switching frequency and 1.0596ns is PWM resolution. */
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-03-09 11:36 PWM_dspic\
文件 288753 2013-03-09 11:31 PWM_dspic\6KWDCDC-pic.cof
文件 5208 2013-03-09 11:31 PWM_dspic\6KWDCDC-pic.hex
文件 133889 2013-03-09 11:31 PWM_dspic\6KWDCDC-pic.map
文件 1186 2013-03-09 11:35 PWM_dspic\6KWDCDC-pic.mcp
文件 1939 2013-03-09 11:35 PWM_dspic\6KWDCDC-pic.mcs
文件 1911296 2013-03-09 11:35 PWM_dspic\6KWDCDC-pic.mcw
文件 4567 2013-07-19 16:28 PWM_dspic\main.c
文件 256219 2013-03-09 11:31 PWM_dspic\main.o
文件 74557 2012-09-11 15:54 PWM_dspic\p33FJ64GS610.gld
文件 430347 2012-09-11 15:54 PWM_dspic\p33FJ64GS610.h
文件 59 2013-03-11 08:25 PWM_dspic\备注.txt
文件 4554 2013-07-19 16:27 PWM_dspic\程序稿.txt
评论
共有 条评论