在电机驱动的FOC控制开发过程中,您是否遇到过电机噪声过大、效率偏低甚至无法运转的情况?这一切有可能源于相电流的采样异常,从而导致FOC算法中无法重建正确的三相电流!小编这里给大家分析影响电流采样的一个因素——延迟源!

1 引言

在双电阻采样的电机驱动FOC控制中,采样点设置为驱动桥下管打开的中间时刻。注意,这里是驱动桥下管打开的中间时刻,而不是MCU输出的PWM周期中间时刻。因为从MCU计算生成PWM到电流信号送入MCU的ADC模块,这个典型的驱动拓扑中,存在多达七个延迟源!

2 延迟类型及典型时间

下面表格详细指明了电机驱动系统拓扑中存在的七个延迟源及其典型的时间。这些延迟将叠加在一起,产生的影响是:实际输出PWM波形滞后于MCU计算预期输出的PWM波形,按照这个计算,相电流采样点需要滞后于MCU计算预期输出的PWM波形的中间时刻。

3 延迟源详细分析

3.1PWM死区时间插入

在三相无刷电机驱动系统中,需要三个桥臂来控制相线电流流向,在每个桥臂上有两个功率器件,如MOSFET、IGBT。这一对功率器件不能同时导通,否则就会出现短路的情况。这里以MOSFET作为功率器件来说明。在控制中,必须插入死区时间以确保上部和下部MOSFET不会同时处于打开状态。死区时间的典型值可能在100ns到2μs之间,具体取决于系统中的各种因素,如MOSFET驱动电压、MOSFET型号。

在所需的PWM波形插入死区时间之后,我们得到的是PWM中点和上升沿都向右移动。因此,在FOC控制算法计算出适当的PWM之后,我们立即开始看到第一个延迟,即死区时间。

3.2 光耦延迟和预驱动器延迟

在MCU控制FTM模块输出PWM波形到MOSFET栅极受控制的那一刻之间,各种光电耦合器和预驱动器的信号响应导致了额外的延迟。

与MCU引脚输出的波形相比,预驱动器的输出延迟了一段时间(Delay1)。

3.3晶体管开关延迟

经过预驱动器后,PWM波形到达MOSFET晶体管,但由于其固有特性,所有晶体管都需要一定的时间导通和截止。根据晶体管类别及导通/截止之间切换所需要的电压电平,此延迟时间有所不同。

Delay2为相线电压理论切换点(CMP2)与实际切换点的时刻之间的整个延迟。

最后,栅极电压到达了能令晶体管导通的程度,电流通过相线和采样电阻,在采样电阻两端产生电压差,红色波形为理想状态下的相电流波形。此时与MCU计算生成的PWM周期中点存在延迟总时间如图中“相电流中点移位”。

3.4其他延迟

如下图所示,影响电流采样的最后延迟链是由放大器转换速率、MCU引脚上的低通滤波器和ADC转换速率构成的。图中用红色圆圈标记的时刻为正确的电流采样时刻,可以看出,与FTM输出的PWM中点相比,相电流采样点大大延迟。

4 结语

所有的电子电路中,都会存在信号的延迟问题。信号延迟不可能被完全消除,但可通过选用低延迟的器件以减小影响。

在电机驱动中,除了选用合适的器件外,还需要对信号延迟进行软件补偿。文中提及的这些延迟源的精确延迟时间,我们可以通过示波器和计算得出,在软件上补偿这些延迟,才可得出正确的电流采样时刻。这样在正确的时刻采集到的数据才能作为FOC控制中重建电机三相电流的数据来源。

原文标题:FOC电流采样为什么不准?你忽略了这个细节

文章出处:【微信号:Zlgmcu7890,微信公众号:周立功单片机】

