电机学习-有感BLDC开环控制(六步换相)
文章目录
- 1. 简介
- 2. 六步换向控制
- 3. 机械角度和电角度
- 4.转子位置获取
- 5.霍尔传感器读取测试
- 6.速度开环控制
- 6.1 PWM设置
- 6.2死区时间
1. 简介
BLDC的反电动势一般是梯形的反电动势,所以采用方波控制。如图2-1所示,是一个简化的内转子无刷直流电机。我们通过控制ABC三相的导通顺序来产生不同的磁场,使电机的转子转动。

图2-1
2. 六步换向控制
对于ABC三相,我们每次选取其中两相来导通,那么总共有6种排列组合的方式,如图2-2所示。

图2-2
我们可以通过控制三相导通的顺序使电机转起来。
| 步骤 | A相 | B相 | C相 |
|---|---|---|---|
| 第一步 | 正 | 负 | 悬空 |
| 第二步 | 悬空 | 负 | 正 |
| 第三步 | 负 | 悬空 | 正 |
| 第四步 | 负 | 正 | 悬空 |
| 第五步 | 悬空 | 正 | 负 |
| 第六步 | 正 | 悬空 | 负 |
当电机转第六步的时候再循环第一步到第六步,这样电机就顺时针转了起来,如果要逆时针旋转,那么就反过来从第六步开始。当然,实际使用的过程中电机转子的初始位置我们是不知道,这里只是一个举例说明六步换向的控制原理。另外电机的速度也不是由换向频率来决定的。因为换向使一个被动的动作,只有转子到达了某一位置我们才可以进行换向来促使转子到达下一个位置,如果想要控制电机转速,就需要控制电流(两相之间的电压),从而控制磁场强度(转子受到的作用力)来控制电机的速度。
3. 机械角度和电角度
机械角度就是电机实际的角度,一圈是360°。而对于电角度的个人理解是一个定子上电压(电流)变化一个周期为360°。电角度=机械角度*P,P为电机极对数。
在六步换向控制电机的过程中,六步换向一个周期经过的电角度是360°,A相的电压如图2-3所示,在一个周期中正电压的持续周期时间是120°,悬空持续的时间是120°,负电压的持续时间是120°。

图2-3
4.转子位置获取
在进行六步换向的过程中,我们需要确定当前转子的位置来对ABC相进行控制。在有感控制中,通过霍尔原件来确定转子的位置,在无感控制中是根据反电动势来判断电机的位置。霍尔传感器在电机中一般有两种安装方式一种是三个传感器间隔120°电角度,一种是三个传感器间隔60°电角度安装。这样安装可以保证在六步换向的一个周期中,每一步对应的传感器编码不一样,我们可以根据传感器的编码来确定转子是否到达位置从而进行换向,三个相隔120°电角度的霍尔传感器在一个周期中的编码如图2-4所示。关于下图的理解:在一个六步换向的周期中,每个相都会经历一个从正电压—>悬空---->负电压—>悬空的一个过程。假设正电压的时候该相上是N极,它吸引转子的一个S极过来,并推走当前的N极,直到S与该相正对上,此时它悬空,然后另外两相通电,将S极转走,S极转走后,该相变为负电压产生S极,将转子的下一个N极吸引过来,此时它再悬空,另外两相通电将N极转走。在这个过程中,它经历了转子一个完整的N极和S极。那么三个霍尔传感器也会经历一个N极和S极。又因为三个传感器相差120°的电角度,所以b传感器的高电平延时a传感器120°,c传感器的高电平延时b传感器120°。因此我们可以看到在一个六步换向周期中,abc组成的编码有6种,我们可以根据编码器的值来判断电机换向的时机。

图2-4
实际上,我们电机厂商会给一个配套的真值表,如图2-5所示。

图2-5
上图的意思是,当霍尔传感器的值是001的时候我们需要A相悬空,C相正电压,B相负电压;随着电机转动,当检测到霍尔传感器的值变为101的时候就需要A相正电压,B相负电压,C相悬空,因此类推进行六步换向。需要注意的是如果电机在六步换向过程中如果保持位置不变的话,此时电路中的电能将只能转换为热能,不能转换为机械能,而我们的电机绕组时候的是漆包铜线,其内阻非常的小,电流就会非常的大,这将会产生大量的热而导致电源或者电机被烧毁。
5.霍尔传感器读取测试
霍尔传感器的读取电路图很简单如图2-6所示,三个上拉电路,GPIO设置为输入模式就可以了, 开发板使用的是STM32F405。

图2-6
例程:方波控制-霍尔信号采集
6.速度开环控制
能够读取到霍尔传感器的数据后,就可以对电机进行六步换向控制了,电机三相控制的逆变电路如图2-7所示。

