前提:可以先看电机专栏的2.有霍尔传感器BLDC换向原理_lakers_cbb的博客-CSDN博客。笔记是先从有道云笔记整理的,可能格式有些不对,如果想看有道云笔记,可以私信发链接。或者需要的读者可以在下面评论,会把有道云笔记内容链接分享,包括C++、Linux、GNSS导航、自动驾驶、QT、C语言、C#、Python、STM32等笔者在开发、学习过程中整理的笔记分享出来。后续在电机专题会有笔者的电机、导航、自动驾驶等算法源码上传。
1.BLDC转速单位
@1.在电机领域,转速的单位是圈/秒或者圈/分钟
@2.圈/分钟的意思是电机一分钟旋转多少圈,单位为RPM(Revolutions Per Minute)
2.带霍尔传感器的有感BLDC转速测量方案
@1.带霍尔的BLDC电机转速测量很精确。霍尔传感器本身根据电磁场的变化输出U、V、W三相波形。U、V、W三相线路接入到控制器系统中,根据上升沿+下降沿双沿中断的方式来采集霍尔U、V、W三相输入的高低电平变化。
@2.霍尔U、V、W三相波形周期(period)、占空比(duty)在单位时间内看做是完全一样的。所以我们拿出U、V、W中的一相来分析。
@3.假设我们拿U相来分析。将U相和控制器某一路timer定时器的输入捕获管脚连接。
@4.配置这个输入捕获timer的频率Ft,通过配置合适的频率Ft,并且频率Ft和timer的计数器的位数(一般为12位、16位、32位)来整体配置可以计算出捕获的高电平区间的最大时间,也就是C*(1/Ft)是输入捕获timer计数的高电平区间最大时间,假设此输入捕获timer计数器为16
位,则捕获的最大高电平区间计数值为2^16,也就是65535.计数值Cmax*(1/Ft)就可以计算出捕获高电平的最大时间。一般情况下霍尔传感器U、V、W三相频率的高低电平区间在单位时间内都是各占50%,也就是说占空比可以默认为50%。
Cmax*(1/Ft) * 2就是高低电平的脉冲周期时间。1 /(Cmax*(1/Ft) * 2就是可以计算出输入捕获定时器可以捕获的最小的脉冲频率是多少。最大脉冲频率是当C值为1时为计算出的输入捕获频率值为可以捕获放最大脉冲频率。
@5.软件上进行捕获U相一个高电平或低电平区间的计数值C,一般我们会捕获高电平区间的计数值C。
输入捕获timer的频率我们一般称为Ft。通过上述的分析,我们可以得出以下计算公式:
C:高电平期间的脉冲计数值
Ft:输入捕获定时器频率
1/Ft:timer定时器每捕获一个脉冲值所需要的时间
C*(1/Ft):高电平时间
C*(1/Ft)*2:高电平时间+低电平时间=周期时间
又因为:在BLDC原理中,有几个极对数,那么电机定子旋转一周就有几个周期,这里我们假设电机的极对数为N,则:
C*(1/Ft)*2*N:就是电机旋转一圈用的时间,单位为:
2*N*C/Ft秒/圈
但是在电机领域一般会说圈/每秒或者圈/每分钟
2*N*C/Ft是秒/圈,倒数关系就是Ft/(2*N*C)圈/每秒
如果要转换成圈/每分钟,则为:60Ft/(2*N*C)
如果,C为高电平期间计数值,则计算公式为:
RPM = 60Ft/(2*N*C)
如果,C为高电平+低电平期间计数值,则计算公式为:
RPM = 60Ft/(N*C)
3.不带霍尔传感器的无感BLDC转速测量方案
@1.不带霍尔的无感BLDC转速测量方案非常复杂。基础原理是通过电机的U、V、W三相控制电路的反电动势过零检测方案基础
上进行实现的。
@2.反电动势过零检测主要用到高低转速闭环换向的软件滤波。
通过一个比较器,将反电动势的变化量通过比较器比较后转换为了开关变化量。这里不详细说明反电动势过零检测方案实现原理。我们只分析软件滤波后的U、V、W三相波形来计算转速方法。
还有另外一种方式是使用处理器内部的比较器,和外部比较器原理上是一样的,只不过抗干扰能力比外部能够好一些。
@3.分析无感转速测量方案一定会需要对比有感转速测量方案。有感转速测量是通过timer定时器输入捕获来抓取霍尔U、V、W三相中的某一相的高电平区间(或高低电平一个周期区间)的timer计数值来推算出电机转速。那么无感转速测量方案又是咋么一种方案呐?
@4.首先,无感转速计算是不能根据timer输入捕获的方式来实现的。因为无感的最大问题是电路各种杂波干扰太严重,如果未进行对杂波进行滤波,那么用输入捕获的方式来进行无感过零波形周期采集的话干扰和误差太严重,根本无法计算出高电平期间计数值C。通过逻辑分析仪抓取波形分析,下图中绿框中三个波形是滤波算法对无霍尔反电动势过零检测波形滤波后的波形,而红框的波形是未进行无霍尔反电动势过零检测滤波的波形。如果使用timer输入捕获的方式那么高电平周期计算已经失去意义了。
@5.通过@4的分析,我们要想计算出高电平的计数值,必须先进行滤波。滤波方式在这里不详细介绍,大概方案是U、V、W三相输出PWM频率是12KHZ,软件上设置定时器溢出中断,相当于是每一个PWM周期产生一个中断,中断的频率也是12KHZ,也就是每0.083ms,83us产生一次中断,然后从中断中读取U、V、W过零检测IO管脚的值进行滤波,滤波完成后。就是上图显示的绿色框的三个波形。
当然,如果MCU定时器资源充足,我们也可以单独创建一路定时器,在固定的频率下进入中断进行无感过零监测点滤波。
@6.滤波后可以对脉冲波的高电平或者高电平+低电平区间进行计数,计数值记录为C,频率是timer输出PWM的频率Ft=12KHZ。
@7.无霍尔无感方波控制BLDC转速计算:
C:高电平期间的脉冲计数值
Ft:滤波定时器(也就是输出PWM的定时器)频率
1/Ft:timer定时器每捕获一个脉冲值所需要的时间
C*(1/Ft):高电平时间
C*(1/Ft)*2:高电平时间+低电平时间=周期时间
又因为:在BLDC原理中,有几个极对数,那么电机定子旋转一周就有几个周期,这里我们假设电机的极对数为N,则:
C*(1/Ft)*2*N:就是电机旋转一圈用的时间,单位为:
2*N*C/Ft秒/圈
但是在电机领域一般会说圈/每秒或者圈/每分钟
2*N*C/Ft是秒/圈,倒数关系就是Ft/(2*N*C)圈/每秒
如果要转换成圈/每分钟,则为:60Ft/(2*N*C)
如果,C为高电平期间计数值,则计算公式为:
RPM = 60Ft/(2*N*C)
如果,C为高电平+低电平期间计数值,则计算公式为:
RPM = 60Ft/(N*C)