使用STM32G4C驱动一个三相BLDC电机,定时器TIM1时钟170MHz,更新频率20KHz,配置OC4为trigo信号触发ADC1,ADC时钟频率为 170/4 MHz进行三相电压采样,采样顺序为CH1,CH2,CH3,并通过DMA读取ADC数据。当三个通道的采样时间小于247.5周期时,ADC不能完好地跟踪BLDC的相电压,表现为采样数据波形与相电压波形不一致。但当设置第一顺位的通道的采样时间为247.5,其他两个通道设置为较小的采样时间,例如6.5周期,三个通道均可以完好的跟踪BLDC的相电压,更换通道采样顺序也会得到同样的结果。感觉就像ADC收到触发信号后,需要一段等待时间的样子,请问是什么原因? |
开发板引脚间距
STSPIN32G4内部驱动电压输出问题
STM32G474 发送CANFD数据出现异常,FIFO满,没有bus-off
重酬找有高频高压放电电源仪器经验的嵌入式软件开发人员合作开发,电源控制
基于STM32G474的电机控制,如何在sdk上配置使用spwm波驱动而不是svpwm?
STM32G474的HRTIM和高级定时器有什么区别
STM32的OPAMP输入阻抗参数
CubeAI生产keil代码时出现报错。这个ai_platform.h文件在什么地方?
adc采集电压
LL库变成黑色,不能用,怎么回事
ADC与定时器初始化代码如下:
DMA1_Channel1->CPAR=(unsigned int)(&(ADC1->DR));
DMA1_Channel1->CMAR=(unsigned int)adcValue;
DMA1_Channel1->CNDTR=3;
DMA1_Channel1->CCR=1<<10|1<<8|1<<7|1<<5|2|1|3<<12;
DMA2_Channel1->CPAR=(unsigned int)(&(ADC2->DR));
DMA2_Channel1->CMAR=(unsigned int)adcValue2;
DMA2_Channel1->CNDTR=2;
DMA2_Channel1->CCR=1<<10|1<<8|1<<7|1<<5|2|1;
ADC1->CFGR|=1;
ADC2->CFGR|=1;
ADC1->CR|=1;
ADC2->CR|=1;
while((ADC1->ISR & 1) == 0)
{
}
while((ADC2->ISR & 1) == 0)
{
}
ADC2->CR|=4;
ADC1->CR|=4;
DAC1->CR|=1<<17|1<<1|1<<16|1;
//CH1 CH2 CH3 互补模式
TIM1->CR1=0;
TIM1->ARR=TIM1_period-1;
TIM1->BDTR=1<<15;// | 1<<13 | 1<<12;
TIM1->CR2=1|7<<4 | 7<<20;
TIM1->SR=0;
TIM1->DIER= 1;
TIM1->CCR1=0;
TIM1->CCR2=0;
TIM1->CCR3=0;
TIM1->CCR4= 100;
TIM1->CCMR2|=0x6800;
TIM1->EGR=1|1<<5;
TIM1->CR1= 1|1<<7;
以下为初始化配置: