驱动芯片ULN2003由7组达林顿电路构成,其中每一组达林顿电路都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
28BYJ-48是一款4相5线制减速步进电机,它共有5条引线,其中VCC接电机的中心抽头线(一般为红色),其它4条接电机的A、B、C、D相。该电机的直径为28mm,电压:5V,步进角度:5.625 x 1/64,减速比:1/64。
图2 内部类型及信号驱动顺序
为控制步进电机的转动,其与开发板的引脚连接关系为:
MA:PC7
MB:PE14
MC:PE12
MD:PC4
为输出高低电平,所进行的引脚定义为:
#define MAH GPIO_SetPins(GPIO_PORT_C, GPIO_PIN_07)
#define MAL GPIO_ResetPins(GPIO_PORT_C, GPIO_PIN_07)
#define MBH GPIO_SetPins(GPIO_PORT_E, GPIO_PIN_14)
#define MBL GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_14)
#define MCH GPIO_SetPins(GPIO_PORT_E, GPIO_PIN_12)
#define MCL GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_12)
#define MDH GPIO_SetPins(GPIO_PORT_C, GPIO_PIN_04)
#define MDL GPIO_ResetPins(GPIO_PORT_C, GPIO_PIN_04)
对所用引脚的配置函数为:
void Init_BJDJ(void)
{
stc_gpio_init_t stcGpioInit;
(void)GPIO_StructInit(&stcGpioInit);
stcGpioInit.u16PinState = PIN_STAT_RST;
stcGpioInit.u16PinDir = PIN_DIR_OUT;
(void)GPIO_Init(GPIO_PORT_C, GPIO_PIN_04, &stcGpioInit);
(void)GPIO_Init(GPIO_PORT_C, GPIO_PIN_07, &stcGpioInit);
(void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_12, &stcGpioInit);
(void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_14, &stcGpioInit);
}
测试步进电机正反转的主程序为:
int32_t main(void)
{
unsigned int X,Y;
LL_PERIPH_WE(LL_PERIPH_GPIO);
LED_Init();
Init_BJDJ();
LL_PERIPH_WP(LL_PERIPH_GPIO);
DDL_DelayMS(100);
MAL;
MBL;
MCL;
MDL;
// 转动
for(X=0;X<192;X++)
{
for(Y=0;Y<8;Y++)
{
MDL;
MAH; //A
delay (n);
MBH; //AB
delay (n);
MAL; //B
delay (n);
MCH; //BC
delay (n);
MBL; //C
delay (n);
MDH; //CD
delay (n);
MCL; //D
delay (n);
MAH; //DA
delay (n);
}
}
DDL_DelayMS(100);
// 换向
for(X=0;X<192;X++)
{
for(Y=0;Y<8;Y++)
{
MDH;
MAH; //DA
delay (n);
MAL; //D
delay (n);
MCH; //CD
delay (n);
MDL; //C
delay (n);
MBH; //BC
delay (n);
MCL; //B
delay (n);
MAH; //AB
delay (n);
MBL; //A
delay (n);
}
}
// 停止
MAL;
MBL;
MCL;
MDL;
for (;;) {
LED_G_TOGGLE();
DDL_DelayMS(DLY_MS);
}
}
经程序的编译与下载,其运行效果如图3至图5所示。
图1 转动状态1
图2 转动状态2
图3 转动状态3
在使用时,还可通过延时值的调整,来实现转速快慢的改变。
此外,在使用开发板上按键的情况下,还可通过按键来实时控制电机的转向。
视频演示: