文章目錄
- 一、A4988模塊簡介
- 二、A4988引腳說明
- 三、A4988的Vref電壓調節
- 四、STM32F103C8T6控制A4988驅動2相4線步進電機
- 準備工作
- 引腳接線
- 代碼示例
- 效果展示
- 五、A4988電機驅動板常見問題
一、A4988模塊簡介
??A4988 是一款功能齊全的微步進電機驅動器,內置轉換器,操作簡便。它設計用于在全步進、半步進、四分之一步進、八分之一步進和十六分之一步進模式下驅動雙極步進電機,輸出驅動能力高達 35 V 和 ±2 A。A4988 內置一個固定關斷時間電流調節器,可在慢速或混合衰減模式下工作。轉換器是 A4988 輕松實現的關鍵。只需在 STEP 輸入端輸入一個脈沖,即可驅動電機進行一個微步。無需相序表、高頻控制線或復雜的編程接口。A4988 接口非常適合無法使用復雜微處理器或微處理器負擔過重的應用。在步進操作期間,A4988 中的斬波控制會自動選擇電流衰減模式:慢速或混合。在混合衰減模式下,設備初始設置為在固定關斷時間內以快速衰減,然后在剩余關斷時間內以慢速衰減。混合衰減電流控制可降低電機可聽噪聲,提高步進精度,并降低功耗。內置同步整流控制電路,用于改善 PWM 工作期間的功耗。內部電路保護包括:帶滯后的熱關斷、欠壓鎖定 (UVLO) 和交叉電流保護。
特性
?? 低導通電阻 (RDS(ON)) 輸出
?? 自動電流衰減模式檢測/選擇
?? 混合和慢速電流衰減模式
?? 同步整流,低功耗
?? 內部欠壓鎖定 (UVLO)
?? 交叉電流保護
?? 3.3 V 和 5 V 兼容邏輯電源
?? 熱關斷電路
?? 接地短路保護
?? 負載短路保護
?? 五種可選步進模式:全步進、1/2、1/4、1/8 和 1/16
二、A4988引腳說明
EN:使能引腳(低電平有效),該引腳懸空或接低電平,A4988都可以正常工作;接高電平則不工作。
MS1,MS2,MS3:微步細分驅動控制,通過這三個引腳的邏輯電平,調整A4988驅動電機模式為全、半、1/4、1/8 及 1/16 步進模式。
MS1 | MS2 | MS3 | 微步分辨率 |
---|---|---|---|
L | L | L | 全步 |
H | L | L | 半步 |
L | H | L | 1/4步 |
H | H | L | 1/8步 |
H | H | H | 1/16步 |
RST:復位引腳(低電平有效),該引腳懸空,則默認為高電平。即該引腳沒有連接任何電平時,A4988可以正常工作。
SLP:睡眠引腳,該引腳連接電平為低電平時,A4988將進入低能耗睡眠狀態,即消耗最小的電能。如果無需使用SLeep功能,則可以將SLEEP引腳與RESET引腳連接,則A4988將持續保持正常能耗狀態而不會進入低能耗狀態。
STEP:步進引腳,通過MCU控制器向A4988發送脈沖控制信號,A4988接收到此信號后,會根據 MS1, MS2 和 MS3引腳控制電機運轉。
DIR:方向引腳,通過此引腳可以調整A4988控制電機運行方向。當此引腳為低電平,A4988將控制電機順時針旋轉。高電平則逆時針旋轉。
1A,1B:電機繞組1控制引腳。
2A,2B:電機繞組2控制引腳。
VMOT:電機電源正極(可用電源電壓為8V ~ 35V)注:此引腳用于連接為電機供電的電源。
VDD:邏輯電源正極(3 – 5.5伏)注:此引腳用于為A4988電機驅動板供電。
GND:電機電源接地和邏輯電源接地。
三、A4988的Vref電壓調節
??Vref電壓調節是通過A4988上的電位器旋鈕調節Vref參考電壓。該電壓將直接影響到步進電機在工作時流過線圈的電流強度。請注意,這一步操作非常重要,如果忽略這一步有可能會產生電機損壞的后果。
A4988 Vref參考電壓計算公式:
Rs: 市面上A4988模塊上的Rs電阻值一般有3種類型,0.05 歐姆, 0.1 歐姆或0.2 歐姆。店鋪的A4988模塊上的Rs電阻值為0.1歐姆,大部分A4988模塊順時針旋轉電位器可調大Vref,逆時針旋轉電位器調小Vref。
Vref: 電位器金屬旋鈕和GND之間的電壓即為Vref。可使用小改錐旋轉電位器旋鈕從而改變Vref。(如下圖所示)。
Imax:步進電機工作時,線圈允許流過的最大電流。
??例:Rs為0.1歐姆,電機Imax為1.5A,通過以上公式計算,Vref參考電壓為1.2V。即將通過調節電位器旋鈕 將Vref調節為1.2伏特左右。
測量Vref時注意:
- A4988模塊的VDD引腳需要連接+5V電壓
- A4988模塊的GND引腳必須與電路中的其它設備共地
- A4988模塊的VMOT引腳無需通電,但是通電也不影響Vref的測量。
- A4988模塊的1A/1B/2A/2B引腳可以不與步進電機連接,但連接也不會影響Vref的測量
四、STM32F103C8T6控制A4988驅動2相4線步進電機
準備工作
??STM32F103C8T6最小系統板,A4988驅動模塊,OLED顯示屏,EC11旋轉編碼器,按鍵和導線若干。
引腳接線
STM32F103C8T6 | A4988 |
---|---|
電機電源正 | VMOT |
電機電源負 | GND |
3.3V | VDD |
GND | GND |
PA0 | STEP |
PA4 | EN |
PA5 | DIR |
PB3 | MS1 |
PB4 | MS2 |
PB5 | MS3 |
PA1 | 編碼器的A ,控制頻率和占空比的調節 |
PA2 | 編碼器的B,控制頻率和占空比的調節 |
PA3 | 編碼器的S,切換調節頻率還是調節占空比 |
PA6 | 與PA0短接,捕獲PWM |
PB10 | 按鍵1,控制細分切換 |
PB11 | 按鍵2,控制方向切換 |
代碼示例
A4988.c
#include "A4988.h"
#include "Delay.h"void A4988_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5);GPIO_ResetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);
}void A4988_SetStep(uint8_t step)
{switch(step){case 1: //1細分A4988_MS1_L;A4988_MS2_L;A4988_MS3_L;break;case 2: //1/2細分A4988_MS1_H;A4988_MS2_L;A4988_MS3_L;break;case 3: //1/4細分A4988_MS1_L;A4988_MS2_H;A4988_MS3_L;break;case 4: //1/8細分A4988_MS1_H;A4988_MS2_H;A4988_MS3_L;break;case 5: //1/16細分A4988_MS1_H;A4988_MS2_H;A4988_MS3_H;break;}
}void A4988_SetDir(uint8_t dir)
{ A4988_EN_H;Delay_ms(20);if(dir == 1) A4988_DIR_Helse A4988_DIR_LA4988_EN_L;
}
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "KEY.h"
#include "A4988.h"
#include "PWM.h"
#include "IC.h"
#include "Encoder.h"uint8_t step = 0;
uint8_t dir = 0;int main(void)
{OLED_Init();PWM_Init();A4988_Init();Key_Init();Encoder_Init();OLED_ShowString(1, 5, "A4988");OLED_ShowString(1, 12, "F"); //F:調節頻率,D:調節占空比OLED_ShowString(2, 4, "0000Hz");OLED_ShowString(2, 11, "000%");OLED_ShowString(3, 4, "1 ");OLED_ShowString(3, 11, "+");PWM_SetPrescaler(720 - 1); //Freq = 72M / (PSC + 1) / 100PWM_SetCompare1(50); //Duty = CCR / 100A4988_SetDir(1);A4988_SetStep(1);Update_Display();while (1){int16_t encoder_change = Encoder_GetValue();if(encoder_change != 0){if(setting_mode == 0) // 調頻率{pwm_freq += encoder_change * 10;if(pwm_freq > 2000) pwm_freq = 2000;if(pwm_freq < 10) pwm_freq = 10;PWM_SetPrescaler(pwm_freq - 1);}else // 調占空比{pwm_duty += encoder_change;if(pwm_duty > 100) pwm_duty = 100;if(pwm_duty < 0) pwm_duty = 0;PWM_SetCompare1(pwm_duty);}Update_PWM();Update_Display();}if(Encoder_GetKey()) // 按下編碼器按鍵切換調節模式{setting_mode ^= 1; // 0/1切換Update_Display();}Delay_ms(20);KeyEvent_TypeDef key_event = Key_Scan();switch (key_event){case KEY_MODE_CLICK:// Mode鍵短按事件step++;if (step > 5) step = 1;switch(step){case 1: A4988_SetStep(1); OLED_ShowString(3,4,"1 "); break;case 2: A4988_SetStep(2); OLED_ShowString(3,4,"1/2 "); break;case 3: A4988_SetStep(3); OLED_ShowString(3,4,"1/4 "); break;case 4: A4988_SetStep(4); OLED_ShowString(3,4,"1/8 "); break;case 5: A4988_SetStep(5); OLED_ShowString(3,4,"1/16"); break;}break;case KEY_DIR_CLICK:dir++;if(dir > 2) dir = 1;if(dir == 1) {A4988_SetDir(1); OLED_ShowString(3, 11, "+"); //正轉}else{A4988_SetDir(0);OLED_ShowString(3, 11, "-"); //反轉}break;}Delay_ms(20);}
}
效果展示
五、A4988電機驅動板常見問題
?1)4988驅動板可以驅動多大的電流?
??如果4988芯片上沒有加散熱片,電流最好在1A以下。如果加散熱片,電流可以達到2A。
?2)步進電機的連接方式是什么?
??先判斷哪兩根線為同一相,短接兩兩線有明顯阻力的為同一相,A相和B相可以不區分,只有是同一相接在同一個電機繞組控制引腳即可。
?3)接上電后,電機左右抖動不能正常運行是什么原因?
??電機出現抖動一般有兩個原因,一是缺相:可能是4988與電機沒有接好導致4988的輸出端某一相斷開,造成電機缺相從而抖動。也有可能是步進電機接線接錯:如果步進電機沒有正確的進行連接,電機會出現抖動的情況。二是驅動電流過大或過小導致的,調節板載上的電位器調到電機正常平穩運行就可。
?4)電機丟步如何解決?
??相電流的大小跟步進電機的扭力有直接關系,如果感覺你的步進電機扭力不足、丟步,可能是4988輸出的電流太小。您可以調節A4988模塊上的電位器調節A4988模塊的輸出電流強度。具體調節方法請參考上面的Vref電壓的調節方法。請注意:如A4988輸出電流強度大于電機工作電流強可能會燒毀您的步進電機。請小心調節。
?5)4988可以驅動兩相六線或兩相五線的電機嗎?
??可以,兩相連線按照問題2連接,將中間抽頭懸空即可。
?6)電機停止轉動時會有滋滋的電流聲。
??這是正常現象。步進電機有一個參數-步距角。通過細分驅動可以縮小步進角度,比如步距角為1.8度的步進電機,采用16細分,最小可以走的角度是1.8/16=0.1125度。由于這個角度非常小,當電機停止時,可能處于非電機物理位置(1.8度為一個物理位置)。因此步進電機在靜止時會有電流聲,這屬于正常現象,不用擔心。