图2-7
如图所示,导通Q1和Q5,其他都不导通,那么电流将从Q1流经U相再从V相流到Q5,同理导通Q1Q6,Q2Q4,Q2Q6,Q3Q4,Q3Q5来驱动电机,可以通过PWM来控制电机的速度。
6.1 PWM设置
PWM控制的时候总过有5中方式,如图2-8所示:
-
PWM-ON型,在控制过程中,上下桥臂导通的120°电角度内,前60°保持恒通,后60°使用PWM
-
ON-PWM,在控制过程中,上下桥臂导通的120°电角度内,前60°使用PWM,后60°保持恒通
-
H_PWM_L_ON型,在控制过程中,上桥臂使用PWM,下桥臂保持恒通
-
H_ON_L_PWM,在控制过程中,上桥臂保持恒通,下桥臂使用PWM控制
-
H_PWM_L_PWM,在控制过程中,上下桥臂都使用PWM

图 2-8
在实际控制过程中,不同的控制方式效果不同,我们需要尝试多种控制效果,然后选择最佳的一种方式。本次测试PWM使用的频率为20Khz.一般选用16Khz以上,20KHz左右的PWM因为人类能够听到的声音一般是16Khz以下,在16Khz以下的时候人类就会慢慢听到噪声,PWM的频率也不能过高,过高会导致电机转矩降低,另外也要注意满足MOS管的开关频率。
6.2死区时间
在控制过程中,还需要注意不能使上下MOS管同时导通,这样会导致短路。MOS的关闭需要一个时间,因此在进行上下管开关切换的时候,需要一个延时,这个延时就是死区时间。如图2-9所示,是我使用的MOS管的硬件手册。td(on)是开启的延时,tr是电流上升的时间;td(off)是关闭的延时,tf是电流下降的时间。开启总时间为td(on)+tr,关闭的总时间是td(off)+tf,所以死区的最短时间是td(off)+tf-tr-td(on),加上死区时间后MOS管关闭完正好另一个MOS管刚刚开启。实际使用中死区时间通常设置的比计算的多一些。

图2-9
在实际应用中,驱动电路可能还有别的一些芯片,因为单片机的引脚可能不足以驱动MOS管。我使用的板子在MOS管的前一级还带了一个MOS管栅极驱动芯片,其内部自带死区控制电路。其硬件手册如图2-10所示,可以看出其高端开启时间大于低端关闭时间,低端开启时间大于高端关闭时间。开启时间与关闭时间相差了大约85ns,为了保险起见我们也可以在定时器中再设置一个死区时间。

