2014-04-14 46 views
1

我正在使用Beaglebone而不是Beaglebone Black。Beaglebone PWM限制爲100 HZ?

我只是試圖輸出一個PWM,我預計這樣一個快速設備上的一些兆赫的潛在頻率。
我發現100HZ是我可以通過sysfs設置的確切最大值。
我開始在線挖掘示例,他們沒有提到限制,但他們也沒有顯示比100HZ更快的值。

實施例:

[email protected]:/sys/class/pwm/ehrpwm.0:0# echo 10000000 > period_ns 
[email protected]:/sys/class/pwm/ehrpwm.0:0# echo 1000000 > period_ns 
-sh: echo: write error: Invalid argument 
[email protected]:/sys/class/pwm/ehrpwm.0:0# echo 200 > period_freq 
-sh: echo: write error: Invalid argument 
[email protected]:/sys/class/pwm/ehrpwm.0:0# echo 101 > period_freq 
-sh: echo: write error: Invalid argument 
[email protected]:/sys/class/pwm/ehrpwm.0:0# echo 100 > period_freq 
[email protected]:/sys/class/pwm/ehrpwm.0:0# 

任何10cent AVR能做到比更快的PWM。
我錯過了一些訣竅嗎?
如果我想要比100HZ更快的頻率,我真的必須通過manuallz來切換GPIO來創建自定義PWM嗎?!

+0

我不確定爲什麼你想循環速率低於1赫茲。 PWM是佔空比和頻率。佔空比是1個週期中準備就緒時間到關閉時間的百分比。頻率是1秒內有多少個週期。如果超過1 pwm頻道同時運行,那麼beaglebone黑色在2000赫茲時運行效果最好,但我已經在不同頻率下運行。 –

回答

2

我剛剛在打開我的問題後才找到解決方案。
我將它張貼在這裏,因爲我認爲這實際上可能會導致更多的不只是我想知道:)

PWM頻率當然不限於這樣的1GHz的設備上,內核驅動程序只是不在工作人們期望的相同方式。

如果輸入duty_percent值(如1%),那麼駕駛員似乎只是計算duty_ns值並忘記以後的百分比。
普通用戶會認爲他處於「百分比模式」,但實際上百分比文件只是綁定到包裝上以提供幫助。
頻率相同!
如果您現在將頻率更改爲更高的值,那麼內核將檢查duty_ns週期是否適合新的total period_ns!
它忽略了你實際設置的百分比!

所以當然你不能有一個大於整個週期的開啓期,所以它失敗了。

長文本簡短的摘要:
始終設置DUTY_CYCLE爲零之前設置的,如果以前的值將不適合進入新週期的頻率,這樣就避免了挫折。

+0

爲了完整起見:我測量了最小可能的脈衝步長爲10 ns。此外,脈寬計時器具有16位分辨率。所以要注意四捨五入問題。 – Dietrich

+0

另外我認爲如果你有一個非RT操作系統(比如標準Linux),那麼使用PWM來實時工作(比如飛行控制)並不是一個好主意 我停止使用beaglebone的PWM來完成這樣的工作,它是在時間上不夠可靠。 一個好的解決方案是通過I2C或SPI或類似的方法添加一個小型AVR,並將其用於實時工作和PWM。 – John

+0

@Dietrich:你的意思是65535ns是你可以設置的最大值? – xmen