dsPIC33F标准PWM

来源:互联网 发布:拼接屏调试软件 编辑:程序博客网 时间:2024/04/30 23:32
/***************************************************************************************  ?2008 Microchip Technology Inc.                                         *                                                                           *  FileName:              Standard PWM.c                                    *  Dependencies:          Header (.h) files if applicable, see below        *  Processor:             dsPIC33FJ06GS202                                  *  Compiler:              MPLAB?C30 v3.02 or higher                        *  IDE:                   MPLAB?IDE v8.02 or later                         *  Hardware Dependencies: 16-Bit 28-Pin Starter Board             *                                                                           *  SOFTWARE LICENSE AGREEMENT:                                              * Microchip Technology Incorporated ("Microchip") retains all ownership and * intellectual property rights in the code accompanying this message and in all * derivatives hereto.  You may use this code, and any derivatives created by * any person or entity by or on your behalf, exclusively with Microchip's* proprietary products.  Your acceptance and/or use of this code constitutes * agreement to the terms and conditions of this notice.** CODE ACCOMPANYING THIS MESSAGE IS SUPPLIED BY MICROCHIP "AS IS".  NO * WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED * TO, IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE APPLY TO THIS CODE, ITS INTERACTION WITH MICROCHIP'S * PRODUCTS, COMBINATION WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION. ** YOU ACKNOWLEDGE AND AGREE THAT, IN NO EVENT, SHALL MICROCHIP BE LIABLE, WHETHER * IN CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE OR BREACH OF STATUTORY DUTY), * STRICT LIABILITY, INDEMNITY, CONTRIBUTION, OR OTHERWISE, FOR ANY INDIRECT, SPECIAL, * PUNITIVE, EXEMPLARY, INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, FOR COST OR EXPENSE OF * ANY KIND WHATSOEVER RELATED TO THE CODE, HOWSOEVER CAUSED, EVEN IF MICROCHIP HAS BEEN * ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE.  TO THE FULLEST EXTENT * ALLOWABLE BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY RELATED TO * THIS CODE, SHALL NOT EXCEED THE PRICE YOU PAID DIRECTLY TO MICROCHIP SPECIFICALLY TO * HAVE THIS CODE DEVELOPED.** You agree that you are solely responsible for testing the code and * determining its suitability.  Microchip has no obligation to modify, test, * certify, or support the code.*                                                                         ****************************************************************************** Description:                                                              **   This program illustrates the use of the PWM module in the standard mode.** PWM1H and PWM2H are configured to be digital outputs, and PWM1L and PWM2L ** are selected as PWM outputs.                                              **                                                                           *                *****************************************************************************/// #include "p33FJ06GS202.h"#include <p33FJ128MC506A.h>/* Configuration Bit Settings *//* Internal FRC Oscillator */ _FOSCSEL(FNOSC_FRC)/*  Clock Switching is enabled and **  Fail Safe Clock Monitor is disabled ** OSC2 Pin Function: OSC2 is Clock Output ** Primary Oscillator Mode: Disabled */ _FOSC(FCKSM_CSECMD & OSCIOFNC_ON)_FWDT(FWDTEN_OFF)//_FPOR(FPWRT_PWR128 &  BOREN_OFF)_FICD(ICS_PGD2 & JTAGEN_OFF)void init_PWM(void);int main(){/* Configure Oscillator to operate the device at 40Mhz   Fosc= Fin*M/(N1*N2), Fcy=Fosc/2    Fosc= 7.37*(43)/(2*2)=80Mhz for Fosc, Fcy = 40Mhz */    /* Configure PLL prescaler, PLL postscaler, PLL divisor */    PLLFBD=41; /* M = PLLFBD + 2 */    CLKDIVbits.PLLPOST=0;   /* N1 = 2 */    CLKDIVbits.PLLPRE=0;    /* N2 = 2 */    __builtin_write_OSCCONH(0x01);/* New Oscillator FRC w/ PLL */    __builtin_write_OSCCONL(0x01);  /* Enable Switch */          while(OSCCONbits.COSC != 0b001);/* Wait for new Oscillator to become FRC w/ PLL */    while(OSCCONbits.LOCK != 1);/* Wait for Pll to Lock */    /* Now setup the ADC and PWM clock for 120MHz       ((FRC * 16) / APSTSCLR ) = (7.37 * 16) / 1 = ~ 120MHz*/    // !!!!!!    // ACLKCONbits.FRCSEL = 1;/* FRC provides input for Auxiliary PLL (x16) */    // ACLKCONbits.SELACLK = 1;/* Auxiliary Oscillator provides clock source for PWM & ADC */    // ACLKCONbits.APSTSCLR = 7;/* Divide Auxiliary clock by 1 */    // ACLKCONbits.ENAPLL = 1;/* Enable Auxiliary PLL */    // !!!!!    // while(ACLKCONbits.APLLCK != 1);    /* Wait for Auxiliary PLL to Lock */    // !!!!!!!!!!    TRISBbits.TRISB4 = 0;           /* Set as a digital output */    TRISBbits.TRISB13 = 0;           /* Set as a digital output */    // !!!!!!!!!!    LATBbits.LATB4 = 1;    LATBbits.LATB13 = 1;        init_PWM();        while(1);                     /* Infinite Loop */}void init_PWM(){    PTPER = 2404;                    /* PTPER = ((1 / 400kHz) / 1.04ns) = 2404, where 400kHz is the desired switching frequency and 1.04ns is PWM resolution. */    /*~~~~~~~~~~~~~~~~~~~~~~~ PWM1 Configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/        PWM1CON1bits.PEN1H      = 0;      /* PWM1H is controlled by GPIO module */    PWM1CON1bits.PEN1L      = 1;      /* PWM1L is controlled by PWM module */    PWM1CON1bits.PMOD1      = 1;      /* Select Independent Output PWM mode */    PDC1 = 640;   /* Initial Duty cycle */     DTCON1    = 64;                  /* Deadtime setting *///    ALTDTR1 = 64;                  /* Deadtime setting *///    PHASE1 = 0;                    /* No phase shift */    /*~~~~~~~~~~~~~~~~~~~~~~~ PWM2 Configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/    PWM1CON1bits.PEN2H      = 0;      /* PWM2H is controlled by GPIO module */    PWM1CON1bits.PEN2L      = 1;      /* PWM2L is controlled by PWM module */    PWM1CON1bits.PMOD2      = 1;      /* Select Independent Output PWM mode */    PDC2 = 640;   /* Initial Duty cycle */     DTCON2    = 64;                  /* Deadtime setting *///    ALTDTR2 = 64;                  /* Deadtime setting *///    PHASE2 = 240;                  /* approximately 250ns phase shift */    FLTACON = 0; // PWM????FLTA??    FLTBCON = 0; // PWM????FLTA??    PTCONbits.PTEN       = 1;      /* Enable the PWM Module */    P1TCON = 0; // Enable PWM for center aligned operation ??????????????????????}

原创粉丝点击