找回密码
 立即注册
查看: 3503|回复: 11

直流有刷电机智能双驱开源 | 持续更新中

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-7-12 13:25:07 | 显示全部楼层 |阅读模式

直流有刷电机智能双驱开源 | 持续更新中
前言:
最近发现小车运行中的差速对转弯性能的影响非常大。如果差速不对,甚至有可能后轮推着前轮跑。
为此,我特意研究了一下这个差速问题,想到了一个解决方法,与大家分享一下。
这个方法我还没验证过,欢迎大家提出意见和交流。我也会在验证后持续更新。
【2024年7月12日晚 更新】原理验证正确,保证可以正常使用。


前提:
使用的是四轮小车模型,后轮双电机驱动,前轮无动力,使用舵机进行转向控制。
如果前轮使用舵机打固定角度,手推情况下后轮会被阻挡产生速度不一致情况。


差速解决思路:
小车通常使用H桥控制,这里我简化问题,只考虑单向驱动的情况,则只需要一个半桥控制即可。
但是由于MOS管的体二极管问题,我们还需要使用另一路半桥中的下桥臂来阻挡空转情况的续流回路。
截图202407130107307846.jpg


那么半桥就能通过上桥臂和下桥臂的控制,引申出四种状态
分别是
截图202407130110061314.jpg

其中,上下直通是不允许,并且第四种不一定所有控制器都支持,所以这里只考虑能控制的三种状态:输出电源电压,输出电源地,开路
之前其实尝试过拐弯的时候直接关闭内侧的电机驱动使能,让其自由旋转,但是这样会导致输出力矩完全依靠外侧轮子,负载会很大。
所以这次的思路中对此做出改进,使用创新的三段驱动思路。
这里给出简图示意三段驱动方式。
截图202407121309542792.jpg
波形图示意的是输出端电压

这里通过在刹车的时候插入开路状态进行空转,保证电机可以允许一定的转速差存在,但同时又不失去驱动能力,进而完成差速驱动


选型:
首先放一个总的价格清单:
截图202407131545374296.jpg

然后这里给出关键器件的店铺名称和详细类别
截图202407121313451737.jpg

截图202407121313526478.jpg

其余器件基本是在优信电子(淘宝)进行购买
主控选择STC8H2K12U-SOP8版本,主要作用是简化控制,输入一个PWM即可自动解算控制两路的差速。
MOS管的驱动能力可以达到30V 161A,内阻仅有3.3mΩ
栅极驱动可以提供1A左右的驱动能力,并且自带死区,拥有防直通功能。
总成本在4块钱左右


电路设计及PCB设计:
截图202407131540472616.jpg

这里直接使用了TypeC接口,用USB对芯片进行直接下载。
程序设计其实很简单,这里主要是对于方案的一种验证思路。
截图202407131541247210.jpg
截图202407131541563067.jpg 截图202407131542089550.jpg


目前进度:
【2024年7月12日】正在打板,等待板子回来后进行测试……
【2024年7月12日 晚】完成原理验证,效果出奇的好
【2024年7月13日】完成两种模式验证比较,证明高占空比下切换为异步调制能明显减少发热和提高效


开源文件:
ProProject_模型小车后桥智能驱动_2024-07-13.zip (129.57 KB, 下载次数: 181)







1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-7-12 15:20:29 | 显示全部楼层
本帖最后由 王昱顺 于 2024-7-12 22:32 编辑

经过提醒,发现了MOS管的体二极管问题,电机一侧直接接地会导致反电动势被下桥臂的体二极管续流导通。

从而导致无法实现空转情况。
正在继续改进原理图,给电机另一侧使用一个mos管进行接地控制,这样就可以完成开路状态的控制了。

驱动电压应该是以下这样:
存在0V以下的反电动势情况

截图202407121551274465.jpg




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-7-12 22:29:09 | 显示全部楼层
原理验证成功!



下午验证了一下这个自然差速,结果相当的成功。
可以完美的实现差速,并且无需软件干预。


先来看看效果,后续更新下午的操作流程


下面这个是实际的电机端电压波形:
截图202407122214384465.jpg

可以看到,这个电压波形跟上面改进过的理想驱动波形基本一致。


