Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
樓主: tommylin

[求救]電流超過 10A ?(確定是電壓太低發生OS不穩,已經解決~)

[複製鏈接]
發表於 2010-6-25 01:43:41 | 顯示全部樓層
本帖最後由 mzw2008 於 2010-6-25 01:50 編輯
Hi 大大們~
我再 Roboard 上接了 18 顆 Hitec 8498 Servo
全部一起動作時... 瞬間關機..

後來發現是電 ...
tommylin 發表於 2010-3-1 15:35

請教一下喔, 這個測試後來的結果如何呢!?
最近我也需要直接這樣接------使用R-100
之前都是使用控制板, 現在改用R100才真正瞭解, 原來Roboard的高精細度控制的好處

結果使用電池的時候(1.2V*5顆, 2000mAH鎳氫)
接兩顆以上的MG995, 程式一起動, SERVO才動到一半就直接重開機了 (程式一啟動SERVO會置中)
接一顆的時候, 程式一直亂拉胡搞, 約10秒也是重開
接一顆, 程式使用迴圈讓他動, 跑到沒電...沒事
接24顆.....哈哈, 這是想說要試驗就要勇敢一點, 程式一起動, SERVO動了約1/3就重開

感覺是電源瞬間大電流造成電壓下降, 導致R-100重開
可是沒有器材可以量這個
去實驗室改用高級的電源供應器, 據說是一顆好幾萬那種
20顆...可以胡搞沒有問題

這怎辦呢?!
我需要6V啊
或是改用鋰電可以解決呢? 家裡的鋰電都玩壞了@@
發表於 2010-6-25 01:53:22 | 顯示全部樓層
話說剛剛耍寶, 接12V的變壓器測試
SERVO的轉速快到無與倫比
正想說怎麼可能這麼快???還不會重開機
眼角餘光瞄到變壓器是12V!!!!!
嚇到趕緊扯電線...不過該馬達似乎也沒怎樣, 好像還能用
哈哈
 樓主| 發表於 2010-6-25 18:44:29 | 顯示全部樓層
本帖最後由 tommylin 於 2010-6-25 18:51 編輯

先向大家道歉@@... 最近比較忙,
忘了這一篇的問題還沒寫完..
由於已經事隔太久了...
依稀記得當時是因為送出 plus 那段程式有 bug,
導致 app crash / OS restart..
已經確定和電流 / 電壓無關,
現在 servo 已經正常動作無誤. ( 但還沒有作嚴謹的測試)
我用的電源測試過2種..
A. 電源供應器.
B. 電池 AA 1.2V, 2000 mah 串接 6顆( 7.2 V )
提供參考了~ 希望有幫助..
如果有時間的話, 可以加入 app output dump file 比較能確定.

我會盡快找時間再做一次完整的驗證...
 樓主| 發表於 2010-6-25 18:47:41 | 顯示全部樓層
本帖最後由 tommylin 於 2010-6-25 18:55 編輯
話說剛剛耍寶, 接12V的變壓器測試
SERVO的轉速快到無與倫比
正想說怎麼可能這麼快???還不會重開機
眼角餘 ...
mzw2008 發表於 2010-6-25 01:53


MG995       weight- 55.0g
Dimension40.7*19.7*42.9mm
Stall torque10kg/cm
Operating speed0.20sec/60degree(4.8v)
Operating voltage4.8-7.2V
Temperature range0℃_ 55℃
Dead band width10us

MG995 這麼強喔.. 12V 還不會燒掉?
太猛了~ 呵呵..
發表於 2010-6-25 23:27:02 | 顯示全部樓層
本帖最後由 mzw2008 於 2010-6-25 23:30 編輯

MG995標準是說6V
但是昨天我約是接12V使用了1分鐘左右
轉超快的耶
哈哈, 目前看來是沒壞掉, 但要我再試一次也是不敢 XDD

對了, 我控制是用官網的DLL
送出10ms週期的PWM脈波, 會送這種長度是因為他的範例就這個長度, 我沒改直接就送了
會不會跟這個有關呢?!
你的週期是送多長的??
目前是打算改25ms的長度再試試

另外說這種重開機是APP CRASH似乎有問題
因為我有接電表同步使用
發現重開的時候... 那瞬間電壓從6V--->3.9V左右
感覺這才是重開的原因
我電池只能接6V, 因為也有用上廣營的SERVO, 官方規定電壓到6V而已
如果這條路走不通, 只好改裝分開供電了, 這樣會接的很醜@@
 樓主| 發表於 2010-6-26 00:47:43 | 顯示全部樓層
本帖最後由 tommylin 於 2010-6-26 00:50 編輯

