电机编码器 | 原理、分类、应用

注:本文为 "电机编码器" 相关合辑。

英文引文,机翻未校。

中文引文,略作重排。

图片清晰度受引文原图所限。

如有内容异常,请看原文。


How Motor Encoders Work

电机编码器的工作原理

Motor encoders have two main parts: a disc on the motor shaft and sensors that track the disc's movement. When the motor shaft turns, the disc's patterns touch the sensors, creating electrical pulses that show how much the shaft moves.

电机编码器由两个主要部分组成:安装在电机轴上的码盘,以及跟踪码盘运动的传感器。当电机轴旋转时,码盘上的图案与传感器相互作用,产生能够反映轴运动量的电脉冲。

Incremental vs. Absolute Encoding

增量式编码与绝对式编码

Motor encoders can employ two main encoding schemes: incremental and absolute.

电机编码器可采用两种主要编码方案:增量式编码和绝对式编码。

Incremental Encoders: Incremental encoders generate pulses relative to a reference point, typically referred to as the index. Each pulse represents a small angular displacement, allowing the system to track the shaft's movement accurately. These encoders are well-suited for applications where relative position feedback is sufficient.

增量式编码器:增量式编码器相对于一个参考点(通常称为索引点)生成脉冲。每个脉冲代表一个微小的角位移,使系统能够精确跟踪轴的运动。这类编码器适用于相对位置反馈已能满足需求的应用场景。

Absolute Encoders: Absolute encoders give a specific code for each relative shaft position, removing the need for a reference point. This code indicates the shaft's position in one full rotation. This allows for precise positioning without the concern of losing track of its location.

绝对式编码器:绝对式编码器为轴的每个相对位置分配一个特定代码,无需依赖参考点。该代码可标识轴在一整圈旋转中的位置,实现精确定位的同时,无需担心位置信息丢失。

Components of Motor Encoders

电机编码器的组成部分

Encoders for motors comprise several key components that work in tandem to facilitate accurate motion feedback:

电机编码器包含多个关键组件,这些组件协同工作以实现精确的运动反馈:

  • Shaft: The encoder attaches to the motor shaft. As it rotates, the shaft transmits the motion to the encoder's internal components.

    轴:编码器与电机轴相连,旋转时将运动传递至编码器内部组件。

  • Disc: The disc, also known as the code wheel, also mounts to the motor shaft. The disc contains patterns or markings that interact with sensors to generate electrical signals.

    码盘:又称编码轮,同样安装在电机轴上,其表面带有与传感器相互作用以产生电信号的图案或标记。

  • Sensors: As the shaft rotates, sensors detect the changes in the disc's pattern and convert these changes into electrical signals.

    传感器:轴旋转时,传感器检测码盘图案的变化,并将这些变化转换为电信号。

Motor Encoders Types

电机编码器的类型

Motor encoders come in various types, each tailored to specific applications and performance requirements:

电机编码器有多种类型,每种类型均针对特定应用场景和性能要求设计:

Incremental Encoders:

增量式编码器:

  • Incremental encoders generate pulses as the motor shaft rotates, providing relative position information. Each pulse represents a small angular displacement, allowing precise tracking of the shaft's movement. These encoders are cost-effective and widely used in applications where absolute position feedback is not required.
  • 增量式编码器随电机轴旋转产生脉冲,提供相对位置信息。每个脉冲代表一个微小的角位移,可实现轴运动的精确跟踪。这类编码器成本较低,广泛应用于无需绝对位置反馈的场景。

Absolute Encoders:

绝对式编码器:

  • Absolute encoders give a special code for each motor shaft position, removing the need for a reference point. This code indicates the shaft's position after one full turn. This helps ensure accurate positioning without the need to keep track of its location constantly. Users prefer absolute encoders for applications that require accurate and reliable position feedback.
  • 绝对式编码器为电机轴的每个位置分配一个独特代码,无需参考点即可标识轴在一整圈旋转后的位置。其可确保精确定位,且无需持续跟踪位置信息,适用于对位置反馈的准确性和可靠性有要求的应用场景。

Linear Encoders:

线性编码器:

  • Linear encoders measure linear displacement along a straight path, as opposed to rotational movement. They consist of a scale and a read head, with the scale typically featuring evenly spaced markings or gratings. Linear encoders are commonly used in applications such as CNC machining, metrology, and semiconductor manufacturing.
  • 线性编码器用于测量沿直线轨迹的线位移(而非旋转运动),由标尺和读头组成,标尺表面通常带有均匀分布的标记或光栅。其广泛应用于计算机数控(CNC)加工、计量学和半导体制造等领域。

Rotary Encoders:

旋转编码器:

  • Rotary encoders measure rotational movement of the motor shaft and are available in both incremental and absolute configurations. They provide shaft position, speed and rotation direction in servo motors, robotics, and industrial automation.
    旋转编码器用于测量电机轴的旋转运动,分为增量式和绝对式两种配置。在伺服电机、机器人技术和工业自动化领域,其可提供轴的位置、速度和旋转方向信息。

Magnetic Encoders:

磁性编码器:

  • Magnetic encoders utilize magnetic fields to detect changes in position, offering advantages such as resistance to contamination and high durability. They are suitable for harsh environments and applications requiring robust performance.
    磁性编码器利用磁场检测位置变化,具有抗污染、耐用性强等优势,适用于恶劣环境和对稳定性有要求的应用场景。

Optical Encoders:

光学编码器:

  • Optical encoders use light to track position changes. They have a light source, a patterned disc, and photodetectors. They offer high resolution and accuracy, making them ideal for precision motion control applications.
  • 光学编码器利用光线跟踪位置变化,由光源、带图案的码盘和光电探测器组成,具有高分辨率和高精度的特点,是精密运动控制应用的理想选择。

Encoder Resolvers:

旋转变压器:

  • Encoder resolvers are electromechanical devices that convert angular position into an electrical signal. They consist of a rotor and stator with wire windings. Resolvers offer robust performance in harsh environments with high levels of vibration and temperature fluctuations.
    旋转变压器是一种将角位置转换为电信号的机电装置,由带绕组的转子和定子组成。在高振动、温度波动剧烈的恶劣环境中,其仍能保持稳定性能。

Understanding the differences motor encoder types is essential for selecting the most suitable option for specific applications, ensuring optimal performance and reliability.

了解不同类型电机编码器的差异,是为特定应用场景选择合适产品、确保系统达到最佳性能和可靠性的关键。

Comparison of Motor Encoders:

电机编码器的对比

1. Induction Motor Encoders:
感应电机编码器:
  • Application: commonly used for its simplicity and robustness.

    应用场景:因其结构简单、稳定性强而被广泛使用。

  • How it works: Induction motor shaft movement is tracked using magnetic or optical sensors to determine speed and direction.

    工作原理:通过磁性或光学传感器跟踪感应电机轴的运动,以确定转速和旋转方向。

  • Advantages: Robust design, suitable for high-speed and high-torque applications, cost-effective.

    优势:结构坚固,适用于高速、高扭矩应用场景,成本较低。

  • Limitations: Limited precision compared to other types, less suitable for precise positioning applications.

    局限性:与其他类型相比精度较低,不太适用于精密定位场景。

2. Servo Motor Encoders:
伺服电机编码器
  • Application: Ideal for applications requiring precise positioning, such as robotics, CNC machines, and automation systems.

    应用场景:适用于机器人技术、计算机数控(CNC)机床和自动化系统等需要精密定位的场景。

  • How it works: Gives detailed feedback on where, how fast, and which way servo motors are moving, allowing for accurate control.

    工作原理:提供伺服电机的位置、转速和旋转方向等详细反馈,实现精确控制。

  • Advantages: High precision, fast response times, suitable for closed-loop control systems.

    优势:精度高、响应速度快,适用于闭环控制系统。

  • Limitations: Higher cost compared to other types of encoders, may require complex control algorithms.

    局限性:与其他类型编码器相比成本较高,可能需要复杂的控制算法。

3. DC Motor Encoders:
直流电机编码器:
  • Application: Widely used in applications such as printers, robotics, and consumer electronics.

    应用场景:广泛应用于打印机、机器人技术和消费电子产品等领域。

  • How it works: give input on how DC motors rotate, usually using optical or magnetic sensors to track movement.

    工作原理:通过光学或磁性传感器跟踪直流电机的旋转运动,提供相关运动信息。

  • Advantages: Compact size, low cost, suitable for a wide range of applications.

    优势:体积小、成本低,适用于多种应用场景。

  • Limitations: Limited torque and speed compared to other types of motors, may require additional gearing for higher precision.

    局限性:与其他类型电机相比扭矩和转速有限,如需更高精度可能需要额外的齿轮装置。

4. Stepper Motor Encoders:
步进电机编码器:
  • Application: precise control of position and speed, such as 3D printers, CNC machines, and robotic systems.

    应用场景:适用于 3D 打印机、计算机数控(CNC)机床和机器人系统等需要精确控制位置和转速的场景。

  • How stepper motors work: They give feedback on their position and movement using methods like optical or magnetic sensing.

    工作原理:通过光学或磁性传感等方式,提供步进电机的位置和运动反馈。

  • Advantages: Excellent precision, easily synchronized with control systems, suitable for open-loop and closed-loop control.

    优势:精度优异,易于与控制系统同步,适用于开环和闭环控制。

  • Limitations: Limited torque at high speeds, may require higher power consumption compared to other types of motors.

    局限性:高速运行时扭矩有限,与其他类型电机相比可能功耗更高。

