Exemple #1
0
static void tiHSetupPeripheral(void) {

    unsigned int PTPERvalue = pwm_period;
    unsigned int SEVTCMPvalue, PTCONvalue, PWMCON1value, PWMCON2value;

    SEVTCMPvalue = sevtcmp_pwm;
    PTCONvalue = PWM_EN & PWM_IDLE_CON & PWM_OP_SCALE1 &
                 PWM_IPCLK_SCALE1 & PWM_MOD_FREE;
    PWMCON1value = PWM_MOD1_IND & PWM_PEN1L & PWM_MOD2_IND & PWM_PEN2L &
                   PWM_MOD3_IND & PWM_PEN3L & PWM_MOD4_IND & PWM_PEN4L;
    PWMCON2value = PWM_SEVOPS4 & PWM_OSYNC_TCY & PWM_UEN;
    ConfigIntMCPWM(PWM_INT_DIS & PWM_FLTA_DIS_INT & PWM_FLTB_DIS_INT);

    //Call Microchip library setup function
    OpenMCPWM(PTPERvalue, SEVTCMPvalue, PTCONvalue, PWMCON1value, PWMCON2value);

}
Exemple #2
0
void SetupPWM(void){

   LATB  = 0x0000;
   TRISB = 0b0000011011111011;

   PORTBbits.RB8 = 0;
   PORTBbits.RB11 = 0;

   unsigned int SEVTCMPvalue, PTCONvalue, PWMCON1value, PWMCON2value;
   SEVTCMPvalue = 160; //Special event compare register triggers special event
   //SEVTCMPvalue = 4839; //Special event compare register triggers special event
                        //at this point in the PWM period. Useful for sampling
                        //back EMF when motor is turned off, for example.
                        //Values larger than 4839 for a time base of 4999 give
                        //unreliable results. Consequently, running the motor
                        //at greater than 96.7% duty cycle means you cannot
                        //sense back EMF.

   PTCONvalue = PWM_EN & PWM_IDLE_CON & PWM_OP_SCALE1 &
//                PWM_IPCLK_SCALE4 & PWM_MOD_FREE;
                PWM_IPCLK_SCALE16 & PWM_MOD_FREE;
   PWMCON1value = PWM_MOD1_IND & PWM_PEN1L & PWM_PEN1H &
                  PWM_MOD2_IND & PWM_PEN2L & PWM_PEN2H &
                  PWM_MOD3_IND & PWM_PEN3L & PWM_PEN3H;
   PWMCON2value = PWM_SEVOPS1 & PWM_OSYNC_TCY & PWM_UEN;
   ConfigIntMCPWM(PWM_INT_DIS & PWM_FLTA_DIS_INT & PWM_FLTB_DIS_INT);

   OpenMCPWM(PTPERvalue, SEVTCMPvalue, PTCONvalue, PWMCON1value, PWMCON2value);
   P1OVDCONbits.POVD1L = 1;
   P1OVDCONbits.POVD1H = 1;
   P1OVDCONbits.POVD2L = 1;
   P1OVDCONbits.POVD2H = 1;
   P1OVDCONbits.POVD3L = 1;
   P1OVDCONbits.POVD3H = 1;
   SetDCMCPWM(1, 0, 0);
   SetDCMCPWM(2, 0, 0);
   SetDCMCPWM(3, 0, 0);
}
Exemple #3
0
static void mcSetupPeripheral(void) {

	//unsigned int PTPERvalue = 10000;
	unsigned int PTPERvalue = 2000;
	//unsigned int PTPERvalue = 2000;
    unsigned int SEVTCMPvalue, PTCONvalue, PWMCON1value, PWMCON2value;
    SEVTCMPvalue = 1920;
	SEVTCMPvalue = 9940;
	SEVTCMPvalue = 1988;  // ok up to 96% of time base, according to  Aaron
//    SEVTCMPvalue = 160; // Special Event Trigger Compare Value for ADC in phase with PWM
    //PTCONvalue = PWM_EN & PWM_IDLE_CON & PWM_OP_SCALE1 &
    //             PWM_IPCLK_SCALE4 & PWM_MOD_FREE;
	PTCONvalue = PWM_EN & PWM_IDLE_CON & PWM_OP_SCALE1 &
                 PWM_IPCLK_SCALE1 & PWM_MOD_FREE;
    PWMCON1value = PWM_MOD1_IND & PWM_PEN1L & PWM_MOD2_IND & PWM_PEN2L &
                   PWM_MOD3_IND & PWM_PEN3L & PWM_MOD4_IND & PWM_PEN4L;
    PWMCON2value = PWM_SEVOPS1 & PWM_OSYNC_TCY & PWM_UEN;
    ConfigIntMCPWM(PWM_INT_DIS & PWM_FLTA_DIS_INT & PWM_FLTB_DIS_INT);
    SetDCMCPWM(1, 0, 0);
    OpenMCPWM(PTPERvalue, SEVTCMPvalue, PTCONvalue, PWMCON1value, PWMCON2value);
	SetDCMCPWM(2, 0, 0);
    OpenMCPWM(PTPERvalue, SEVTCMPvalue, PTCONvalue, PWMCON1value, PWMCON2value);

	//Stan's
	
    // For 1KHz at MIPS == 40
    /*
	pwm_period_ = 624; 
    
    ConfigIntMCPWM(PWM_INT_DIS & PWM_FLTA_DIS_INT & PWM_FLTB_DIS_INT);

    PTPER = pwm_period_;

    PWMCON1bits.PMOD1 = 1;
    PWMCON1bits.PMOD2 = 1;
    PWMCON1bits.PMOD3 = 0;
    PWMCON1bits.PMOD4 = 0;
    PWMCON1bits.PEN1H = 0;
    PWMCON1bits.PEN2H = 0;
    PWMCON1bits.PEN3H = 0;
    PWMCON1bits.PEN4H = 0;
    PWMCON1bits.PEN1L = 1;
    PWMCON1bits.PEN2L = 1;
    PWMCON1bits.PEN3L = 0;
    PWMCON1bits.PEN4L = 0;

    PWMCON2bits.SEVOPS = 1; // postscale 1:1
    PWMCON2bits.OSYNC = 0;
    PWMCON2bits.IUE = 1;
	PWMCON2 |= PWM_UEN;
	
	P1SECMPbits.SEVTDIR = 1;

    PTCONbits.PTMOD = 0; // Free running mode
    PTCONbits.PTOPS = 0b11; // postscale 1:1
    PTCONbits.PTCKPS = 0b11; // postscale 1:64
    PTCONbits.PTSIDL = 0; // runs in CPU idle mode
    PTCONbits.PTEN = 1;
	
	PDC1 = 0x35;   // duty cycle = 0
	PDC2 = 0x35;
	SEVTCMP = 600; // Special Event Trigger Compare Value for ADC in phase with PWM
	//P1SECMPbits.SEVTCMP = 600;
	AD1CON1bits.SSRC = 0b011;
	*/
}