摘要:本文介绍如何使用L298N驱动步进电机
在前一篇文章中介绍了步进电机的基本知识,接下来就来看一下如何让步进电机转动起来。由于单片机处理器引脚的驱动能力很弱,因此是不能直接驱动电机这种大功率设备的,需要借助专用的驱动模块来放大处理器引脚的输出信号。在前边已经介绍过多款电机驱动芯片了,例如:L298N、TB6612、DRV8833等都可以用来驱动直流电机,同样的,步进电机也可以使用这些模块来进行驱动。但是,需要注意的是,驱动模块的电压和电功率一定要能满足电机的需求,这样才能保证电机正常的工作。
对于以上驱动模块不太了解的可以参考之前的文章。
在进行正常使用电机驱动模块驱动步进电机之前,先来了解一下常见的42步进电机的电气特性参数:
尺寸:外径通常为42mm,机身长度根据型号和规格不同而有所差异。
步距角:通常为1.8度,这意味着每一周360度对应200个步进位置。
相数:通常为两相或四相,这取决于具体的型号和规格。
额定电压:通常为12V或24V,也有一些型号的额定电压为48V。
额定电流:通常为0.4A或0.6A,也有一些型号的额定电流为1.2A或更高。
额定转速:通常为100-600转/分钟,也有一些型号的额定转速为1000转/分钟或更高。
额定扭矩:通常为0.3-0.5N.m,也有一些型号的额定扭矩为1N.m或更高。
绝缘等级:通常为B级或F级,这取决于型号和规格。
工作温度:通常为-20℃至+50℃,也有一些型号的工作温度范围更广。
驱动方式:可以通过单相、双相、四相等驱动方式进行驱动,也可以使用步进电机控制器进行控制。
以上只是一些常规42步进电机的电器参数。了解了以上参数之后,我们可以选用之前使用过的L298N模块来进行驱动。L298N模块之前已经详细的介绍过了,并且已经讲述过驱动直流电机的例子。
下面先来看一下接线的方法。一个L298N模块可以驱动2个直流电机或者一个两相步进电机,在L298N与步进电机接线的时候一定要确保步进电机的同一相连接到L298N的同一路输出中,ESP32的引脚选定未被占用的可以数字量输出的引脚就可以了,至于具体的顺序,可以通过软件来进行调整,具体的接线方法如下图所示:
我这里借用了一个之前双L298N芯片的L298N模块,输入控制端只需要连接IN1~IN4这4个控制引脚到ESP32的GPIO就可以了。
接下来就是实现一个可以控制步进电机正反方向旋转的测试程序。这个程序的功能就是让步进电机正转一圈后休息1秒,然后再反转一圈并休息1秒,之后就是如此循环旋转。
这个程序的代码首先是定义一个数组,里面保存了控制步进电机旋转的4个引脚。如下所示:
// 定义所使用的引脚 uint8_t pins[]={27,25,26,33}; |
接下来是实现步进电机正向转动的函数,这个函数的核心就是4个引脚按照步进电机的要求依次输出脉冲信号。实现方法如下:
// 正转函数 void clockwise(int num) { int i = 0; do { // 输出一个脉冲 digitalWrite(pins[i], HIGH); delay(5); digitalWrite(pins[i], LOW); num--; i = i > 2 ? 0 : i + 1; } while (num > 0); } |
这个函数的参数为正向转动的步数。这个函数是按照pins数组中定义引脚的顺序,依次输出一个脉冲信号,每个脉冲信号驱动电机前进一步。那么反向旋转的函数只需要按照pins数组中定义的引脚,反序输出脉冲信号就可以了。实现的方法如下:
// 反转函数 void anticlockwise(int num) { int i = 3; do { // 输出一个脉冲 digitalWrite(pins[i], HIGH); delay(5); digitalWrite(pins[i], LOW); i = i < 1 ? 3 : i - 1; num--; } while (num > 0); } |
最后就是初始化和主循环函数了,初始化函数需要把4个被用到的引脚设置为OUTPUT状态。而主程序的就是调用依次调用正反转函数控制步进电机运动200步,中间间隔为1秒。实现方法如下所示:
// 初始化函数 void setup() { for (int i = 0; i < 4; i++) { pinMode(pins[i], OUTPUT); } } // 主循环函数 void loop() { clockwise(200); delay(1000); anticlockwise(200); delay(1000); } |
好了,整个程序就都完成了,可以编译、上传,让步进电机转动起来了。如果程序运行后,发现电机嗡嗡响,而不转动,那么就是你控制输出脉冲的顺序不正确,直接修改一下pins数组,交换一下第2、3个引脚的顺序就可以了。
另外需要提醒一下,由于步进电机不能使用直流来直接驱动,因此,不要将直流电直接连接到步进电机上,因其内阻很小,会很快发热,有可能烧毁电机。另外,就是L298N在驱动步进电机的时候,也不能直接将控制引脚IN1~IN4长时间的接高低电平,保持某一固定状态,那样流过L298N的电流会很大,器件很快就会发热,甚至烧毁。
好了,关于步进电机的驱动就介绍到这里了,这里介绍了整步法驱动步进电机运动,其他各种整步法驱动模块,均是基于此原理来控制步进电机的。