你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【原创】【MCU实战经验】+汽车电子行业利用STM32的DMA捕获功能测量电机的转速

[复制链接]
wjandsq 提问时间:2014-4-15 19:16 /
背景
众所周知,混合动力汽车及纯电动汽车是汽车电子行业未来的发展方向。汽车具有发动机,离合控制,
变速机构,执行电机等动力组件。其中变速机构的电控技术实现最为复杂,其中涵盖了动力结构设计,
实时电气电子控制,自动换挡及节能发电策略的实现等等。输入轴和输出轴的实时速度检测在变速器
换挡时尤为重要,在汽车电子行业,可利用STM32的DMA捕获功能测量输入输出轴电机的转速。
这点非常重要,而DSP的PWM捕获由于仅有2级FIFO,只能以中断方式捕获转速输入脉冲,对于高线数
的转速脉冲检测,则无能为力。

1 电机转速
电机转速是一个跟时间相关的物理量,在传动比确定的情况下,电机转速和车速成正比。
电机转速的单位为转/分,可以用这个物理量计算某一时间内车辆的行驶里程。

2 车辆速度
车辆速度单位为千米/小时,这个速度可以由电机转速和车辆传动比计算得到。
车辆仪表显示的车辆速度不需要实时更新,但电机转速则不同,它作为运那个动系统
实时反馈的一个物理量,对于电机控制器MCU,整车控制器VCU,或TCU都非常重要。

3 伺服电机 光电编码器
在高速精密的数控系统中,采用伺服电机作为执行机构,伺服电机一般内置相对或绝对
光电编码器,光电编码器通过高速脉冲输出,反馈电机转过的行程。
一般的伺服电机有2500线,5000线或10000线,表示电机转一圈,发出2500、5000或
10000个脉冲。

4 脉冲频率 脉冲周期
比如一个10000线的安川伺服电机,转速为3000转/分,这表示1分钟内,电机的光电
编码器反馈10000*3000个脉冲。单位时间内转速越高,发的脉冲数越多(好像是废话)。

3000 (转/分) = 3000/60 (转/秒) = 50 (转/秒)
即脉冲频率 = 50 * 10000 (Hz)   = 500 (KHz)
  脉冲周期 = 1 / 5 * 10^5 (秒) = 2  (微秒)

5 脉冲周期的捕获 旋转编码器

硬件电路至少需要检测到两个脉冲(上升沿或下降沿),根据这两个脉冲间隔的时间
才可以算出电机的转速。如果高速脉冲输出的占空比为50%,也可以检测一个上升沿
和随后的下降沿,根据两个信号之间的间隔时间算出电机转速。

由于高速脉冲的周期太短,比如这个2us,通用MCU算出来也发不出来,一般的数控系统,
利用CPLD或FPGA进行高速脉冲捕获和转速计算,而且这个转速只是一个参考,实际用来
进行精密位置控制的参数是脉冲数量,而不是转速。

客车用80KW的大功率电机,采用旋转编码器,2048线(每转2048个脉冲)
在3000(转/分) 即 50 (转/秒) 的速度下,
脉冲频率 =  50 * 2048 (Hz) = 102400 (Hz)
脉冲周期 = 1 / 102400 (秒) = 9.765625 (微秒)

这意味着,两个上升沿或下降沿之间的间隔时间 = 9.765625 (微秒)

综上所述,不到10us就可以算出电机的转速,当然为了得到更平稳的数据,也可以连续检测11个脉冲,
就能得到10个时间样本,求平均值就能得到可靠的电机速度。
11个脉冲检测总时间 = 9.765625 (微秒) * 10 = 97.65625 (微秒)

至于轴端转速,由于轴端的旋转编码器为900线,脉冲频率不到电机旋变脉冲频率的1/2,
在3000(转/分)时,直接挡的脉冲周期 = 9.765625 * 2048 /900 (微秒) = 22.222 (微秒)

综上所述,不到23us就可以算出轴端的转速,当然为了得到更平稳的数据,也可以连续检测11个脉冲,
就能得到10个时间样本,求平均值就能得到可靠的轴端速度。
11个脉冲检测总时间 = 22.222 (微秒) * 10 = 222.22 (微秒)

6 利用STM32连续捕获脉冲