图2-10
例程:方波控制-有感开环控制
源码链接:https://github.com/IJustLoveMyself/MotorControl
相关文章:
电机学习-有感BLDC开环控制(六步换相)
文章目录 1. 简介2. 六步换向控制3. 机械角度和电角度4.转子位置获取5.霍尔传感器读取测试6.速度开环控制6.1 PWM设置6.2死区时间 1. 简介 BLDC的反电动势一般是梯形的反电动势,所以采用方波控制。如图2-1所示,是一个简化的内转子无刷直流电机。我们通过…...
《深度学习》PyTorch框架 优化器、激活函数讲解
目录 一、深度学习核心框架的选择 1、TensorFlow 1)概念 2)优缺点 2、PyTorch 1)概念 2)优缺点 3、Keras 1)概念 2)优缺点 4、Caffe 1)概念 2)优缺点 二、pytorch安装 1、安装 2、…...
Linux:进程(四)
目录 一、进程优先级 二、Linux调度与切换 1.背景 2.进程切换 一、进程优先级 背景:在计算机中,软硬件资源是有限的,而进程想要访问某一种资源,就得通过排队来保证访问资源的过程是有条不紊的。 Linux下对优先级的定义。执行命…...
CTC loss 博客转载
论文地址: https://www.cs.toronto.edu/~graves/icml_2006.pdf 为了对应这个图,我们假设一种符合的模型情况: 英文OCR,37个类别(26个小写字母10个汉字空格),最大输出长度8个字符 模型预测结果…...
TryHackMe 第3天 | Pre Security (中)
该学习路径讲解了网络安全入门的必备技术知识,比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识,本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…...
c语言中“qsort函数”和“结构体成员访问变量”
qsort函数: qsort是c语言中的库函数,这个函数是对数据进行排序(对任意) 冒泡排序中排列整数顺序用的函数只适用于整形,而qsort函数适用与所有数据 排序算法 冒泡排序 插入 选择 快速 void qsort{ void * base&…...
【MySQL】在MySQL中STR_TO_DATE()
1.在MySQL中STR_TO_DATE() 在MySQL中,STR_TO_DATE() 函数用于将字符串转换为日期格式。这个函数非常有用,当你需要将文本数据转换为可由MySQL日期和时间函数处理的格式时。 1.1 语法 STR_TO_DATE() 函数的基本语法如下: STR_TO_DATE(date…...
PCIE集成验证(五)MSI/MSI-X中断
PCI 总线最早采用的中断机制是 INTx,这是基于边带信号的。后续的 PCI/PCI-X版本,为了消除边带信号,降低系统的硬件设计复杂度,逐渐采用了 MSI(Message Signaled Interrupt)/MSI-X(消息信号中断)的中断机制。…...
leetcode 380.O(1) 时间插入、删除和获取随机元素
实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时࿰…...
基于MicroPython的ESP8266控制PS2摇杆模块的设计方案
以下是一个基于MicroPython的ESP8266控制PS2摇杆模块的设计方案: 一、硬件准备: 1. 一块ESP8266开发板,如NodeMCU 2. 一个带有X、Y轴模拟输出和Z轴(按钮)数字输出的PS2摇杆模块 3. 杜邦线若干 4. 3.3V直流电源 二、硬件连接:…...
Spring Boot 3项目使用Swagger3教程
Spring Boot 3项目使用Swagger3教程 Swagger:自动生成接口文档 添加依赖(pom.xml) <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.1…...
linux-系统备份与恢复-系统恢复
Linux 系统备份与恢复:系统恢复 1. 概述 Linux 系统的恢复是系统管理的重要组成部分,它指的是在系统崩溃、硬件故障、误操作或安全问题后,恢复系统到可用状态的过程。良好的系统恢复计划可以有效避免数据丢失和业务中断,并确保系…...
【Rust语言】std::collections::HashMap用法
HashMap用法文档 文章目录 创建键的要求 增删改查增: insert删: remove/remove_entry改单点修改 get_mut整体修改 values_mut/iter_mut 查集增改于一身的entry 遍历只读遍历into_values() 与 into_keys()容量、实际长度、判空导出清除重定容量 use std::collections::HashMap;创…...
使用SoapUI、Postman工具调用Webservice方法
SoapUI工具更适合调用Webservice使用。 1.使用SoapUI工具调用Webservice 创建“New SOAP Project” 自行定义一个项目名称,输入wsdl地址: 在左侧列表找到方法名,双击“Request 1”, 在请求数据中,添加对应的参数,然…...
js 与 C++引用和指针的关系
js 与 C引用和指针的关系 js 中既有引用的影子, 也有指针的影子。 1、引用用法 这里相当于C 中的引用, b是a的引用, 修改b ,a也改变。 var a { 1: 1 }var b a;a null;b[2] 2;console.error(b); // { 1: 1, 2: 2 }2、指针用法 这里 a,b应该按照指针理解。 var a undef…...
python --PyAibote自动化
官文: https://www.pyaibote.com/ 下载安卓集成环境: 可以看到开发的一些信息...
Ubuntu系统开发环境搭建
一,Android源码编译环境搭建 1 安装Java Development Kit (JDK) sudo apt-get update sudo apt-get install openjdk-8-jdk 2,确认JDK安装成功 java -version 3,安装编译所需的依赖项 sudo apt-get install git-core gnupg flex bison gperf build-essential zip cu…...
lvs-dr模式实验详解
华子目录 lvs-dr(企业当中最常用)dr模式数据逻辑dr模式数据传输过程dr模式的特点实验拓扑实验主机准备解决vip响应问题限制响应级别:arp_ignore限制通告级别:arp_announce 实验步骤1.client的ip设定2.router上的ip设定3.router开启路由转发功能4.lvs主机…...
【RDMA】mlxconfig修改和查询网卡(固件)配置--驱动工具
目录 简介 工具要求 语法 例子和参数 例子 更多参数 其他工具和查询 简介 mlxconfig 工具允许用户在不重新烧录固件的情况下更改某些设备配置。 配置在重启后仍然保留。 默认情况下,mlxconfig 显示将在下次启动时加载的配置。对于第五代设备,还…...
跨站请求伪造(CSRF)漏洞详解
免责申明 本文仅是用于学习检测自己搭建的DVWA靶场环境有关CSRF的原理和攻击实验,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《中华人民共和国网络安全法》及其所在国家地区相关法…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...
LeetCode - 148. 排序链表
目录 题目 思路 基本情况检查 复杂度分析 执行示例 读者可能出的错误 正确的写法 题目 148. 排序链表 - 力扣(LeetCode) 思路 链表归并排序采用"分治"的策略,主要分为三个步骤: 分割:将链表从中间…...
