MT法测速之定量分析

    速度测量是工控系统中最基本的需求之一,最常用的是用数字脉冲测量某根轴的转速,再根据机械比、直径换算成线速度。脉冲测速最典型的方法有测频率(M法)和测周期(T法)。
定性分析:
    M法是测量单位时间内的脉数换算成频率,因存在测量时间内首尾的半个脉冲问题,可能会有2个脉的误差。速度较低时,因测量时间内的脉冲数变少,误差所占的比例会变大,所以M法宜测量高速。如要降低测量的速度下限,可以提高编码器线数或加大测量的单位时间,使用一次采集的脉冲数尽可能多。
T法是测量两个脉冲之间的时间换算成周期,从而得到频率。因存在半个时间单位的问题,可能会有1个时间单位的误差。速度较高时,测得的周期较小,误差所占的比例变大,所以T法宜测量低速。如要增加速度测量的上限,可以减小编码器的脉冲数,或使用更小更精确的计时单位,使一次测量的时间值尽可能大。
    M法、T法各且优劣和适应范围,编码器线数不能无限增加、测量时间也不能太长(得考虑实时性)、计时单位也不能无限小,所以往往候M法、T法都无法胜任全速度范围内的测量。因此产生了M法、T法结合的 M/T 测速法:低速时测周期、高速时测频率。

定量分析:
    M/T 法中的“低速”、“高速”如何确定呢?
    假定能接受的误差范围为1%、M法测得脉冲数为f, T 法测得时间为 t 。
    M法:2/f <= 1% ==> f >= 200
        即一次测量的最小脉冲数为 200,设此频率对应的速度为 V1
    T法:( 1/(t-1) - 1/t ) / (1/t) <= 1% ==> t >= 101
        即一次测量的时间为 101 个单位,设此周期对应的速度为 V2
        若计时单位为mS,则 t>= 101mS

    这只是理论精度,实际应用还要考虑脉冲信号采集的延迟,软件处理所需花费的时间。
    若 V1 < V2,则 M/T 法能满足全范围内的速度测量。一个系统设计之前,就需要详细的计算,使V1<V2或尽可能接近。不能光凭经验估算确定高低速、传动比、编码线数。然后很不幸,很多现有系统中会出现 V1 > V2,就会出现(V2, V1) 这一段速度无论 M 法还是 T 法都无法覆盖的情况,一个缓解的办法就是在(V2,V1)段同时使用 M法和T法测量,然后取平均值,但要解决好M/T测量的同步问题。
### MT测速原理 MT测速是一种结合了测频(M)和测周(T)优点的测速。在高速情况下,M通过测量单位时间内的脉冲数来计算频率,而在低速情况下,T通过测量两个脉冲之间的时间来计算周期,从而得到频率。MT通过在不同速度范围内自动切换使用M和T,从而在全速度范围内实现较高的测速精度和分辨率。 在M中,随着电动机转速的降低,计数值M1减少,测速装置的分辨能力变差,测速误差增大。若速度过低,M1将小于1,测速装置便不能正常工作。而T测速则相反,随着电动机转速的增加,计数值M2减小,测速装置的分辨能力越来越差。为了克服这两种方的局限,MT测速应运而生[^4]。 ### MT测速实现方 MT测速的实现方涉及到对速度的测量和对误差的控制。在实际应用中,需要根据系统的设计要求来确定高低速的界限,以及传动比和编码线数等参数。此外,还需要考虑脉冲信号采集的延迟和软件处理所需花费的时间。 在实现MT测速时,首先需要确定速度测量的误差范围,例如1%。然后根据这个误差范围来计算M和T所需的最小脉冲数和最大时间单位。如果M测得的脉冲数为f,则要求2/f <= 1%,即f >= 200;而T测得的时间为t,则要求(1/(t-1) - 1/t) / (1/t) <= 1%,即t >= 101个单位时间。如果V1 < V2,则MT能满足全范围内的速度测量[^5]。 下面是一个简单的Python代码示例,展示如何根据M和T的原理来实现MT测速: ```python def mt_method_speed_measurement(pulses, time_units, threshold=200): """ 实现MT测速的基本逻辑 :param pulses: 单位时间内检测到的脉冲数 :param time_units: 两个脉冲之间的时间单位 :param threshold: M所需的最小脉冲数 :return: 测量速度 """ if pulses >= threshold: # 使用M计算速度 speed = calculate_speed_by_m_method(pulses) else: # 使用T计算速度 speed = calculate_speed_by_t_method(time_units) return speed def calculate_speed_by_m_method(pulses): """ 使用M计算速度 :param pulses: 单位时间内检测到的脉冲数 :return: 速度 """ # 假设每个脉冲对应的速度增量是固定的 pulse_to_speed_ratio = 0.5 # 每个脉冲对应的速度增量 return pulses * pulse_to_speed_ratio def calculate_speed_by_t_method(time_units): """ 使用T计算速度 :param time_units: 两个脉冲之间的时间单位 :return: 速度 """ # 假设每个时间单位对应的速度是固定的 time_unit_to_speed_ratio = 10 # 每个时间单位对应的速度 return 1 / (time_units * time_unit_to_speed_ratio) ``` ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值