Different motor encoders have advantages and disadvantages. They are suitable for specific uses based on needs such as accuracy, speed, power, and price. Knowing the variances between encoder types is crucial for choosing the best one for a specific use, to guarantee top performance.

不同类型的电机编码器各有优劣,根据精度、转速、功率和价格等需求,适用于不同的应用场景。了解编码器类型之间的差异,是为特定用途选择合适产品、确保系统达到最佳性能的关键。

Applications of Motor Encoders

电机编码器的应用场景

Motor encoders find widespread use in various industries and applications, including:

电机编码器广泛应用于多个行业和领域,包括:

  • Robotics: In robotic arms and manipulators, motor encoders enable precise control and navigation, ensuring accurate positioning and movement.

    机器人技术:在机械臂和操作器中,电机编码器实现精确控制和导航,确保定位和运动的准确性。

  • Manufacturing: In CNC machines and automated assembly lines, motor encoders facilitate precise positioning and motion control, resulting in high-quality production.

    制造业:在计算机数控(CNC)机床和自动化装配线上,电机编码器实现精确的定位和运动控制,保障产品生产质量。

  • Medical devices such as diagnostic equipment and surgical robots use motor encoders for accurate movements and measurements. This helps enhance patient care and improve procedure outcomes. Motor encoders are essential for ensuring precise movements in medical devices. They play a crucial role in improving the accuracy and effectiveness of procedures.

    医疗设备:诊断设备和手术机器人等医疗设备中,电机编码器用于实现精确的运动和测量,有助于提升患者护理质量和手术效果。电机编码器是确保医疗设备运动精度的关键组件,对提高医疗操作的准确性和有效性具有重要作用。

Advantages of Motor Encoders

电机编码器的优势

Motor encoders offer several advantages in industrial automation:

在工业自动化领域,电机编码器具有以下优势:

  • Precision: provide accurate position feedback, enabling precise control and monitoring of motorized systems.

    精度:提供准确的位置反馈,实现对电机系统的精确控制和监测。

  • Reliability: enhance the reliability and performance of electromechanical systems by ensuring consistent operation.

    可靠性:通过保障系统的稳定运行,提升机电系统的可靠性和整体性能。

  • Versatility: compatible with various types of motors and can be integrated into diverse applications, offering flexibility and scalability.

    通用性:与多种类型的电机兼容,可集成到不同的应用场景中,具有良好的灵活性和可扩展性。

Challenges and Considerations

面临的挑战与注意事项

While motor encoders offer numerous benefits, they also pose certain challenges and considerations:

尽管电机编码器具有诸多优势,但仍存在一些需要关注的挑战和注意事项:

  • Environmental Factors: Motor encoders may be susceptible to environmental factors such as temperature fluctuations, mechanical vibrations, and electromagnetic interference, which can affect their performance.

    环境因素:温度波动、机械振动和电磁干扰等环境因素可能影响电机编码器的性能,使其易受干扰。

  • Selection Criteria: Engineers must carefully consider factors such as resolution, accuracy, operating environment, and communication interface compatibility when selecting motor encoders for specific applications.

    选型标准:为特定应用场景选择电机编码器时,工程师需综合考虑分辨率、精度、工作环境和通信接口兼容性等因素。

电机编码器技术的未来趋势

The future of motor encoder technology holds exciting prospects for innovation and advancement:

电机编码器技术的未来充满创新和进步的潜力:

  • Ongoing advancements in materials science, sensor technology, and signal processing techniques are expected to enhance the performance and reliability of motor encoders.

    材料科学、传感器技术和信号处理技术的持续发展,有望进一步提升电机编码器的性能和可靠性。

  • Smart features such as predictive maintenance, adaptive control algorithms, and real-time communication will enhance motor encoders in industrial automation. These features will make the motor encoders more efficient and functional.

    预测性维护、自适应控制算法和实时通信等智能功能,将使工业自动化领域中的电机编码器更加高效、功能更全面。

Conclusion

结论

In conclusion, motor encoders play a crucial role in modern industrial automation, enabling precise motion control and feedback mechanisms in a wide range of applications. By understanding the working principle and functionality of motor encoders, engineers can optimize the performance of electromechanical systems, driving innovation and efficiency in industrial automation.

总之,电机编码器在现代工业自动化中发挥着关键作用,为各类应用场景提供精确的运动控制和反馈机制。通过了解电机编码器的工作原理和功能特性,工程师能够优化机电系统的性能,推动工业自动化领域的创新与效率提升。

Motor Encoder FAQ's

电机编码器常见问题解答

1. What is the working principle of a motor encoder?
电机编码器的工作原理是什么?

A motor encoder works by translating mechanical motion into electrical signals, typically through methods such as optical or magnetic sensing. These signals provide feedback on parameters such as position, speed, and direction of rotation, enabling precise control and monitoring of motorized systems.

电机编码器通过光学或磁性传感等方式,将机械运动转换为电信号。这些信号可反馈位置、转速和旋转方向等参数,实现对电机系统的精确控制和监测。

2. How does a motor encoder contribute to precision motion control?
电机编码器如何助力精密运动控制?

Motor encoders play a crucial role in precision motion control by providing accurate feedback on the position, speed, and direction of rotation of motors. This feedback allows control systems to adjust motor parameters in real-time, ensuring precise positioning and movement.

电机编码器通过提供电机的位置、转速和旋转方向等准确反馈,为精密运动控制提供支持。控制系统可基于该反馈实时调整电机参数,确保定位和运动的精确性。

3. What are the different types of motor encoders and their applications?
电机编码器有哪些类型,各自的应用场景是什么?

Motor encoders come in various types, including incremental, absolute, linear, rotary, magnetic, optical, and resolver encoders. Each type has unique characteristics and applications, ranging from industrial automation and robotics to CNC machining and medical devices.

电机编码器包括增量式、绝对式、线性、旋转式、磁性、光学和旋转变压器等多种类型。每种类型均有独特的特性,适用于工业自动化、机器人技术、计算机数控(CNC)加工和医疗设备等不同领域。

4. How do incremental and absolute encoders differ in their working principles?
增量式编码器和绝对式编码器的工作原理有何不同?

Incremental encoders generate pulses relative to a reference point, providing incremental position feedback. Absolute encoders, on the other hand, provide a unique digital code for every position of the motor shaft, offering absolute position feedback without the need for a reference point.

增量式编码器相对于参考点生成脉冲,提供增量位置反馈;而绝对式编码器为电机轴的每个位置分配一个独特的数字代码,无需参考点即可提供绝对位置反馈。

5. What are the advantages of using motor encoders in industrial applications?
工业应用中使用电机编码器有哪些优势?

Motor encoders offer several advantages in industrial applications, including high precision, reliability, versatility, and compatibility with various types of motors. They enable precise motion control, monitoring, and feedback, enhancing the performance and efficiency of motorized systems.

在工业应用中,电机编码器具有精度高、可靠性强、通用性好以及与多种电机兼容等优势。其可实现精确的运动控制、监测和反馈,提升电机系统的性能和效率。


Encoder Working Principle

编码器工作原理

Last updated: June 16, 2019 11:25 pm

Encoders are used to translate rotary or linear motion into a digital signal. Usually this is for the purpose of monitoring or controlling motion parameters such as speed, rate, direction, distance or position.
编码器用于将旋转或直线运动转换为数字信号。其通常用于监测或控制运动参数,例如速度、速率、方向、距离或位置。

The Optical Encoders typically consist of a rotating and a stationary electronic circuit. The rotor is usually a metal, glass, or a plastic disc mounted on the encoder shaft. The disc has some kind of optical pattern, which is electronically decoded to generate position information.

光学编码器通常由旋转电子电路和固定电子电路组成。转子通常是安装在编码器轴上的金属、玻璃或塑料圆盘。圆盘上设有某种光学图案,该图案经电子解码后可生成位置信息。

The rotor disc in absolute optical encoder uses opaque and transparent segments arranged in a gray-code pattern. The stator has corresponding pairs of LEDs and photo-transistors arranged so that the LED light shines through the transparent sections of the rotor disc and received by photo-transistors on the other side. After the electronic signals are amplified and converted, they are then available for the evaluation of the position.

绝对式光学编码器的转子圆盘采用按格雷码图案排列的不透明段和透明段。定子上设有对应的发光二极管(LED)和光电晶体管对,LED 发出的光线可穿过转子圆盘的透明段,被另一侧的光电晶体管接收。电子信号经放大和转换后,可用于位置评估。

What does the word encoder mean?

"编码器"一词的含义是什么?

What does the word encoder mean? The encoder is an electromechanical device that can measure displacement. Encoders are normally digital displacement transducers, consisting of a mechanical element and a sensing head, typically of optical type.

