问题描述:由单片机的VCC引脚供电,使用L298N控制两个电机,发现左右两个轮子的转速老是不一样,更多的情况是左轮转速高(左轮电机接OUT1和OUT2),右轮转速低(右轮电机接OUT3和OUT4)甚至不转(需要用手戳一下才转)。
 
    在这种情况下,如果让下车前行,它很有可能走的不是直线,甚至会以右轮为圆心原地打转。为了解决这个问题,我做了以下几种猜想并加以验证:
猜想1:右电机卡壳或其他原因造成其电阻过大。
实验:交换左右轮
结果:情况与问题描述没有区别。这说明不是电机的问题。
 
猜想2:这个L298N的OUT3和OUT4输出有问题。
实验:更换一个L298N
结果:为了完成这个猜想,我在淘宝上买了另一家的L298N模块。按照之前的正确的接线方法,发现结果仍然没有改善,这说明不是L298N的问题。
 
猜想3:我的单片机扩展了RFID模块,4路红外寻迹模块,他们都需要供电,这导致单片机对L298N的输入电压过低
实验:在左右轮转动的过程中,插上RFID模块、4路红外寻迹模块的电源,观测轮子的转速是否发生变化。
结果:发现虽然有影响,但是似乎不大。但是在这个过程中我发现当红外寻迹模块的四个接受器都能收到反射的红外信号时,右轮会明显得卡住不动,由此我认为其他模块的确会对L298N的输入电压产生影响。
 
猜想4:L298N对左右两个电机的输出的电压不同
实验:利用万用表测量输出电压。
结果:由于我这里没有买万用表,所以没有具体结果。不过我百度发现也有人遇到这个问题并且也说明了是两个输出电压不同的原因;我查阅了电机的说明书,发现电机的转速的确和输入电压有正相关关系。这一切都表明电机的转速不同是由于电压不同引起的。
总结猜想3与猜想4,得出的结论是:L298N的输入电流过低,两侧的输出电压不同,导致两个电机转速不同。
 
解决方案:在网上我查到可以给L298N添加PWM调速模块,但是我觉得不仅会增添我在硬件上的麻烦,也会增加我在编程上的工作量,并且我也了解到PWM调速系统的价格并不比一个额外的L298N便宜,所以我做起了一个L298N带动一个电机的想法,这两个L298N以并联的方法接一个独立电源(给单片机供电的也有一个电源)。
 
接线方法:具体如下图所示其实接线方法很简单,只是有一点需要注意,就是左右两个L298N的GND口要与单片机的GND共线,并且最后连接到独立电源的负极上。其中由P14、P15引脚控制左轮的正反转,P16、P17控制右轮的正反转。
至于这样接对独立电源或单片机是否会造成损害,目前我不得而知,希望读者大佬能不理赐教,在评论区留下您的评价~
 
使用代码调速:

按照我的经验,如果你的独立电源电压比较大,则两个电机的转速会比较快。有时为了调试程序,我们需要车速放慢一些以方便我们观察小车的情况。这里仍然不用调速系统这个硬件,我已经用纯代码的方式做到了调速这一点,下面给大家分享:

假设你已经实现了:前进run()函数 和 停车stop()函数,这里我们只需要额外一个延迟函数delay_ms()即可。
while() {
  run(); delay_ms(M);
  stop();delay_ms(N);
}
  • 在上面的代码中,若M=N,则车速就会降为全速的一半。为了使车看上去不是很卡顿的样子,一般这里的M和N比较小,例如M=N=2.
  • 延迟函数delay_ms()的具体代码可以参考这里:http://www.cnblogs.com/stxs/p/8878088.html
 
 
 
 

