Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
所有PWM引脚上的Arduino Uno频率相同_Arduino_Arduino Uno_Pwm_Motordriver - Fatal编程技术网

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

所有PWM引脚上的Arduino Uno频率相同,arduino,arduino-uno,pwm,motordriver,Arduino,Arduino Uno,Pwm,Motordriver,我用一个逆变器/驱动IC控制一个无刷直流电机,做开关工作。 我需要为驱动器提供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和定时器

我用一个逆变器/驱动IC控制一个无刷直流电机,做开关工作。 我需要为驱动器提供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进行缩小。不知道如何使定时器0达到相同的频率

我相信解决方法相对简单。有没有可能将计时器0的频率除以一个不是预分频器值的数字,比如40

提前谢谢


帕特

您还没有包括电机控制器的芯片号,但我敢肯定,使用六个不同的定时器,您将无法实现所需的功能。问题在于,不同引脚上的PWM都必须同步,而不仅仅是在适当的时间内开关

相反,您应该使用一个计时器,并在正确的同步状态下切换所有输出。这是在“位碰撞脉冲宽度调制”部分中的一个示例的开始。您必须对其进行修改以切换更多管脚

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

您的例程将连接到定时器上的输出比较中断,您必须将各种PWM输出的值保留在一些易失性变量中。输出比较寄存器将设置为在下一次切换时唤醒。当例程运行时,它将执行切换并设置切换的输出比较寄存器。定时和同步的详细信息将取决于控制器的数据表

回路功能可以读取输入并调整可变变量以改变电机转速


也有汽车司机为你做这一切。你所要做的就是提供方向和速度,芯片为你创建6个PWM。

谢谢你回答UncleO,这是我的一个爱好,我正在尝试为电动滑板构建一个电子速度控制器。我用的是STGIPS20K60。关于3个不同定时器上6个不同引脚的同步问题,您可能是对的。我会想,像这样的事情以前已经做过很多次了。我会做更多的研究,然后再给你回复。@Pato88 Atmel有一些源代码,但可能需要修改才能在Uno上工作。是要查看的文档和源代码列表,包括此和。如果所有管脚上都需要相同的信号,为什么不只使用一个管脚?