Skip to main content
embedded motor pwm
0: // ... 1: 2: void interrupt TimerISR_for_PWM() 3: { 4: // ... 5: 6: for (i=0; i 7: if (cycle[i] < DutyCycle[i]) 8: PWM[i] = HI; 9: else 10: PWM[i] = LOW; 11: 12: ++cycle[i]; 13: cycle[i] %= Period[i]; 14: } 15: } 16: 17: // ...
0: // PWM software delay version (for servo) 1: // ... 2: int main() 3: { 4: // ... 5: for (;;) { 6: for (i=0; i
To Top
Start a New Topic » « Back to the Robotics group
標題: 「單」晶片控制多組 PWMs
時間: Sun Dec 10 01:58:02 2006
有興趣的話,可以參考看看傳統 uC 製造多組 PWM 的方法:
http://www.robofun.net/forum/viewthread.php?tid=529&extra=page%3D1
它這個例子是用來控制兩組 dc motor 。
類似的概念,要控制多組 servo 問題也不大:
以幾 MHz 的 clock 來產生多個 ms 級的 PWM 控制,不會有太大問題。
基本概念就是用一個 timer ,在其 ISR 內累計多組 PWM 的
total cycle 並和 duty cycle 比較後據以切換 GPIO 的 Hi/Low...
虛擬碼如下:
※ 引述《happosai (八方齋)》之銘言:
> 雖然有打廣告的嫌疑,不過這顆 FPPA 用來做機器人
> 真的很容易上手,下面是一些範例:
> http://chamberplus.myweb.hinet.net/fppa_sa4.htm
> http://chamberplus.myweb.hinet.net/fppa_sa7.htm
> http://chamberplus.myweb.hinet.net/fppa_sa8.htm
> 用兩顆CPU就可以控制9組PWM訊號,所以保守估計是
> 總共可以控制 9 * 4 = 36 組 PWM!除此之外可以
> 留一兩顆做通訊,這樣就可以用高速 DSP 或是 ARM
> 做機械視覺,然後控制的部分交給 FPPA,就可以做出很
> 複雜的機器人了...:)
--
┌─────◆程式設計樂園◆─────┐
│ CSZone.kkcity.com.tw │
└──《From:203.70.78.126 》──┘
--
標題: Re: 「單」晶片控制多組 PWMs
時間: Sun Dec 10 16:21:33 2006
※ 引述《ykjiang (York)》之銘言:
> 相較之下, FPPA 雖不必動用 timer ,但其對 PWM 的 period
> 要用到「週期計算」的技巧,得用 assmbly 的角度,估算每個
> instruction 在 run time 要佔用多少 machine cycles 。
> 換句話說,在無法使用 timer 時, FFPA 這種多處理機的作法
> ,在實務上就顯得很必要。
> timer 對 "single" chip 來說,是個很必要的發明,許多乍看
> 之下需要 multi-processor 來處理的場合,都可以利用 timer
> ,輔以 single-interrupt-driven 的架構,而解決泰半。
嗯,基本上還是得在程式上調教。FFPA有他的硬體優勢。從我注意到FPPA的
出現到現在,除了Chamber大在他的網頁上也很多應用外, 事實上真的要讓
我去導入這種產品,說實話很難!(主觀意見)。加上在8、16bits 的uC應用
,以PWM為例,很多公司的uC都有內建PWM 模組,設定完後直接硬體產生 。
是否要這樣辛苦去維護產生 PWM的程式碼?在數位類比混合應用,沒有AD的
週邊我就懶了。
用timer中斷分配工作需要導入RTOS的觀念,一旦用到RTOS ,除非觸發時隔
對於每個task的及時性要求能滿足。不然還是FPPA解決是比較恰當,不過現
在FPGA導入software IP 之後,FPPA似乎只剩低階應用的這塊,而這塊,各
家uC的開發環境發展成熟度又高於FPPA,即使這東西硬體架構優良,我仍然
不會推薦我的雇主們使用這solution。
例如dsPIC30F6010A就有8組Output Compare可以產生8通道的PWM信號以及 8
channel 專門給馬達控制用的PWM模組以及QEI介面,分擔uC本身的工作,主
程式只要設定好,這些PWM產就由硬體負擔,核心程式可以進行Fuzzy或是PID
這些需要花時間計算的工作,以及透過外部類比感測器(加速規?..等)的信
號經過A/D 轉換pass給uC作其他的調整或是計算的參數。當然!若只是要控
制DC Servo,那用那個uC就不重要了(反正PWM頻率才50Hz)
上面的例子。51 或FPPA能辦到嗎?當然可以!只是效益/成本比較下,誰合
算還要再case by case去計算!
標題: Re: 「單」晶片控制多組 PWMs
時間: Sun Dec 10 17:01:44 2006
前述用 timer 中斷產生多組 PWM 的作法,預設就不該和 RTOS 混用,
否則會產生你提的問題。
更嚴謹地說,這種用法要求整個系統只能有一個中斷,也就是產生 PWM
的這個 timer 。所以才稱為 single-interrupt-driven 的架構。
其原理跟《Patterns for Time Triggered Embedded Systems》中提出
的 kernel 是類似的。
如果這稱得上 multi-tasking 的話,應該歸類到 co-operative 式的多
工。
※ 引述《MasterChang (我愛ASM)》之銘言:
> 嗯,基本上還是得在程式上調教。FFPA有他的硬體優勢。從我注意到FPPA的
> 出現到現在,除了Chamber大在他的網頁上也很多應用外, 事實上真的要讓
> 我去導入這種產品,說實話很難!(主觀意見)。加上在8、16bits 的uC應用
> ,以PWM為例,很多公司的uC都有內建PWM 模組,設定完後直接硬體產生 。
> 是否要這樣辛苦去維護產生 PWM的程式碼?在數位類比混合應用,沒有AD的
> 週邊我就懶了。
> 用timer中斷分配工作需要導入RTOS的觀念,一旦用到RTOS ,除非觸發時隔
> 對於每個task的及時性要求能滿足。不然還是FPPA解決是比較恰當,不過現
> 在FPGA導入software IP 之後,FPPA似乎只剩低階應用的這塊,而這塊,各
> 家uC的開發環境發展成熟度又高於FPPA,即使這東西硬體架構優良,我仍然
> 不會推薦我的雇主們使用這solution。
> 例如dsPIC30F6010A就有8組Output Compare可以產生8通道的PWM信號以及 8
> channel 專門給馬達控制用的PWM模組以及QEI介面,分擔uC本身的工作,主
> 程式只要設定好,這些PWM產就由硬體負擔,核心程式可以進行Fuzzy或是PID
> 這些需要花時間計算的工作,以及透過外部類比感測器(加速規?..等)的信
> 號經過A/D 轉換pass給uC作其他的調整或是計算的參數。當然!若只是要控
> 制DC Servo,那用那個uC就不重要了(反正PWM頻率才50Hz)
> 上面的例子。51 或FPPA能辦到嗎?當然可以!只是效益/成本比較下,誰合
> 算還要再case by case去計算!
標題: Re: 「單」晶片控制多組 PWMs
時間: Sun Dec 10 23:37:24 2006
※ 引述《ykjiang (York)》之銘言:
> 前述用 timer 中斷產生多組 PWM 的作法,預設就不該和 RTOS 混用,
> 否則會產生你提的問題。
所以我說要Case by Case的去計算評估。
用Timer中斷產生的多組PWM,您提供鏈結中,PWM寬度是用軟體Delay產
生,在Delay()呼叫時,什麼工作都不用作了。PWM只有2通道,PWM頻率
是91Hz,所以在產生寬度中需要耗費多少uC資源?其實大部分是被軟體
Delay吃掉了。這個你可以透過KeilC51的資源檢視器來作簡單的觀察。
透過RTOS的協助你可以確認透過RTOS管理的Delay 的精度,比如你有一
個RTOS管理的Delayms(10);你就可以知道他會Delay 10ms然後誤差是多
少Ticks。如果這個誤差不會影響到RC馬達的控制( 比如1ms和1.01ms的
差異)那就可以放心用。而不是像軟體Dealy一樣, Delay一被呼叫,其
他工作得停擺。
不過這種東西,還是用硬體完成比較好。因為不管怎樣就是要吃為數不
少的CPU資源。若uC只作這工作,那就不用擔心。 但是通常通訊介面跑
不掉(總要控制DC馬達速度吧?或是RC馬達的角度...^_^)
> 更嚴謹地說,這種用法要求整個系統只能有一個中斷,也就是產生 PWM
> 的這個 timer 。所以才稱為 single-interrupt-driven 的架構。
> 其原理跟《Patterns for Time Triggered Embedded Systems》中提出
> 的 kernel 是類似的。
> 如果這稱得上 multi-tasking 的話,應該歸類到 co-operative 式的多
> 工。
不管是協同式多工還是優先權式多工,回應時間的及時性是比較需要考
慮,只要能符合你的case所要求的及時性,用那個都應該可以。
由於本人不是資訊本科出身的,對於OS的瞭解也是到幾年前自己真的照
uC/OS II的書的教學流程試著寫一個很陽春型51用的RTOS,加上去Trace
FreeRTOS 的source code,並且把別人Port到PIC上的code 好好的花時
間追完,才想說對RTOS總算有一點點感覺,真的覺得還是要一邊看書,
一邊實作,才能真正對RTOS得到書中沒有提到的經驗。而且這比 Linux
好追多了...呵呵。
--
┌─────◆程式設計樂園◆─────┐
│ CSZone.kkcity.com.tw │
└──《From:211.74.242.156 》──┘
--
推 ykjiang:現在才發現它用 delay 的方式來造 PWM 寬度 :p [12/11]
→ ykjiang:所以我在前述虛擬碼提供的作法應該比較恰當 :) [12/11]
→ happosai:我用FPPA軟體造出10us的精度,這要用RTOS就很難了 [12/11]
→ happosai:甚至可以達到5us,做到0.5度的精度(遙控飛機用伺服馬達) [12/11]
推 happosai:而且訊號穩定不受干擾,因為完全沒用到中斷,呵呵~ [12/11]
推 happosai:其實FPPA就是一種硬體化的RTOS,反而跟P4雙核心的觀念不同 [12/11]
推 ykjiang:這也是我在 18 篇提的 timer 法的明顯限制, [12/12]
→ ykjiang:要提高精度,就得加快 clock... [12/12]
→ ykjiang:更精確地講,要縮短 tick 的間隔,但還是有個極限。 [12/12]
→ happosai:這也是我在RTOS那篇文章講的重點 [12/13]
→ happosai:假如核心數夠多,基本上RTOS並不是必備的東西 [12/13]
→ happosai:chamber老大常講假如先發明多核心就不會發明中斷了...:Q [12/13]
推 happosai:再提一下servo本身就有+/-10度的誤差,所以1度比誤差還小 [12/13]
推 ykjiang:推 chamber 大那句話,雖覺得有點言過其實,但值得深思 [12/13]
推 ykjiang:突然打通任督二脈,現在的我,完全贊成 Chamber 的說法。 [01/25]
→ ykjiang:過陣子找個時間,好好研究一下 FPPA [01/25]
→ ykjiang:我還不確定 FPPA 的指令,可否用來實現剛剛這個想法。 [01/25]
標題: Re: 「單」晶片控制多組 PWMs
時間: Sun Dec 10 23:52:18 2006
※ 引述《MasterChang (我愛ASM)》之銘言:
> ※ 引述《ykjiang (York)》之銘言:
> > 相較之下, FPPA 雖不必動用 timer ,但其對 PWM 的 period
> > 要用到「週期計算」的技巧,得用 assmbly 的角度,估算每個
> > instruction 在 run time 要佔用多少 machine cycles 。
> > 換句話說,在無法使用 timer 時, FFPA 這種多處理機的作法
> > ,在實務上就顯得很必要。
> > timer 對 "single" chip 來說,是個很必要的發明,許多乍看
> > 之下需要 multi-processor 來處理的場合,都可以利用 timer
> > ,輔以 single-interrupt-driven 的架構,而解決泰半。
> 嗯,基本上還是得在程式上調教。FFPA有他的硬體優勢。從我注意到FPPA的
> 出現到現在,除了Chamber大在他的網頁上也很多應用外, 事實上真的要讓
> 我去導入這種產品,說實話很難!(主觀意見)。加上在8、16bits 的uC應用
> ,以PWM為例,很多公司的uC都有內建PWM 模組,設定完後直接硬體產生 。
> 是否要這樣辛苦去維護產生 PWM的程式碼?在數位類比混合應用,沒有AD的
> 週邊我就懶了。
其實用 FPPA 產生 PWM 訊號一點都不難,因為那一顆CPU就只負責
產生PWM訊號,講白一點都是死迴圈,真正 update PWM 是另外一顆
負責,所以程式寫起來很輕鬆,因為我正好剛寫完XD
我同事之前連8051也沒學過,也是很快就上手了,更不用說
各位有經驗的大大...^^
> 用timer中斷分配工作需要導入RTOS的觀念,一旦用到RTOS ,除非觸發時隔
> 對於每個task的及時性要求能滿足。不然還是FPPA解決是比較恰當,不過現
> 在FPGA導入software IP 之後,FPPA似乎只剩低階應用的這塊,而這塊,各
> 家uC的開發環境發展成熟度又高於FPPA,即使這東西硬體架構優良,我仍然
> 不會推薦我的雇主們使用這solution。
已經有廠商採用了,抱歉BBS上我不能透露太多,而且國內外有興趣的公司
非常多。找個時間到新竹跟Chamber 聊聊,或許大大您會有不同的看法...:)
現在比較欠缺的就是 C compiler,不過話說回來8051 & PIC 用 asm 寫的
人也很多,這一點到是見人見智
> 例如dsPIC30F6010A就有8組Output Compare可以產生8通道的PWM信號以及 8
> channel 專門給馬達控制用的PWM模組以及QEI介面,分擔uC本身的工作,主
> 程式只要設定好,這些PWM產就由硬體負擔,核心程式可以進行Fuzzy或是PID
> 這些需要花時間計算的工作,以及透過外部類比感測器(加速規?..等)的信
> 號經過A/D 轉換pass給uC作其他的調整或是計算的參數。當然!若只是要控
> 制DC Servo,那用那個uC就不重要了(反正PWM頻率才50Hz)
> 上面的例子。51 或FPPA能辦到嗎?當然可以!只是效益/成本比較下,誰合
> 算還要再case by case去計算!
FPPA 有點逆向思考的味道,現在的主流-SoC 大家都是依照專案需要
找一顆週邊符合需要的uC來用,但是 FPPA 卻是用軟體造週邊,用堆積木
的方式組合。不過講成本的話 FPPA 一定比 PIC 低,用硬體作週邊 gate
count 變多 IC 成本增高,當然也會賣貴一點,而且還會有庫存的問題,
買太多用不完怎麼辦?或者要是沒多久 phase-out 怎麼辦?這可能都是要
考量的問題...
標題: Re: 「單」晶片控制多組 PWMs
時間: Mon Dec 11 01:08:23 2006
※ 引述《happosai (八方齋)》之銘言:
> 已經有廠商採用了,抱歉BBS上我不能透露太多,而且國內外有興趣的公司
> 非常多。找個時間到新竹跟Chamber 聊聊,或許大大您會有不同的看法...:)
> 現在比較欠缺的就是 C compiler,不過話說回來8051 & PIC 用 asm 寫的
> 人也很多,這一點到是見人見智
這樣公司的態度似乎不太OPEN。呵呵....開玩笑的。
因為FPPA的資訊除了Chamber大的網頁,現在連應廣的網站我也
找不到了...Orz
> FPPA 有點逆向思考的味道,現在的主流-SoC 大家都是依照專案需要
> 找一顆週邊符合需要的uC來用,但是 FPPA 卻是用軟體造週邊,用堆積木
> 的方式組合。不過講成本的話 FPPA 一定比 PIC 低,用硬體作週邊 gate
> count 變多 IC 成本增高,當然也會賣貴一點,而且還會有庫存的問題,
> 買太多用不完怎麼辦?或者要是沒多久 phase-out 怎麼辦?這可能都是要
> 考量的問題...
uC這種東西根據case應用不同,誰優誰劣其實說不準。
專案開發及後續維護成本,不是光比uC單價是否便宜,事實上量大
就便宜、維護容易就會便宜、開發環境單純就會便宜、開發期程短
也會便宜,導入時程短也會便宜,週邊效益高也會便宜... 等變數
滿多的。
專案成本要把「人」、「時」、「資金」放在一起看才比較反應的
出來真正成本。所以我很主觀的會講不會推薦雇主用這個整體風險
評估較高的選項。畢竟要賣產品的公司,如果資訊不容易取得,資
訊不透明,那要用的意願就降低了。再作專案評估時,貴公司產品
的風險評估指數就不好看了。
好像有點講FPPA的壞話...見諒。
不過我真的很想用國產品,也期待FPPA的後續發展。能不能建議貴
公司把網站充實一下,連東西都看不到,我就不會很想去問。老是
靠Chamber大撐場也太辛苦囉!!^_^
--
┌─────◆程式設計樂園◆─────┐
│ CSZone.kkcity.com.tw │
└──《From: 211.74.242.156 》──┘
--
推 ykjiang:賣 chip 跟賣糖果一樣,要以量取勝 :) [12/11]
→ MasterChang:推一樓的糖果論.... [12/11]
推 happosai: http://www.padauk.com.tw/padauk/ [12/11]
推 happosai:我上次也有轉給ykjiang看,不過連不上去 [12/11]
→ happosai:不是資訊不公開,而是網頁外包公司實在是@#$!@$# [12/11]
推 happosai:有興趣可以把mail給我,我可以寄一些資料過去...^^ [12/11]
→ ykjiang:還是連不進去耶 =.=" [12/11]
推 happosai:不過話說回來的確不少人是看了他的網站有興趣跑來公司談 [12/11]
→ happosai:application note已經累積不少篇了,相信近期就能公開 [12/11]
→ happosai:今天請示過chamber老大有些東西可以先給各位瞧瞧 [12/11]
推 happosai:有興趣可以找我要...:D [12/11]
標題: Re: 「單」晶片控制多組 PWMs
時間: Mon Dec 11 02:44:45 2006
※ 引述《happosai (八方齋)》之銘言:
> 其實用 FPPA 產生 PWM 訊號一點都不難,因為那一顆CPU就只負責
> 產生PWM訊號,講白一點都是死迴圈,真正 update PWM 是另外一顆
> 負責,所以程式寫起來很輕鬆,因為我正好剛寫完XD
> 我同事之前連8051也沒學過,也是很快就上手了,更不用說
> 各位有經驗的大大...^^
雖然單就每一小程式片段,都不難,
但以整個系統來看,複雜度就會增加很多,
這也是現在軟體發展急需解決的問題。
> FPPA 有點逆向思考的味道,現在的主流-SoC 大家都是依照專案需要
> 找一顆週邊符合需要的uC來用,但是 FPPA 卻是用軟體造週邊,用堆積木
> 的方式組合。不過講成本的話 FPPA 一定比 PIC 低,用硬體作週邊 gate
> count 變多 IC 成本增高,當然也會賣貴一點,而且還會有庫存的問題,
> 買太多用不完怎麼辦?或者要是沒多久 phase-out 怎麼辦?這可能都是要
> 考量的問題...
我比較欣賞的也是 FPPA 這種軟體造週邊、堆積木組合的概念。
不過這方面最好能有方便的開發環境支持,把積木備妥,等人來堆 :)
--
┌─────◆程式設計樂園◆─────┐
│ CSZone.kkcity.com.tw │
└──《From:61.59.233.45 》──┘
--
推 MasterChang:happosai說有IDE和ICE了,只是不知道價錢漂不漂亮... [12/11]
→ MasterChang:參考文件只有chamber大的網站....加把勁!!^_^ [12/11]
推 happosai:外國客戶也是在叫網路上都找不到公司的資訊...囧 [12/11]
→ happosai:所以真的要慎選網頁外包公司...= = [12/11]
推 happosai:價錢絕對讓您滿意~XD [12/11]
標題: Re: 「單」晶片控制多組 PWMs
時間: Mon Dec 11 22:21:14 2006
※ 引述《happosai (八方齋)》之銘言:
> ※ 引述《MasterChang (我愛ASM)》之銘言:
> 現在比較欠缺的就是 C compiler,不過話說回來8051 & PIC 用 asm 寫的
51?? 可以用sdcc compiler
不過有點濫 因為有SIZE限制
另外他也不會把整個calling path的 stack會不會超過51可用的
<假設只有256 bytes>.
這是很久以前有玩過的 也許現在都FIXED了
另外關於motor control 其實比較有技術性的在於
系統的精度控制 而精度控制本身跟介質摩擦/數位精度/馬達本身輸出
gear ratio/gain/belt 等等機電系統所造成PWM於系統中呈現的非線性控制比較難
--
┌─────◆程式設計樂園◆─────┐
│ CSZone.kkcity.com.tw │
└──《From:220.135.131.242 》──┘
--
推 ykjiang: 51 最好的 compiler 是 Keil C ,不過這是要錢的... [12/12]
推 ykjiang:要解決雜訊問題,無論軟、硬體,都有很多眉角可以玩 :) [12/12]
→ happosai:順便一提FPPA本身已經具備超強抗雜訊能力 [12/13]
→ happosai:這也是為甚麼chamber有辦法設計出CDI點火器 [12/13]
標題: Re: 「單」晶片控制多組 PWMs
時間: Wed Dec 13 00:17:04 2006
※ 引述《happosai (八方齋)》之銘言:
> 其實用 FPPA 產生 PWM 訊號一點都不難,因為那一顆CPU就只負責
> 產生PWM訊號,講白一點都是死迴圈,真正 update PWM 是另外一顆
> 負責,所以程式寫起來很輕鬆,因為我正好剛寫完XD
> 我同事之前連8051也沒學過,也是很快就上手了,更不用說
> 各位有經驗的大大...^^
我相信你們是採用類似下列虛擬碼的作法:
類似的作法比較是為 servo 這類的控制訊號量身訂做的。
其 pulse width 的精度(precision)較高,
但產生的 PWM 不夠一般化:
1. 其要求每個 PWM 的 Period 都要一樣,
2. 在 duty cycle 太大時,可控制的 PWM 組數減少。
話說回來, uC 原本來就是用在量身訂做的場合 :)
--
┌─────◆程式設計樂園◆─────┐
│ CSZone.kkcity.com.tw │
└──《From:203.70.105.134 》──┘
--
→ ykjiang:嗯,過陣子較閒時,再把這幾種方法整理整理 :) [12/13]
推 happosai:組數變小到不一定,要看週期的長度 [12/13]
→ happosai:因為最近也寫完一個PWM LED的範例,他的pulse width就 [12/13]
→ happosai:很大(相對於週期) [12/13]
→ happosai:真正決定組數要把核心頻率與PWM週期考慮進去 [12/13]
推 happosai:假如要在一顆核心裡產生不同週期的PWM的確是個挑戰 [12/13]
→ ykjiang:PWM用在LED跟DC motor類似,都用來調整功率(有效電壓) [12/13]
→ ykjiang:限制條件就是 PERIOD - INNATE_DELAY - pulse_delay >= 0 [12/14]
→ ykjiang:而 INNATE_DELAY 則視核心頻率及 code 最佳化情形來給定 [12/14]
→ ykjiang:今天作了簡單的整理 http://tinyurl.com/yhj3tv [12/16]
To Top