嗨~ 鯨魚大大..
一個線索提供參考..
我記得當時有追到一個Demo程式的 bug,
使用官網提供編譯好的 RoboRC.exe
Hitec servo 一直無法正常取得 servo 位置.( read position function can't working )
追到後來我發現 servo_idx 傳入值是錯的... ( 我記得有發表過...)
完全呼叫不到 RCSERVO_HITEC_HSR8498 這個 type
後來我就改了 RoboIO.LIB 程式. 把 servo_idx 的 default 直接設成 2. rebuild...

servo_idx 傳值設定下列 3種 servo 類型:
0. RCSERVO_SERVO_DEFAULT,
1. RCSERVO_KONDO_KRS78X,
2. RCSERVO_HITEC_HSR8498

建議你可以先確認這個 MG-995 servo 是要用哪一種 type.
發表於 2010-6-26 01:05:22 | 顯示全部樓層
他其實內建有這些
public const int RCSERVO_SERVO_DEFAULT = (0x00);
public const int RCSERVO_SERVO_DEFAULT_NOFB = (0x01);
public const int RCSERVO_KONDO_KRS786 = (0x11);
public const int RCSERVO_KONDO_KRS788 = (0x12);
public const int RCSERVO_KONDO_KRS78X = (0x13);
public const int RCSERVO_KONDO_KRS4014 = (0x14);
public const int RCSERVO_HITEC_HSR8498 = (0x22);

我用的是第2個0x01那組
應該問題不在這裏
MG995只是普通馬達
不是KONDO那種一顆上千, 可以回傳位置的
 樓主| 發表於 2010-6-28 17:00:25 | 顯示全部樓層
請問 安東尼大大, 鯨魚大大...
RoboIO.lib 裡面這個函式...
RBAPI(bool) rcservo_SendPWMPulses(int channel, unsigned long period, unsigned long duty, unsigned long count);
這裡的 count 是什麼作用? 對於 servo 有什麼影響?
能幫忙解惑嗎~~~ 謝謝~
我如果數值設 1L, 不管我 duty 設定多少, servo 都只會動一點點.
發表於 2010-6-28 17:28:26 | 顯示全部樓層
那個count好像是指持續送多久的意思???? 其實我也不是很確定這件事情

原廠文件說這是"次數", 要連續送這個指令幾次
但根據我的測試似乎有點出入, 應該是送這個指令要維持多久時間?? 是嗎??哈哈
不過我是丟在迴圈跑的, period目前調整為20000
count 10 , SERVO 跑得很正確, 該到哪裡就到哪裡, 而且穩定度超越普通的SERVO控制板很多
roboard的精細度超高果然不是蓋的(正港的1us)
不過... 我依舊會有不定時重開機的問題
目前幾乎確認問題出在電源不穩

昨天把同樣的架構移動到利基的平台上, 動的很穩定不會有任何問題
利基的機器人使用鋰電.. 這和我測試用的鎳氫還是有出入
我在想..可能真的要解決這個問題就是要roboard和SERVO獨立分開電源了
啊, 這樣會搞得很醜耶@@~~~~
發表於 2010-6-28 17:37:39 | 顯示全部樓層
對了, 剛剛仔細翻過原廠文件
這個count值在原廠文件裡面寫100
不過前後有仔細看過, 沒有提到為何是100
哈哈
 樓主| 發表於 2010-6-28 17:40:18 | 顯示全部樓層
period=20000, count=10 ,SERVO 跑得很正確? 我馬上試試..
先謝嚕~ 回應得好快...呵呵 @@
 樓主| 發表於 2010-6-28 17:54:52 | 顯示全部樓層
本帖最後由 tommylin 於 2010-6-28 17:57 編輯

No~~~~ 還是不正確..
我的參數如下:
Channel = 13;
PWM_period = 10000;
PWM_duty  1500; (大約 servo 的中間角度, 範圍 550~2500 )
count = 10L;
rcservo_SendPWMPulses(Channel, PWM_period, PWM_duty, count  );我馬上放影片上來, 給不同的數值不同的結果@@

PWM_period 請問這個參數是什麼作用?
 樓主| 發表於 2010-6-28 18:00:48 | 顯示全部樓層
本帖最後由 tommylin 於 2010-6-28 18:24 編輯

count = 100L; 就正確了~~~~~ 感謝鯨魚大捏..
http://www.youtube.com/watch?v=mu-4xUPF1io
影片中 servo 轉動到中間位置,這樣就正確了..
發表於 2010-6-28 19:13:46 | 顯示全部樓層
本帖最後由 acen2008 於 2010-6-28 19:23 編輯

HI~各位大大安
  rcservo_SendPWMPulses函數的count是指傳送的PWM個數, 假設PWM_period(週期)
  設定為10000L(週期決定於馬達, 我記得kondo的是8ms ~ 20ms), PWM_duty為1500L
  (以上單位都是1 us), 而count 的數值為10L,  用示波器看到的就是完整的10個PWM波型
  (總時間為10ms*10個 = 100ms), 如果count只給1L, 代表只送1個PWM波型, 雖然馬達
  可以接收但是才過10msPWM訊號就沒了, 角度  當然就只有轉一點點囉(轉的角度與馬達的
  operating speed有關), 給的數值越大, 代表送給servo的PWM個數越多, 送500L的話,
  可以發現馬達轉到所要的角度之後還會ㄍㄧㄥ著, 過一段時間才會軟掉, 至於送的值確切要
  多少, 沒有硬性規定, 因為在送出PWM的過程中, count值會一直減1直到0才停止, 也就是
  說, 在送PWM訊號途中隨時都可以去修改它, 我通常是固定給一個比較大的count值
  (例如: 100L), 然後只要在一個for loop 中去修改duty的值就可以了
 樓主| 發表於 2010-6-28 19:49:26 | 顯示全部樓層
本帖最後由 tommylin 於 2010-6-28 19:51 編輯

感謝         acen2008大大的解說阿~ 太感謝了^^
另外請教一個問題... 要同時轉動多個 servo,
我寫了下列程式碼
for (i=0; i<32; i++)
        rcservo_SendPWMPulses( i , 10000, 1500, 100L);
可是結果都只有第一個 servo 會動作, 其他都不會動..
是哪裡沒有考量到嗎?
先謝謝嚕~
發表於 2010-6-28 20:57:15 | 顯示全部樓層
本帖最後由 acen2008 於 2010-6-28 21:05 編輯

HI

要輸出多channel的PWM訊號不外乎幾項(以下是有按照先後順序的喔)

1.roboio_SetRBVer(RB_100)    // 如果你用的是RB-110, 那就填入RB_110
                                             // , 順便一提RB-100 PWM channel為24組
                                             // , RB-110 為 16組

2.rcservo_SetServo(i, type)  // i為channel編號, 從0 ~ 23, type為馬達型態
                                         // (就是上面鯨大所列的), 這是單channel函數
                                         // 若要設定多channel, 請用for...

3.rcsevo_Initialize(chs)         // chs是複數channel的編號, 可用rcservo已定義的
                 // 常數RCSERVO_USECHANNEL0 ~RCSERVO_USECHANNEL23
                                         // 去做累加動作, 把指定的channel轉成PWM
                 // 例如 : RCSERVO_USECHANNEL0+RCSERVO_USECHANNEL2
                                         //所用的就是channel0和channel2, 其他是GPIO

4.rcservo_EnterPWMMMode()    // 進入PWM 模式

好了, 可以開始使用rcservo_SendPWMPulses()了, 這也是單channel函數, 要輸出多
channel PWM, 請用for...


再試試看吧
 樓主| 發表於 2010-6-28 21:21:13 | 顯示全部樓層
再一次謝謝 acen2008大大,
可是沒看過 roboio_SetRBVer()...
我先去官網看看是不是有新版的 LIB..
發表於 2010-6-28 23:21:16 | 顯示全部樓層
感謝acen2008  的回答, 看來我第一次看的解釋才是對的
後來亂想的都錯了

roboio_SetRBVer 一直有喔
這個是初始化指令, 有他就能正確動作
這些東西在官網的原始lib定義裡面都找的到, 本來就有

話說我現在全部改count=100
已經是要他怎樣就怎樣
一次接22顆祥儀的馬達, 12V電壓
不管怎樣胡搞都不會重開

使用6V接MG995 還是會, 使用鎳氫2200mAH
但分開供電, 就再也不會了
看來真是電池的問題
問題是, 如果我堅持不肯換鋰電...一定要用鎳氫而且不分開供電的話
有沒有辦法解決哩? 好像有誰跟我說過什麼接顆超大電容之類的話
這有用嗎?
 樓主| 發表於 2010-7-7 14:23:46 | 顯示全部樓層
hi 鯨魚大大, roboio_SetRBVer() 是 1.6版才加上的, 舊版沒有.

現在狀況越來越嚴重了~ 發生機率 10次有8次 ~"~
我現在插上 16個 servo,
只動一個 servo 也是發生系統瞬間重新開機,
根據你分享的實驗結果, 那就是瞬間壓降的問題,
我也會試試分開供電,
這問題一定要解決和找出最佳解決方案,
不然很難過阿 ~"~
發表於 2010-7-7 16:58:00 | 顯示全部樓層
電池壞了要換新的。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2022-8-12 16:59 , Processed in 0.236664 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表