资源简介

基于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

评论

共有 条评论