电机驱动模块L9110S详解

news2024/12/15 3:19:00

电机驱动模块是一种用于控制和驱动电机的设备,它能够将控制信号转化为适合电机操作的电流和电压。通过电机驱动模块,可以实现对电机的速度、方向等参数进行精确控制。

今天我们要介绍的 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语音控制模块详解
作者简介
大家好,我是良许,博客里所有的文章皆为我的原创。
下面是我的一些个人介绍,欢迎交个朋友:
· 211工科硕士,国家奖学金获得者;
· 深耕嵌入式11年,前世界500强外企高级嵌入式工程师;
· 书籍《速学Linux作者》,机械工业出版社专家委员会成员;
· 全网60W粉丝,博客分享大量原创成体系文章,全网阅读量累计超4000万;
· 靠自媒体连续年入百万,靠自己买房买车。

我本科及硕士都是学机械,通过自学成功进入世界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

参考接线如下:

L9110SSTM32备注
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马达L9110SSTM32
GNDG
VCC5V
左侧端子A-1AA8
右侧端子A-1BG

L9110S 的 VCC、GND 应该接外接电源,不然可能会导致板子供电不均,板子重启。但是我这里就一个电机演示,影响不大,我懒就直接接了,好孩子不要学我,哈哈。

烧录的时候接线如下表,如果不会烧录的话可以看我之前的文章【STM32下载程序的五种方法】。

ST-Link V2STM32
SWCLKSWCLK
SWDIOSWDIO
GNDGND
3.3V3V3

接好如下图。开发板使用的是我们自绘的板子。大家也可以用自己的板子,只要是 STM32F103C8T6 主控芯片就行。

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();
    }
}

3.6 最终效果

电机慢速:

电机中速:

电机快速:

4. 小结

通过 L9110S 可以控制电机正转、反转、转速,假设运用在智能小车上就可以实现前进,后退,左右转,原地旋转等动作。希望本文所介绍的内容能够帮助读者更全面地了解 L9110S 电机驱动模块,并激发对其应用的兴趣和探索。感谢各位看官,peace and love!

另外,想进大厂的同学,一定要好好学算法,这是面试必备的。这里准备了一份 BAT 大佬总结的 LeetCode 刷题宝典,很多人靠它们进了大厂。

刷题 | LeetCode算法刷题神器,看完 BAT 随你挑!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

  • 程序员必备编程资料大全
  • 程序员必备软件资源

欢迎关注我的博客:良许嵌入式教程网,满满都是干货!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2259694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 获取鼠标点击位置物体贴图颜色