由于STM32在硬件上具备脉冲的连续捕获能力,不需要启用中断,就可以通过DMA通道直接将上述10个
脉冲的间隔时间捕获到某一固定内存区域(第一个脉冲捕获到的时间不算),这样就为CPU节约了大量的
时间开销。对于2048线的电机,97.65625 (微秒)内完成捕获,然后在CPU空闲时进行转速计算,1000(微秒)
也就是1(毫秒)后把这个转速数据通过CAN或485通讯接口发出去,就可以绘制电机的加减速转速曲线了。

经实测发现,以1(毫秒)的周期发送的转速数据绘制成的曲线,要比电机内部检测到的转速数据
(通过CAN发送出来)绘制的曲线更为平滑。

电机内部检测到的转速数据(通过CAN发送出来)绘制的曲线,存在10毫秒的时间延迟,曲线成台阶状,
这时由于电机向外发送的转速,只能10毫秒更新一次,所以就是台阶状(10毫秒不变)。

7 利用霍尔传感器代替旋转编码器

对于车辆控制系统,每隔1毫秒甚至10毫秒获取一个转速,即可满足要求,因此汽车行业多采用霍尔传感器
获取电机转速。汽车行业在电机上安装的霍尔传感器,一般是每转发36-60个脉冲。

经计算得知,以3000 转/分的速度运行的电机,如果霍尔传感器每转发60个脉冲,
脉冲频率 = 50 * 60 (Hz) = 3000 (Hz)
脉冲周期 = 1 / 3000 (秒) = 333.33 (微秒)

如果连续捕获11个脉冲(10个数据样本),即捕获11个脉冲后再计算转速,那么需要3333.3 (微秒)
也就是3.333(毫秒) 才可以得到一个稳定的数据,而且是在3000 转/分的情况下。
如果连续捕获6个脉冲(5个数据样本),需要1.6665 (毫秒),转速数据才可以更新。
如果连续捕获4个脉冲(3个数据样本),需要1(毫秒),转速数据才可以更新。
如果连续捕获2个脉冲(1个数据样本),需要0.333(毫秒),转速数据才可以更新。

一般我们不需要300(转/分)以下的数据,这样数据更新的频率如下:
如果连续捕获6个脉冲(5个数据样本),需要16.665(毫秒),转速数据才可以更新。
如果连续捕获4个脉冲(3个数据样本),需要10.000(毫秒),转速数据才可以更新。
如果连续捕获2个脉冲(1个数据样本),需要 3.333(毫秒),转速数据才可以更新。

综上所述,采用霍尔传感器代替旋转编码器,使得转速数据采集的实时性降低,但由于脉冲周期大于250(微秒),
可以用中断的方式捕获,并进行实时计算,因此能用廉价的芯片(例如10元以内MCU)实现电机转速采集。
同样也可以用STM32F1xx/STM32F2xx系列的芯片连续捕获脉冲并通过DMA通道传输数据,由于霍尔传感器的
每转脉冲数较少,只有在300转以上的情况下,才可保证转速数据的实时性。在300转/分时,数据实时更新
周期为3.333毫秒,若需要更快的更新频率,需采用软件插补的办法算出不存在的转速。

备注:
CAN_Motor_Speed  表示电机控制器通过CAN总线发过来的电机转速(10毫秒周期发送),作为基本参考
Motor_Speed      表示STM32F1实测电机转速
S_Speed          表示轴端转速,有传动比,所以数值小

以上三个速度通过RS485发送到上位机,如图所示,波特率是230400bps


【图片】5个样本滑动平均值滤波.jpg




 
5个样本滑动平均值滤波.png
收藏 3 评论4 发布时间:2014-4-15 19:16

举报

4个回答
scynliaogg 回答时间:2014-4-16 09:28:27

RE:[原创]汽车电子行业利用STM32的DMA捕获功能测量电机的转速

分析的好,高手
laoyulaoyu 回答时间:2018-3-10 12:04:16
代码怎么不分享下
liujunfy527 回答时间:2018-10-17 23:56:36
scynliaogg 发表于 2014-4-16 09:28
分析的好,高手

谢谢分享
haganh 回答时间:2019-4-19 00:16:05
大神能否分享下启用连续脉冲捕获部分的代码呀?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版