"编码器"一词的含义是什么?编码器是一种可测量位移的机电设备。编码器通常为数字式位移传感器,由机械元件和传感头组成,传感头通常为光学类型。

The mechanical element can be a disc (for rotary type encoders) or a ruler (for linear type encoders) with deposited or carved patterns. The sensing head includes a light source (LED) and a light sensor (photo detector) to read the generated code (the encoder output).

机械元件可以是带有沉积或雕刻图案的圆盘(用于旋转式编码器)或标尺(用于直线式编码器)。传感头包含光源(LED)和光传感器(光电探测器),用于读取生成的代码(即编码器输出)。

How can the disc angle rotation be measured?

如何测量圆盘的角旋转?

With this encoder, the displacement is obtained by counting the number of times that transitions occur between logical values "0" and "1". This allows the transformation of physical quantities by converting the angular displacement variations into electrical type signal output that is translated into logical values by suitable electronics.

使用该编码器时,位移通过统计逻辑值"0"和"1"之间的跳变次数获得。这一过程可实现物理量的转换:将角位移变化转换为电信号输出,再通过适当的电子电路将电信号转换为逻辑值。

The counting of the number of transitions that occur in the (reflective / opaque and non-reflective / transparent) disc sectors is related to the concept of resolution.

对圆盘扇区(反射/不透明扇区与非反射/透明扇区)中跳变次数的统计,与分辨率概念相关。

The resolution may be defined as the smallest change in a quantity under measurement that causes a noticeable change in the corresponding outcome. In this case, the resolution of the disc corresponds to its minimum angular variation that causes a transition at the logical output level. As there are nine 0 to 1 transitions in a complete rotation of the disk.

分辨率可定义为:被测量的最小变化量,该变化量会导致对应输出产生可察觉的变化。对于圆盘而言,其分辨率对应于使逻辑输出电平发生跳变的最小角变化量。在圆盘完整旋转一周的过程中,存在 9 次从 0 到 1 的跳变。

What different types of encoders exist?

编码器有哪些不同类型?

The most widely used classification refers to the type of movement (linear or rotary). In both cases they can be incremental, semi-absolute or absolute.

最常用的分类方式基于运动类型(直线式或旋转式)。无论是直线式还是旋转式,编码器均可分为增量式、半绝对式或绝对式。

Incremental information is obtained by simply counting the pulses. Therefore, it depends on the previous state and the value of the transition. Its biggest drawback consists in the need for defining a starting position reference: this information is lost whenever the system is powered down or is turned off.

增量式信息通过简单计数脉冲获得,因此依赖于前一状态和跳变值。其最大特点是需要定义起始位置基准:每当系统断电或关闭时,该基准信息会丢失。

In contrast, in absolute encoders (of angular or linear type) each position is properly referenced with a unique code, Above Figure, corresponding to a unique pattern of bits in the various tracks. So, the position is always known and it is not necessary to define a reference if the system is powered down or is turned off.

相比之下,在绝对式编码器(角位移型或直线位移型)中,每个位置均通过唯一代码进行准确标定(如上图所示),该代码对应于不同轨道上的唯一比特图案。因此,位置信息始终可知,即使系统断电或关闭,也无需重新定义基准。

The semi-absolute encoders are typically rotary and are used when it is necessary to measure displacements that exceed the measuring range of the absolute encoder. In this case it is necessary to use an additional procedure to count the number of disc turns during the measurement.

半绝对式编码器通常为旋转式,适用于需要测量超出绝对式编码器量程的位移场景。在这种情况下,需要采用额外的流程来统计测量过程中圆盘的旋转圈数。


伺服电机:编码器原理与分类

资深流水灯工程师 原创已于 2025-05-15 22:08:33 发布

本文系统阐述编码器的分类体系,涵盖模拟量编码器与数字量编码器两大类别,深入分析光电增量式编码器和绝对值编码器的工作机制及其在伺服系统中的应用场景;同时详细说明编码器的分辨率、精度、最大响应频率等关键技术参数。

一、编码器的定义

编码器是一种将旋转位置变化转换为电气信号的装置。

编码器是伺服系统闭环控制中的必要组成部分,广泛应用于轴的闭环控制及各类自动化控制场景。其功能是为闭环控制系统提供位置或速度的实际测量数据。

二、编码器的分类

根据工作原理及输出信号类型,编码器可分为模拟量编码器数字量编码器两大类:

2.1 模拟量编码器

模拟量编码器进一步细分为旋转变压器、正余弦编码器、磁电式增量编码器。现代模拟量编码器集成度较高,内部通常嵌入 A/D 转换模块,可直接输出数字量信号,因此无需伺服控制器额外处理模拟量信号。

2.2 数字量编码器

数字量编码器分为增量编码器绝对值编码器

  • 增量编码器以光电式增量编码器为常见类型,输出 A、B 两相脉冲信号及 Z 相信号(每旋转一圈产生 1 个脉冲);
  • 绝对值编码器直接输出位置数据,位置编码格式包括二进制码、格雷码或 BCD 码。

增量型编码器断电后需重新寻找原点,方可执行位置控制;绝对型编码器断电后无需重新找原点,可直接恢复位置控制。

三、光电增量式编码器

3.1 光电增量式编码器原理

光电增量式编码器由码盘、发光管、光电接收管、整型电路构成。码盘表面镀有挡光材料,沿圆周均匀刻画 N 条通光窗口(即码道),码盘旋转一圈将产生 N 次通光与遮光交替。光电接收管接收光信号后转换为电压信号,经放大整型电路处理后输出数字脉冲信号。由于码盘与电机轴同步转动,通过对脉冲信号计数,可计算得出增量位置信息及单位时间内的转速。

3.1.1 码盘材料特性
  • 玻璃码盘:通过在玻璃表面沉积薄层刻线制成,热稳定性与精度可达较高水平,但抗冲击性较差,易破碎;
  • 金属码盘:在金属基材上刻制通道,抗破碎能力强,但通孔宽度存在工艺限制,精度受影响,且热稳定性较玻璃码盘低一个数量级;
  • 塑料码盘:成本较低,经济性好,但精度、热稳定性及使用寿命均不及玻璃和金属码盘。
3.1.2 信号通道与旋转特性

光电增量式编码器通常包含 A、B、Z 三个通道:

  • 顺时针旋转
  • 逆时针旋转

Z 相信号为零位参考信号,带增量式编码器的伺服电机启动前需执行零位校准,校准过程依赖 Z 相信号。结合零位信息、旋转方向及脉冲计数,可精确计算旋转角度。

3.1.3 输出波形
  • 顺时针旋转时 A、B、Z 相波形
  • 逆时针旋转时 A、B、Z 相波形

3.2 增量式编码器倍频

倍频是通过信号边沿检测实现计数频率提升的技术,具体方式如下:

  • X1 倍频:仅利用 A 相或 B 相信号的上升沿(或下降沿)计数,计数值等于码盘栅格数;
  • X2 倍频:利用 A 相信号的上升沿与下降沿计数,信号频率翻倍;
  • X4 倍频:同时利用 A 相、B 相信号的上升沿与下降沿计数,实现 4 倍频率提升。

示例:2500 线编码器(码盘栅格数为 2500)经 4 倍频后,分辨率为 2500 × 4 = 10000 2500 \times 4 = 10000 2500×4=10000。

四、光电绝对式编码器

绝对值编码器的位置编码由机械位置唯一确定,无需记忆位置信息或依赖参考点信号,可按需读取位置数据。相较于增量式编码器,其抗干扰能力更强,数据可靠性更高。

绝对值编码器分为单圈绝对值编码器和多圈绝对值编码器:

  • 单圈绝对值编码器:测量范围限于 36 0 ∘ 360^\circ 360∘ 旋转,超过该范围后编码回归原点。

4.1 单圈绝对式编码器原理

单圈绝对式编码器与增量式编码器结构相似,差异在于码盘与光电探测器设计。其码盘上刻有 N 圈光通道,各圈刻线数量按 2 、 4 、 8 、 16 、 ... 2、4、8、16、\dots 2、4、8、16、... 的规律编排,通过检测每圈刻线的通断状态,可获得 2 N 2^N 2N 个唯一编码,旋转超过 36 0 ∘ 360^\circ 360∘ 后编码重复。

下图为 5 排狭缝码盘的角度解析示意图:

4.2 多圈绝对式编码器原理

多圈绝对式编码器在单圈编码基础上增加圈数编码功能,以扩展测量范围,常见实现方案分为两类:

  • 机械绝对计圈:采用钟表齿轮传动原理,中心码盘旋转时通过齿轮驱动辅助码盘转动,在单圈编码基础上叠加圈数编码,圈数测量范围通常为 4096 圈或 65536 圈;
  • 电子增量计圈:通过电池为存储器供电实现多圈计数,本质为"单圈绝对 + 多圈增量"模式,无需机械齿轮结构,体积更小,但不属于纯绝对编码方案。

五、磁电式编码器

磁电式编码器(又称磁性编码器)是一种角度或位移测量装置,其工作原理为:利用磁阻元件或霍尔元件检测磁性材料的角度/位移变化,该变化会引发电阻或电压信号的相应改变,经放大电路放大及处理器处理后,输出脉冲信号或模拟量信号,完成测量功能。

