L9110S电机驱动模块demo

news2024/11/28 14:06:31

0.资料

项目工程文件夹

分文件原理


1.认识L9110S

1、概述:

一个L9110S驱动可以控制一个电机,图中左右两个黑色芯片就是L9110S驱动。当然如果会硬件也可以直接把它们设计到单片机开发板上。

一个电机由两个针脚控制,我们用杜邦线让L9110S和单片机连接,两个针脚的电平高低会决定电机正转还是反转。

2、引脚说明:

  • L9110S模块有6根引脚,如下:
    编号符号说明
    1VCC供电,3~5,5V,DC
    2GND接地,电源负极
    3A-1A如上图中,与MotorA左侧端子相连。
    4A-1B如上图中,与MotorA右侧端子相连。
    5B-1A如上图中,与MotorB左侧端子相连。
    6B-2A如上图中,与MotorB右侧端子相连。
  • 值得注意的是,最好不要直接由开发板来给模块供电,因为L9110S模块可能会因为需求的驱动功率太高而导致板子上的供电不平衡。

2.L9110s驱动测试

1、和单片机的接线方式:注意一开始把电池电源切断,防止接线的时候出错烧毁L9110S模块。

  • 为了适配接下来的代码:以车头方向超前为准,小车上L9110S驱动模块和两个电机的连接方式如下:
    • 驱动模块上motor A的白色线锡焊在左边电机的上面、黑色线锡焊在左边电机的下面
    • 驱动模块上motor B的褐色线锡焊在右边电机的上面、红色线锡焊在右边电机的下面。
  1. 电源线
    1. L9110S上的VCC——电源VCC
    2. L9110S上的GND——电源GND
    3. 单片机GND——电源GND。原因:要想实现单片机和L9110S驱动模块的信号传输,不仅需要连接好相应的I/O口,还需要将两者共地。
  2. 控制线
    1. L9110S上的B-1A——P3.2。此时单片机这个引脚间接连接到右电机下触点,作用是通过电平切换控制右电机正反转。
    2. L9110S上的B-1B——P3.3。此时单片机这个引脚间接连接到右电机上触点,作用是通过电平切换控制右电机正反转。
    3. L9110S上的A-1A——P3.4。此时单片机这个引脚间接连接到左电机下触点,作用是通过电平切换控制左电机正反转。
    4. L9110S上的A-1B——P3.5。此时单片机这个引脚间接连接到左电机上触点,作用是通过电平切换控制左电机正反转。

2、电机正反转测试:

  1. 说明:网上给的说明和L9110S的引脚编号对不上,自己测试一下即可。电机的上下接触点的电平可高可低,所以一个电机最多共有4种转动情况,依次验证即可。
  2. 测试代码
    /* 公共代码 */
    #include "reg52.h"
    
    sbit RightCon_1A = P3^2;   //L9110S的MotorB_1A--右轮电机下接触点
    sbit RightCon_1B = P3^3;   //L9110S的MotorB_1B--右轮电机上接触点
    sbit LeftCon_1A  = P3^4;   //L9110S的MotorA_1A--左轮电机下接触点
    sbit LeftCon_1B  = P3^5;   //L9110S的MotorA_1B--左轮电机上接触点
    
    /* 情形一: */
    void main(void)
    {
        /* 右轮测试:不转 */
        RightCon_1A = 0;
        RightCon_1B = 0;
        /* 左轮测试:不转 */
        LeftCon_1A = 0;
        LeftCon_1B = 0;
    }
    
    /* 情形二: */
    void main(void)
    {
        /* 右轮测试:前进 */
        RightCon_1A = 0;
        RightCon_1B = 1;
        /* 左轮测试:前进 */
        LeftCon_1A = 0;
        LeftCon_1B = 1;
    }
    
    /* 情形三: */
    void main(void)
    {
        /* 右轮测试:倒退 */
        RightCon_1A = 1;
        RightCon_1B = 0;
        /* 左轮测试:倒退 */
        LeftCon_1A = 1;
        LeftCon_1B = 0;
    }
    
    /* 情形四: */
    void main(void)
    {
        /* 右轮测试:不转 */
        RightCon_1A = 1;
        RightCon_1B = 1;
        /* 左轮测试:不转 */
        LeftCon_1A = 1;
        LeftCon_1B = 1;
    }

  3. 测试结果
    1. 电机正转(向前):下接触点为高电平、上接触点为低电平。
    2. 电机反转(向后):下接触点为低电平、上接触点为高电平。
    3. 其余两种电平情况电机均不转动。

