54. QEO

54.1. 概述

QEO (Quadrature Encoder Output) 是一个正交编码器输出外设。QEO可以根据输入的位置信息生成多种类型的输出信号:

  • ABZ正交编码器信号

  • 波形信号(余弦波、三角波、马鞍波等)

  • PWM换相控制信号

54.2. 特性

  • 位置输入支持:
    • 从系统位置管理器获取位置

    • 软件位置注入

    • 支持位置补偿和线数转换

  • 波形输出功能:
    • 支持4种波形:余弦波、馒头波、马鞍波、锯齿波

    • 3个独立输出通道,可配置相位偏移

    • 支持VD/VQ控制

    • 支持波形缩放、限幅和死区补偿

    • 通过DAC输出模拟信号

  • ABZ输出功能:
    • 支持4种输出模式:

      • 带自有位置的A/B两相正交输出

      • 高速脉冲(Pulse&Revise)输出

      • 上下(Up&Down)输出

      • 不带自有位置的A/B两相正交输出

    • 内置位置管理器,支持位置同步

    • 可配置最小脉冲宽度

    • 支持看门狗功能

  • PWM输出功能:
    • 支持8组PWM强制输出控制信号

    • 可配置最多12相换相表

    • 支持安全模式配置

    • 支持三相直流无刷和两相步进电机控制

54.3. API说明

54.3.1. 波形输出相关API

/* 获取波形模式默认配置 */
void qeo_wave_get_default_mode_config(QEO_Type *ptr, qeo_wave_mode_t *config);

/* 配置波形模式 */
void qeo_wave_config_mode(QEO_Type *ptr, qeo_wave_mode_t *config);

/* 设置波形分辨率线数 */
void qeo_wave_set_resolution_lines(QEO_Type *ptr, uint32_t lines);

/* 设置波形相位偏移 */
void qeo_wave_set_phase_shift(QEO_Type *ptr, uint8_t wave_index, uint32_t phase_shift);

/* 获取波形输出值 */
uint16_t qeo_get_wave_output_val(QEO_Type *ptr, uint8_t wave_index);

54.3.2. ABZ输出相关API

/* 获取ABZ模式默认配置 */
void qeo_abz_get_default_mode_config(QEO_Type *ptr, qeo_abz_mode_t *config);

/* 配置ABZ模式 */
void qeo_abz_config_mode(QEO_Type *ptr, qeo_abz_mode_t *config);

/* 设置ABZ分辨率线数 */
void qeo_abz_set_resolution_lines(QEO_Type *ptr, uint32_t lines);

/* 设置ABZ最大输出频率 */
hpm_stat_t qeo_abz_set_max_frequency(QEO_Type *ptr, uint32_t src_freq_hz, uint32_t max_freq_hz);

/* 配置ABZ位置同步 */
void qeo_abz_position_sync(QEO_Type *ptr, uint32_t position);

54.3.3. PWM输出相关API

/* 获取PWM模式默认配置 */
void qeo_pwm_get_default_mode_config(QEO_Type *ptr, qeo_pwm_mode_t *config);

/* 配置PWM模式 */
void qeo_pwm_config_mode(QEO_Type *ptr, qeo_pwm_mode_t *config);

/* 设置PWM分辨率线数 */
void qeo_pwm_set_resolution_lines(QEO_Type *ptr, uint32_t lines);

/* 配置PWM换相表 */
void qeo_pwm_config_phase_table(QEO_Type *ptr, uint8_t phase_num, uint8_t *phase_table);

54.3.4. 位置控制相关API

/* 使能软件位置注入 */
void qeo_enable_software_position_inject(QEO_Type *ptr);

/* 禁用软件位置注入 */
void qeo_disable_software_position_inject(QEO_Type *ptr);

/* 软件注入位置值 */
void qeo_software_position_inject(QEO_Type *ptr, uint32_t position);

54.4. 示例