然后是我使用的实际驱动电平,与上面给的设想中一致,其中下面较窄的点平是驱动电平,上面则是控制电机开路与否的电平:
截图202407122215388675.jpg



以下是实际视频测试:
这个是下地测试,可以看到转弯非常丝滑




这个是电流测试,同样的硬件,仅仅改变了控制方式,就可以做到完美的差速,主要特点是堵转力矩。
可以看到堵转的时候力矩是不一样的。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-7-12 23:02:07 | 显示全部楼层
本帖最后由 王昱顺 于 2024-7-13 00:31 编辑

这里详细讲一下我下午的经历和改进过程吧:
(这部分主要对过程和踩坑的一些记录,想要看原理解析在后面)




首先是中午在车友群被提醒MOS管的体二极管会无法实现开环问题,然后我就在想应该如何改进这个问题。
因为正常的H桥是可以进行开路状态的(自由转动,也就是从正常驱动变成开路以后维持速度,并且缓慢的降低)
所以我就想直接借用一个H桥进行实现。


下午将基本的车模搭建完成后,基于小车不需要反转的问题,我将半桥的一个输出接电机,另一个接0电平(对地导通)

然后想的是使用EN进行控制整体的通断。
这里我软件上使用了同一个PWM定时器输出两组PWM(为了保证同步)
其中一个输出正常的占空比,另一个输出EN的控制。
  1. #define PWM_PERIOD  20000    //设置周期值
  2.         PWM1_Duty = 4000;//设定驱动占空比
  3.         PWM2_Duty = (u16)((PWM_PERIOD-PWM1_Duty)/2)+PWM1_Duty;//剩余占空比50%固定调制
  4.         UpdatePwm();//更新PWM</font>
复制代码


但是直接接上以后发现并不能用,一度以为是驱动坏掉了,经过换了一个确信能用的驱动后。发现并不是驱动问题,而是EN信号似乎不支持高速信号。
到这里似乎陷入了僵局,没有EN信号如何做到让电机空转呢?
经过我对原理图的又一阵仔细观察,我发现正常的控制当然是可以输入高速信号的。
所以我对原来接地的一侧半桥,取下上桥臂MOS管,使其变成了给1断开(因为上桥臂MOS管断开了),给0对地导通的一侧半桥。
此时,再输入原来的信号(这个信号需要反相一下,因为0是对地导通,1是对地断开),即可完成自然差速。
怀着激动的心情下地测试,完全没有因为差速问题推头(后轮推着前轮走,前轮的转向失效)。
至此,原理验证成功。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-7-12 23:59:16 | 显示全部楼层
本帖最后由 王昱顺 于 2024-7-13 15:24 编辑

详细原理讲解(配图较多,易于理解)


通过现有H桥进行快速改造的讲解在后面,暂时不关心详细原理的可以去后面看,快速改造中代码编写相较原理讲解中的较为简单,去掉了一些特性,并且根据问题写了一些推荐解决方案。

基本原理:
四轮小车通过舵机转弯的时候,因为前轮的导向作用,会使得后轮发生速度不一致的情况。我们称这种现象为差速。

截图202407130117035565.jpg
在机械差速器的车辆中,因为差速器的结构,可以允许左右轮子输出不同的速度,从而顺利的完成转弯。
但是使用双电机驱动的后轮并没有这种机械结构,直接控制两轮进行差速的话,还会出现因为差速不对造成的漂移(过度)和转向不足(欠调)
所以,这里创新的使用三段式方式驱动直流有刷电机,使得电机包含三个状态:驱动,刹车,空转;
通过在原本的刹车电平中插入空转部分,则允许了差速存在,通过调整这个比例,则可以完成直道和弯道的差速调整。

详细模式:
前面的原理验证,其实是相对简单的。真正的控制则需要动态的进行。
这里将控制分为以下两种模式,分别是低速的同步调制和高速的异步调制。
并且频率的跳跃还应该根据设定速度的不同进行变频驱动。