磁电式编码器的分辨率由磁性码盘磁极数、磁阻传感器数量及信号处理方式共同决定。基于磁场原理的信号生成方式,使其具备抗灰尘、抗振动、抗温度干扰的特性。

六、旋转变压器

6.1 旋转变压器的原理

旋转变压器的工作原理与普通变压器类似,区别在于:普通变压器绕组固定,输出电压与输入电压比值为常数;旋转变压器的原边与副边绕组随转子角位移产生相对位置变化,输出电压幅值随转子角位移呈正弦函数关系或比例关系变化。

6.2 旋转变压器的特性

  • 优势:相较于光电编码器,更适用于油污、振动等恶劣环境,可避免码盘污染导致的输出误差;
  • 劣势:采用模拟量传输方式,易受电磁干扰影响,分辨率相对较低。

七、编码器的技术参数

7.1 分辨率

分辨率指编码器能够识别的最小测量单位:

  • 增量式编码器:分辨率以每旋转一圈输出的脉冲数(Pulse Per Revolution,PPR)表示,也可通过码盘透光线槽数量("线数")描述,常用规格包括 5000 线、6000 线等;
  • 绝对式编码器:分辨率以内部码盘的位数(bit)表示,对应码盘上的光通道圈数。角度单位换算关系为: 1 ∘ = 6 0 ′ 1^\circ = 60' 1∘=60′(角分) = 360 0 ′ ′ = 3600'' =3600′′(角秒)。

7.2 精度

精度指编码器每个读数与转轴实际位置的最大偏差,通常以角度、角分或角秒为单位。例如,某绝对式编码器参数标注为 ± 2 0 ′ ′ \pm 20'' ±20′′,表示其输出读数与转轴实际位置的最大偏差不超过 ± 20 \pm 20 ±20 角秒。

编码器的精度受码盘刻线加工精度、转轴同心度、材料温度特性、电路响应速度等因素影响。

7.3 最大响应频率

最大响应频率指编码器每秒输出的脉冲数,单位为 Hz,计算公式为:
最大响应频率 = 分辨率 × 轴转速 60 \text{最大响应频率} = \frac{\text{分辨率} \times \text{轴转速}}{60} 最大响应频率=60分辨率×轴转速

示例:若编码器分辨率为 100 PPR,电机轴转速为 120 转/分钟,则最大响应频率为 100 × 120 60 = 200 Hz \frac{100 \times 120}{60} = 200\ \text{Hz} 60100×120=200 Hz,即该转速下编码器每秒输出 200 个脉冲。

7.4 信号输出形式

  • 增量式编码器:各通道信号独立输出,输出电路形式包括集电极开路输出、推挽输出、差分输出;
  • 绝对式编码器:直接输出数十位二进制数据,为保证传输速率与信号质量,通常采用串行输出或总线输出(如 SSI、RS485、CANOPEN、Ethercat 等),部分产品支持并行输出,输出电路形式与增量式编码器一致。

电机编码器

别问,问就是全会 原创已于 2024-10-23 08:26:16 修改

前言

本文系统阐述电机编码器的功能与应用场景,梳理其分类体系、工作原理、关键技术参数及测速方法,并结合 STM32 控制器给出编码器接口的应用示例代码。

一、编码器概述

1.1 编码器分类

编码器的分类维度多样,本文重点介绍基于检测原理与编码类型的分类方式:

实际工程应用中,上述四类编码器可组合为光电绝对式、光电增量式、磁电绝对式、磁电增量式四种主流类型,具体特性如下:

  1. 增量式编码器

    增量式旋转编码器可将设备运动过程中的位移信息转换为连续脉冲信号,脉冲数量与位移量呈正相关,仅在设备运动时输出信号。编码器通常将信号分为通道 A 与通道 B 两路输出,两路信号相位差为 9 0 ∘ 90^\circ 90∘,通过采集两路信号的时序关系可判定设备运动方向。此外,多数增量式编码器增设通道 Z 输出信号,用于标定编码器的参考位置,编码器每旋转一圈,Z 相信号输出 1 个脉冲。增量式编码器仅输出位置变化量与运动方向,无法直接输出设备绝对位置。

  2. 绝对式编码器

    绝对式旋转编码器通过二进制编码方式将设备位移信息转换为数字量直接输出,其差异体现在内部码盘结构:绝对式编码器的码盘由若干透光/不透光线槽构成二进制编码阵列,编码与编码器转轴的角度位置一一对应,读取编码即可获取设备绝对位置,因此命名为绝对式编码器。绝对式编码器常用编码格式包括自然二进制码、格雷码、BCD 码等。

  3. 混合式绝对编码器

    混合式绝对编码器输出两组信号:一组用于检测磁极位置,具备绝对位置信息输出能力;另一组信号与增量式编码器输出完全一致。

1.2 编码器基本参数

  • 分辨率:指编码器可识别的最小测量单位。增量式编码器的分辨率以转轴每旋转一圈输出的脉冲数(Pulse Per Revolution,PPR)表示,也可通过码盘透光线槽数量(线数)描述,常见规格为 5~6000 线;绝对式编码器的分辨率以内部码盘的位数(bit)表示,分为单圈分辨率与多圈分辨率。
  • 精度 :精度与分辨率为不同概念,精度指编码器输出读数与转轴实际位置的最大偏差,单位为角度(°)、角分(′)或角秒(″)。例如,某绝对式编码器参数标注 ± 2 0 ′ ′ \pm 20'' ±20′′,表示其输出读数与实际位置的最大偏差为 ± 20 \pm 20 ±20 角秒。精度由码盘刻线加工精度、转轴同心度、材料温度特性、电路响应时间等因素共同决定。
  • 最大响应频率 :指编码器每秒输出的脉冲数,单位为 Hz(也记作 PPS),计算公式为:
    最大响应频率 = 分辨率 × 轴转速 60 \text{最大响应频率} = \frac{\text{分辨率} \times \text{轴转速}}{60} 最大响应频率=60分辨率×轴转速
  • 信号输出形式:增量式编码器各通道信号独立输出,输出电路形式包括集电极开路输出、推挽输出、差分输出等;绝对式编码器直接输出数十位二进制数,为保障传输速率与信号质量,通常采用串行输出或总线型输出(如 SSI、RS485、CANopen、EtherCAT 等),部分型号支持并行输出,输出电路形式与增量式编码器一致。
  • 最大转速:指编码器机械结构可承受的最高旋转速度。

二、编码器工作原理

本节重点介绍磁电增量式、光电增量式、光电绝对式三种常用编码器的工作原理:

2.1 磁电增量式编码器

工作原理:基于霍尔效应,将位移量转换为计数脉冲,通过脉冲数量计算位移与速度,原理示意图如下:

磁电增量式编码器由磁盘、霍尔传感器、信号转换电路三部分组成:

  • 磁盘表面交替排布 S 极与 N 极磁极;
  • 霍尔传感器(通常含 A、B 两相,部分型号增设 Z 相)安装位置存在夹角,使输出的 A、B 两相信号相位差为 9 0 ∘ 90^\circ 90∘,可将磁场变化转换为电信号变化;
  • 信号转换电路将霍尔传感器输出的电信号转换为脉冲信号。

实际应用中,磁盘与电机转轴固连并同步旋转,磁盘上的磁极交替经过霍尔传感器的 A、B 两相,传感器将磁场变化转换为电信号,经信号转换电路处理后输出 A、B 两相脉冲信号。电机正转时 A 相脉冲超前,反转时 B 相脉冲超前,通过脉冲时序可判定电机转向。

2.2 光电增量式编码器

工作原理:基于光电转换原理,将位移量转换为计数脉冲,通过脉冲数量计算位移与速度。

增量式编码器的码盘上设有两圈线槽,线槽间错开一定角度,使光电检测装置输出的两相信号相位差为 1 / 4 1/4 1/4 周期( 9 0 ∘ 90^\circ 90∘)。码盘工作原理如下图所示(黑色为透光区域,白色为遮光区域):



码盘转动时,内圈与外圈线槽依次透光,光电检测装置捕捉光线通断变化并输出脉冲信号,因内外圈透光/遮光存在时间差,形成 A、B 两通道信号的相位差。通过两相信号的时序关系可判定运动方向,统计脉冲数量可计算位移量,通过脉冲频率可推导运动速度。

部分增量式编码器设 4 圈线槽,对应 A、B、-A、-B 四相信号,相邻信号相位差为 1 / 4 1/4 1/4 周期,-A、-B 信号经反相后叠加至 A、B 通道,用于增强信号抗干扰能力。通道 Z 信号对应码盘上的单条线槽,每旋转一圈输出 1 个脉冲,通常用作参考零位,用于标定设备位置或清除累计误差。

增量式编码器计数起点可任意设定,支持多圈无限累加测量;可通过检测 A、B 通道信号的上升沿与下降沿实现脉冲倍频,提升分辨率。但接收设备断电重启后,需重新校准参考零点。

