初级会员

- 积分
- 108
- 金钱
- 108
- 注册时间
- 2016-9-8
- 在线时间
- 29 小时
|
发表于 2016-10-11 09:17:54
|
显示全部楼层
本帖最后由 weibo78 于 2016-10-23 13:30 编辑
路过,顺便回答一下,你说的其实是两码事。
启动前:
那个是在SVPWM_3ShuntInit里,这时还没有启动。这个配置是临时的。而且这个TIM_TRGOSource_Update只在UEV触发后才运行,不能比UEV提前运行。这时采样0电流补偿信号用的是SVPWM_3ShuntCurrentReadingCalibration(); 里面有个函数SVPWM_InjectedConvConfig,规定触发源是ADC_ExternalTrigInjecConv_T1_TRGO。
TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update)和电流采样触发没有关系。
启动时及启动后:
在后来启动过程中,有一个函数是SVPWM_3ShuntAdvCurrentReading,其中就配置了TIM1_CC4为触发源。这个是提前UEV运行的,此时CCR4=CNT。代码和注释如下
void SVPWM_3ShuntAdvCurrentReading(FunctionalState cmd)
{
if (cmd == ENABLE)
{
// Enable ADC trigger sync with CC4
//等价于:ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_T1_CC4); 因为 ADC_ExternalTrigInjecConv_T1_CC4=((u32)0x00001000)
ADC1->CR2 |= 0x00001000; //001: Timer 1 CC4 event,注意在这里配置了触发源CC4, 因为只配置了bit12, 在当前配置下,CC4或(=111)JSWSTART都是可能的,取决于bit14,13,而此时bit14=bit13=0
// Enable UPDATE ISR
// Clear Update Flag
TIM_ClearFlag(TIM1, TIM_FLAG_Update);
TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
}else
{
// Disable UPDATE ISR
TIM_ITConfig(TIM1, TIM_IT_Update, DISABLE);
// Sync ADC trigger with Update
//ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_T1_TRGO);
ADC1->CR2 &=0xFFFFEFFF;
// ReEnable EXT. ADC Triggering
ADC1->CR2 |=0x00008000;
}
}
|
|