直流无刷电机控制(一)六步换相(有感霍尔)附六步换相实现代码

直流无刷电机概述

直流无刷电机的转子为永磁铁,定子为换相线圈,有别于有刷电机通过电刷或者换向器换相,无刷电机通过控制器电子换相。

极对数

直流无刷电机采用永磁铁作为转子,一对NS磁极为一极对,为了使电机运转更加平滑,一般转子配有四极对或八极对的多极对。

槽数

直流无刷电机槽数一般指定子上的绕组线圈数,电机的线圈绕组通过嵌线工艺固定在定子槽中。因为直流无刷电机为三相电机,所以槽数一般为:

槽数 = 3 N 槽数=3N 槽数=3N

机械角度和电角度

机械角度为电机转子轴相对于定子旋转的角度;而电机中一个观测点磁极发生由N变化至S(亦或者由S变化至N)则记为电角度旋转180°。

所以可得:

电角度 = 机械角度 × 极对数 电角度=机械角度 \times 极对数 电角度=机械角度×极对数

六步换相

六步换相是一种控制直流无刷电机的换相方法,通过控制定子中的电流,以实现电机转速和旋转方向上的控制。

六步换相有120°两相定子导通和180°三相定子导通两种导通模式,这里讨论的是更多场景下使用的120°导通模式。

六步换相并不是说必须有传感器估算电角度,只需要按照下述顺序(或反顺序)进行换相,在调制参数合适的情况下电机就有可能运转,区别只是在于运转的平滑性,带载丢步的概率或者说换相的成功概率。

在这里插入图片描述

为了提高电机换相的成功率,尤其是为了改善带载状态下的丢步问题,并使运转更加平滑,需要对电机转子电角度观测进行闭环换相(注意这里指的是换相闭环,并非电机控制中常见的电流环,速度环或位置环那样的控制器闭环)。

六步换向实际测量图示

如下图示CH1黄色为A,CH3蓝色为B,CH2粉色为C。测量结果为各相反电动势。

在这里插入图片描述

在这里插入图片描述

调制方法

电机PWM调制方法实则为功率器件桥臂开关策略。分为以下五种:

  1. PWM-ON型。在120°导通区间,各开关管前60°采用PWM调制,后60°则恒通。
  2. ON-PWM型。在120°导通区间,各开关管前60°恒通,后60°则采用PWM调制。
  3. H_PWM-L_ON型。在120°导通区间,上桥臂开关管采用PWM调制,下桥臂恒通。
  4. H_ON-L_PWM型。在120°导通区间,上桥臂开关管恒通,下桥臂采用PWM调制。
  5. H_PWM-L_PWM型。在120°导通区间,上、下桥臂均采用PWM调制。

在这里插入图片描述

下为采用HPWM-LON开关策略的换相代码

switch (phase){case HALL_PHASE_B2A:{LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2N);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3N);LL_TIM_DisableAllOutputs(TIMx);LL_TIM_DisableCounter(TIMx);LL_TIM_OC_SetCompareCH2(TIMx,global_pwm_duty);LL_TIM_OC_SetCompareCH1(TIMx,TIMx->ARR);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH2);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH1N);LL_TIM_EnableAllOutputs(TIMx);LL_TIM_EnableCounter(TIMx);break;}case HALL_PHASE_C2A:{LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2N);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3N);LL_TIM_DisableAllOutputs(TIMx);LL_TIM_DisableCounter(TIMx);LL_TIM_OC_SetCompareCH3(TIMx,global_pwm_duty);LL_TIM_OC_SetCompareCH1(TIMx,TIMx->ARR);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH3);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH1N);LL_TIM_EnableAllOutputs(TIMx);LL_TIM_EnableCounter(TIMx);break;}case HALL_PHASE_C2B:{LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1N);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3N);LL_TIM_DisableAllOutputs(TIMx);LL_TIM_DisableCounter(TIMx);LL_TIM_OC_SetCompareCH3(TIMx,global_pwm_duty);LL_TIM_OC_SetCompareCH2(TIMx,TIMx->ARR);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH3);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH2N);LL_TIM_EnableAllOutputs(TIMx);LL_TIM_EnableCounter(TIMx);break;}case HALL_PHASE_A2B:{LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1N);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3N);LL_TIM_DisableAllOutputs(TIMx);LL_TIM_DisableCounter(TIMx);LL_TIM_OC_SetCompareCH1(TIMx,global_pwm_duty);LL_TIM_OC_SetCompareCH2(TIMx,TIMx->ARR);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH1);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH2N);LL_TIM_EnableAllOutputs(TIMx);LL_TIM_EnableCounter(TIMx);break;}case HALL_PHASE_A2C:{LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1N);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2N);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3);LL_TIM_DisableAllOutputs(TIMx);LL_TIM_DisableCounter(TIMx);LL_TIM_OC_SetCompareCH1(TIMx,global_pwm_duty);LL_TIM_OC_SetCompareCH3(TIMx,TIMx->ARR);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH1);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH3N);LL_TIM_EnableAllOutputs(TIMx);LL_TIM_EnableCounter(TIMx);break;}case HALL_PHASE_B2C:{LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH1N);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH2N);LL_TIM_CC_DisableChannel(TIMx,LL_TIM_CHANNEL_CH3);LL_TIM_DisableAllOutputs(TIMx);LL_TIM_DisableCounter(TIMx);LL_TIM_OC_SetCompareCH2(TIMx,global_pwm_duty);LL_TIM_OC_SetCompareCH3(TIMx,TIMx->ARR);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH2);LL_TIM_CC_EnableChannel(TIMx,LL_TIM_CHANNEL_CH3N);LL_TIM_EnableAllOutputs(TIMx);LL_TIM_EnableCounter(TIMx);break;}default:break;
}

