這段時間我在幫學校robocon戰隊做輔導,遇到了jga25-371電機,外形如下:
以前我還沒遇到過這種電機,一直用的是大疆的三相無刷電機,而這個是帶編碼器和減速箱的直流電機,一共6根線,其中四根線是編碼器的,兩根線是電機的電源線。
電機的驅動很簡單,這裡使用了l298n驅動器,使用三根線控制,兩根線控制電機的轉向,一根線輸出pwm波控制輸出的電壓,進而控制電機的力矩。
這個電機關鍵的地方在於獲取它的轉速和轉向,也就是獲取編碼器的值。我之前使用的大疆電機採用的霍爾感測器,而這個電機採用的是光電編碼器,它的具體介紹可以看這個**
編碼器速度和方向檢測,371電機方向與速度檢測,stm32編碼器介面模式。
最關鍵的就是下面這張圖,只要理解了這張圖就能讀取轉向和轉速了。
我採用了兩種方法獲取電機的轉速。第一種是使用定時器的輸入捕獲功能,設定為上公升沿觸發,通過記錄a相或b相兩次上公升沿的間隔來計算電機的轉速,我測量的是a相,然後在中斷中判斷b相的電平高低來區分電機的轉向。
另一種方法是使用gpio的外部中斷,配置為上公升沿中斷,給每個電機設定乙個計數,在中斷中對計數進行++操作,通過計數的大小來計算轉速。
獲取到轉速就可以進行pid控制了,上面的原理很簡單。
這裡可以提一下,在使用定時器輸入捕獲的時候,如果在中斷中判斷是又哪個通道產生的:
void
hal_tim_ic_capturecallback
(tim_handletypedef *htim)
elseif(
(htim->channel == hal_tim_active_channel_1)
)elseif(
(htim->channel == hal_tim_active_channel_1)
)//...
}
這樣就可以啦! BLDC電機驅動策略
1.換相計時清零 超時計數開啟 設定驅動功率 ab相驅動開啟 檢測過零 檢測到過零 換相計時開啟 超時計數清零並開啟 ac相驅動 檢測過零 檢測到過零 記下換相時間 超時計數清零並開啟 下一相拖動。連續檢測到6個電週期,更新換相時間濾波器,進入閉環。2.ab相驅動開啟 檢測過零 檢測到反向過零,說明...
步進電機驅動詳解
最近在使用步進電機的時候,發現細分驅動器太大了,而且只是會使用細分驅動器的話並不能代表你會用步進電機了,於是就想找個小一點的驅動自己編寫 驅動步進電機,於是l298n模組就符合我的要求了,它不僅小而且還帶有兩路大功率電機的輸出,把他接到步進電機的四相剛剛好!按照慣例,先上效果圖 可以看出,我能夠精確...
步進電機驅動方式總結
方式一 uln2003驅動 適用範圍 最大驅動電流 0.5a 驅動5v 直流電機,5v二相六線線步進電機,12v二相六線線步進電機 短時間可用,發熱量大,注意散熱 無散熱片 注 二相四線線步進電機不能用 uln2003 驅動,需要用 h橋電路來驅動,或者使用專用晶元 二相四線步進電機 uln2003...