3.前后左右控制小车

1、小车前进函数封装 :

  • 逻辑:左轮和右轮都正转
    void goForward()
    {
        /* 右轮:前进 */
        RightCon_1A = 0;
        RightCon_1B = 1;
        /* 左轮:前进 */
        LeftCon_1A = 0;
        LeftCon_1B = 1;
    }

2、小车后退函数封装:

  • 逻辑:左轮和右轮都反转
    void goBack()
    {
        /* 右轮:倒退 */
        RightCon_1A = 1;
        RightCon_1B = 0;
        /* 左轮:倒退 */
        LeftCon_1A = 1;
        LeftCon_1B = 0;
    }

3、小车向前左转函数封装:

  • 逻辑:左轮停止、右轮正转
    void goForward_left()
    {
        /* 右轮:前进 */
        RightCon_1A = 0;
        RightCon_1B = 1;
        /* 左轮:不转 */
        LeftCon_1A = 0;
        LeftCon_1B = 0;
    }

4、小车向前右转函数封装:

  • 逻辑:右轮停止、左轮正转
    void goForward_right()
    {
        /* 右轮:不转 */
        RightCon_1A = 0;
        RightCon_1B = 0;
        /* 左轮:前进 */
        LeftCon_1A = 0;
        LeftCon_1B = 1;
    }

5、小车向后左转函数封装:

  • 逻辑:左轮停止、右轮反转
    void goBack_left()
    {
        /* 右轮:倒退 */
        RightCon_1A = 1;
        RightCon_1B = 0;
        /* 左轮:不转 */
        LeftCon_1A = 0;
        LeftCon_1B = 0;
    }

6、小车向后右转函数封装:

  • 逻辑:右轮停止、左轮反转
    void goBack_right()
    {
        /* 右轮:不转 */
        RightCon_1A = 0;
        RightCon_1B = 0;
        /* 左轮:倒退 */
        LeftCon_1A = 1;
        LeftCon_1B = 0;
    }

4.电机转动测试demo_分文件

1、主程序“main”:

  • 代码:
    #include "reg52.h"
    #include "motor.h"
    #include "delay.h"
    
    void main(void)
    {
        goForward();        //测试:前进
        Delay1000ms();
        Delay1000ms();
        goBack();           //测试:后退
        Delay1000ms();
        Delay1000ms();      
        goForward_left();   //测试:向前左转
        Delay1000ms();
        Delay1000ms();
        goForward_right();  //测试:向前右转    
        Delay1000ms();
        Delay1000ms();
        goBack_left();      //测试:向后左转
        Delay1000ms();
        Delay1000ms();
        goBack_right();     //测试:向后右转
        Delay1000ms();
        Delay1000ms();
    }

2、“电机”模块:

  • 代码:
    #include "reg52.h"
    
    sbit RightCon_1A = P3^2;   //L9110S的MotorB_1A--右轮电机下接触点
    sbit RightCon_1B = P3^3;   //L9110S的MotorB_1B--右轮电机上接触点
    sbit LeftCon_1A  = P3^4;   //L9110S的MotorA_1A--左轮电机下接触点
    sbit LeftCon_1B  = P3^5;   //L9110S的MotorA_1B--左轮电机上接触点
    
    void goForward()
    {
        /* 右轮:前进 */
        RightCon_1A = 0;
        RightCon_1B = 1;
        /* 左轮:前进 */
        LeftCon_1A = 0;
        LeftCon_1B = 1;
    }
    
    void goBack()
    {
        /* 右轮:倒退 */
        RightCon_1A = 1;
        RightCon_1B = 0;
        /* 左轮:倒退 */
        LeftCon_1A = 1;
        LeftCon_1B = 0;
    }
    
    void goForward_left()
    {
        /* 右轮:前进 */
        RightCon_1A = 0;
        RightCon_1B = 1;
        /* 左轮:不转 */
        LeftCon_1A = 0;
        LeftCon_1B = 0;
    }
    
    void goForward_right()
    {
        /* 右轮:不转 */
        RightCon_1A = 0;
        RightCon_1B = 0;
        /* 左轮:前进 */
        LeftCon_1A = 0;
        LeftCon_1B = 1;
    }
    
    void goBack_left()
    {
        /* 右轮:倒退 */
        RightCon_1A = 1;
        RightCon_1B = 0;
        /* 左轮:不转 */
        LeftCon_1A = 0;
        LeftCon_1B = 0;
    }
    
    void goBack_right()
    {
        /* 右轮:不转 */
        RightCon_1A = 0;
        RightCon_1B = 0;
        /* 左轮:倒退 */
        LeftCon_1A = 1;
        LeftCon_1B = 0;
    }

