在2.0版的foc电机库中,芯片采电流的方案是如下配置ADC的
/* ADC1 配置 ------------------------------------------------------*/
ADC_StructInit(&ADC_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_Mode_InjecSimult; //同步注入模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //使用扫描模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Left; //数据左对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //规则转换通道数
ADC_Init(ADC1, &ADC_InitStructure);
ADC1配置了2个注入通道,ADC2的配置和通道数也是一样的
问题来了:看参考手册中的描述,单次转换模式时,如果开启转换结束中断,那么在转换完一个通道后就会触发一次中断
而同步注入模式,是在ADC1或ADC2转换完各自通道后才触发转换结束的中断
而foc控制是需要ADC工作在同步注入模式的,即在采集完2个电流和一个电源电压后进入中断进行计算。但以上配置不就前后矛盾吗?
还有在传感器校准的过程中
/* ADC 用于读取电流通道读取零电流ADC值 */
for(bIndex=NB_CONVERSIONS; bIndex !=0; bIndex--)
{
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_JEOC)) { } //等待注入通道转换完成
hPhaseAOffset += (ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_1)
>>ADC_RIGHT_ALIGNMENT);
hPhaseBOffset += (ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_2)
>>ADC_RIGHT_ALIGNMENT);
/* 清除 ADC1 JEOC 挂起位 */
ADC_ClearFlag(ADC1, ADC_FLAG_JEOC);
ADC_SoftwareStartInjectedConvCmd(ADC1,ENABLE);
}
前面配置的数据为左对齐,但校准过程中采集数据确是右移ADC_RIGHT_ALIGNMENT位,而且ADC_RIGHT_ALIGNMENT的数值为3,为啥不是4? |