动态 PWM 占空比
Dynamic PWM duty cycle
我无法动态更改 PWM 的占空比。我在数据表中发现我可能误解了这一点:
CCPR1L 和 CCP1CON<5:4> 可随时写入,但占空比值不会复制到 CCPR1H,直到 PR2 和 TMR2 之间发生匹配(即,周期完成).在PWM模式下,CCPR1H为只读寄存器。
使用 PIC18F1220、XC8 v1.34、MPLAB v5.30
PR2=99; //calculation
CCPR1L = 50; //calculation*duty cycle
T2CONbits.TMR2ON = 1; //start timer
while(1)
{
ADC_Result[0] = ADC_Read(0);
ADC_Result[1] = ADC_Read(1);
if(ADC_Result[0] > 900)
{
T2CONbits.TMR2ON = 0;
CCPR1L = 0;
T2CONbits.TMR2ON = 1;
}
else
{
T2CONbits.TMR2ON = 0;
CCPR1L = 50;
T2CONbits.TMR2ON = 1;
}
PIR1bits.CCP1IF=0;
while(PIR1bits.CCP1IF==0);
}
关闭和重新启动计时器不应该重新开始时间吗?
旁注:我知道 PWM 工作正常。在模拟器上我可以让这两种情况发生,只需要重新启动。我也尝试过不关闭和打开计时器但没有成功。
问题以及为什么需要重置是最后一个 while 循环。在第 75 页的数据表中,显示 CCP1F 位未在 PWM 操作中使用。如果您想等待周期到期到 运行 ADC,请改用 tmr2if 位。
我无法动态更改 PWM 的占空比。我在数据表中发现我可能误解了这一点:
CCPR1L 和 CCP1CON<5:4> 可随时写入,但占空比值不会复制到 CCPR1H,直到 PR2 和 TMR2 之间发生匹配(即,周期完成).在PWM模式下,CCPR1H为只读寄存器。
使用 PIC18F1220、XC8 v1.34、MPLAB v5.30
PR2=99; //calculation
CCPR1L = 50; //calculation*duty cycle
T2CONbits.TMR2ON = 1; //start timer
while(1)
{
ADC_Result[0] = ADC_Read(0);
ADC_Result[1] = ADC_Read(1);
if(ADC_Result[0] > 900)
{
T2CONbits.TMR2ON = 0;
CCPR1L = 0;
T2CONbits.TMR2ON = 1;
}
else
{
T2CONbits.TMR2ON = 0;
CCPR1L = 50;
T2CONbits.TMR2ON = 1;
}
PIR1bits.CCP1IF=0;
while(PIR1bits.CCP1IF==0);
}
关闭和重新启动计时器不应该重新开始时间吗?
旁注:我知道 PWM 工作正常。在模拟器上我可以让这两种情况发生,只需要重新启动。我也尝试过不关闭和打开计时器但没有成功。
问题以及为什么需要重置是最后一个 while 循环。在第 75 页的数据表中,显示 CCP1F 位未在 PWM 操作中使用。如果您想等待周期到期到 运行 ADC,请改用 tmr2if 位。