结论

为了避免各位浪费时间, 先说结论: 选择合适的电机驱动模式和PWM频率, 能大幅提升直流电机的性能和可控性, 在常见的48:1减速电机上, 使用慢衰减模式低于100Hz的PWM频率, 能达到最佳性能.

引言

在一些场合, 需要在慢速下精细控制机械的运转和制动, 但是你会发现电机的启动不是渐进的, 会突然产生速度, 然后又突然停止, 虽然也用了PWM控制速度, 但是为什么速度的变化不均匀呢? 一个明显的原因是, 有刷直流电机在转速低于200RPM(200转每分钟)时如果没有经过调校, 很难得到足够的扭矩来保持稳定转动, 而在高速的区间, 速度的变化也不是线性的. 通过一些实验发现, 可以通过调整PWM参数改善这些问题. 这篇文章将尽量详细地说明这些信号参数, 并例举一些常见的电机的测试结果, 希望通过这些数据可以改进你们项目中的电机性能.

首先让我们看看PWM和直流有刷电机.

PWM 和直流有刷电机

有刷直流电机对于输入的直流电压产生磁力并转动, 例如工作在6V的小电机在使用4节AA电池时全速转动, 而在使用3节AA电池供电时速度就会慢一些, 使用2节时就会更慢. 在实际应用中加减电池数量是不现实的, 需要通过软件来控制, 这就是PWM(Pulse Width Modulation, 脉冲宽度调制). 微控制器一般通过外置的电机驱动模块来控制电机工作, 通过PWM信号控制电机的方向, 速度和扭矩. PWM信号一般包含三个主要特性: 占空比, 衰减模式和频率.

占空比

占空比(Duty Cycle)就是在一个完整的PWM周期中, 高电平脉冲在时间上占的比例, 通常使用一个百分数来表示. 对应的 PWM 等价电压就是供电电压乘以占空比这个百分比. PWM脉冲的宽度由代码控制, 越宽输出的能量就越高, 电机运转就越快. 当直接连接到供电电压上时, 就等价于一个100%占空比的PWM信号.

通过占空比可以控制电机的速度, 但是电流衰减模式和PWM信号频率的选择会影响到电机的工作效率, 特别是当占空比小于30%的情况.

衰减模式

电机的再循环电流衰减模式是当前电机控制方面一个特殊的特性. 可以区分为快衰减和慢衰减. 在最简单的电机控制中, 通过一个开关控制电机的工作和停止, 开关合上时电机运转, 在开关断开时, 电机失去动力并自行减速并停止. 这种情况叫快衰减, 因为输入的电流迅速减小. 这种模式也称为滑落模式因为电机在开关关闭后是自由滑落到停止状态.

而在很多场合, 例如在边缘运行的机器, 相对于自由滑落停止, 我们更希望有刹车控制, 这时候慢衰减模式就更适合这种场合. 这种模式通过利用电机转动时的发电效应增加了可控性.

电机的发电效应很容易验证, 用一个小电机连上LED发光管, 在转动电机时发光管就会亮, 这说明电机转动时会反向输出电压. 这种现象称为电动势, EMF(electro-motive force), 单位也是伏特, 和电压一样.

当电机自由停转时就会产生电压, 如果将电机的输入端短接, 那么产生的EMF会让电机反方向转动, 这将导致电机快速停止, 就像刹车一样. 电机驱动, 例如DRV8833在慢衰减模式下会主动刹车, 之所以称为慢衰减模式, 时因为电机此时还在用它自己产生的电流来工作, 电流并没有立即消失. 有些地方也称这种模式为刹车模式.

The Yellow-TT motor's spin threshold decreases to 1200 RPM when operating in slow decay mode compared to 3000 RPM for fast decay mode. That means that the output shaft of the 1:48 gearbox turns the attached wheel at 25 RPM versus 63 RPM; forward speed drops to 8.5 cm/sec from 21.4 cm/sec.

Also note that the speed versus motor voltage curve for slow decay (blue line) is more linear than fast decay (green line). The linear relationship between speed and voltage simplifies calculating motor speed from the throttle value.

equivalent_voltage = power_supply * throttle

motor_speed = (2500 * equivalent_voltage) - 2000

gearbox_speed = motor_speed / 48

With a 5-volt power supply, the motor and gearbox output shaft speeds for a throttle setting of 0.5 are 4250 RPM and 88.5 RPM.

equivalent_voltage = 5 * 0.5= 2.5

motor_speed = (2500 * 2.5) - 2000 = 4250

gearbox_speed = 4250 / 48 = 88.5

Decay mode terminology is confusing. Remember that the decay mode describes how quickly the motor recirculation current dissipates, not its effect on motor speed. A motor's rotational speed drops more quickly when using slow decay mode (braking) as compared to fast decay (coasting).

