步進馬達
阿新 • • 發佈:2018-01-29
strong 一點 true 因此 個數 有一個 control 邏輯 設備
28BYJ-48步進馬達。5V DC,減速比1:64:
2個繞組,5根接線如下。步進角360/64=5.625度。控制序列如下:
使用HR8833控制芯片,該芯片提供2個H橋,可以分別控制1個DC電機或者共同控制1個4相步進馬達。步進馬達接口和H橋控制邏輯如下。註意紅色的共線5不用接:
單片機使用4個GPIO,分別與AIN1, AIN2, BIN1, BIN2接口。控制代碼如下。其中 controlTable 是電機的控制序列,每個數組元素的bit3:0分別表示電機接線4-1的電平高低。doControl()函數的step參數取值0-7:
const uint8_t controlTable[] = { // 0b1000, // 0 0b1100, // 1 0b0100, // 2 0b0110, // 3 0b0010, // 4 0b0011, // 5 0b0001, // 6 0b1001, // 7 }; #define GET_PIN_STATE(bits, n) ( (1 & ((bits) >> (n))) ? GPIO_PIN_SET : GPIO_PIN_RESET ) void doControl(uint8_t step) { uint8_t bits = controlTable[step % 8]; HAL_GPIO_WritePin(AIN1_GPIO_Port, AIN1_Pin, GET_PIN_STATE(bits, 3)); HAL_GPIO_WritePin(BIN1_GPIO_Port, BIN1_Pin, GET_PIN_STATE(bits, 2)); HAL_GPIO_WritePin(AIN2_GPIO_Port, AIN2_Pin, GET_PIN_STATE(bits, 1)); HAL_GPIO_WritePin(BIN2_GPIO_Port, BIN2_Pin, GET_PIN_STATE(bits, 0)); }
關於電機的轉速,需要進行一點計算。步進電機的轉速完全取決於控制信號的切換速度。這裏的步進電機規格書上給出:a, 步進角為360/64,即64步/周;b, 減速比為1:64。因此,對於轉軸而言,其角度解析度為 r = 64x64=4096 步/周。
若控制信號的頻率為f 步/秒,則轉速為 v = 1/r x f = f/4096 周/秒。
若信號頻率為 f = 1KHz(周期 1ms),則轉速為 v = 1000/4096 ~ .244 周/秒,旋轉一周約需時 4 秒。這是一個較慢的速度,如果要達到更快的速度,就需要 us 級的延時或定時器。另外,步進馬達作為一個機電設備,速度一定是有一個有限的上限的。
步進馬達