变频驱动:
首先我们需要了解的是,对于直流有刷电机,较低的驱动频率有利于有刷电机克服启动死区(即克服摩擦力从堵转到转动起来的这一段)
所以驱动的时候需要根据所需要驱动的速度进行变频输出:
这里给出两种变频思路(我暂时还没有验证哪种效果好):
一种是常见的手电钻使用的阶段变频,根据速度区间进行变频,并不是完全的细分变频。这种确定是效果比较好的。
还有一种是平滑的无极变频,相比阶段变频比较会更加的顺滑。但是有可能出现谐振频率的问题(尚未验证过是否会出现)
推荐的频率下限是500Hz,频率上限是20K(这个频率有些高,可以略微降低一些)。

首先是低速模式:

截图202407130033088198.jpg
区分条件是实际的驱动电平是否超过了50%(推荐值,这个可以自行调整)
因为如果超过了50%,则差速效果不能完全的保证可以完美了(设想轮子转弯半径为轮距状态,即:原地转圈)
在低速模式,通过在原本的刹车电平中,插入固定比例(相对于整个控制周期)的空转时间(最极限的情况是驱动后直接就是空转,各占50%,此时小车无刹车能力)
这个空转时间是如何确定的呢?其实就是拐弯的角度比例,拐弯大的时候自然需要更大的差速,所以这个差速比例也要跟随变大

至于如何确定这两个之间关系,只需要调整到没有转向不足即可,这个硬件结构可以自行适应,不存在差速过调节的情况。
调节这个主要是防止刹车的不足。

然后是高速模式:

截图202407130038044048.jpg
这个模式下,此时的频率已经很高了,并且由于占空比已经超过了50%,差速的效果可能并不好。
所以这里推荐使用异步调制,即控制空转的PWM频率和驱动占空比的PWM频率不再相同。
这里因为空转部分已经会影响到正常占空比了,所以两边的频率差要尽量的大一些,建议空转控制频率直接控制在较低的水平即可。
比如驱动正常占空比的是10Khz,占空比70%,控制空转的频率取在500hz固定就比较合适。

驱动电路讲解:
电路完全可以使用原有的H桥进行改造,因为小车没有后退需求,所以仅需要拆除任意一侧半桥的上桥臂MOS管即可。
此时,驱动分为驱动半桥和空转控制半桥。
如图所示;(注:C7接错了,应该接在OUT1和OUT2之间,因为更改较为麻烦,这里就简单说明一下)
截图202407130044204078.jpg
当完全没有差速的时候,空转控制半桥下桥臂MOS导通,与正常的H桥无异。

截图202407130051046881.jpg 截图202407130051193021.jpg
如果需要差速,则在驱动半桥下桥臂导通时刻(低速模式),将空转控制半桥的下桥臂MOS关断。
此时,电动机产生反电动势,因为被空转控制半桥的体二极管阻断回流路径。电机进入空转状态,允许速度产生变化。
截图202407130051394808.jpg

代码方面,需要根据具体的驱动芯片来进行编写。这里仅仅给出常见的驱动模式下,所需要产生的电平状态。

截图202407130104569081.jpg



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-7-13 00:00:27 | 显示全部楼层
本帖最后由 王昱顺 于 2024-7-13 02:03 编辑

如何快速从普通H桥更改为自然差速


这里,我们不讨论过多的细节,仅从最快的改造方法出发,如何从普通的H桥直接改变为自然差速的驱动。


首先需要注意的是:改造后会丢失反转功能(仅有正转,刹车)
知晓以后,我们将H桥的任意一个半桥上桥臂MOS管取下即可完成改造。
如图所示(注意不要拆错了):


保险起见,为了防止反电动势将MOS管的体二极管冲坏,可以给电机两端并入一个稍微高耐压的无极性电容
截图202407130125036742.jpg

之后是代码编写:
我们需要使用两路PWM,这里分两种情况来进行编写,请自行根据情况对应:


原来的控制需要两路PWM型(大部分情况):
这种是最简单的,首先需要删除电机反转部分(真正的正反转通过调换电机实际线序实现)
确保普通的PWM占空比给Q1,Q2这侧半桥。
然后另一路Q3同样生成一路PWM,需要跟上面的PWM使用同一个定时器,并且需要使用互补输出的负极性。
需要遵守的规则是,占空比一定要比上面的驱动PWM大,越接近最大占空比,差速效果就越弱,刹车性能就越强。


