>我正在控制带有逆变器/驱动器IC的BLDC电机进行开关工作。我需要以相同的频率为驱动器提供6个PWM信号。确切的频率并不重要,只要它在5kHz到10kHz之间并且所有PWM引脚都相同。
我目前正在使用 Arduino Uno,我不确定如何为每个 PWM 引脚(3、5、6、9、10、11)编程,频率与特定引脚的计时器(0、1 和 2)具有不同时钟速度
。- 引脚 5 和 6:由定时器0控制,基本频率 62500Hz
- 引脚 9 和 10:由定时器1控制,基本频率 31250Hz
- 引脚 11 和 3:由定时器2控制,基本频率 31250Hz
1和定时器2可以,可以按预分频器值8(7812.5Hz)缩小。不确定如何将 timer0 设置为相同的频率?
http://playground.arduino.cc/Main/TimerPWMCheatsheet
我相信解决方法相对简单。是否可以将 timer0 的频率除以一个不是预分频器值的数字,例如 40?
提前谢谢。
帕特。
您还没有包括电机控制器的芯片编号,但我很确定您无法使用六个不同的计时器实现您想要的效果。问题在于,不同引脚上的PWM都必须同步,而不仅仅是在适当的时间内打开和关闭。
相反,您应该使用单个计时器,并在正确的同步时切换所有输出。本页在"位敲击脉冲宽度调制"一节中有一个示例的开头。您必须修改它以切换更多引脚。
这个例子可能仍然不够好。相反,您应该使用中断服务例程来切换引脚。这样,PWM可以更独立地运行,并允许环路功能做更多的事情。
您的例程将附加到定时器上的输出比较中断,并且您必须将各种PWM输出的值保留在某些易失性变量中。输出比较寄存器将设置为唤醒以进行下一次切换。当例程运行时,它将执行切换并为切换设置输出比较寄存器。定时和同步的详细信息将取决于控制器的数据表。
回路功能可以读取输入并调整易失变量以改变电机速度。
也有电机驱动器可以为您完成所有这些工作。您所要做的就是提供方向和速度,芯片会为您创建 6 个 PWM。