所以我有这个直流电机,我想将它的速度降低到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)
{
;
}
}
答案 0 :(得分:0)
你的问题实际上迫使我们猜测一下 - 你没有说出足够的事实来真正帮助你。所以,我猜测你正在使用快速PWM,并且猜测你正在用PWM占空比来控制电机速度。
电机频率和预分频器值实际上并不那么有趣 - 如果你想减速,你想要改变占空比,我想。
16位定时器25%的占空比是10000美元/ 4 = 4000美元(我想这就是你将16位定时器的输出比较寄存器设置为)
显然,在8位定时器上,25%的占空比是100美元/ 4 = 40美元。
还要注意你需要写入TCCR0来实现与定时器0完全相同的东西与你写入TCCR1完全不同的几乎相同的动作 - 位位置是100%不同。查阅数据表,我认为你错了。