Arduino在所有PWM引脚上的频率相同

时间:2014-11-20 02:25:03

标签: arduino arduino-uno pwm motordriver

我正在控制带逆变器/驱动器IC的BLDC电机进行切换工作。 我需要为同一频率的驱动器提供6个PWM信号。确切的频率并不重要,只要它在5kHz到10kHz之间并且所有的PWM引脚都是相同的。

我目前正在使用Arduino Uno,我不知道如何编程每个PWM引脚(3,5,6,9,10,11)的频率与定时器的频率相同(0 ,1和2)特定引脚具有不同的时钟速度。

  • 引脚5和6:由timer0控制,基频62500Hz
  • 引脚9和10:由timer1控制,基频31250Hz
  • 引脚11和3:由timer2控制,基频31250Hz

timer1和timer2就可以了,可以通过预分频器值8(7812.5Hz)按比例缩小。不知道如何让timer0达到相同的频率?

http://playground.arduino.cc/Main/TimerPWMCheatsheet

我确定解决方法相对简单。是否可以将timer0的频率除以一个不是预分频值的数字,比如40?

提前致谢。

专利

1 个答案:

答案 0 :(得分:0)

您没有包含电机控制器的芯片编号,但我很确定您无法通过六个不同的计时器实现您想要的功能。问题是不同引脚上的PWM都必须同步,而不是只在适当的时间内打开和关闭。

相反,您应该使用单个计时器并在正确的同步时切换所有输出。这个page在“比特脉冲宽度调制”一节中有一个例子的开头。您必须修改它才能切换更多针脚。

这个例子可能还不够好。相反,您应该使用中断服务程序来切换引脚。这样,PWM运行更加独立,并允许循环功能做更多。

您的例程将附加到定时器的输出比较中断,您必须将各种PWM输出的值保存在某些易失性变量中。输出比较寄存器将被设置为在下一个切换时唤醒。例程运行时,它将执行切换并设置切换的输出比较寄存器。时序和同步的细节取决于控制器的数据表。

循环功能可以读取输入并调整易失性变量以改变电机速度。

还有一些马达驱动程序可以为您完成所有这些工作。您所要做的就是提供方向和速度,芯片为您创建6个PWM。