本文基于 FlexLua 低代码单片机技术,无需复杂单片机C语言开发。即使新手也可很容易用FlexLua零门槛开发各种功能丰富稳定可靠的 IoT 硬件,更多学习教程可参考 FlexLua 官网。
一、本章实现功能介绍
通过PWM信号控制直流电机的转动和停止,电机的调速,以及电机的正反转,当开发板上的BTN1按键下时电机以开发者设定的速度正转或停机,当开发板上的BTN2按键下时电机以开发者设定的速度反转或停机。
虽然这里演示用的是L9110S小功率电机驱动模块,但无论大小电机其PWM驱动原理都是一样的,如果开发者用的更大功率的电机,可以用其他电机驱动来替换L9110S驱动方案
二、L9110S电机驱动芯片介绍
L9110S是为控制和驱动小型马达设计的双通道推挽式功率放大专用集成电路器件,将分立电路集成在单片IC之中,使外围器件成本降低,整机可靠性提高。该芯片输入端兼容TTL/CMOS电平,具有良好的抗干扰性;该电路具备较大的电流驱动能力,每通道能通过0.8~1.0A的持续电流,峰值电流能力可达2.5A;该电路具有过温保护功能,内置的钳位二极管能释放感性负载的反向冲击电流。
参考电路原理图(两路电机):
三、本章演示所用电机和驱动模块介绍
产品板载一个直流电机+螺旋桨,以及L9110电机驱动芯片
产品尺寸:50X26X15mm(不含螺旋桨)
螺旋桨直径:75mm
工作电压:5V
四、接线图
五、材料清单
L9110电机驱动模块
ShineBlink C1/C2 Mini 开发板
六、完整实例代码
当开发板上的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查询。
领取专属 10元无门槛券
私享最新 技术干货