实现 Ray ray Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit)) {textureCoord hit.textureCoord;textureCoord.x * textureMat.width;textureCoord.y * textureMat.height;textureColor textureMat.GetPixel(Mathf.Flo…

openlayers+vite+vue3实现在地图上画线(四)

在前几期实现离线地图初始化以及规划某一特定区域、打点、出现弹窗的基础上,本文主要阐述如何实现在所规划的区域地图上画线,如果你实现了打点的效果,其实这个相对来说还是算比较简单的,因为和打点的代码大差不差。使用openlayers…

游戏引擎学习第45天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们刚刚开始研究运动方程,展示了如何处理当人物遇到障碍物时的情况。有一种版本是角色会从障碍物上反弹,而另一版本是角色会完全停下来。这种方式感觉不太自然,因为在游戏中,…

类与对象以及ES6的继承

认识class定义类 类的声明用的比较多 类与构造函数的异同 类的构造函数 类的实例方法 类的访问器方法 在类里面写拦截方法 类的静态方法 通过类名直接访问 es6类的继承-extends super关键字 子类可以重写父类方法包括父类的静态方法也可以继承父类的静态方法 babel可以将新的代…

通过IKE协商方式建立IPSec隧道

我们前面学习了H3C的IPsec VPN配置(为什么IPsec两端内网的网段能不能重复?分明可以实现!),学习了Juniper的IPsec VPN配置,学习了Windows的IPsec VPN配置(配置Juniper虚墙vSRX基于策略的IPsec VP…

文献分享: EMVB——PLAID后期交互引擎的进一步优化

👉前情提要: 神经网络自然语言模型概述 Transformer \text{Transformer} Transformer与注意力机制概述 📚相关论文: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding \text{BERT: Pre-train…

vue2+element-ui实现多行行内表格编辑

效果图展示 当在表格中点击编辑按钮时:点击的行变成文本框且数据回显可以点击确定按钮修改数据或者取消修改回退数据: 具体实现步骤 1. 行数据定义编辑标记 行数据定义编辑标记 当在组件中获取到用于表格展示数据的方法中,针对每一行数据添加一个编辑标记 this.list.f…

介绍几个Linux下的杀毒软件

一:chkrootkit 是一个用于检测Linux系统下可能被攻击者植入的后门程序或恶意代码的扫描工具。 (1)安装方法(ubuntu) sudo apt update sudo apt install chkrootkit (2)使用方法: chkrootkit -…

JS 中请求队列与锁的巧妙结合

一、引言 在 JavaScript 开发中,尤其是在涉及到异步操作和对共享资源的并发访问时,有效地控制请求顺序和资源访问权限至关重要。例如,在多个网络请求同时针对一个有限制访问频率的 API 或者多个异步任务竞争同一个文件写入权限的场景下&#…

MYSQL索引的分类和创建

目录 1、聚簇索引和非聚簇索引 tips: 小问题:主键为什么建议使用自增id? 2、普通索引 (常规索引)(normal) 3、唯一索引(UNIQUE ) 唯一索引和主键的区别: 唯一约束和唯一索引的区别&#…

Oracle最佳实践-优化硬解析

前段时间参加oracle CAB,oracle高级服务部门做了一个数据库最佳实践的报告,其中就有一项就是解决未使用绑定变量但执行次数很多的SQL; 对于一个数据库来说如果不知道该如何优化,那么最简单最有效的优化就是减少硬解析,…

AI Agent:重塑业务流程自动化的未来力量(2/30)

《AI Agent:重塑业务流程自动化的未来力量》 摘要:整体思路是先介绍 AI Agent 的基本情况,再深入阐述其实现业务流程自动化的方法和在不同领域的应用,接着分析其价值和面临的挑战,最后得出结论,为读者全面…

哈默纳科Harmonic谐波减速机机器人精准高效动力传递的核心力量

在当今科技飞速发展的时代,机器人技术正以惊人的速度改变着我们的生产与生活方式。而在机器人的精密机械结构中,哈默纳科 Harmonic 谐波减速机扮演着不可或缺的角色,成为机器人精准高效动力传递的关键所在。 1.高精度与灵活性:哈默…

【开源项目】经典开源项目数字孪生体育馆—开源工程及源码

飞渡科技数字孪生体育馆管理平台,融合物联网IOT、BIM数据模型、三维GIS等技术,实现体育馆的全方位监控和实时全局掌握,同时,通过集成设备设施管理、人员管理等子系统,减少信息孤岛,让场馆“可视、可控、可管…

长短期记忆神经网络(LSTM)介绍

1、应用现状 长短期记忆神经网络(LSTM)是一种特殊的循环神经网络(RNN)。原始的RNN在训练中,随着训练时间的加长以及网络层数的增多,很容易出现梯度爆炸或者梯度消失的问题,导致无法处理较长序列数据,从而无…

SQL server学习03-创建和管理数据表

目录 一,SQL server的数据类型 1,基本数据类型 2,自定义数据类型 二,使用T-SQL创建表 1,数据完整性的分类 2,约束的类型 3,创建表时创建约束 4,任务 5,由任务编写…

正则表达式——参考视频B站《奇乐编程学院》

智能指针 一、背景🎈1.1. 模式匹配🎈1.2. 文本替换🎈1.3. 数据验证🎈1.4. 信息提取🎈1.5. 拆分字符串🎈1.6. 高级搜索功能 二、原料2.1 参考视频2.2 验证网址 三、用法3.1 限定符3.1.1 ?3.1.2 *3.1.3 3.1.…

Elasticsearch 集群部署

Elasticsearch 是一个分布式的搜索和分析引擎,广泛应用于日志分析、全文搜索、实时数据分析等场景。它以其高性能、高可用性和易用性而著称。本文档将引导您完成一个基本的 Elasticsearch 集群配置,包括节点间的通信、客户端访问、安全设置等关键步骤。我…

#思科模拟器通过服务配置保障无线网络安全Radius

演示拓扑图: 搭建拓扑时要注意: 只能连接它的Ethernet接口,不然会不通 MAC地址绑定 要求 :通过配置MAC地址过滤禁止非内部员工连接WiFi 打开无线路由器GUI界面,点开下图页面,配置路由器无线网络MAC地址过…

webstorm开发uniapp(从安装到项目运行)

1、下载uniapp插件 下载连接:Uniapp Tool - IntelliJ IDEs Plugin | Marketplace (结合自己的webstorm版本下载,不然解析不了) 将下载到的zip文件防在webstorm安装路径下,本文的地址为: 2、安装uniapp插…