PWMV2移相方法

前言

一般EPWM外设配备相位寄存器,来完成移相的功能。先楫PWMV2并没有设置单独的移相寄存器,但是通过通用计算单元更新关联计数器的值完成了相同的功能。

功能概述

实现原理

将pwm波每个周期和360度相位对应,那么在reload值确定的情况下,都会有一个数值和相位所对应,匹配公式如下:

  \text{value} = \frac{\text{reload} \ * \ \text{degree}}{360}

在特定时刻将所需数值写入到通用计算单元中,即可做到相位移动。

pwmv2提供了修改计数器数值的功能,在外部触发到来时,将关联的通用计算单元的数值写入到计数器中。下图展示在不同情况下,计数器同步到所需相位数值的情况。

硬件连接

  • triggermux
    移相操作需要触发更新计数器值的外部信号,该信号通过triggermux连接

  • PWM
    在整个链路中,需要额外配置通道的通用计算单元。在先楫电机系统中,pwmv2可以引入其他外设(例如sei)的DAC数值,来调整pwmv2的输出波形,通用计算单元便可将其他外设传入的参数、预设值以及关联计数器的reload结合完成移相,若无需其他外设传入的参数以及关联计数器的周期值,将DAC的加权系数以及周期T的加权系数设置为0。

代码实现

  • 配置triggermux,选择外部触发信号作为更新时机

    trgm_output_t trgm0_io_config1 = {0};
    trgm0_io_config1.invert = false;
    trgm0_io_config1.type = trgm_output_pulse_at_input_falling_edge;
    trgm0_io_config1.input = HPM_TRGM0_INPUT_SRC_TRGM0_P24;
    trgm_output_config(TRGM, HPM_TRGM0_OUTPUT_SRC_PWM1_TRIG_IN0, &trgm0_io_config1);
  • 配置计数器计算单元,将预设值写入到计算单元的补偿值寄存器,在外部触发信号到来时,会将该数值同步到计数器中。如果需要建立和当前关联计数器周期T的关系,设置T的加权系数。
    下面的代码段,设置DAC和周期T的加权系数为0,将通用计数单元0和计数器0(通道0)关联,更新PWMV2_SHADOW_INDEX(20)影子寄存器的值,在外部触发到来后,将该值更新到计数器。

/* 配置通用计算单元 */
    pwmv2_calculate_set_period_parameter(PWM, PWMV2_CALCULATE_INDEX(0), 0);
    pwmv2_calculate_set_dac_value_parameter(PWM, PWMV2_CALCULATE_INDEX(0), 0);
    pwmv2_calculate_select_counter_calculate_index(PWM, PWMV2_CALCULATE_INDEX(0), PWM_PRIVATE_CLAC_0);
    pwmv2_calculate_select_in_offset(PWM, PWMV2_CALCULATE_INDEX(0), PWMV2_SHADOW_INDEX(20));
/* 关联计数器和触发输入 */
    pwmv2_counter_update_trig0(PWM, pwm_counter_0, 0);
    pwmv2_counter_enable_update_trig0(PWM, pwm_counter_0);
/* 关联计数器和通用计算单元 */
    pwmv2_counter_set_trig0_calculate_cell_index(PWM, pwm_counter_0, PWMV2_CALCULATE_INDEX(0));

效果

下列图示中,黄色线为参考波形,粉色线每次移动20度的相位

0
0
发表回复 0

Your email address will not be published. Required fields are marked *