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

查看: 3643|回复: 4

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

[复制链接]

50

主题

193

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-23
发表于 2014-4-15 19:16: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
<
回复

使用道具 举报

0

主题

9

回帖

0

蝴蝶豆

初级会员

最后登录
2020-4-8
发表于 2014-4-16 09:28:27 | 显示全部楼层

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

分析的好,高手
回复 支持 1 反对 0

使用道具 举报

0

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
2018-3-16
发表于 2018-3-10 12:04:16 | 显示全部楼层
代码怎么不分享下
回复 支持 反对

使用道具 举报

0

主题

29

回帖

0

蝴蝶豆

初级会员

最后登录
2018-11-6
发表于 2018-10-17 23:56:36 来自手机 | 显示全部楼层
scynliaogg 发表于 2014-4-16 09:28
分析的好,高手

谢谢分享
回复 支持 反对

使用道具 举报

2

主题

4

回帖

0

蝴蝶豆

新手上路

最后登录
2020-1-13
发表于 2019-4-19 00:16:05 | 显示全部楼层
大神能否分享下启用连续脉冲捕获部分的代码呀?
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版