3、“软件延时”模块:

  • 代码:
    #include "intrins.h"
    
    void Delay1000ms()		//@11.0592MHz
    {
    	unsigned char i, j, k;
    
    	_nop_();
    	i = 8;
    	j = 1;
    	k = 243;
    	do
    	{
    		do
    		{
    			while (--k);
    		} while (--j);
    	} while (--i);
    }

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

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

相关文章

MidJourney如何画出专业摄影师拍出的照片效果,附提示词

文 / 高扬(微信公众号:量子论) 最近沉迷于MidJourney作画,与ChatGPT相比,研究AI绘画,可以扩大自己的想像空间。 孩子的想像力更为丰富,如果家有宝宝,可以把孩子们的想法用AI绘画呈现…

面向对象的几大特性总结(适合秋招和小白学习的一篇文章)

前言: 本篇文章主要讲解面向对象的几大特性相关知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了😁 以下正文开始 …

Doo Prime 德璞资本:怎么买黄金期货?黄金期货交易特点有哪些?

黄金期货是一种衍生品,是指在期货交易所上交易的黄金合约。作为一种高风险高收益的投资工具,有哪些黄金期货交易特点?本文围绕这一内容展开说明。 黄金期货交易特点一、需要开立账户 黄金期货是期货,如同股票投资要到证券公司开户一样,黄金期…

JVM | Java内存区域

JVM | Java内存区域 1、运行时数据区域1.1、程序计数器(线程私有)1.2、虚拟机栈(线程私有)1.3、本地方法栈(线程私有)1.4、堆(线程共享)1.5、方法区(元空间)(线程共享)1.6、直接内存(线程共享)2、HotSpot 虚拟机对象分配、布局和访问2.1、对象创建流程2.2、对象的…

【高危】Apache Inlong 存在JDBC反序列化漏洞

漏洞描述 Apache InLong 是可用于构建基于流式的数据分析、建模等一站式的海量数据集成框架。 在Apache Inlong受影响版本,由于未对接收的jdbcUrl参数过滤空格字符,导致可以利用空格绕过jdbcUrl中autoDeserialize参数过滤限制,通过认证的攻…

LegalAI领域大规模预训练语言模型的整理、总结及介绍(持续更新ing…)

诸神缄默不语-个人CSDN博文目录 最近更新日期:2023.6.7 最早更新日期:2023.6.7 文章目录 1. 通用大规模预训练语言模型2. 对话模型3. 分句 1. 通用大规模预训练语言模型 英语: LegalBERT 原始论文:(2020 EMNLP) LEGAL-BERT: Th…

Django - 页面静态化基本使用(一)

一. 前言 一个网页会有很多数据是不需要经常变动的,比如说首页,变动频率低而访问量大,我们可以把它静态化,这样就不需要每次有请求都要查询数据库再返回,可以减少服务器压力 我们可以使用Django的模板渲染功能完成页面…

Linux | SFTP

SFTP 文章目录 SFTPSSH 文件传输协议连接获取SFTP帮助查看及切换路径遍历远程文件系统访问本地的文件系统 传输文件传输本地文件到远程服务器简单的文件操作图形界面程序Reference欢迎关注公众号【三戒纪元】 SSH 文件传输协议 FTP,即文件传输协议,是一…