霍尔传感器

电机中的霍尔传感器为单极性霍尔传感器,即在靠近N磁极时表现为高电平,在靠近S磁极表现为低电平。

直流无刷电机的霍尔传感器布置方式为120°和60°两种,对应着两种控制序列。

120°布置

在这里插入图片描述

因为120°布置,所以传感器ABC之间有着 4 π 3 \frac{4\pi}{3} 34π的相位差

在这里插入图片描述

60°布置

在这里插入图片描述

因为60°布置,所以传感器ABC之间有着 2 π 3 \frac{2\pi}{3} 32π的相位差

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

等保测评二级有哪些标准

等级保护测评(等保测评)是中国的一项网络安全标准,旨在评估和确保关键信息基础设施的安全。二级等保测评是适用于一般级别的信息系统,这些系统一旦受损,可能会对社会秩序、公共利益和公民权利造成一定程度的影响。 二级…

05-13 周一 量化是什么

05-13 周一 量化是什么 时间版本修改人描述2024年5月13日11:27:25V0.1宋全恒新建文档2024年5月14日16:21:20V1.0宋全恒了解 简介 神经网络在运行时有较高的计算成本,而且随着大模型时代的到来,知识由一个巨大的LLM存储,为了获取知识&#xf…

Cow Exhibition G的来龙去脉

[USACO03FALL] Cow Exhibition G - 洛谷 曲折经过 爆搜 一开始没什么好的想法&#xff0c;就针对每头奶牛去or不去进行了爆搜。 #include <cstdio> #include <algorithm> using namespace std;#define maxn 405 int iq[maxn], eq[maxn]; int ans; int n;void d…

【C++初阶】第十一站:list的介绍及使用

目录 list的介绍及使用 1.list的含义 2.list的介绍 3.list的使用 1.list的构造 2.list iterator的使用 3.list capacity 4.list element access 5 list modifiers 尾插尾删 和 头插头删 insert 和 erase resize swap clear 6.list sort and reverse 7.list copy vector copy li…

如何配置https端口?快解析https端口配置教程

https是在http的基础上加入了SSL128位加密&#xff0c;可使网站更加安全&#xff0c;大家都知道http协议使用的是80端口&#xff0c;而https使用的是443端口。起初一些网上银行使用https协议&#xff0c;用户必须安装证书才能正常浏览银行网站&#xff1b;后来是苹果公司强制要…

3、架构-事务处理

目录 概述 场景事例 本地事务 实现原子性和持久性 实现隔离性 概述 事务处理几乎在每一个信息系统中都会涉及&#xff0c;它存在的意义是为 了保证系统中所有的数据都是符合期望的&#xff0c;且相互关联的数据之间不 会产生矛盾&#xff0c;即数据状态的一致性&#xff0…

【挑战30天首通《谷粒商城》】-【第一天】10、环境-docker安装mysql

文章目录 课程介绍一、docker 安装 mysql Stage 1&#xff1a;下载镜像文件 Stage 1-1&#xff1a;打开官网查看镜像 Stage 1-2&#xff1a;拉取镜像 Stage 1-3&#xff1a;查看拉取的镜像 Stage 2&#xff1a;创建实例并启动 A&#xff1a;mysql&#xff08;5.7版&#xff09;…

全栈中VUE的install报错说taobao仓库不好使的解决办法

长话短说&#xff0c;就是报错了&#xff0c;直接上干货。 step1&#xff1a;查看设置&#xff0c;主要是看registry npm config getstep2&#xff1a;设置仓库 npm config set registry https://registry.npmmirror.comstep3&#xff1a;再运行步骤一的指令查看仓库是不是变…

语义分割——高分卫星土地覆盖数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑网络重构和应急资源的灾后配电网信息物理系统协调恢复方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【数据结构】队列的实现(链式)

文章目录 队列1.队列的概念及结构概念结构 2.队列的实现&#xff08;链式结构&#xff09;队列定义初始化队列入队出队获取队头元素获取队尾元素销毁队列判断队列是否为空队列有效个数 完整代码&#xff08;包含测试代码&#xff09;Queue.hQueue.ctest.c 队列 1.队列的概念及…

(毫米波雷达数据处理中的)聚类算法(2) – DBSCAN算法及其实践

说明 读者在阅读本文前&#xff0c;建议先看看本系列的第一篇文章&#xff1a;[1]&#xff08;毫米波雷达数据处理中的&#xff09;聚类算法(1) --- 概述-CSDN博客 DBSCAN算法(Density-Based Spatial Clustering of Applications With Noise)是一种基于密度的聚类算法&#xff…