Selecting the proper current decay mode for your project will go a long way to fine-tuning required brushed DC motor performance. One other PWM parameter, frequency, is useful for increasing low-speed torque and lowering the throttle value needed to start the motor spinning.

PWM频率

PWM频率就是每秒输出的PWM周期数, 单位是Hz, 在数学上等于周期长度的倒数 (PWM_Frequency = 1 / PWM_Interval_Period).

当计算PWM等价电压时, 我们通常假定电机工作于一个理想状态的非PWM的电源提供的电压. 但是实际情况和这个差距很大. 例如对于常见的48:1小电机, 在连接1.5V的电池时可以轻松启动, 但是在PWM等价电压为1.5V时却纹丝不动, 直到等价电压上升到2V时才开始转动, 然而一开始转动就迅速爬升到4000RPM.

这种情况, 是因为有刷直流电机的转子都包含两个/三个或更多缠绕在铁芯或其他磁性材料上的线圈, 电机在电路上类似于一个电感, 取决于匝数的大小和磁芯的材料, 线圈通常需要几个毫秒才能达到起足够推动其轴转动的力矩. 所以在使用PWM进行电机速度控制时转子线圈的电感就成为一个很大的影响因素. 直接使用直流电压供电时电机线圈的工作状态是最好的, 因为磁场达到转动的强度需要足够的时间. 而对于高频PWM, 加在电机线圈上的脉冲变化太快, 就会导致线圈在脉冲宽度上无法达到转动所需的力矩而无法转动. 此时如果在占空比不变的前提下降低PWM的频率, 随着PWM频率的降低, 脉冲宽度是在增加的, 当频率降低到某个数值之后, 脉冲的宽度就足够电机线圈产生带动转子的力矩. 这样, 电机就能在更低的PWM等价电压上启动.

对于常见的48:1小电机, 最佳的工作频率接近25Hz. 当频率为25Hz时, 电机在等价电压为0.5V时就能开始工作, 此时转速可以低至100RPM. 因为齿轮将转速减为1/48, 所以此时车轮转速才2RPM.

选择衰减模式和频率

慢衰减常用于控制有刷直流电机, 因为它可以有效制动. 另外它也能帮助占空比和电机速度保持线性关系.

比较一下这两种模式, 如果需要慢速操作, 慢衰减可以增加有效力矩并增加电机的整体速度范围. Choosing slow decay also provides a linear mapping of the software throttle setting to motor speed which is helpful when measuring velocity and distance traveled.

Slow decay mode appears to be superior in most categories, but isn't the best choice if power consumption is your primary concern. For some battery-powered robots, the power saved using fast decay mode outweighs the more precise control offered by slow current decay.

Fast decay mode is the default mode in CircuitPython motor control libraries. Changing the operational mode parameter to slow decay can be accomplished with a simple, one-line statement. See the Code Examples section for the details.

After changing the mode, test the operation to confirm that the lowest required motor speed is working as needed. If a lower spin threshold is required, try reducing the PWM frequency to the lowest possible value (usually about 25Hz) and work up towards the maximum of the motor controller. Choose the frequency that provides the best balance of torque throughout the desired speed range while balancing the motor chatter that can happen at lower frequencies.

As a rule of thumb, most small brushed DC motors will operate nicely with a PWM frequency of 50Hz to 100Hz and slow decay mode. Projects like the StringCar Racer that don't use gearbox motors seem to work best at 25Hz.

In combination with its CircuitPython library, a motor controller board will offer a range of selectable PWM frequencies as well as decay mode. The table above shows the available frequency range and mode support for a variety of Adafruit motor controllers. Refer to the Code Examples section for how to select a specific decay mode and PWM frequency for your motor controller board.

参考

