2007年4月22日 星期日

ATmega-128 的 16-Channels PWM 輸出(五)


今日我懷著滿腔熱誠去智源,打算訂購 Interface 五月號,可惜白行了一趟...,原來智源是逢星期日休息!激死!唯有明天順道到旭屋訂購!智源今次走寶,我可是訂購很多本的,呵呵~

今天R大人跟我提過有同好能利用 8051 作為馬達控制器,而 PWM 的輸出解像度為 200,亦即是說每一步少於一度!可是我找了很久也找不到這個消息的來源。

回到家,我把期待已久的設計實現出來。整個過程沒有甚麼困難,編程時也很順暢,到執行時亦達到預期的目標。在數值上,我只把 PWM 的輸出解像度提升四倍,原因是提升八倍的話,ATmega-128 便沒有時間處理其他工作,如:檢測器、邏輯...等等。出來的結果是解像度從原來的 29 個習次,提升到 90 個層次,亦即是說每加一步,角度便增加二度。這個數值已經是不錯的水平。不過,仍會看看有沒有能改進的空間。好,現在就講解「四倍提升術」的秘密吧!

這個技術的要點是每次的處理數量!在上一個版本的程式中,中斷是每 20ms 發生一次;而每次就處理十六個 PWM 訊號,迴圈共 34 次。這項工作對 ATmega-128 來說是有點吃力,使得結果出來是一步 6.2 度。基於以上原因,我把過往的設計合併,變成中斷每 5ms 發生一次;而每次就只處理四個 PWM 訊號。於是乎,在 20ms 裡使能完成 4x4 共十六個 PWM 訊號輸出!就算迴圈也是 34 次,但由於由十六個訊號減為四個,速度就會因此而提升。當然,同樣地循環 34 次是會令 PWM 訊號的時間改變,所以我也要相應地作出改變,最終數值是 60 至 149。現在,解像度便提升至一步增加二度!

由於 Amigo Striker 的程式也是同 ATmega-128 的上一個版本相同,所以,要是把這個技術也套用到 CQ7144A 上,相信速度也會有明顯的改進!至少是三倍吧!呵呵~

4 則留言:

iRobot 提到...

就目前我知道各種控制servo方法的總結。

___________________________________________
| 中斷服務 | 20ms 內 |使用 |mcu |clock |
| 內佔用的 | 中斷的 |Timer |剩餘可|servo |
| 時間 | 次數 |數目 |用時間|解像 |
|----------|---------|------|------|------|
| | | | |48MHz |
| | 1 | 2 |17.5ms|32個 |
| | | | |約379 |
| |---------|------|------|------|
| | | |略小於|11.059|
| 2.5ms | 1 | 1 |17.5ms|>16個 |
| | | | |約200 |
| |---------|------|------|------|
| | | |20 - |8MHz |
| | 多次 | 2 |(2.5x |16個 |
| | | | 中斷 |約120 |
| | | |次數) | |
|----------|---------|------|------|------|
| |與servo數| |大於 |8MHz |
| |目相同 | 1 |17.5ms|>16個 |
| | | | |約200 |
| 佷小 |---------|------|------|------|
| |與servo數| |大於 |8MHz |
| |目相同 | 1 |17.5ms|8個 |
| | | | |約200 |
|----------|---------|------|------|------|

iRobot 提到...

servo 控制方法總結。
___________________________________________
|.中斷服務.|.20ms.內.|使用..|mcu...|clock.|
|.內佔用的.|.中斷的..|Timer.|剩餘可|servo.|
|.時間.....|.次數....|數目..|用時間|解像..|
|----------|---------|------|------|------|
|..........|.........|......|......|48MHz.|
|..........|....1....|...2..|17.5ms|32個..|
|..........|.........|......|......|約379.|
|..........|---------|------|------|------|
|..........|.........|......|略小於|11.059|
|...2.5ms..|....1....|...1..|17.5ms|>16個.|
|..........|.........|......|......|約200.|
|..........|---------|------|------|------|
|..........|.........|......|20.-..|8MHz..|
|..........|...多次..|...2..|(2.5x.|16個..|
|..........|.........|......|.中斷.|約120.|
|..........|.........|......|次數).|......|
|----------|---------|------|------|------|
|..........|與servo數|......|大於..|8MHz..|
|..........|目相同...|...1..|17.5ms|>16個.|
|..........|.........|......|......|約200.|
|...佷小...|---------|------|------|------|
|..........|與servo數|......|大於..|8MHz..|
|..........|目相同...|...1..|17.5ms|8個...|
|..........|.........|......|......|約200.|
|----------|---------|------|------|------|

iRobot 提到...

噢!!仍然是移了位。不過這次複製至記事本內看便可以還原。

Pacess 提到...

3Q~