FOC 电流采样为什么不准?你忽略了这个细节的更多相关文章

  1. FOC 电流采样方案对比(单电阻/双电阻/三电阻)

    如果本文帮到了你,帮忙点个赞: 如果本文帮到了你,帮忙点个赞: 如果本文帮到了你,帮忙点个赞: 创作不易 谢谢支持 文章目录 1 电流采样的作用 2 硬件架构 3 采样关键 4 采样方案 5 三电阻采 ...

  2. FOC中的电流采样

    电流采样是FOC的基础,具体有电流传感器采样.电阻采样,电阻采样以其简单低成本的应用广泛使用. 电阻法采样有单电阻采样.双电阻采样.三电阻采样. 一. 单电阻采样 单电阻采用分时采样,在一个PWM周期 ...

  3. 学习Java,容易被你忽略的小细节(3)

    在<学习Java,容易被你忽略的小细节(2)>中我们已经深入讨论过String类中equals()方法的使用,在本文中我们将进一步讨论equals()方法在其他境况下的使用方法. 首先,我 ...

  4. 学习Java,容易被你忽略的小细节(2)

    昨天心情真的太糟糕了,写完<学习Java,值得注意你注意的问题(1)>之后,迎来些许的支持以后就是一片片的谴责.我的主页上涌现出许许多多Java方面的牛人,谴责我水平太低,写的问题太初级. ...

  5. 学习Java,值得你留意的问题(1)更名为《学习Java,容易被你忽略的小细节(1)》

    记得大二快要结束的时候,有个女孩子突然问我“你会Java吗,帮我做大作业好吗?” 实话说,那个女孩真的很漂亮,我当时也非常想帮她.但是我从来没有接触过Java,让我在短短的几天内完成Java程序设计课 ...

  6. 被忽略的js细节

    今天在写一个程序,出了一点小bug,找了许久许久,终于把问题给揪了出来,真相大白那一刻感觉好蛋疼--深刻体会到了语言之间的差异. <script type="text/javascri ...

  7. 新手在sae部署程序容易忽略的一个细节

    从来没用过这类云空间服务,尝了下鲜试用一下sae,但是部署的时候发现问题了,各种404..各种无奈啊..虽然百度无数篇介绍,但是都千篇一律没什么启发.. 但是巧在我部署的应用有个欢迎页面,点击链接的时 ...

  8. android 获取wifi列表,如果你忽略了这个细节,可能你的软件会崩溃

    一:业务描述 最近公司有一个小需求,用户点击wifi扫描按钮(注意:是用户主动点击wifi扫描按钮),app去扫描附近的wifi,显示在listView中,仅此而已,app都不用去连接某个wifi,看 ...

  9. 纯小白创建第一个Node程序失败-容易忽略的一个细节

    一直觉得自己基础还很差,所以自觉不敢去碰node.js,但又对其心怀好奇.恰巧最近有一点空闲时间,忍不住去试了一下水   这不,在创建第一个node程序时就吃了闭门羹,总是提示我没有定义,如下图, 这 ...

随机推荐

  1. D-Power Products

    题目连接: 题解: 根据题目的意思,对每个X进行质因子分解,保存其质因子以及质因子出现的个数,如果两个数的乘积变成一个数的K次幂,那么两个数的质因子的指数之间相加应为k的倍数.保存完毕后,开始遍历,将 ...

  2. Java优秀教程

    1.java中局部变量是在栈上分配的: 2.数组是储存在堆上的对象,可以保存多个同类型变量: 3.在Java语言中,所有的变量在使用前必须声明. 4.局部变量没有默认值,所以局部变量被声明后,必须经过 ...

  3. 实现一个简单的基于动态代理的 AOP

    实现一个简单的基于动态代理的 AOP Intro 上次看基于动态代理的 AOP 框架实现,立了一个 Flag, 自己写一个简单的 AOP 实现示例,今天过来填坑了 目前的实现是基于 Emit 来做的, ...

  4. Laravel项目Linux服务器部署

    laravel项目本地开发,一切正常.部署到服务器,首页都加载不出来,查了n多教程,各种方法姿势都试过了,还是不行. 功夫不负有心人,最后终于找到了问题所在,在此做个记录,铭记教训. 排查错误一定要: ...

  5. vue2.x学习笔记(二十一)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12632730.html. 可复用性&结合-混入 基础 混入(mixin)提供了一种非常灵活的方式,来分发v ...

  6. redis:key命令(二)

    设置一个key:set name hello 获取一个key的值:get name 查看所有的key:keys * 查看key是否存在:exists name 移动key到指定库:move name ...

  7. 聊一聊JSONP和图像Ping的区别

    JSONP 在讲 JSONP 之前需要再来回顾一下在页面上使用 script 引入外部的 js 文件时到底引入了什么? 先建立一个 index.js 文件. console.log(123) 再建立一 ...

  8. Java代码生成器加入postgresql数据库、HikariCP连接池、swagger2支持!

    目录 前言 PostgreSql VS MySql HikariCP VS Druid Swagger2 自定义参数配置一览 结语 前言   最近几天又抽时间给代码生成器增加了几个新功能(预计今晚发布 ...

  9. python 开发一款图片压缩工具(四):上传图床

    上一篇使用了 pngquant 图片压缩工具进行压缩,并通过 click 命令行工具构建了 picom 包.这篇的主要功能是实现图片上传. 图片上传功能的实现 通过 pngquant 压缩图片后,得到 ...

  10. Python 删除含有只读文件(夹)的文件夹

    def rm_read_only(fn, tmp, info): if os.path.isfile(tmp): os.chmod(tmp, stat.S_IWRITE) os.remove(tmp) ...