COMPLEMENTARY PWM AT 5KHz
PROGRAM (for C language)
//i have used crystal of 16 MHz and no PLL
//output at 5KHz
void main()
{
unsigned int pwm_period, current_duty ;
current_duty=500 ; //duty ratio 31%
pwm_period = PWM1_MC_Init(5000, 0, 0x11, 0); //enable 1L AND 1H pwm pins
PWM1_MC_Set_Duty(current_duty, 1) ;
PWM1_MC_Start();
//DTCON1=0 //DEAD TIME CONTROL
while (1);
}
PROGRAM (for pascal language)
‘i have used crystal of 16 MHz and no PLL program BLINK
dim pwm_period, current_duty as word
main:
current_duty=500 ‘duty cycle of 31%
pwm_period = PWM1_MC_Init(5000, 0, 0x11, 0) ‘ Pwm_Mc_Init returns calculated timer period.
PWM1_MC_Set_Duty(current_duty, 1)
PWM1_MC_Start()
while (TRUE)
wend
end.
COMPLEMENTARY PWM AT 60KHz
PROGRAM (for C language)
//i have used crystal of 16 MHz
//output at 60KHz
void main()
{
unsigned int pwm_period, current_duty ;
current_duty=100 ; //duty ratio 50%
pwm_period = PWM1_MC_Init(60000, 0, 0x11, 0); //enable 1L AND 1H pwm pins
PWM1_MC_Set_Duty(current_duty, 1) ;
PWM1_MC_Start();
//DTCON1=0 //DEAD TIME CONTROL
while (1);
}
PROGRAM (for pascal language)
‘i have used crystal of 16 MHz and no PLL
program BLINK
dim pwm_period, current_duty as word
main:
current_duty=65 ‘duty ratio 50%
pwm_period = PWM1_MC_Init(60000, 0, 0x11, 0) ‘ Pwm_Mc_Init returns calculated timer period.
PWM1_MC_Set_Duty(current_duty, 1)
PWM1_MC_Start()
while (TRUE)
wend
end.
HOW TO CALCULATE PWM DUTY CYCLE
- PWM duty ratio depend on output frequency
- 16MHz crystal as clock source
- PRESCALE VALUE ARE 1, 8, 64, and 256
Maximum duty ratio =( (FOSC /(FOUTPUT * 4 * PRESCALE VALUE) -1)*2
FOR 5KHz
Maximum duty ratio = (16MHz / (5KHz *4 *1) – 1)*2=1598
FOR 60KHz ,Maximum duty ratio = (16MHz / (60KHz *4 *1) – 1)*2 = 130
I HAVE USED 50% DUTY RATIO FOR BOTH
COMPLEMENTARY PWM AT 240KHz
PROGRAM (for C language)
//i have used crystal of 16 MHz
//output at 60KHz
void main()
{
unsigned int pwm_period, current_duty ;
current_duty=100 ; //duty ratio 50%
pwm_period = PWM1_MC_Init(60000, 0, 0x11, 0); //enable 1L AND 1H pwm pins
PWM1_MC_Set_Duty(current_duty, 1) ;
PWM1_MC_Start();
//DTCON1=0 //DEAD TIME CONTROL
while (1);
}
PROGRAM (for pascal language)
‘i have used crystal of 16 MHz and PLL of 4
program BLINK
dim pwm_period, current_duty as word
main:
current_duty=65 ‘duty ratio 50%
pwm_period = PWM1_MC_Init(60000, 0, 0x11, 0) ‘ Pwm_Mc_Init returns calculated timer period.
PWM1_MC_Set_Duty(current_duty, 1)
PWM1_MC_Start()
while (TRUE)
wend
end.
COMPLEMENTARY PWM AT 60KHz WITH DEAD TIME CONTROL
‘i have used crystal of 16 MHz and no PLL
program BLINK
dim pwm_period, current_duty as word
main:
current_duty=65 ‘duty ratio 50%
pwm_period = PWM1_MC_Init(60000, 0, 0x11, 0) ‘ Pwm_Mc_Init returns calculated timer period.
PWM1_MC_Set_Duty(current_duty, 1)
PWM1_MC_Start()
DTCON1=15
while (TRUE)
wend
end.