这次主要学习舵机和普通电机的控制及相关基础知识
1、PWM信号的原理
PWM(Pulse Width Modulation)——通常翻译为脉冲宽度调制技术,通过对一系列脉冲信号的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。PWM控制技术在逆变电路中应用最广,应用的逆变电路绝大部分是PWM型,PWM控制技术正是有赖于在逆变电路中的应用,才确定了它在电力电子技术中的重要地位。
例如下图,其实PWM就是占空比不同的方波,即按一定的频率不断输出高电平、低电平,同时,可以在一个周期内调整高电平的持续时间(占空比)。
说到底,其实是因为电脑只能输出0和1两种逻辑情况,所以采用这种形式来模拟输出。例如我想输出0.5,那就让电脑在一个周期内一半时间输出高电平1,一段时间内输出低电平0,则平均之后就是0.5。这就是等效电压的概念。再例如,ARDUINO高电平如果是5V,我想获得3.7V的电压,在PWM波的频率不变的情况下,可以令74%周期输出5V高电平,剩下26%周期时间输出低电平,加权平均后,只要频率够快,则可以等效为3.7V的电压。
不过ARDUINO中,提供了一个控制舵机的标准库,servo.h。可以令舵机控制的代码变得很傻瓜化。
2、360度舵机与180度舵机的控制
按惯例首先介绍下舵机。
舵机其实是伺服电机的一种别称。通常我们所说的舵机是指可以根据信号转动至指定角度的电机,例如180度舵机。因为这个特性,所以往往被用于很多遥控飞机、遥控给汽车、机器人等领域,用于控制它们的方向和位置。这也是它被称为舵机的原因。
还有一种舵机,称为360度舵机,它和一般舵机的区别是:如果给一个信号,普通舵机是转动至某个角度,而360度舵机则是按这个信号对应的速度进行匀速转动。看起来似乎和普通的电机差不多,但不同点在于,360度舵机由内部的电路控制,运转速度稳定。
那么舵机如何控制呢?
从图上可见,舵机有三根接线,通常红线接VCC(正极),黑色或棕色接GND(负极),黄色或者白色则是PWM信号控制线。我们将电源线接至电源(面包板)的正负极,信号线则接至ARDUINO NANO的D3接收PWM信号。
当D3输出一个PWM信号时,舵机就会根据信号转动指定角度或者以指定速度旋转(360度舵机)。通常,舵机需要一个20ms左右的脉冲,该脉冲信号中,高电平部分为0.5ms至2.5ms范围。当脉冲中高电平为1.5ms时,舵机将转动至90度位置,或者静止不动(360度舵机),当脉冲大于1.5ms时,舵机转向180度方向或者正转,小于1.5ms时,转向0度方向或者反转。
通常,我们可以调用servo.h来控制舵机。该库主要有以下几个控制函数。
控制舵机可以分为4步:
(1)声明使用servo.h;
(2)给舵机起个名字;
(3)定义舵机信号线连接ARDUINO哪个针脚;
(4)用write或者writeMicroseconds函数来设置PWM波的脉冲持续时间。
另外,还可以用read函数来读取舵机当前角度或者转速,用attached来判断舵机是否正确接线,用detach函数来分离舵机连接(这个命令暂时不是特别熟悉)。
接下来我们来接线试验一下,由于我只有360度舵机,因此来尝试下用可变电阻来控制舵机转速。
接线图如下,将舵机的电源线接在面包板的正负极上,信号线接D4;可变电阻的左右两个针脚分别接ARDUINO的3.3V和GND脚,中间脚接A3。
代码如下
实测如下
3、L298N驱动模块介绍
L298N是一款接受高电压的电机驱动器,可以驱动2个直流电机和1个步进电机。L298N可对电机进行直接控制,通过主控芯片的I/O输入对其控制电平进行设定,就可为电机进行正转反转驱动,操作简单、稳定性好,可以满足直流电机的大电流驱动条件。
由于L298N芯片工作中热量较大,因此需要使用金属散热片。具体各个元器件及接线端子如下图所示。
(1)电源:电源正极支持4.5V~46V电压。当输入电压不大于12V时,板载5V使能采用跳线帽短接,5V接口可以提供5V电压,可用于ARDUINO的供电。当大于12V时,建议拔掉跳线帽,采用5V接口给L298N的芯片单独供电,以保护元器件。另外需要注意的一点:L298N和ARDUINO需要共接地,否则电机可能不会转动。
(2)输出:L298N采用双H桥,因此通过通道A和通道B与直流减速电机连接,可以同时控制两个电机的正反转。
(3)输入:使能A(ENA)接口和使能B(ENB)接口用跳线帽短接时,为高电平,则对应的通道有效。另外输入1~4接口为逻辑输入口,通过控制对应的高低电平,令通道AB连接的直流电机正、反转。具体控制方式及状态如下表:
当使能A或B为高电平,对应的输入1~2和3~4同时为高电平或低电平时,电机处于制动停止状态。当对使能A或B输入PWM信号时,可以对电机转速进行调速。
4、直流电机控制试验
(1)摇杆控制电机
因为后续想制作一个遥控小车,因此准备用一个双轴摇杆对车辆的前进、后退和转弯进行控制。双轴摇杆一般采用两个10K的可变电阻来表示X、Y轴的变化幅度。当摇杆方向变化时,两个可变电阻的阻值也发生变化。当无外力扭动摇杆时,摇杆处于居中位置。
(2)旋钮电阻调速
因为遥控小车是准备给家里小孩玩的,因为年纪尚小,希望能够控制小车的转速,通过一个旋钮电阻,控制L298N使能A、B的PWM波来进行调速。
(3)代码实现
代码部分其实比较基础。
首先读取可变电阻的信号,用于调整电机转速;其次读取摇杆的X/Y轴阻值信号(VRX/VRY),用于控制电机正反转。因为需要输出,所以阻值信号均映射至0~255区间。
输出部分,val为根据可变电阻生成的pwm信号,从使能端口输入,以控制电机转速;in1~in4根据摇杆的X/Y轴阻值情况在调整高低电平。
(4)实际接线
程序烧录完成后,利用3节3.7V的18650锂电池给L298N和arduino nano供电。电源正极接L298N的12V端子,负极接GND端子,因为arduino nano的vin引脚需要接7~12V电压,因此也接电压正极,GND接L298N的GND端子。注意L298N与arduino nano的引脚连接时,使能端子(ENA/ENB)需要接支持pwm输出的引脚。
(5)实测视频
5、下一阶段学习内容
下一阶段计划对nRF24L01无线接发讯号进行学习。