霍尔增量式编码器结构与光电式相近,差异为检测原理(霍尔效应)与内部元件:码盘采用磁极替代线槽,部分型号直接利用电机旋转磁场作为检测对象,检测装置替换为霍尔传感器,输出信号仍为相位差 1 / 4 1/4 1/4 周期的 A、B 两通道脉冲。

2.3 光电绝对式编码器

工作原理:码盘处于不同角度位置时,光敏元件根据受光状态转换为电平信号,最终编码为二进制数输出。

绝对式编码器整体结构与增量式类似,由码盘、检测装置、放大整形电路组成,差异为码盘结构与输出信号含义:

  • 码盘上的若干圈线槽(码道)按二进制编码规则排布,每条码道对应二进制数的 1 个位(通常最外侧码道为最低位,最内侧为最高位);
  • 码道数量 N N N 决定二进制编码位数,可输出 2 N 2^N 2N 个唯一编码,编码与转轴机械位置一一对应,不受外部因素影响;
  • 设备断电重启后无需重新校准参考零点。

下图为简化的绝对式编码器码盘(自然二进制编码):白色透光区域表示 0,黑色遮光区域表示 1,码盘含 3 条码道,可表示 2 3 = 8 2^3=8 23=8 个二进制数,对应 8 个扇区,每个扇区对应一个转轴位置。自然二进制编码直观易懂,但受制造与安装精度限制,编码切换时易出现多位同时跳变,导致读数错误。

格雷码可解决上述问题,下图为格雷码编码的码盘(3 条码道):任意相邻编码仅 1 位不同,有效降低读数错误概率。

绝对式编码器分为单圈与多圈类型:单圈编码器测量范围限于 36 0 ∘ 360^\circ 360∘,超过该范围编码重复;多圈编码器在单圈编码基础上增加圈数编码,扩展测量范围,内部结构更复杂,但基本原理一致。

三、编码器测速原理

3.1 增量式编码器倍频技术

增量式编码器输出脉冲波形主要有两种形式:

① 占空比 50% 的方波,A、B 通道相位差 9 0 ∘ 90^\circ 90∘;

② 正弦波类模拟信号,A、B 通道相位差 9 0 ∘ 90^\circ 90∘。

对于方波信号,通过检测 A、B 通道的上升沿/下降沿可实现倍频:

  • 仅检测单通道上升沿(或下降沿):计数频率等于原始信号频率;
  • 检测单通道上升沿与下降沿:实现 2 倍频;
  • 同时检测两通道上升沿与下降沿:实现 4 倍频。

示例:分辨率为 600 PPR 的编码器,最小分辨角度为 0. 6 ∘ 0.6^\circ 0.6∘;经 4 倍频后,分辨率提升至 600 × 4 = 2400 600 \times 4 = 2400 600×4=2400 PPR,最小分辨角度为 0.1 5 ∘ 0.15^\circ 0.15∘。倍频技术可扩展测速方法的速度适用范围(如扩展 M 法测速的低速测量精度)。

3.2 常用测速方法简介

将增量式编码器安装于电机轴端,通过控制器对脉冲计数,可采用以下三种方法计算电机转速:

  1. M 法(频率测量法)

    在固定定时时间 T 0 T_0 T0(单位:s)内统计编码器脉冲数 M 0 M_0 M0,转速 n n n 计算公式为:

    n = M 0 C T 0 n=\frac{M_0}{C{T_0}} n=CT0M0

    式中 C C C 为编码器单圈总脉冲数(常数),转速 n n n 与 M 0 M_0 M0 成正比。高速时 M 0 M_0 M0 较大,测量精度与稳定性较好;低速时 M 0 M_0 M0 极少,误差增大且数据不稳定。倍频技术可提升低速测量精度(如 4 倍频后 M 0 M_0 M0 变为原来的 4 倍)。

  2. T 法(周期测量法)

    以已知频率 F 0 F_0 F0 的高频脉冲为基准,统计编码器相邻两脉冲间隔时间 T E T_E TE 内的高频脉冲数 M 1 M_1 M1,转速 n n n 计算公式为:
    n = 1 C T E = F 0 C M 1 n=\frac{1}{C{T_E}}=\frac{F_0}{C{M_1}} n=CTE1=CM1F0

    式中 C C C、 F 0 F_0 F0 为常数,转速 n n n 与 M 1 M_1 M1 成反比。低速时 T E T_E TE 较大, M 1 M_1 M1 充足,测量精度高;高速时 T E T_E TE 极小, M 1 M_1 M1 不足,误差增大。

  3. M/T 法

    综合 M 法与 T 法优势,在固定时间内统计编码器脉冲数 M 0 M_0 M0 与高频脉冲数 M 1 M_1 M1,转速 n n n 计算公式为:
    n = F 0 M 0 C M 1 n=\frac{{F_0}{M_0}}{C{M_1}} n=CM1F0M0

    式中 F 0 F_0 F0、 C C C 为常数,转速 n n n 由 M 0 M_0 M0 与 M 1 M_1 M1 共同决定:高速时 M 0 M_0 M0 增大、 M 1 M_1 M1 减小,等效 M 法;低速时 M 1 M_1 M1 增大、 M 0 M_0 M0 减小,等效 T 法。

3.3 STM32 编码器接口简介

本节以磁电增量式编码器为例,介绍 STM32 编码器接口的应用。

3.3.1 编码器接口框图

直流有刷电机编码器的 A、B 两相输出相位差 9 0 ∘ 90^\circ 90∘ 的脉冲,正转时 A 相超前,反转时 B 相超前。STM32 控制器的编码器接口为定时器的专用功能,仅高级定时器 TIM1/TIM8 与通用定时器 TIM2~TIM5 支持该功能。

编码器接口本质为带方向选择的外部时钟模式:外部脉冲信号作为计数器时钟,计数方向由脉冲相位时序决定。通用定时器编码器接口框图如下:


3.3.2 编码器接口计数原理

编码器接口利用定时器输入捕获功能实现计数,《STM32F4xx 参考手册》给出编码器信号与计数器方向/计数位置的对应关系:

表中 TI1/TI2 对应编码器 A/B 通道,TI1FP1/TI2FP2 为 TI1/TI2 的反相信号;计数时需参考另一通道的电平状态,以判定计数方向。

  • 仅在 TI1 处计数(A 相超前 1/4 周期):检测 TI1 上升沿时 TI2 为低电平,计数器向上计数;检测 TI1 下降沿时 TI2 为高电平,计数器仍向上计数,实现 2 倍频。

  • 仅在 TI1 处计数(A 相滞后 1/4 周期):检测 TI1 上升沿时 TI2 为高电平,计数器向下计数;检测 TI1 下降沿时 TI2 为低电平,计数器仍向下计数,实现 2 倍频。

  • 在 TI1 和 TI2 处均计数:检测两通道的上升沿/下降沿,实现 4 倍频。

实例:A 相接 CH1(TI1)、B 相接 CH2(TI2),选择仅在 TI1 处计数:


正转时,A 相上升沿对应 B 相低电平,下降沿对应 B 相高电平,计数器递增计数;反转时计数方向相反。

注意:仅检测单通道边沿实现 2 倍频(10 个脉冲计数 20 次);检测双通道边沿实现 4 倍频(10 个脉冲计数 40 次)。计算转速时需除以倍频系数。

电机转速计算公式:
电机转速 = 一分钟内计数变化量 倍频系数 × 编码器线数 × 减速比 \text{电机转速} = \frac{\text{一分钟内计数变化量}}{\text{倍频系数} \times \text{编码器线数} \times \text{减速比}} 电机转速=倍频系数×编码器线数×减速比一分钟内计数变化量

3.4 编码器接口相关结构体

HAL 库中,编码器接口配置涉及以下结构体:

  1. TIM_Base_InitTypeDef(时基初始化结构体)
c 复制代码
typedef struct
{
    uint32_t Prescaler;        // 定时器预分频器
    uint32_t CounterMode;      // 计数模式
    uint32_t Period;           // 定时器周期
    uint32_t ClockDivision;    // 时钟分频
    uint32_t RepetitionCounter;// 重复计数器
    uint32_t AutoReloadPreload;// 自动重载预装载值
} TIM_Base_InitTypeDef;
  1. TIM_Encoder_InitTypeDef(编码器初始化结构体)
c 复制代码
typedef struct
{
    uint32_t EncoderMode;      // 编码器模式(倍频设置)
    uint32_t IC1Polarity;      // 输入信号极性
    uint32_t IC1Selection;     // 输入通道选择
    uint32_t IC1Prescaler;     // 输入捕获预分频器
    uint32_t IC1Filter;        // 输入捕获滤波器
    uint32_t IC2Polarity;      // 输入信号极性
    uint32_t IC2Selection;     // 输入通道选择
    uint32_t IC2Prescaler;     // 输入捕获预分频器
    uint32_t IC2Filter;        // 输入捕获滤波器
} TIM_Encoder_InitTypeDef;
  • EncoderMode:设置计数器采集方式,可选单通道计数(2 倍频)或双通道计数(4 倍频),对应 TIMx_SMCR 寄存器的 SMS[2:0] 位;
  • ICxPolarity:设置输入信号是否反相,对应 TIMx_CCER 寄存器的 CCxNP/CCxP 位;
  • ICxSelection:编码器模式下仅可设置为 TIM_ICSELECTION_DIRECTTI,对应 TIMx_CCMRx 寄存器的 CCxS[1:0] 位;
  • ICxPrescaler:输入捕获预分频(1/2/4/8 分频),对应 TIMx_CCMRx 寄存器的 ICxPSC[1:0] 位;
  • ICxFilter:输入捕获滤波(0x0~0x0F),对应 TIMx_CCMRx 寄存器的 ICxF[3:0] 位。

