Robofun 機器人論壇

標題: [再接再厲] (8052) 8 port Servo control [打印本頁]

作者: jason0821    時間: 2007-10-5 13:25
標題: [再接再厲] (8052) 8 port Servo control
重新做了一個 8 Port 的 Servo 控制
8052 / OSC 24MHz /  P0 當 PWM 輸出

規格:
1.  週期時間 20ms
2.  Servo 控制可以調整 從 0.1ms ~ 2.45ms,   解析度  0.001ms
3.  從 RS232 Terminal 輸入
    sa, s0, s1,s2,...s7  --> PWM 輸出開始
    ta, t0, t1, t2,..,t7    --> PWM 輸出停止, 輸出拉Low
    R  --> PWM 調為預設值,預設值須先定義
 0xxx,0x0D,0x0A -->  改變 PWM0 high 的時間 (單位 micorns second)
 1xxx,0x0D,0x0A -->  改變 PWM1 high 的時間 (單位 micorns second)
      ....
    7xxx,0x0D,0x0A --> 改變 PWM7 high 的時間

花了半小時 裝了Digitrace, 截圖如下


PWM0 = 0.50ms
PWM1 = 0.75ms
PWM2 = 1.00ms
PWM3 = 1.25ms
PWM4 = 1.50ms
PWM5 = 1.75ms
PWM6 = 2.00ms
PWM7 = 2.25ms
不知道這次的規格可以用來當 機器人控制嗎?

** Digitrace 每次量的週期時間都會變, 可是用 太克示波器量又很穩定
   不知是我的問題, 還是 Digitrace 的設定有問題???

** 請教一下, Digitrace 設定中, Divisor 的用途?


[ 本帖最後由 jason0821 於 2007-10-7 01:07 編輯 ]
作者: irobot    時間: 2007-10-5 15:27
0.001ms 是很高的解析度了,達到180度內細分2000步。控制大機械人細緻的動作也沒有問題啊!!不過傳送定位的資料時應該要用雙字節吧。 你做得不錯啊,加油!!
Digitrace 當然不是 100% 準確,但誤差值應該少於10us。量度servo的pwm訊號時的誤差應該是可接受的,畢竟這裝置成本低又蠻容易製作。至於Divisor 我也沒有用過啊,可能你要試試了。
作者: zirok    時間: 2007-10-7 21:42
挖@q@,大大真利害...,好久沒來...開學一堆課都蠻難熬的...(ex:物理.化學)

請問大大是用c語言寫的嗎~?會很複雜嗎? 因為我們也在教c語言,想說pc端的介面程式用c語言來寫好了(放棄用vb寫=.="...書找不到),但是我的8051是組合語言呢@q@,這樣可以執行嗎~?
作者: jason0821    時間: 2007-10-8 00:12
目前是用 C,  為了時間要較準確, 所以用 Timer 中斷來做
(時間可預扣中斷副程式響應的 時間)
有在計畫將中斷部分先改成 組合語言
比較好準確控制時間, 和避免編譯器所造成的誤差
也因為是 C 寫的,程式有些大, HEX code 超過 2KB
至於介面部份 還在做, 目前是用 Hyper-terminal
直接輸入控制, 沒寫程式耶
有興趣我可以將 HEX 和 線路圖 寄給你試試

[ 本帖最後由 jason0821 於 2007-10-8 00:26 編輯 ]
作者: zirok    時間: 2007-10-8 12:11
有興趣阿~,我介面程式目前還沒動到=.=...(想找書不過圖書館的目前被借走了=~=")

介面程式jason0821大大您是怎麼弄得呢? 可否教一下@q@,那就麻煩你囉~,我的信箱我的詳細資訊裡面應該有~,Hyper-terminal 好像還蠻複雜的說@Q@?
作者: jason0821    時間: 2007-10-11 08:40
序列控制用 Hercules (支援 Hex code 傳送)
雖然重寫 STDIO 將 code 縮成 1.2KB
但還是須要 3 個 Timer Orz...
所以要用 8052 相容的 MCU
還在想方法中, 希望能降到 2 個 Timer, 可以用8051
參考前輩的方法中, 但是對其中的週期變化那麼大還是有疑問!
(目前可控制週期在  20ms  +/- 2us)

控制方法:
送 0xFF 0x60 開始輸出 (預設值是 1.5ms)
送 0xFF 0x0n 0xXX  改變 Ch-n  位置 (0 ~ 253) ~ 0.5ms ~ 2.45ms
送 0xFF 0x80 停止輸出
送 0xFF 0xA0 全部復位成 1.5ms
電路上無特殊元件, 就只有 MCU + OSC + HN232 和 Capacitors,  Port0 當輸出, 記得加提升電阻 2K Ohm.

(Zirok 你的 email address 沒回應耶)

[ 本帖最後由 jason0821 於 2007-10-11 08:47 編輯 ]




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2