在PWM控制下的直流有刷电机性能优化的更多相关文章

  1. 【Vuejs】317- 提升90%加载速度——Vuecli下的首屏性能优化

    点击上方"前端自习课"关注,学习起来~,所以接下来还会介绍一些它们在优化上的异同 的话,先安装插件 cnpm intall webpack-bundle-analyzer –sav ...

  2. 【Vuejs】269- 提升90%加载速度——vuecli下的首屏性能优化

    前言 之前用 ,所以接下来还会介绍一些它们在优化上的异同 分析 vuecli 2.x自带了分析工具只要运行 npm run build --report 如果是 vuecli 3的话,先安装插件 cn ...

  3. 高并发场景下System.currentTimeMillis()的性能优化

    一.前言 System.currentTimeMillis()的调用比new一个普通对象要耗时的多(具体耗时高出多少我也不知道,不过听说在100倍左右),然而该方法又是一个常用方法, 有时不得不使用, ...

  4. Liunx下Mysql,MongoDB性能优化的配置

    场景 这几天在赶十一上线的项目,但是突然发现接口性能不好,高并发支持不住.又不想改代码,就在数据库层面进行优化. Mysql 分区:项目中有对40万条的数据进行时间查询的要求,就算对DateTime建 ...

  5. 关于MySQL中查询大数据量的情况下分页limit的性能优化

    https://blog.csdn.net/weixin_37848710/article/details/80772725

  6. mssql性能优化

    总结下SQL SERVER数据库性能优化相关的注意事项,在网上搜索了一下,发现很多文章,有的都列出了上百条,但是仔细看发现,有很多似是而非或者过时(可能对SQL SERVER6.5以前的版本或者ORA ...

  7. C++ 应用程序性能优化

    C++ 应用程序性能优化 eryar@163.com 1. Introduction 对于几何造型内核OpenCASCADE,由于会涉及到大量的数值算法,如矩阵相关计算,微积分,Newton迭代法解方 ...

  8. UITableView性能优化及手工绘制UITableViewCell

    提高表视图的性能 UITableView作为应用中最常用的视图,它的性能优化问题几乎是经常提及.下面对在非网络访问情况下的表视图性能优化进行了主要的几点说明: 1.自定义类或XIB文件时 在系统提供的 ...

  9. Android 性能优化的方面方面都在这儿

    又到周六了,鸿洋的不定期的周六放送又来了~~这次来谈谈性能优化吧.大家在工作中或多或少都会拿自家的应用和竞品app做比对,不可避免的需要做一些app性能优化的活.很多时候可能是策略上的调整,不过还是有 ...

  10. 从零开始入门 K8s | etcd 性能优化实践

    作者 | 陈星宇(宇慕)  阿里云基础技术中台技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 17 讲. 导读:etcd 是容器云平台用于存储关键元信息的组件.阿 ...

随机推荐

  1. 达梦数据库varchar和nvarchar的验证

    达梦数据库varchar和nvarchar的验证 测试SQL create tablespace zhaobsh datafile '/opt/dmdbms/data/DAMENG/zhaobsh.d ...

  2. Oracle 高低水位线的学习

    Oracle 高低水位线的学习 背景 最近产品的一些脚本会大量的给一些流程表里面插入数据 因为只是一个流程相关没有时序查询的需求 所以数据量挺大, 但是按照石时间戳删除非常麻烦. 自己执行过多次del ...

  3. [转帖]LVS入门篇(四)之LVS实战

    LVS入门篇(四)之LVS实战 https://www.cnblogs.com/linuxk/p/9360922.html 一.LVS的NAT模式实战 1.环境说明: HOST OS role rem ...

  4. [转帖]优化超大 Nginx 配置导致的内存碎片

    https://blog.openresty.com.cn/cn/ngx-cycle-pool-frag/?src=org_news 章亦春发布于 Feb 14, 2023更新于 Mar 2, 202 ...

  5. 【转帖】Dockerfile文件指令介绍

    https://blog.whsir.com/post-5327.html Dockerfile其实就是一个文本文件,这个文本文件名称叫Dockerfile,里面包含了一些指令(可以理解成多个指令集合 ...

  6. CentOS9上面使用rpm方式安装SQLServer2022的简单总结

    CentOS9上面使用rpm方式安装SQLServer2022的简单总结 下载需要的资料 下载CentOS9 Stream的安装介质 https://mirrors.bfsu.edu.cn/cento ...

  7. 参照DefenseGrid在Unity中实现合理的塔防寻路机制

    前言 在一款TD游戏中,最重要的单位就两大类:防御塔(Tower)和敌人单位(Enemy).在处理敌人单位的AI行为时,最基本也是最重要的就是自动寻路.在各式TD游戏中,防御塔的攻击方式以及敌人单位的 ...

  8. CS231N Assignment1 softmax 笔记

    -为Softmax分类器实现完全矢量化的损失函数 -实现解析梯度完全矢量化的表达式 使用数值梯度检查实现结果 使用验证集调整学习率和正则化强度 使用SGD优化损失函数 可视化最终学习的权重 softm ...

  9. RIPEMD加密技术探究:优势、劣势与实战应用

    摘要:RIPEMD加密算法作为一种哈希算法,自1989年诞生以来,因其高效.安全的特性在网络安全领域得到了广泛的应用.本文将对RIPEMD算法的优缺点进行详细分析,并给出一个Java完整的示例代码.同 ...

  10. NetCore高级系列文章03---中间件

    .net web 一路发展过来,经历了 .net webfrom. .net Mvc ..net core不论哪种架构,都会对用户的请求到达服务器后经历一系列类似于管道的处理.在.net webfro ...