BLDC无感方波控制

news2024/11/28 20:41:37

BLDC无感控制

  • 反电动势过零检测
    • 反电动势检测方法
      • 比较器模式采样过零信号
      • 闭环的建立
  • BLDC 方波启动技术
    • 转子预定位
    • 电机的外同步加速
    • 电机运行状态的转换
  • 程序部分

反电动势过零检测

它的主要核心就是通过检测定子绕组的反电动势过零点来判断转子当前的位置

三相六状态 120°通电方式运行的无刷电机在任意时刻总是两相通电工作,另相绕组是
地不导通的
。这时候非导通绕组的端电压 (从绕组端部到直流地之间) 或相电压 (从绕组端部到三相绕组中心点之间) 就反映出该相绕组的感应电动势(BEMF)。

BLDC 电机的 BEMF 波形随转子的位置和速度变化,整体上呈现为梯形。

下图给出了电机旋转一个电周期中电流和反电势波形,其中实线代表电流,虚线代表反电动势,横坐标为电机旋转的电气角度。
在这里插入图片描述

BLDC “六步换向”控制理论:

  • 在任意时刻,三相 BLDC 另有两相通电,另一相开路,三相两两导通,共有 6 种组合,
    以一定的顺序每 60°变化一次,这样产生旋转的磁场,拉动转子跟着转动。

这里的 60°指的是电角度,一个电周期可能并不是对应一个完整的转子机械转动周期。

完成一圈机械转动要重复的电周期数取决于转子的磁极对数。每对转子磁极需要完成一个电周期,因此,电周期数 ÷ 转数 = 转子磁极对数

控制 BLDC 的关键就是确定换相的时刻 由上图可以看出,在每两个换相点的中间都对
应一个反电动势的磁极改变的点,即反电点势从正变化为负或者从负变化为正的点,称为
零点
。利用反电动势的这个特性,只要能够准确检测出反电动势的过零点,将其 延迟 30°,即为需要换相的时刻。

反电动势检测的缺点:

  1. 低速或转子静止时不适用,这是所有反电动势法的共同缺点。
  2. 电压比较器对被检测信号中的毛刺、噪声非常敏感等等。

如何检测过零点呢? 又如何通过过零信号判断当前转子位置呢?

反电动势检测方法

反电动势过零点都发生在不通电的那一相。

比较器模式采样过零信号

由于 BLDC 电机的 Y 形连接,三相都接到公共的中性点,相电压无法直接测量。只能测量各相的端电压。

如下图所示:
通常将非通电绕组的端电压用于无传感器控制时,称为端电压法,即各相对地的电压,然后与中性点电压比较,当端电压从大于中性点电压变为小于中性点电压,或者从小于中性点电压变为大于中性点电压,即为过零点

但是一般的 BLDC 电机都没有中性点的外接引线,所以无法直接测量中性点电压。解决这个问题最直接的办法就是重构一个"虚拟中性点”,通过将三相绕组分别通过阻值相等的电压连接到一个公共点而成,这个公共点就是虚拟中性点
下图(B)中是用的外部硬件比较方式,一些MCU芯片包含了比较功能,在设计驱动电路时就不需要额外的比较电路了。
在这里插入图片描述

以 U 相来说明:U 相反向电动势和中性点信号通过 U8B 比较器输出过零点信号 ZERO_U。
在这里插入图片描述

闭环的建立

