0

这里我使用 pic 16f877 MCU 和 mikroc 进行 pic 编译器来理解 PWM 信号。数据表说这个 MCU 在 PWM 中具有 10 位分辨率。我不明白这个决议是什么意思。这是否意味着如果我用它为电机供电,我可以获得 1024 种不同的速度。这是我在 mikroc 中编写的一个程序,用于逐渐增加 LED 的光并再次减少它。

int i=0;

void blink_up(){
  i++;
  PWM1_Set_Duty(i);
  Delay_ms(10);
}

void blink_down(){
  i--;
  PWM1_Set_Duty(i);
  Delay_ms(10);
}


void main() {
  trisc=0;
  portc=0;

  PWM1_Init(5000); //initilize PWM 1 at 5kHz
  PWM1_Start();
  PWM1_Set_Duty(i);

 while(1){
    while(i != 1023){
     blink_up();
    }

    while(i!=0) {
     blink_down();
  }

}

但这不会给出预期的结果。LED 逐渐闪烁并突然关闭,然后再次逐渐闪烁。但是当我将行更改 while(i != 1023)为 `while(i != 255) 时,它会给出预期的结果。

所以我想知道 10 位分辨率是什么意思,是我理解错了还是我做错了什么。

请帮忙....

4

2 回答 2

0

既然您已经成功地让您的代码工作了,请尝试使用内部 PIC 寄存器。10 位的分辨率比 8 位的 RGB LED 更强大。让它自己工作并不难,它直接写在数据表中,并且有很多网站为您提供计算占空比和 PWM 模块频率的功能。

MicroChip 的 CCP (PWM) 模式数据表:http ://ww1.microchip.com/downloads/en/DeviceDoc/31014a.pdf

于 2014-06-06T18:40:34.173 回答
0

最后我得到了解决方案。我给它是因为它可能对其他人有帮助。

mokroc 的 pwm 库不支持 10 位。所以PWM1_Set_Duty()只接受一个从 0 到 255 的数字。这是 0%duty 到 100% 的占空比。如果你想使用 10 位分辨率,你应该手动编写寄存器。

于 2013-07-16T10:28:34.667 回答