步进马达

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 级的延时或定时器。另外,步进马达作为一个机电设备,速度一定是有一个有限的上限的。经过实测,信号周期最小为1200us;再快,马达就只震动而不转动。

 

posted @ 2018-01-29 19:40  vinccc  阅读(547)  评论(0编辑  收藏  举报