1

我使用的是 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#

任何 10 美分的 AVR 都可以实现比这更快的 PWM。
我错过了一些技巧吗?
如果我想要比 100 HZ 更快的频率,我真的必须通过手动切换 GPIO 来创建自定义 PWM 吗?!

4

1 回答 1

2

我实际上在打开我的问题后不久就找到了解决方案。
我会把它贴在这里,因为我认为这实际上可能不仅仅是我想知道:)

PWM 频率当然不像 1GHZ 设备那样受到限制,内核驱动程序只是没有按照人们期望的方式工作。

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

所以当然你不能有一个大于整个周期的 on-period,所以它失败了。

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

于 2014-04-14T02:03:27.053 回答