你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32G4 ADC同步TIM触发采样时间的疑问

[复制链接]
Teacian 提问时间:2024-2-4 15:06 / 未解决

使用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收到触发信号后,需要一段等待时间的样子,请问是什么原因?

收藏 评论4 发布时间:2024-2-4 15:06

举报

4个回答
xmshao 回答时间:2024-2-5 14:05:20
虽然大致可以肯定跟硬件时序有关系,但看不到相应代码也难以锁定具体原因。比方定时器的触发事件与ADC初始化完成的之间的先后关系,ADC转换事件与两次触发的间隔长短关系。。。
xmshao 回答时间:2024-2-5 14:15:19
虽然大致可以肯定跟硬件时序有关系,但看不到相应代码也难以锁定具体原因。比方定时器的触发事件与ADC初始化完成的之间的先后关系,ADC转换时间与两次触发的间隔长短关系。。。
Teacian 回答时间:2024-2-19 09:01:19

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;

以下为初始化配置:

BLDC_SIX.ioc

Teacian 回答时间:2024-2-19 09:02:58

image.png

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版