跳到主要内容

直流电机 PWM 控制

一、本章实现功能介绍

  • 通过PWM信号控制直流电机的转动和停止,电机的调速,以及电机的正反转,当开发板上的BTN1按键下时电机以开发者设定的速度正转或停机,当开发板上的BTN2按键下时电机以开发者设定的速度反转或停机。
  • 虽然这里演示用的是L9110S小功率电机驱动模块,但无论大小电机其PWM驱动原理都是一样的,如果开发者用的更大功率的电机,可以用其他电机驱动来替换L9110S驱动方案

二、L9110S电机驱动芯片介绍

L9110S是为控制和驱动小型马达设计的双通道推挽式功率放大专用集成电路器件,将分立电路集成在单片IC之中,使外围器件成本降低,整机可靠性提高。该芯片输入端兼容TTL/CMOS电平,具有良好的抗干扰性;该电路具备较大的电流驱动能力,每通道能通过0.8~1.0A的持续电流,峰值电流能力可达2.5A;该电路具有过温保护功能,内置的钳位二极管能释放感性负载的反向冲击电流。

chip_intro0

chip_intro1

参考电路原理图(两路电机):

ref_sch

三、本章演示所用电机和驱动模块介绍

产品板载一个直流电机+螺旋桨,以及L9110电机驱动芯片

产品尺寸:50X26X15mm(不含螺旋桨)

螺旋桨直径:75mm

工作电压:5V

product1

四、接线图

layout

Product0

五、材料清单

名称推荐购买链接(或者你可以自己制作)模块/芯片硬件资料下载
L9110电机驱动模块L9110电机驱动模块下载地址
声明:这里推荐的购买链接仅供参考,您完全可以去其他商家或渠道购买,只要功能相似即可,如果需要更低的成本建议自己开发硬件模块或定制。

六、完整实例代码

当开发板上的BTN1按键下时电机以开发者设定的速度正转或停机,当开发板上的BTN2按键下时电机以开发者设定的速度反转或停机

--设置开发板上的按键"BTN1"(占用D10口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN1","D10","L")
--设置开发板上的按键"BTN2"(占用D11口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN2","D11","L")
--配置D0 D1 D2口为PWM功能,周期20ms,高电平为有效极性
LIB_PwmConfig3(20000,1)
--当INA高电平 INB低电平时电机正转,反之亦然
--更新D0口的PWM输出占空比为0%, D0口接L9110的INA
--更新D1口的PWM输出占空比为0%, D1口接L9110的INB
--更新D2口的PWM输出占空比为0%, D2口未使用
LIB_PwmUpdate3(0,0,0)
motor_is_running = 0
--开始大循环
while(GC(1) == true)
do
--轮询BTN1按键事件
key_value = LIB_ButtonQuery("BTN1")
--如果按键短按过
if key_value == 1 then
--正转
if motor_is_running == 0 then
motor_is_running = 1
--INA输出50%占空比的高电平(调整占空比可以改变电机转速)
--INB输出低电平
LIB_PwmUpdate3(10000,0,0)
--停机
else
motor_is_running = 0
LIB_PwmUpdate3(0,0,0)
end
end
--轮询BTN2按键事件
key_value = LIB_ButtonQuery("BTN2")
--如果按键短按过
if key_value == 1 then
--反转
if motor_is_running == 0 then
motor_is_running = 1
--INA输出低电平
--INB输出50%占空比的高电平(调整占空比可以改变电机转速)
LIB_PwmUpdate3(0,10000,0)
--停机
else
motor_is_running = 0
LIB_PwmUpdate3(0,0,0)
end
end
end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。