这里我使用pic 16f877 MCU和mikroc for pic compilerto了解PWM signels。 数据表显示该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位分辨率意味着什么,我明白错了还是我做错了。
请帮忙......
答案 0 :(得分:0)
最后我得到了解决方案。我给它,因为它可能对其他人有帮助。
mokroc的pwm库不支持10位。所以PWM1_Set_Duty()
只接受0到255之间的数字。即0%占空比到100%占空比。如果你想使用10位分辨率,你应该手动写入寄存器。
答案 1 :(得分:0)
现在您已成功设法使代码正常工作,请尝试使用内部PIC寄存器。 10比特的分辨率更强大,比方说,RGB比8比特更强。它不是很难让它自己工作,它直接写在数据表中,很多网站都给你提供了计算PWM占空比和频率的功能。模块。
MicroChip的CCP(PWM)模式数据表:http://ww1.microchip.com/downloads/en/DeviceDoc/31014a.pdf