四、示例代码

以 STM32F4 HAL 库为例,实现编码器接口配置与转速计算:

4.1 头文件相关宏定义

c 复制代码
#define ROTO_RATIO      44  /* 线数×倍频系数,即11×4=44 */
#define REDUCTION_RATIO 30  /* 减速比30:1 */

/* 通用定时器 定义  */
#define GTIM_TIMX_ENCODER_CH1_GPIO_PORT         GPIOC
#define GTIM_TIMX_ENCODER_CH1_GPIO_PIN          GPIO_PIN_6
#define GTIM_TIMX_ENCODER_CH1_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0)  /* PC口时钟使能 */

#define GTIM_TIMX_ENCODER_CH2_GPIO_PORT         GPIOC
#define GTIM_TIMX_ENCODER_CH2_GPIO_PIN          GPIO_PIN_7
#define GTIM_TIMX_ENCODER_CH2_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0)  /* PC口时钟使能 */

/* TIMX 引脚复用设置
 * 因为PC6/PC7, 默认并不是TIM3的功能脚, 必须开启复用, 才可以用作TIM3的CH1/CH2功能
 */
#define GTIM_TIMX_ENCODERCH1_GPIO_AF            GPIO_AF2_TIM3                                /* 端口复用到TIM3 */
#define GTIM_TIMX_ENCODERCH2_GPIO_AF            GPIO_AF2_TIM3                                /* 端口复用到TIM3 */

#define GTIM_TIMX_ENCODER                       TIM3                                         /* TIM3 */
#define GTIM_TIMX_ENCODER_INT_IRQn              TIM3_IRQn
#define GTIM_TIMX_ENCODER_INT_IRQHandler        TIM3_IRQHandler

#define GTIM_TIMX_ENCODER_CH1                   TIM_CHANNEL_1                                /* 通道1 */
#define GTIM_TIMX_ENCODER_CH1_CLK_ENABLE()      do{ __HAL_RCC_TIM3_CLK_ENABLE(); }while(0)   /* TIM3 时钟使能 */

#define GTIM_TIMX_ENCODER_CH2                   TIM_CHANNEL_2                                /* 通道2 */
#define GTIM_TIMX_ENCODER_CH2_CLK_ENABLE()      do{ __HAL_RCC_TIM3_CLK_ENABLE(); }while(0)   /* TIM3 时钟使能 */

/* 基本定时器 定义 
 * 捕获编码器值,用于计算速度
 */
#define BTIM_TIMX_INT                           TIM6
#define BTIM_TIMX_INT_IRQn                      TIM6_DAC_IRQn
#define BTIM_TIMX_INT_IRQHandler                TIM6_DAC_IRQHandler
#define BTIM_TIMX_INT_CLK_ENABLE()              do{ __HAL_RCC_TIM6_CLK_ENABLE(); }while(0)    /* TIM6 时钟使能 */

/* 编码器参数结构体 */
typedef struct 
{
  int encode_old;                  /* 上一次计数值 */
  int encode_now;                  /* 当前计数值 */
  float speed;                     /* 编码器速度 */
} ENCODE_TypeDef;

extern ENCODE_TypeDef g_encode;    /* 编码器参数变量 */

4.2 定时器初始化

4.2.1 通用定时器 TIM3(编码器接口)
c 复制代码
TIM_HandleTypeDef g_timx_encode_chy_handle;         /* 定时器x句柄 */
TIM_Encoder_InitTypeDef g_timx_encoder_chy_handle;  /* 定时器编码器句柄 */

/**
 * @brief       通用定时器TIMX 通道Y 编码器接口模式 初始化函数
 * @note
 *              通用定时器的时钟来自APB1,当PPRE1 ≥ 2分频的时候
 *              通用定时器的时钟为APB1时钟的2倍, 而APB1为42M, 所以定时器时钟 = 84Mhz
 *              定时器溢出时间计算方法: Tout = ((arr + 1) * (psc + 1)) / Ft us.
 *              Ft=定时器工作频率,单位:Mhz
 *
 * @param       arr: 自动重装值。
 * @param       psc: 时钟预分频数
 * @retval      无
 */
void gtim_timx_encoder_chy_init(uint16_t arr, uint16_t psc)
{
    /* 定时器x配置 */
    g_timx_encode_chy_handle.Instance = GTIM_TIMX_ENCODER;                      /* 定时器x */
    g_timx_encode_chy_handle.Init.Prescaler = psc;                              /* 定时器分频 */
    g_timx_encode_chy_handle.Init.Period = arr;                                 /* 自动重装载值 */
    g_timx_encode_chy_handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;       /* 时钟分频因子 */
    
    /* 定时器x编码器配置 */
    g_timx_encoder_chy_handle.EncoderMode = TIM_ENCODERMODE_TI12;               /* TI1、TI2都检测,4倍频 */
    g_timx_encoder_chy_handle.IC1Polarity = TIM_ICPOLARITY_RISING;              /* 输入极性,非反向 */
    g_timx_encoder_chy_handle.IC1Selection = TIM_ICSELECTION_DIRECTTI;          /* 输入通道选择 */
    g_timx_encoder_chy_handle.IC1Prescaler = TIM_ICPSC_DIV1;                    /* 不分频 */
    g_timx_encoder_chy_handle.IC1Filter = 10;                                   /* 滤波器设置 */
    g_timx_encoder_chy_handle.IC2Polarity = TIM_ICPOLARITY_RISING;              /* 输入极性,非反向 */
    g_timx_encoder_chy_handle.IC2Selection = TIM_ICSELECTION_DIRECTTI;          /* 输入通道选择 */
    g_timx_encoder_chy_handle.IC2Prescaler = TIM_ICPSC_DIV1;                    /* 不分频 */
    g_timx_encoder_chy_handle.IC2Filter = 10;                                   /* 滤波器设置 */
    HAL_TIM_Encoder_Init(&g_timx_encode_chy_handle, &g_timx_encoder_chy_handle);/* 初始化定时器x编码器 */
     
    HAL_TIM_Encoder_Start(&g_timx_encode_chy_handle,GTIM_TIMX_ENCODER_CH1);     /* 使能编码器通道1 */
    HAL_TIM_Encoder_Start(&g_timx_encode_chy_handle,GTIM_TIMX_ENCODER_CH2);     /* 使能编码器通道2 */
    __HAL_TIM_ENABLE_IT(&g_timx_encode_chy_handle,TIM_IT_UPDATE);               /* 使能更新中断 */
    __HAL_TIM_CLEAR_FLAG(&g_timx_encode_chy_handle,TIM_IT_UPDATE);              /* 清除更新中断标志位 */
    
}

/**
 * @brief       定时器底层驱动,时钟使能,引脚配置
                此函数会被HAL_TIM_Encoder_Init()调用
 * @param       htim:定时器句柄
 * @retval      无
 */
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == GTIM_TIMX_ENCODER)
    {
        GPIO_InitTypeDef gpio_init_struct;
        GTIM_TIMX_ENCODER_CH1_GPIO_CLK_ENABLE();                                 /* 开启通道y的GPIO时钟 */
        GTIM_TIMX_ENCODER_CH2_GPIO_CLK_ENABLE();
        GTIM_TIMX_ENCODER_CH1_CLK_ENABLE();                                      /* 开启定时器时钟 */
        GTIM_TIMX_ENCODER_CH2_CLK_ENABLE();

        gpio_init_struct.Pin = GTIM_TIMX_ENCODER_CH1_GPIO_PIN;                   /* 通道y的GPIO口 */
        gpio_init_struct.Mode = GPIO_MODE_AF_PP;                                 /* 复用推挽输出 */
        gpio_init_struct.Pull = GPIO_NOPULL;                                     /* 上拉 */
        gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;                           /* 高速 */
        gpio_init_struct.Alternate = GTIM_TIMX_ENCODERCH1_GPIO_AF;               /* 端口复用 */
        HAL_GPIO_Init(GTIM_TIMX_ENCODER_CH1_GPIO_PORT, &gpio_init_struct);  
        
        gpio_init_struct.Pin = GTIM_TIMX_ENCODER_CH2_GPIO_PIN;                   /* 通道y的GPIO口 */
        gpio_init_struct.Mode = GPIO_MODE_AF_PP;                                 /* 复用推挽输出 */
        gpio_init_struct.Pull = GPIO_NOPULL;                                     /* 上拉 */
        gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;                           /* 高速 */
        gpio_init_struct.Alternate = GTIM_TIMX_ENCODERCH2_GPIO_AF;               /* 端口复用 */
        HAL_GPIO_Init(GTIM_TIMX_ENCODER_CH2_GPIO_PORT, &gpio_init_struct);         
       
        HAL_NVIC_SetPriority(GTIM_TIMX_ENCODER_INT_IRQn, 2, 0);                  /* 中断优先级设置 */
        HAL_NVIC_EnableIRQ(GTIM_TIMX_ENCODER_INT_IRQn);                          /* 开启中断 */
    }
}

