tony001 发表于 2021-5-22 09:29:25

PWM占空比更新的问题



1,我现在的应用是这样的,我需要一个定频62.5K,
2,根据函数输入的值,输出一个对应的占空比不同的8位连续脉冲
3,但是实际输出的8个脉冲有时占空比没有按正常输出,
4,我在想可能的主要问题是更新占空比的时间选择的不正确认,也就是当上一个占空比没有更新完成后,又去更新其它值了,
5,我的问题是,当我更新占空比后,如何知道占空比已经更新完成了呢,当知道更新完成后,再重新更新其它值就不会出现占空更新不正确的情况 了吧



PR2=255;
T2CON=0b00000100;//1000/((255+1)*4*(1/64)*1))=62.5K   最大脉冲宽度 4*(255+1)=1024
CCP2CON=0b00001100;

void Send_2812(unsigned char data)
{
   unsigned char i=0;
   for(i=0;i<8;i++)
   {
      if(data&0x80) CCPR2L=12;else CCPR2L=7;
      CLRWDT();CLRWDT();CLRWDT();CLRWDT();CLRWDT();CLRWDT();CLRWDT(); //等占空比更新完成
      data=data<<1;
   }
}

adcr 发表于 2021-5-22 11:39:05

你可以试试在TMR2中断中更新,每个PWM周期其实就是TMR2的一个完整循环

tony001 发表于 2021-5-24 16:29:17

谢谢二楼大哥哥
判定DUTY更新带完成,
while(!TMR2IF)CLRWDT();TMR2IF=0;

NJ8888 发表于 2021-5-27 05:15:26

pwm更新是靠自动重装,任何时候发重装值都是在当前pwm结束后重装

tony001 发表于 2021-5-27 08:30:03

老大,如何才能知道上一次PWM已经更新完成了呢,

shower.xu 发表于 2021-5-28 10:42:01

PWM带缓存寄存器的会周期结束才更新,没带的看能不能使能周期结束中断,在中断里更新
页: [1]
查看完整版本: PWM占空比更新的问题