===============分割线=================


原来的控制是方向加PWM型:
这种是芯片内部自动根据方向来决定输出的PWM极性。
这里同样需要一路互补PWM的负极型输出,用来驱动原本的DIR线。
普通的PWM给原来的PWM线,此时占空比控制是反相的,比如给了200的值,实际应该是(满占空比-200)
原来的DIR需要遵守的规则是,占空比一定要小于上面给的PWM的值,例如PWM给200,DIR给50,满占空比500.
则控制为高电平300,低电平50,空转150。


Q&A:
如果原来连接的线不是互补输出怎么办?(多见于STC
请将这个口的IO模式设置为高阻,并且从有互补负极的输出IO飞线过来即可。



回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:287
  • 最近打卡:2025-05-02 00:23:29
已绑定手机

8

主题

105

回帖

644

积分

高级会员

积分
644
发表于 2024-7-13 09:09:44 | 显示全部楼层
{:5_332:}
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:365
  • 最近打卡:2025-05-02 00:20:03

6

主题

319

回帖

2206

积分

金牌会员

积分
2206
发表于 2024-7-13 11:59:44 | 显示全部楼层
我觉得,既然一个方向转动驱动,转动时候为什么每个周期都加入刹车阶段?
传统的PWM斩波调速控制,是没有下管的,只有一个续流二极管.续流二极管主要用途是马达绕组电感性质,没有续流的话突然断电会在马达两端产生瞬间高压,
这个高压两个不好影响,一是产生干扰,二是有击穿上管风险.
现在电路使用下管的目的是利用mos管低导通电阻特性,来减小续流二极管的压降,降低功耗减小续流管发热.
当续流完成,马达惯性或者受外力拖动转为发电状态时候,马达两端电压方向改变,续流二极管应该截止.马达进入自由转动状态,没有制动效果.
加入续流二极管由mos管代替,问题就来了,如果维持下管一直开通,那么马达就进入阻尼刹车状态.
说起来这就有些搞笑了,就像人力推车一样,大力推一会,然后立马往后拉一下.如此反复....

点评

我现在使用的方式是去掉一路半桥的上桥臂,这样在驱动上桥臂的时候,实际是下桥臂的MOS被关断,此时两侧半桥的二极管极性相反,会给电机的反电动势和续流路径完全堵住。不过确实会有较高的反电动势尖峰问题  详情 回复 发表于 2024-7-13 14:49
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:365
  • 最近打卡:2025-05-02 00:20:03

6

主题

319

回帖

2206

积分

金牌会员

积分
2206
发表于 2024-7-13 12:21:42 | 显示全部楼层
实际上,大多数马达绕组电感量都是比较大的,只要PWM斩波频率不是很低,基本都能保证上管关断期间马达还没有完成续流过程.马达电流是单方向连续的,此时就不存在所谓的每个周期的刹车阶段.调速过程中保持马达电流连续,能减少机械震动,这也是希望的结果.
楼主的控制思路和测试没有问题,实际也很有成效,唯一缺点就是mos管需要承受很大的反压.需要用耐压高的型号,

点评

这个问题(需要承受反压):我给出的电路中其实是使用了一个无极性的电容来缓冲这个反电动势尖峰。 至于为什么需要加入刹车阶段?因为我希望这个差速(空转的占比)是可调的,因为这个主要是给智能车用的,当然是希  详情 回复 发表于 2024-7-13 14:44
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-7-13 14:44:25 | 显示全部楼层
网*** 发表于 2024-7-13 12:21
实际上,大多数马达绕组电感量都是比较大的,只要PWM斩波频率不是很低,基本都能保证上管关断期间马达还没有完 ...

这个问题(需要承受反压):我给出的电路中其实是使用了一个无极性的电容来缓冲这个反电动势尖峰。
至于为什么需要加入刹车阶段?因为我希望这个差速(空转的占比)是可调的,因为这个主要是给智能车用的,当然是希望可以同时兼顾直道上的加减速控制性能和弯道上的差速自适应性能。
当是直道的时候,使用的就是普通H桥的驱动->续流制动方式了。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:23 , Processed in 0.124761 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表