每一相的反电动势都有两种过零情况:从正变为负和从负变为正。三相共有六种过零情况对应六种换相状态,并且这种对应关系是固定不变的。(与有感类似并对应换向表

  • 将这个对应关系写入一个表中,程序中每检测到一个过零点,就通过查表来决定相应 I/O 输出状态,控制下一步哪两相通电;
  • 然后切换到当前断开相继续检测反电动势过零点,如此循环,直至建立稳定的闭环。
    在这里插入图片描述

理论上,过零点总是超前换相点 30°电角度。因此在检测到过零点后,要先延迟 30°电角度再换相。但是在闭环调速过程中,电机旋转一个电气周期的时间不是固定不变的,因此无法预测在检测到过零点后接下来的这 30°电角度是多长时间。那么在检测到过零点之后,怎样决定延时时间呢?

虽然无法预测接下来的 30° 电角度是多长,但是刚刚过去的上一个换相周期,即两个换相点之间 60° 电角度的长度是可以测量的。于是可以采用近似的办法,用上一个换相周期,即 60° 电角度的时间减半,作为接下来的 30° 电角度延时时间。这种办法是可行的,因为电机的转速是渐变的,相邻两个换相周期的时间相差不会很大。

由于定子绕组的反电动势与电机的转速成正比,所以电机在静止时反电动势为零或低速时反电动势很小,此时无法根据反电动势信号确定转子磁极的位置,因此反电动势法需要采用特殊起动技术。

BLDC 方波启动技术

从静止开始加速,直至转速足够大,当反电势能检测到过零信号时,再切换至无刷直流电机运行状态。这个过程称为 “三段式”起动,主要包括转子预定位、加速和运行状态切换三个阶段。

转子预定位

要保证无刷直流电机能够正常起动,首先要确定转子在静止时的位置。

  • 系统起动时,任意给定一组触发脉冲,在气隙中形成一个幅值恒定、方向不变的磁通,只要保证其幅值足够大,那么这一磁通就能在一定时间内将电机转子强行定位这个方向上。
  • 在应用中,可以在任意一组绕组上通电一定时间,其中预定位的 PWM 占空比和预定位时间的长短设定值可由具体电机特性和负载决定,在实际应用中调试而得。
  • 在预定位成功后,转子在起动前可达到预定的位置,为电机起动做好准备。

电机的外同步加速

确定了电机转子的初始位置后,由于此时定子绕组中的反电动势仍为零,所以必须人为的改变电机的外施电压和换相信号,使电机由静止逐步加速运动,这一过程称为外同步加速。

对于不同的外施电压调整方法和换相信号调整方法,外同步加速可以划分为三类:

  • 换相信号频率不变,逐步增大外施电压使电机加速,称为恒频升压法
  • 保持外施电压不变,逐渐增高换相信号的频率,使电机逐步加速,称为恒压升频法
  • 在逐步增大外施电压的同时,增高换相的频率,称为 升频升压法

电机运行状态的转换

参数在调试好的时候,可以快速切换至正常运行状态;而参数不理想时,电流可能不稳甚至电机会抖动。因此,在应用中,应根据电机及负载特性设定合理的升速曲线,并在尽可能短的时间内完成切换。

无感驱动的整体框图
在这里插入图片描述

程序部分

1.

在这里插入图片描述

  1. 预定位这里,首先让转子固定在某一个位置,比如U+V-,然后以执行一定的换向顺序(此时与过零信号无关),用升频升压法,先让电机转起来,然后一边去检测过零信号是否稳定,待电机稳定运行并且过零信号已经可以稳定检测到,就切换到过零检测换向控制。

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

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

相关文章

JavaScript -【第二周】

文章来源于网上收集和自己原创,若侵害到您的权利,请您及时联系并删除~~~ 理解什么是流程控制,知道条件控制的种类并掌握其对应的语法规则,具备利用循环编写简易ATM取款机程序能力 运算符语句综合案例 1. 运算符 算术运算符赋值运…

【python爬虫】批量识别pdf中的英文,自动翻译成中文上

不管是上学还是上班,有时不可避免需要看英文文章,特别是在写毕业论文的时候。比较头疼的是把专业性很强的英文pdf文章翻译成中文。我记得我上学的时候,是一段一段复制,或者碰到不认识的单词就百度翻译一下,非常耗费时间。本文提供批量识别pdf中英文的方法,后续文章实现自…

简明易懂:Python中的分支与循环

文章目录 前言分支结构if 语句:单一条件判断else语句:提供备选方案elif 语句:多条件判断嵌套的分支结构:复杂条件逻辑 循环结构for循环:遍历序列range()函数与for循环while循环:条件重复循环控制&#xff1…

C++------vector【STL】

文章目录 vector的介绍及使用vector的介绍vector的使用 vector的模拟实现 vector的介绍及使用 vector的介绍 1、vector是表示可变大小数组的序列容器。 2、就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问和数…

【rust/egui】(八)使用panels给你的应用划分功能区块

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 panel是啥 panel是ui上的一块区域&…

【数据库】通过实例讲清楚,Mongodb的增删查改,分组查询,聚合查询aggregate

目录 一.基础概念 二.数据库的管理 1.创建数据库 2.删除数据库 二.集合的管理 1.显示所有集合 2.创建集合 3.删除当前集合 4.向集合中插入元素 三.文档的管理 1.文档插入 2.文档的更新 3.文档的删除 4.文档查询 (1)查询基本语法&#xff1…

不同路径 II【动态规划】

不同路径 II 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格中有障碍物。那么从左上…

JavaScript设计模式(四)——策略模式、代理模式、观察者模式

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

手撕 视觉slam14讲 ch7 / pose_estimation_3d2d.cpp (1)

首先理清我们需要实现什么功能,怎么实现,提供一份整体逻辑:包括主函数和功能函数 主函数逻辑: 1. 读图,两张rgb(cv::imread) 2. 找到两张rgb图中的特征点匹配对 2.1定义所需要的参数:keypoints…

githubPage部署Vue项目

github中新建项目 my-web (编写vue项目代码) myWebOnline(存放Vue打包后的dist包里面的文件) 发布流程 (假设my-web项目已经编写完成)Vue-cli my-web vue.config.js文件中 const { defineConfig } require(vue/cli-service)…

Spark【RDD编程(二)RDD编程基础】

前言 接上午的那一篇,下午我们学习剩下的RDD编程,RDD操作中的剩下的转换操作和行动操作,最好把剩下的RDD编程都学完。 Spark【RDD编程(一)RDD编程基础】 RDD 转换操作 6、distinct 对 RDD 集合内部的元素进行去重…

Windows Update Blocker,windows系统关闭自动更新工具

今天打开电脑发现系统又自动更新了 这一天天更新真的太烦了 然后我从网上找到一个工具 可以自由开启和关闭系统自动更新 这里分享一下网址:https://www.filehorse.com/download-windows-update-blocker/ 若网址失效,蓝奏云盘链接 https://wwgw.lanzouc.c…

mapboxGL3新特性介绍

概述 8月7日,mapboxGL发布了3版本的更新,本文带大家一起来看看mapboxGL3有哪些新的特性。 新特新 如上图所示,是mapboxGL官网关于新版的介绍,大致翻译如下: 增强了web渲染的质量、便捷程度以及开发人员体验&#xff…

一篇文章教会你如何编写一个简单的Shell脚本

文章目录 简单Shell脚本编写1. 简单脚本编写2. Shell脚本参数2.1 Shell脚本参数判断2.1.1 文件测试语句2.1.2 逻辑测试语句2.1.3 整数值测试语句2.1.4 字符串比较语句 3. Shell流程控制语句3.1 if 条件测试语句3.1.1 if...3.1.2 if...else...3.1.3 if...elif...else 4. Shell脚…

目标检测模型推理实验记录

在进行目标检测算法的学习过程中,需要进行对比实验,这里可以直接使用MMDetection框架来完成,该框架集成了许多现有的目标检测算法,方便我们进行对比实验。 环境配置 首先是环境配置,先前博主曾经有过相关方面的配置&…

【数据结构Java版】 初识泛型和包装类

目录 1.包装类 1.1基本数据类型以及它们所对应的包装类 1.2装箱和拆箱 1.3自动装箱和自动拆箱 2.什么是泛型 3.引出泛型 4.泛型类的使用 4.1语法 4.2示例 4.3类型推导 5.泛型是如何编译的 5.1擦除机制 5.2正确的写法 6.泛型的上届 6.1语法 6.2示例 …

腾讯云、阿里云、华为云便宜云服务器活动整理汇总

云服务器的选择是一个很重要的事情,避免产生不必要的麻烦,建议选择互联网大厂提供的云计算服务,腾讯云、阿里云、华为云就是一个很不错的选择,云服务器稳定性、安全性以及售后各方面都更受用户认可,下面小编给大家整理…

Kitchen Hook

双扛厨房排钩:挂刀具

linux 内存一致性

linux 出现内存一致性的场景 1、编译器优化 ,代码上下没有关联的时候,因为编译优化,会有执行执行顺序不一致的问题(多核单核都会出现) 2、多核cpu乱序执行,cpu的乱序执行导致内存不一致(多核出…

[二分查找] 旋转数组

1. &#xff08;严格递增序列&#xff09;旋转数组的元素查找 简单来说分为三种情况进行分析 1. 整个旋转数组单调递增 根据x和A[mid]的大小关系&#xff0c;更迭范围。 // 1. 整个旋转数组单调递增if (A[left]<A[right]){if (A[mid] x)return mid;else if (x < A[mid]…