[问题解决]不使用PWM调速系统,彻底解决一个L298N带动两个电机却转速不同的问题的更多相关文章

  1. 直流电机PWM调速系统中控制电压非线性研究_控制元件_工业自动化控制_文章

    直流电机PWM调速系统中控制电压非线性研究_控制元件_工业自动化控制_文章_e-works数字化企业网 http://articles.e-works.net.cn/Component/Article ...

  2. 直流调速系统Modelica基本模型

    为了便于在OpenModelica进行仿真,形成一个完整的仿真模型,没有使用第三方的库,参照了DrModelica的例程,按照Modelica库的开源模型定义了所用的基本元件模型. 首先给出一些基本类 ...

  3. PLECS_晶闸管调速系统_9w

    3. 直流电机开环调压调速系统模型搭建 (1)电路图 (2)仿真 当 α = pi / 2.7 的时候,直流电机的稳定转速大约保持很低的速度. 随着α的减少,直流电机的速度逐渐增大.当α = pi / ...

  4. 51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1——前进 按键2——后退 按键3——加速 按键4——减速 (板子上只有四个按键) 串口控制 ‘1’——前进 ...

  5. 51单片机—使用PWM对直流电机调速

    文章目录 - 什么是PWM - PWM是怎么对直流电机进行调速的 - 通过定时器中断实现PWM调速 - 上代码 - 什么是PWM PWM(脉宽调制),是靠改变脉冲宽度来控制输出电压,通过改变周期来控制 ...

  6. 玩转X-CTR100 l STM32F4 l TB6612直流电机调速控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的直流调速电机控制,X ...

  7. 用STM32玩L298N(正反转、调速)

    目录 用STM32玩L298N(正反转.调速) 控制直流电机正反转 使用PWM调速 用STM32玩L298N(正反转.调速) 开发板:STM32F103ZET6(正点原子F103核心板)/STM32F ...

  8. 通过PROFINET网络实现SINAMICS 120的PN IO OPC通讯,起动及调速控制 | OPC通讯

    1 概述 TCP/IP 通讯的传输时间可能太长,并且该时间具有不确定性,无法满足生产自动化领域的要求.因此,在进行时间要求苛刻的IO 有效载荷数据通讯时,PROFINET IO 不使用TCP/IP,而 ...

  9. 过渡与动画 - steps调速函数&CSS值与单位之ch

    写在前面 上一篇中我们熟悉五种内置的缓动曲线和(三次)贝塞尔曲线,并且基于此完成了缓动效果. 但是如果我们想要实现逐帧动画,基于贝塞尔曲线的调速函数就显得有些无能为力了,因为我们并不需要帧与帧之间的过 ...

随机推荐

  1. \r\n和\n的区别

    写Java代码的时候习惯用\r\n换行,这样可移植性比较好但是,在UVa - 160中就出现了错误,来看看是为什么吧. http://bbs.csdn.net/topics/220033879

  2. JavaWeb温习之Session对象

    1. Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服 ...

  3. linux的~和/的区别

    转自:https://zhidao.baidu.com/question/166486946.html /是目录层的分隔.表示符.只有一个/表明是root,/etc/表明是根目录下面的etc目录(当然 ...

  4. ThinkPHP的增删改查!

    对表的操作: 增加:M('表名')->add($data);  (可以是数组) 删除:M('表名')->delete($data); (不可以是数组,删除多个有另外的方法) 修改:M('表 ...

  5. 最小圆覆盖(随机增量法&模拟退火法)

    http://acm.hdu.edu.cn/showproblem.php?pid=3007 相关题型连接: http://acm.hdu.edu.cn/showproblem.php?pid=393 ...

  6. StartUML-时序图

  7. Scanline Fill Algorithm

    https://www.sccs.swarthmore.edu/users/02/jill/graphics/hw3/hw3.html http://web.cs.ucdavis.edu/~ma/EC ...

  8. 云备份厂商Rubrik再获2.61亿美元融资,估值高达33亿美元 转自中国存储网

    数据管理初创公司Rubrik在Bain Capital Ventures领导的最新一轮融资中筹集了2.61亿美元,估值为33亿美元. 现有的利益相关者 - Lightspeed Venture Par ...

  9. django的crontab

    最近需要考虑如何在django环境中跑定时任务. 这个在  stackoverflow 也有对应的 讨论 , 方法也有不少, 这边简单尝试和总结下. 假设我们现在的定期任务就是睡眠  n 秒, 然后往 ...

  10. orcle中如何使用动态游标来对变量进行赋值

    在oracle中动态游标的概念一般不常用,但有时根据客户的特殊业务,需要使用到动态游标来解决问题!在对于一条动态SQL语句而产生多条记录时,动态游标的使用将是一个很好的选择,具体参见如下在工作流项目中 ...