使用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收到触发信号后,需要一段等待时间的样子,请问是什么原因? |
adc采集电压
STM32G474的HRTIM和高级定时器有什么区别
LL库变成黑色,不能用,怎么回事
按照文档标注ADC最高输入时钟为60兆, 将主频配置为120(原来是170M),AD再进行1分频/2分频/4分频,对应的转换位数12位,采样周期2.5,对应的频
关于stm32g431串口与FDCAN数据不同同时处理问题
STM32G431的CAN控制器在收发器开路后,程序发送数据后,TX高电平。RX低电平。
在使用FDCAN控制器发送字节有问题
keil无法对G474CBTx扇区擦除烧录较大程序是什么原因?
CubeAI生产keil代码时出现报错。这个ai_platform.h文件在什么地方?
关于CUBEMX死区模式使用?
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;
以下为初始化配置: