电机驱动模块L9110S详解
2025-02-08 来源:jianshu
电机驱动模块是一种用于控制和驱动电机的设备,它能够将控制信号转化为适合电机操作的电流和电压。通过电机驱动模块,可以实现对电机的速度、方向等参数进行精确控制。
今天我们要介绍的 L9110S 电机驱动适合大学生、工程师、个人DIY、电子爱好者们学习和使用,它可以驱动直流/步进电机。本文将深入探讨 L9110S 电机驱动的工作原理、技术实现和应用案例,帮助您更好地了解这一模块。
1. 源码下载及前置阅读
本文首发 良许嵌入式网 :https://www.lxlinux.net/e/ ,欢迎关注!
本文所涉及的源码及安装包如下(由于平台限制,请点击以下链接阅读原文下载):
https://www.lxlinux.net/e/stm32/l9110s-tutorial.html
如果你是嵌入式开发小白,那么建议你先读读下面几篇文章。
如果你想搭一个属于自己的工程模板:手把手带你创建HAL版本MDK工程模板
手把手教你安装和使用STM32CubeMX:一文教你使用STM32CubeMX开发工具
计算机概念理清,生动形象,通俗易懂:图解固件、驱动、软件的区别
往期教程,有兴趣的小伙伴可以看看。
解析红外编解码模块的原理、功能和应用:红外模块详解
实现物联网数据采集与远程监控:小项目:使用MQTT上传温湿度到Onenet服务器
简单好用,为你的智能语音项目提供核心支持:SU-03T语音控制模块详解
我本科及硕士都是学机械,通过自学成功进入世界500强外企。我已经将自己的学习经验写成了一本电子书,超千人通过此书学习并转行成功。现在将这本电子书免费分享给大家,希望对你们有帮助:
电子书链接:https://www.lxlinux.net/1024.html
2. L9110S介绍
2.1 L9110S型号介绍
L9110S 有二路和四路两种,二路可以驱动 2 个直流电机,或者 1 个 4 线 2 相式步进电机;四路可以驱动 4 个直流电机,或者 2 个 4 线 2 相式步进电机。
今天我们使用的是二路的。
2.2 L9110S参数及引脚介绍
L9110S参数:
双 L9110S 芯片的电机驱动
模块供电电压:2.5 ~ 12V
工作温度:0℃ ~ 80℃
适合的电机范围:电机工作电压 2.5V ~ 12V 之间,最大工作电流 0.8A
可以同时驱动 2 个直流电机,或者 1 个 4 线 2 相式步进电机
PCB 板尺寸:2.8cm*2.1cm 超小体积,适合组装
设有固定安装孔,直径:3mm
[图片上传失败...(image-2954da-1734095190858)]
参考接线如下:
| L9110S | STM32 | 备注 |
|---|---|---|
| B-1A | 任意 GPIO 口 | 控制电机 |
| B-1B | 任意 GPIO 口 | 控制电机 |
| VCC | 外接电源正极(2.5 ~ 12V) | |
| GND | 外接电源负极 | |
| A-1A | 任意 GPIO 口 | 控制电机 |
| A-1B | 任意 GPIO 口 | 控制电机 |
用杜邦线可以直接插进模块绿色的接口,其他的线用螺丝刀调整接口大小即可接入。
接通 VCC、GND,模块电源指示(红)灯亮。
以驱动 2 个直流电机为例:
A-1A 输入高电平,A-1B 输入低电平,MotorA 电机正转;
A-1B 输入低电平,A-1A 输入高电平,MotorA 电机反转;
B-1A 输入高电平,B-1B 输入低电平,MotorB 电机正转;
B-1B 输入低电平,B-1A 输入高电平,MotorB 电机反转。
3. 编程实战
我们都知道,一正一负就可以让电机转,电压约大转越快,但是这样太没挑战了。
我们的实战目标是利用 PWM,让电机进行慢、中、快速旋转。
3.1 硬件接线
本教程使用的硬件如下:
单片机:STM32F103C8T6
电机驱动:L9110S
电机:TT马达
烧录器:ST-LINK V2
| TT马达 | L9110S | STM32 |
|---|---|---|
| GND | G | |
| VCC | 5V | |
| 左侧端子 | A-1A | A8 |
| 右侧端子 | A-1B | G |
L9110S 的 VCC、GND 应该接外接电源,不然可能会导致板子供电不均,板子重启。但是我这里就一个电机演示,影响不大,我懒就直接接了,好孩子不要学我,哈哈。
烧录的时候接线如下表,如果不会烧录的话可以看我之前的文章【STM32下载程序的五种方法】。
| ST-Link V2 | STM32 |
|---|---|
| SWCLK | SWCLK |
| SWDIO | SWDIO |
| GND | GND |
| 3.3V | 3V3 |
接好如下图。开发板使用的是我们自绘的板子。大家也可以用自己的板子,只要是 STM32F103C8T6 主控芯片就行。
[图片上传失败...(image-d03eae-1734095190858)]
3.2 PWM初始化
初始化一个 PWM 定时器和通道,并开启。注释写的很清楚啦,我这里不多说了。
void pwm_init(uint16_t arr, uint16_t psc){
TIM_OC_InitTypeDef timx_oc_pwmdac = {0};
PWM_TIM_CLK_ENABLE(); /* PWM 定时器时钟使能 */
htim1.Instance = TIM1; /* 定时器1 */
htim1.Init.Prescaler = psc; /* 定时器分频 */
htim1.Init.CounterMode = TIM_COUNTERMODE_UP; /* 递增计数模式 */
htim1.Init.Period = arr; /* 自动重装载值 */
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; /* 使能TIMx_ARR进行缓冲 */
HAL_TIM_PWM_Init(&htim1); /* 初始化PWM */
timx_oc_pwmdac.OCMode = TIM_OCMODE_PWM1; /* CH1/2 PWM模式1 */
timx_oc_pwmdac.Pulse = 0; /* 设置比较值,此值用来确定占空比 */
timx_oc_pwmdac.OCPolarity = TIM_OCPOLARITY_HIGH; /* 输出比较极性为高 */
HAL_TIM_PWM_ConfigChannel(&htim1, &timx_oc_pwmdac, PWM_TIM_CH); /* 配置TIM1通道1 */
HAL_TIM_PWM_Start(&htim1, PWM_TIM_CH); /* 开启定时器1通道1 */}4.3 定时器使能、引脚配置
复写 HAL_TIM_PWM_MspInit ,进行定时器驱动、时钟使能和引脚配置。
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
GPIO_InitTypeDef gpio_init_struct;
if (htim->Instance == TIM1)
{
__HAL_RCC_TIM1_CLK_ENABLE(); /* 使能定时器1 */
__HAL_AFIO_REMAP_TIM1_PARTIAL(); /* TIM1通道引脚部分重映射使能 */
PWM_GPIO_CLK_ENABLE(); /* GPIO 时钟使能 */
gpio_init_struct.Pin = PWM_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
gpio_init_struct.Pull = GPIO_PULLUP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(PWM_GPIO_PORT, &gpio_init_struct); /* 引脚模式设置 */
}
}
3.4 PWM设计
通过 CCRx 控制 PWM 占空比,让电机进行慢、中、快速旋转。CCRx 的取值范围即 0 ~ ARR。
这里我的测试结果是需要从 9 开始才能驱动,太小驱动不起来。这个驱动临界值和外接电压、电机型号,以及如果你做成项目,和摩檫力,载重都有关系。大家根据自己的实际情况调 PWM。
void pwm_show(void)
{
__HAL_TIM_SET_COMPARE(&htim1, PWM_TIM_CH, 9); /* 输出新的PWM占空比,慢 */
delay_ms(5000);
__HAL_TIM_SET_COMPARE(&htim1, PWM_TIM_CH, 12); /* 输出新的PWM占空比,中 */
delay_ms(5000);
__HAL_TIM_SET_COMPARE(&htim1, PWM_TIM_CH, 15); /* 输出新的PWM占空比,快 */
delay_ms(5000);
}
3.5 主函数
主函数如下:
int main(void){
HAL_Init(); /* 初始化HAL库 */
stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
pwm_init(19, 71); /* PWM初始化*/
while(1)
{
pwm_show();
}4. 小结
通过 L9110S 可以控制电机正转、反转、转速,假设运用在智能小车上就可以实现前进,后退,左右转,原地旋转等动作。希望本文所介绍的内容能够帮助读者更全面地了解 L9110S 电机驱动模块,并激发对其应用的兴趣和探索。
- 意法半导体中国本地造STM32微控制器启动规模量产
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 基于机智云与STM32的智能拐杖安全监测系统在养老物联网中的应用
- 内置全栈安全,一站式满足CRA法案与IEC 62443标准——米尔STM32MP257核心板
- 如何用 STM32 FLASH 实现等效 100 万次擦写的 EEPROM 功能?
- 实战解析:通过一个小项目掌握STM32所有外设
- STM32学了两年半,却还是不会做项目
- 意法半导体推出最新STM32MP21微处理器,兼具高性价比、低功耗、高灵活性
- 基于STM32的矿井作业环境监测系统设计与实现
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




