Beaglebone PWM限制在100 HZ?

时间:2014-04-14 01:50:31

标签: beagleboneblack pwm

我使用的是Beaglebone而不是Beaglebone Black。

我只是试图输出一个PWM,我期望在这样一个快速的设备上有一些兆赫的潜在频率 我发现100HZ是我可以通过sysfs设置的最大值 我开始在网上挖掘示例,他们没有提到限制,但他们也没有显示比100HZ更快的值。

示例:

root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 10000000 >  period_ns 
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 1000000 >  period_ns 
-sh: echo: write error: Invalid argument
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 200 >  period_freq 
-sh: echo: write error: Invalid argument
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 101 >  period_freq 
-sh: echo: write error: Invalid argument
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 100 >  period_freq 
root@beaglebone:/sys/class/pwm/ehrpwm.0:0#

任何10cent AVR都可以做到比这更快的PWM 我错过了一些技巧吗? 如果我想要比100 HZ更快的频率,我真的必须通过manuallz切换GPIO来创建自定义PWM吗?

1 个答案:

答案 0 :(得分:2)

我在打开问题后不久就找到了解决方案 我会在这里发布,因为我认为这实际上可能不仅仅是让我怀疑:)

PWM频率当然不限于1GHZ器件上的频率,内核驱动器的工作方式与人们预期的不同。

如果你输入一个duty_percent值(比如1%),那么驱动程序似乎只是从中计算出duty_ns值而忘记了之后的百分比。
普通用户会认为他处于"百分比模式"但实际上百分比文件只是绑定到一个包装器来帮助 频率相同!
如果您现在将频率更改为更高的值,那么内核会检查duty_ns循环周期是否适合新的total_ns!
它忽略了你实际上设置了一个百分比!

所以当然你不能有一个大于整个时期的开期,所以它失败了。

长文简短摘要:
始终将duty_cycle设置为零在设置频率之前,如果之前的值不适合新的时间段,这可以避免挫败感。