/**
 * @brief       定时器中断服务函数
 * @param       无
 * @retval      无
 */
void GTIM_TIMX_ENCODER_INT_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&g_timx_encode_chy_handle);
}
4.2.2 基本定时器 TIM6(定时中断)
c 复制代码
TIM_HandleTypeDef timx_handler;         /* 定时器参数句柄 */

/**
 * @brief       基本定时器TIMX定时中断初始化函数
 * @note
 *              基本定时器的时钟来自APB1,当PPRE1 ≥ 2分频的时候
 *              基本定时器的时钟为APB1时钟的2倍, 而APB1为42M, 所以定时器时钟 = 84Mhz
 *              定时器溢出时间计算方法: Tout = ((arr + 1) * (psc + 1)) / Ft us.
 *              Ft=定时器工作频率,单位:Mhz
 *
 * @param       arr: 自动重装值。
 * @param       psc: 时钟预分频数
 * @retval      无
 */
void btim_timx_int_init(uint16_t arr, uint16_t psc)
{
    timx_handler.Instance = BTIM_TIMX_INT;                              /* 基本定时器X */
    timx_handler.Init.Prescaler = psc;                                  /* 设置预分频器  */
    timx_handler.Init.CounterMode = TIM_COUNTERMODE_UP;                 /* 向上计数器 */
    timx_handler.Init.Period = arr;                                     /* 自动装载值 */
    timx_handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;           /* 时钟分频因子 */
    HAL_TIM_Base_Init(&timx_handler);
    
    HAL_TIM_Base_Start_IT(&timx_handler);                               /* 使能基本定时器x和及其更新中断:TIM_IT_UPDATE */
    __HAL_TIM_CLEAR_IT(&timx_handler,TIM_IT_UPDATE);                    /* 清除更新中断标志位 */
}

/**
 * @brief       定时器底册驱动,开启时钟,设置中断优先级
                此函数会被HAL_TIM_Base_Init()函数调用
 * @param       无
 * @retval      无
 */
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == BTIM_TIMX_INT)
    {
        BTIM_TIMX_INT_CLK_ENABLE();                                     /*使能TIM时钟*/
        HAL_NVIC_SetPriority(BTIM_TIMX_INT_IRQn, 1, 3);                 /* 抢占1,子优先级3,组2 */
        HAL_NVIC_EnableIRQ(BTIM_TIMX_INT_IRQn);                         /*开启ITM3中断*/
    }
}

/**
 * @brief       基本定时器TIMX中断服务函数
 * @param       无
 * @retval      无
 */
void BTIM_TIMX_INT_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&timx_handler);                                  /*定时器回调函数*/
}

4.3 中断处理

c 复制代码
volatile int g_timx_encode_count = 0;                                   /* 溢出次数 */

/**
 * @brief       获取编码器的值
 * @param       无
 * @retval      编码器值
 */
int gtim_get_encode(void)
{
    return ( int32_t )__HAL_TIM_GET_COUNTER(&g_timx_encode_chy_handle) + g_timx_encode_count * 65536;       /* 当前计数值+之前累计编码器的值=总的编码器值 */
}

/**
 * @brief       定时器更新中断回调函数
 * @param        htim:定时器句柄指针
 * @note        此函数会被定时器中断函数共同调用的
 * @retval      无
 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM3)
    {
        if(__HAL_TIM_IS_TIM_COUNTING_DOWN(&g_timx_encode_chy_handle))   /* 判断CR1的DIR位 */
        {
            g_timx_encode_count--;                                      /* DIR位为1,也就是递减计数 */
        }
        else
        {
            g_timx_encode_count++;                                      /* DIR位为0,也就是递增计数 */
        }
    }
    else if (htim->Instance == TIM6)
    {
        int Encode_now = gtim_get_encode();                             /* 获取编码器值,用于计算速度 */

        speed_computer(Encode_now, 50);                                 /* 中位平均值滤除编码器抖动数据,50ms计算一次速度*/
    }
}

4.4 编码器速度计算

c 复制代码
ENCODE_TypeDef g_encode;     /*编码器参数变量*/

/**
 * @brief       电机速度计算
 * @param       encode_now:当前编码器总的计数值
 *              ms:计算速度的间隔,中断1ms进入一次,例如ms = 5即5ms计算一次速度
 * @retval      无
 */
void speed_computer(int32_t encode_now, uint8_t ms)
{
    uint8_t i = 0, j = 0;
    float temp = 0.0;
    static uint8_t sp_count = 0, k = 0;
    static float speed_arr[10] = {0.0};                     /* 存储速度进行滤波运算 */

    if (sp_count == ms)                                     /* 计算一次速度 */
    {
        /* 计算电机转速 
           第一步 :计算ms毫秒内计数变化量
           第二步 ;计算1min内计数变化量:g_encode.speed * ((1000 / ms) * 60 ,
           第三步 :除以编码器旋转一圈的计数次数(倍频倍数 * 编码器分辨率)
           第四步 :除以减速比即可得出电机转速
        */
        g_encode.encode_now = encode_now;                                /* 取出编码器当前计数值 */
        g_encode.speed = (g_encode.encode_now - g_encode.encode_old);    /* 计算编码器计数值的变化量 */
        
        speed_arr[k++] = (float)(g_encode.speed * ((1000 / ms) * 60.0) / REDUCTION_RATIO / ROTO_RATIO );    /* 保存电机转速 */
        
        g_encode.encode_old = g_encode.encode_now;          /* 保存当前编码器的值 */

        /* 累计10次速度值,后续进行滤波*/
        if (k == 10)
        {
            for (i = 10; i >= 1; i--)                       /* 冒泡排序*/
            {
                for (j = 0; j < (i - 1); j++) 
                {
                    if (speed_arr[j] > speed_arr[j + 1])    /* 数值比较 */
                    { 
                        temp = speed_arr[j];                /* 数值换位 */
                        speed_arr[j] = speed_arr[j + 1];
                        speed_arr[j + 1] = temp;
                    }
                }
            }
            
            temp = 0.0;
            
            for (i = 2; i < 8; i++)                         /* 去除两边高低数据 */
            {
                temp += speed_arr[i];                       /* 将中间数值累加 */
            }
            
            temp = (float)(temp / 6);                       /*求速度平均值*/
            
            /* 一阶低通滤波
             * 公式为:Y(n)= qX(n) + (1-q)Y(n-1)
             * 其中X(n)为本次采样值;Y(n-1)为上次滤波输出值;Y(n)为本次滤波输出值,q为滤波系数
             * q值越小则上一次输出对本次输出影响越大,整体曲线越平稳,但是对于速度变化的响应也会越慢
             */
            //g_motor_data.speed = (float)( ((float)0.48 * temp) + (g_motor_data.speed * (float)0.52) );
            k = 0;
        }
        sp_count = 0;
    }
    sp_count ++;
}

【嵌入式电机控制】编码器原理与内部构造

Cyber耐提克 已于 2025-07-04 14:44:30 修改

一、概述

编码器是一种将直线位移或角位移物理量转换为脉冲信号或二进制编码的传感设备,广泛应用于电机控制系统中,用于实时测量运动物体的位置、角度及速度参数,为闭环控制提供反馈信息。

二、分类体系

编码器的分类可基于检测原理与编码类型两个维度展开,具体分类如下:

2.1 按检测原理分类

  • 光电式编码器
  • 磁电式编码器

2.2 按编码类型分类

  • 绝对式编码器(磁电绝对式编码器因技术实现复杂,本文暂不展开)
  • 增量式编码器

三、磁电增量式编码器工作原理

磁电增量式编码器基于霍尔效应实现信号转换,将机械位移转化为计数脉冲,通过脉冲数量计算位移量与运动速度。

如上图所示,编码器结构包含磁盘与转轴:

  • 转轴与电机转轴同轴连接,随电机同步旋转;
  • 磁盘表面交替排布 N 极与 S 极磁极;
  • A、B 两相霍尔传感器固定安装,可感知磁极极性的交替变化,并将磁场变化转换为电信号;
  • 经信号转换电路处理后,电信号被整形为标准脉冲信号输出,波形如下:

A、B 两相信号存在 9 0 ∘ 90^\circ 90∘ 相位差,通过判断相位时序关系可确定电机转向:

  • 磁盘顺时针旋转时,A 相信号超前 B 相信号;
  • 磁盘逆时针旋转时,B 相信号超前 A 相信号。

四、光电增量式编码器工作原理

光电增量式编码器利用光电转换原理,将机械位移转换为计数脉冲,通过脉冲数量计算位移量与运动速度。

