-2

所以我有这个直流电机,我想把它的速度降低到 25%,所以很明显我通过电机驱动器使用了相位正确的 pwm 来做到这一点,我可以通过 timer1 来做到这一点,但我的助理教授希望我用8 位 timer0,所以我编写了代码并且它运行但完整,所以我的问题是在编写代码之前必须进行一些计算,如果有,这些计算是什么?

注意:电机频率为 100-250 Hz 我正在使用内部频率 1 MHz 和预分频器 1024

 #define F_CPU 1000000UL

 #include <avr/io.h>

 #include <util/delay.h>

int main(void)
{

DDRB  = DDRB | (1<<PB3); //set OC0 as output pin --> pin where the PWM signal is generated from MC

/*set CS02:0 to 101 to work with 1024 prescaler
set WGM0[1:0] to 01 to work with phase correct,pwm
set COM01:0 to 11 to Set OC0 on compare match when up-counting. Clear OC0 on compare match
when downcounting*/

    TCCR0 = 0b00111101;
   OCR0 = 64; // 25% DUTY CYCLE
    while (1)
{
    ;
}
      }
4

1 回答 1

0

您的问题实际上迫使我们猜测-您没有提供足够的事实来真正帮助您。所以,我你正在使用快速 PWM,并猜测你正在使用 PWM 占空比控制电机速度。

电机频率和预分频器值实际上并不那么有趣 - 如果你想减速,你想改变占空比,我假设。

16 位定时器 25% 的占空比是 $10000/4 = $4000(我猜这就是您将 16 位定时器的输出比较寄存器设置为的值)

显然,在 8 位定时器上,25% 的占空比是 $100/4 = $40。

另请注意,您需要写入 TCCR0 以从计时器 0 实现相同的操作与您为几乎相同的操作写入 TCCR1 的内容完全不同 - 位位置 100% 不同。查阅数据表,我认为你弄错了。

于 2017-06-11T10:52:24.070 回答