Java中的几种关键字详细介绍(秋招总结篇)

前言: 本篇文章主要讲解Java中的几种关键字相关知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了😁 以下正文开始 文…

prometheus介绍与安装

prometheus介绍与安装 文章目录 prometheus介绍与安装一、Prometheus 简介1.Prometheus 优势2.Prometheus 基础架构 二、Prometheus 安装1.后端存储配置 三、使用 Prometheus 实现系统监控四、使用 Prometheus Grafana 实现可视化界面四.zabbixgrafana 安装部署参考http://t.c…

【Mininet】基础篇:开源控制器POX

大家好,我是文思月! 每文一言:时间不在于你拥有多少,而在于你如何使用! 本篇文章: 本篇文章主要是基于POX控制器进行的两个实验:一个是使交换机模拟hub(集线器)的功能&a…

逍遥自在学C语言 | 宏定义技巧让你的C代码快人一步

前言 在C语言中,宏定义是一种预处理指令,用于在代码中定义和使用常量、函数或代码片段的替代。 宏定义使用#define关键字来定义,并在代码中进行替换。宏定义具有以下优点: 简化代码:宏定义可以将一些常用的、重复出…

MySQL高可用集群解决方案之:lvs+keepalived+mysql cluster实现负载均衡

一:前言 Mysql-cluster本身实现了高可用,但是其sql节点并没有实现负载均衡。怎样让程序能均衡地访问sql节点呢,程序里写哪个数据库服务器IP呢? LVS是实现负载均衡作用的,即将客户端的需求采用特定的负载均衡算法分发…

在职考研 | 对于朝九晚五的上班族来说同等学力申硕更轻松!

我们要知道的是,考在职研究生的群体90%以上都是朝九晚五的上班族。 他们工作忙,时间和精力都很有限。 考研本身难度就很大,但是既拿不出足够多的备考时间,也没法到线下去上课。 怎么能考上呢? 在这样的现实条件下&…

yolov5部署到android studio

目录 环境获取demo将pt文件导出为ptl文件修改demo修改PrePostProcessor增加ptl文件并增加类别文件修改MainActivity 大功告成 环境 Ubuntu22.10 Pytorch2.0.1cu117 Android Studio Flamingo | 2022.2.1 Patch 1 获取demo git clone https://github.com/pytorch/android-demo…

self Attention 位置编码的奇偶输入问题

attention机制一直是放在encoder-decoder中进行使用,self-attention是为了解决前者结构无法并行计算,而抽离出的概念(前者的编码解码多为时序网络)。 但因为缺少时序模型天然的位置编码特点,所以self-attention模型需要…

Docker镜像大小优化

如何缩小镜像的体积大小? 1)尽可能的使用小体积的基础镜像 2)尽可能减少Dockerfile文件中的指令数量 3)构建镜像步骤最后添加清空系统和应用程序的缓存的命令 4)使用多级(多阶段)构建 FROM A…

亚信科技AntDB数据库荣获赛宝优选信创优秀解决方案奖

近日,由工业和信息化部电子第五研究所主办的中国赛宝信创生态合作伙伴大会暨赛宝优选信创优秀解决方案颁奖仪式在北京成功举办,亚信科技AntDB数据库信创解决方案“业务支撑系统核心数据库迁移改造”从千余案例中脱颖而出,荣获赛宝优选信创优秀…

文件描述符表

文章目录 1. 文件描述符1.1 前言1.2 理解文件1.3 文件描述附表1.4 打开文件时1.5 默认打开的三个文件 2. 重定向2.1 瞅瞅2.2 dup22.3 实现原理 3. 一切皆文件 1. 文件描述符 1.1 前言 环境:Linux 2.6 在 Linux 中,有句话叫做「一切皆文件」&#xff0…

Coinbase:如有必要,不惜在最高法院与SEC“一决胜负”!

6日早间,央视财经频道(CCTV-2)对“币安及其首席执行官被美证交会(SEC)起诉”进行了报道。 值得一提的是,央视并不常播报加密货币相关新闻,上一次是关于香港监管框架,赵长鹏&#xff…