【RISC-V 先楫半导体HPM5E00 MCU开发板试用体验】PWM触发ADC
使用互联管理器TRGM将PWM和ADC关联起来,在PWM波谷时同时触发ADC0和ADC1采样,采样结束后进入ADC中断,在ADC中断中完成电机控制相关逻辑。关键代码:
```
trgm_output_cfg.invert = false;
trgm_output_cfg.type = trgm_output_same_as_input;
trgm_output_cfg.input= HPM_TRGM0_INPUT_SRC_PWM0_TRGO_0;
trgm_output_config( HPM_TRGM0, HPM_TRGM0_OUTPUT_SRC_ADCX_PTRGI0A, &trgm_output_cfg );
```
`trgm_output_cfg.input = HPM_TRGM0_INPUT_SRC_PWM0_TRGO_0;`使用PWM作为触发源。
`HPM_TRGM0_OUTPUT_SRC_ADCX_PTRGI0A`将触发信号链接至ADC的TRG0A触发输入。
```
adc16_pmt_config_t adc16;
adc16.trig_ch = ADC16_CONFIG_TRG0A;
adc16.trig_len= 2;
adc16.inten = false;
adc16.inten = true;
adc16.adc_ch = 4;
adc16.adc_ch = 5;
adc16_set_pmt_config( HPM_ADC0, &adc16 );
adc16.trig_ch = ADC16_CONFIG_TRG0A;
adc16.trig_len= 2;
adc16.inten = false;
adc16.inten = false;
adc16.adc_ch = 6;
adc16.adc_ch = 7;
adc16_set_pmt_config( HPM_ADC1, &adc16 );
adc16_enable_pmt_queue( HPM_ADC0, ADC16_CONFIG_TRG0A );
adc16_enable_pmt_queue( HPM_ADC1, ADC16_CONFIG_TRG0A );
```
在ADC配置时,由于该点点taptap安卓只有两个ADC,所以将母线电压、U、V、W四个采样信号分为两组,分别分配给ADC0和ADC1。
两个ADC的采样都使用ADC16_CONFIG_TRG0A触发,这样就可以实现在PWM波谷处同时触发两个ADC完成模拟量采样。
中断部分代码:
```
SDK_DECLARE_EXT_ISR_M(BOARD_BLDC_ADC_IRQn, isr_adc)
void isr_adc(void)
{
uint32_t status;
status = adc16_get_status_flags( BOARD_BLDC_ADC_U_BASE );
if ((status & BOARD_BLDC_ADC_TRIG_FLAG) != 0)
{
adc16_clear_status_flags( BOARD_BLDC_ADC_U_BASE, BOARD_BLDC_ADC_TRIG_FLAG );
/* 电流、电压信息读取 */
/* 位置信息读取 */
/* FOC */
/* 设置占空比 */
pwmv2_shadow_register_unlock( HPM_PWM0 );
pwmv2_set_shadow_val( HPM_PWM0, PWMV2_SHADOW_INDEX(1), (reload - duty_cmp) >> 1, 0, false );
pwmv2_set_shadow_val( HPM_PWM0, PWMV2_SHADOW_INDEX(2), (reload + duty_cmp) >> 1, 0, false );
pwmv2_set_shadow_val( HPM_PWM0, PWMV2_SHADOW_INDEX(3), (reload - duty_cmp) >> 1, 0, false );
pwmv2_set_shadow_val( HPM_PWM0, PWMV2_SHADOW_INDEX(4), (reload + duty_cmp) >> 1, 0, false );
pwmv2_set_shadow_val( HPM_PWM0, PWMV2_SHADOW_INDEX(5), (reload - duty_cmp) >> 1, 0, false );
pwmv2_set_shadow_val( HPM_PWM0, PWMV2_SHADOW_INDEX(6), (reload + duty_cmp) >> 1, 0, false );
pwmv2_shadow_register_lock( HPM_PWM0 );
}
}
```
跑一下电机:
!(//m.qjumbo.com/forum/data/attachment/forum/202508/17/235752qirr84ffsd5s5swh.gif)
页:
[1]