其结构与磁电式编码器类似,包含转轴与码盘,关键部件与工作流程如下:

  • 码盘为带有均匀透光小孔的圆盘,与转轴同轴旋转;
  • 码盘一侧设置光源,另一侧对应 A、B 两相安装感光元件;
  • 码盘旋转时,透光小孔交替遮挡光线,感光元件将光信号的通断变化转换为电信号;
  • 电信号经整形处理后输出标准脉冲信号,与磁电增量式编码器输出特性一致。

五、光电绝对式编码器工作原理

光电绝对式编码器通过码盘上的编码阵列,在不同位置或角度输出唯一的二进制编码,实现绝对位置的直接测量。

5.1 自然二进制码盘

码盘表面按扇区划分,每个扇区包含若干透光(白色)与不透光(黑色)区域,分别对应二进制编码的 0 与 1:

  • 图中码盘含 4 条码道,对应 4 位二进制编码,可表示 0 ∼ 15 0 \sim 15 0∼15(十进制)共 16 个唯一编码;
  • 每个扇区对应一个固定角度,编码与角度位置一一对应,通过读取编码可直接获取绝对位置。

局限性:相邻扇区的二进制编码可能存在多位跳变,受光线反射、折射、衍射等干扰时,易出现中间值误读,导致测量误差。

5.2 格雷码码盘

为解决自然二进制码盘的跳变误读问题,引入格雷码编码方式,其码盘结构如下:

格雷码的特性是相邻编码仅存在 1 位二进制位变化(需结合数字电子技术相关知识理解),该特性可有效避免中间位置的误读问题,提升测量稳定性。

六、编码器关键参数

6.1 分辨率

指编码器可识别的最小测量单位:

  • 对于增量式编码器,分辨率定义为转轴每旋转一圈输出的脉冲数(Pulse Per Revolution,PPR);
  • 对于绝对式编码器,分辨率由码盘的编码位数决定(如 4 位编码对应 2 4 = 16 2^4=16 24=16 个分辨单位)。

6.2 精度

指编码器输出信号与实际位置之间的最大偏差,单位通常为角分(′)或角秒(″),反映测量结果的准确程度。

6.3 最大响应频率

指编码器每秒可输出的最大脉冲数,单位为赫兹(Hz),简称 PPS(Pulses Per Second),决定编码器对高速运动的跟踪能力。

6.4 最大转速

指编码器机械结构可承受的最高旋转速度,超过该转速可能导致机械部件损坏或测量精度下降。


驱动执行篇之电机编码器:编码器基础与双编码器方案

子墨_bupt 于 2024-04-18 11:30:00 发布

1. 编码器功能定位

编码器是一种将机械运动的位置、位移等物理量转换为数字信号的传感设备,在电机控制系统中承担反馈角色。

当驱动器通过 U、V、W 三相电驱动电机运转时,若需实现特定位置或角度的精确控制,需实时获取电机转子的当前位置:

  • 编码器与电机转子同轴连接,随转子同步旋转;
  • 实时输出与转子位置对应的信号,反馈至驱动器;
  • 驱动器对比反馈信号与目标位置,调整三相电输出,使转子精准停留在目标位置,实现伺服控制、调速等功能。

此外,编码器与齿轮条或螺旋丝杠结合时,可扩展用于直线运动部件的位置、位移测量。

2. 编码器分类体系

编码器的分类可基于码盘刻孔方式、机械结构、工作原理等维度展开,具体如下:

2.1 按码盘刻孔方式分类:增量式与绝对式编码器

2.1.1 增量式编码器
  • 工作原理:将位移转化为周期性电信号,再整形为计数脉冲,通过脉冲个数表征位移量;
  • 信号输出:典型输出 A、B、Z 三组方波脉冲,A、B 两相相位差 (90^\circ),可通过相位时序判断转向,Z 相为单圈脉冲(每圈输出 1 个脉冲),用于基准点定位;
  • 倍频扩展:通过采集 A、B 相的上升沿与下降沿,可实现 2 倍频或 4 倍频,提升分辨率;
  • 局限性:驱动器断电后,位置计数信息丢失,重启后需通过 Z 相脉冲校准零点(回原操作)。
2.1.2 绝对式编码器
  • 工作原理:码盘上按规律排布多道光通道刻线,每道刻线对应二进制编码的 1 位,转子每一个角度位置对应唯一的二进制编码;
  • 信号输出:直接输出数字编码信号,无需计数累积;
  • 优势:驱动器断电后位置信息不丢失,重启后可直接读取当前位置,无需校准;
  • 类型划分:
  • 单圈绝对式编码器:测量范围限于 (360^\circ),超过后编码重复;
  • 多圈绝对式编码器:通过齿轮传动多组码盘,扩展测量范围,编码唯一不重复,安装时无需精准找零点。

2.2 按工作原理分类:光电式、磁电式与触点电刷式

其中光电式与磁电式应用最为广泛,二者性能对比如下:

性能维度 光电式编码器 磁电式编码器
精度与分辨率 较高,依赖光学元件与制造工艺 相对较低,受磁场稳定性影响
环境适应性 对光线、灰尘敏感,适用于洁净环境 抗灰尘、光线干扰,适应恶劣环境
抗干扰能力 对电磁干扰、震动敏感度较高 抗电磁干扰、震动能力强
成本 较高 较低
2.2.1 光电编码器结构与工作原理

组成包括光栅盘(分度码盘)与光电检测装置(接收器):

  • 光栅盘:在圆板上等分开设长方形孔,与电机同轴旋转;
  • 光电检测:光源垂直照射光栅盘,光线经光栅盘投射至光敏元件,将光信号转换为电信号;
  • 信号输出:光栅盘旋转时,光信号通断变化转化为脉冲信号输出。

3. 双编码器方案设计

3.1 扭矩感知方案对比

在足式机器人、协作机械臂等需力控的场景中,常用扭矩感知方案包括以下四类:

方案类型 原理 代表应用 优缺点分析
电流环方案 通过电机线圈电流估算外力 宇树、云深处机器人 实现简便,成本低;精度较低
双编码器方案 双编码器位置差计算扭矩 UR 机械臂 成本适中,精度高;算法成熟
扭矩传感器方案 输出端加装扭矩传感器直接测量 波士顿动力、GHOST 机器人 测量精准;成本高,算法复杂
应变片方案 谐波柔轮贴应变片感知扭矩 部分高端协作臂 集成度高;结构复杂,标定难度大

3.2 双编码器方案工作原理

双编码器方案通常搭配减速比为几十至 100 的大速比减速器,设计为电机侧与输出侧各安装一个编码器,通过位置差计算扭矩:

3.2.1 静态工作特性

当输出侧受到外部扭矩时,输出侧编码器可检测到微小位置变化,而大速比减速器的减速作用使电机侧编码器暂未响应,通过对比两个编码器的位置数据,可推算外部扭矩大小:

  • 拖动示教模式:驱动器调整电机输出,跟随外部受力运动;
  • 位置保持模式:驱动器驱动电机补偿外部扭矩,维持输出端位置恒定。
3.2.2 动态工作特性
  • 电机侧编码器数据经减速比换算,得到输出端理论位置;
  • 对比输出端理论位置与输出侧编码器实测位置,获取位置偏差;
  • 基于位置偏差计算外部扭矩,驱动电机进行实时补偿控制。

优势:动态场景中,双编码器基于空间维度的位置对比测量扭矩,相比电流环、扭矩传感器等基于时间维度的测量方案,受重心、动量变化的干扰更小,测量精度更高。

3.3 双编码器安装与选型要求

3.3.1 安装方式
  • 电机侧编码器:安装于电机转子端,与转子同轴旋转;
  • 输出侧编码器:安装于减速器输出端,直接测量负载侧位置。
3.3.2 选型要求
  • 电机侧编码器:
    • 功能定位:为电机电流环、速度环提供位置与速度反馈,支撑 PID、FOC 控制;
    • 性能要求:响应速度快、精度高,分辨率需与减速器输出精度及应用场景匹配。
  • 输出侧编码器:
    • 功能定位:测量输出端绝对位置,用于零位预估、绝对姿态反馈及扭矩计算;
    • 性能要求:采用绝对式编码器,精度与重复定位精度高,分辨率需匹配扭矩测量范围。

参考资料

1\] 协作机器人 双编码器执行器案例 - 知乎 (zhihu.com) \[2\] 协作机器人的双编码器使用探讨-中国传动网 (chuandong.com) \[3\] 足式机器人方案整理1----波士顿动力 - 知乎 (zhihu.com) \[4\] 几种不同电机编码器的介绍_电机_编码器_中国工控网 (gongkong.com) \[5\] 伺服电机编码器用磁电和光电哪个好-★威海艾迪科电子★ (adkiot.com) *** ** * ** *** ## via: * Motor Encoder \| Working Principle \| Dynapar * Encoder Working Principle \| Encoder Animation \| Instrumentation Tools * 伺服电机:编码器原理与分类_伺服电机编码器-CSDN博客 * 电机编码器-CSDN博客 * 【嵌入式电机控制】编码器原理与内部构造_发电机编码器码盘工作原理-CSDN博客 * 驱动执行篇之电机编码器:编码器基础与双编码器方案-CSDN博客