背景 众所周知,混合动力汽车及纯电动汽车是汽车电子行业未来的发展方向。汽车具有发动机,离合控制, 变速机构,执行电机等动力组件。其中变速机构的电控技术实现最为复杂,其中涵盖了动力结构设计, 实时电气电子控制,自动换挡及节能发电策略的实现等等。输入轴和输出轴的实时速度检测在变速器 换挡时尤为重要,在汽车电子行业,可利用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 |
RE:[原创]汽车电子行业利用STM32的DMA捕获功能测量电机的转速
谢谢分享