→ lion21:1.你怎會開IE0中斷?2.T1執行週期太短.小於PWM副程式時間 08/04 23:00
IE=0x92=1001,1010(Bin) IE.0是停用的
※ 編輯: deo2000 來自: 140.122.167.217 (08/05 02:53)
把 PWM_PerCycle() 改寫成 Timer0 的中斷副程式,而不用垂詢,就可用UART控制Duty了
http://pastie.org/4391162
但還是有個不懂的地方.這個新程式輸出 PWM 週期應該是
10us中斷一次*10解析度=100us(Rx都沒收到東西的話)
f應該是10kHz,但是實際上看電路動作,目測大約10Hz,
馬達整個抖得很厲害,直流馬達跑得像步進馬達一樣,是哪裡出問題呢?
※ 編輯: deo2000 來自: 140.122.167.217 (08/05 06:13)
→ lion21:IE0是我看錯.但是 0x92的bin應該是 1001-0010 08/05 15:40
→ lion21:&& buf<=0x39 .&& buf<=0x46 好像是多餘的 08/05 15:44
→ lion21:buf 的計算很詭異 08/05 15:45
→ lion21:0x30<=buf 應該是 >= 08/05 15:46
→ lion21:重點應該是 10us中斷一次 太短.你的中斷程式一定超過10us 08/05 15:47
請問執行時間怎麼看呢?
是翻譯成組合語言後,對照原廠規格,每個指令需要1或2個機器週期嗎?
※ 編輯: deo2000 來自: 140.122.167.217 (08/05 17:20)
推 lion21:你說的是一種方法.我都是用示波器看. 08/05 17:23
→ lion21:其實你大約算看看就知道了. 08/05 17:23
推 WolfLord:8051在11.059MHZ下10uS只有9個M Cycle,扣掉中斷的兩個週 08/05 23:32
→ WolfLord:期以及反還的2個週期你只剩五個一週指令可以用喔 08/05 23:33
推 WolfLord:1.馬達對於頻率反應並不快,你不需要這麼高的頻率 08/06 07:45
→ WolfLord:2.你不可以用TA7279AP來驅動,因為認一端截止都會變成 08/06 07:46
→ WolfLord:電磁煞車(只要你關閉馬達,包括PWM訊號的OFF)你發抖的 08/06 07:46
→ WolfLord:原因是因為你的PWM變成電磁煞車。改用L298,把PWM接到 08/06 07:47
→ WolfLord:EN 訊號去。然後停車時PWM為FULL(電磁煞車) 08/06 07:48
→ WolfLord: 任一端截止 08/06 07:49
推 WolfLord:3.建議時鐘改22.1184,然後TH0改成0x80 08/06 07:52
→ WolfLord:4.SERIAL(232)不要用中斷(會撞到T0)用MAIN LOOP 08/06 07:53
TA7279AP 要兩個輸入都 Hi 才會變成煞車,其他三個狀態是 正 反 空檔
目前測試結果,TA7279AP的確對PWM會有響應.
目前遇到最大的問題是:不管怎麼寫,寫出來的 PWM 頻率總是比理論上低很多
例如 200uS中斷一次*100解析度=20mS一周,但實際上一周卻有好幾秒
而且,把 PWM 中斷函式 的計時從 1~256uS 發現輸出都差不多,大約10Hz;
但是單獨用 Timer 中斷寫一個 LED 閃爍程式卻沒錯誤.
我觀察到的抖動原因,認為是頻率過低,而不是煞車;
因為我同時把訊號輸出到 P0 和 P1,一個馬達,另一個LED,
從 LED 觀測訊號可以避掉馬達的一些效應.
至於你建議的方法1.3.4.我會試看看
最近為了這個身心俱疲,找了一堆書,發現寫的應用例子都差不多,而且PWM部分很淺
※ 編輯: deo2000 來自: 140.122.167.217 (08/06 08:41)
→ WolfLord:TA7279 沒有高阻抗狀態,不管你拉LOW或HIGH只要兩端一樣 08/06 08:39
→ WolfLord:都是電磁煞車狀態 08/06 08:39
剛剛看datasheet確認是有
http://pdf1.alldatasheet.com/datasheet-pdf/view/31270/TOSHIBA/TA7279AP.html
page 4
※ 編輯: deo2000 來自: 140.122.167.217 (08/06 08:44)
推 WolfLord:那你就繼續用吧,不過你如果堅持要用TA7279你就得繼續跟 08/06 08:48
→ WolfLord:MCU的指令速度跟頻率格鬥,而且也沒辦法使用硬體PWM 08/06 08:49
照你說的,拿掉 interrupt 4 之後,預期的頻率就出來了!
※ 編輯: deo2000 來自: 140.122.167.217 (08/06 08:52)
推 WolfLord:@所以,結果就是你中斷打架,彼此吃掉對方的CPU週期嘛 08/06 08:55
→ WolfLord:你要使用TA7279你的中斷內IO動作就多,不要期待頻率太高 08/06 08:57
→ WolfLord:不然CPU跑不完中斷你就等著堆疊大錯亂 XDD 08/06 08:57
推 Deltaguita:怕中斷打架的話 可以考慮硬體PWM的MCU 08/06 09:02
推 lion21:如果你堅持目前架構.問題就在你的中斷副程式太肥了 08/06 10:14
推 WolfLord:他的硬體架構要用硬體PWM恐怕問題還很大哩 :P 08/06 17:44
剛剛看 datasheet,L298似乎邏輯較簡單,對PWM響應會比較好?
※ 編輯: deo2000 來自: 140.122.167.217 (08/06 18:22)
推 WolfLord:因為他可以PWM是PWM,方向是方向。所以你產生PWM的中斷 08/06 20:48
→ WolfLord:函式就可以精簡。中斷函式精簡你就比較不用跟CPU的指令 08/06 20:49
→ WolfLord:週期葛葛纏,剪不斷理還亂。而且L298還有提供過載檢知, 08/06 20:51
→ WolfLord:你的驅動電路可以簡單的做得更完善。 08/06 20:51
推 WolfLord:你想用硬體PWM,硬體的PWM也是單獨輸出,你方向跟PWM還得 08/06 20:54
→ WolfLord:做外部電路整合,單靠TA7279你是無法整合硬體PWM產生器的 08/06 20:55
推 ksmrt0123:TA7279比L298簡單也更適合PWM, 只是power小 08/06 23:55
Power小沒關係,負載只有webcam.
可以問一下,為什麼更適合PWM呢? 我看TA7279的 input 到 H-橋 中間還有一塊未知電路
→ WolfLord:你要靠不段變換輸出狀態嗎? 還是外接一個電源控制晶體? 08/07 00:14
本來有想過用PWM接 P-MOS 或 PNP,但是覺得這樣電路會太複雜
※ 編輯: deo2000 來自: 140.122.167.217 (08/07 01:56)
推 WolfLord:不管你要接PN晶體來世MOS,從+端控制只要馬達跟邏輯電壓 08/07 02:35
→ WolfLord:不一樣,LEVEL SHIFT都不會是太簡單的電路(要懂類比) 08/07 02:36
→ WolfLord: 還是 08/07 02:36
→ WolfLord:所以我還是覺得L298比較好用 ^.^ 08/07 02:37
推 ksmrt0123:TA7279AP因為有高阻抗狀態比較適合PWM控制 08/07 09:32
推 WolfLord:把L298的EN拉道地現她就自然高阻抗了,要PWM直接送EN就好 08/07 15:07
→ WolfLord:了,你用TA7279你還要花中斷內CPU時間改變兩個輸出狀態 08/07 15:08
→ WolfLord:而且為了等一下要還原你還得保存剛剛的狀態。這對於CPU 08/07 15:09
→ WolfLord:TIME不高的標準51哪裡佔優勢了? 08/07 15:09
→ WolfLord: 拉到地線 08/07 15:10
→ WolfLord:然後你不滿意還可以從L298的ISENSE(電流監測腳)對它進 08/07 15:12
→ WolfLord:行外加一個MOS或NPN晶體的CE PWM控制。我怎麼覺得日本IC 08/07 15:13
→ WolfLord:設計用途根本就不是給你這樣用的? 08/07 15:13
→ ksmrt0123:兩組pwm輸出到in1/in2不就好了? 且這樣只需2 pins 08/07 23:18
→ ksmrt0123:現在很多mcu都有多組pwm輸出 用fw寫pwm也不見得差很多 08/07 23:19
推 WolfLord:你硬體PWM輸出如果不經過組合怎麼接上TA7279 ? 08/08 03:36
→ WolfLord: 外部組合電路 08/08 03:37
→ WolfLord:然後兩組硬體PWM對應一個IO 這樣算是比較優嗎? 08/08 03:39
推 ksmrt0123:pwm1->in1, pwm2->in2, 然後控制兩組pwm的duty cycle 08/08 09:58
→ ksmrt0123:就可做出對brushed dc motor的所有動作 08/08 09:59
→ deo2000:我不是用BLDC,控制的目標是兩顆減速有刷DCM 08/08 10:30
→ ksmrt0123:brush=電刷, brushED=有刷, brushLESS才是無刷 08/08 19:19
推 WolfLord:不跟你爭辯了,反正哪個好用大家冷暖自知 XD 08/08 19:24
→ deo2000:抱歉看錯..看成brushless 08/08 21:11