作者:沉尸(5912129@qq.com)
前言:
对于FOC控制来说,电流的检测是极其重要的一环,在哪个时间节点进行检测,然后计算放在哪里,这都是很关键的处理。
根据源代码“Board\v3\Src\adc.c”中的相关初始化代码,
然后结合用STM32CubeMX打开“Firmware\Board\v3\Odrive.ioc”进行查看,可以总结如下:
ADC1 | ADC2 | ADC3 | 功能描述 | |||||||
能访问 | 规则式 | 注入式 | 能访问 | 规则式 | 注入式 | 能访问 | 规则式 | 注入式 | ||
PA4(CH4) | M1 temperature | |||||||||
PA5(CH5) | Aux temperature | |||||||||
PA6(CH6) | VBus | |||||||||
PC0(CH10) | M0 Ib | |||||||||
PC1(CH11) | M0 Ic | |||||||||
PC2(CH12) | M1 Ic | |||||||||
PC3(CH13) | M1 Ib | |||||||||
PC5(CH15) | M0 temperature |
表1
绿色表示能被访问的通道;
蓝色表示规则式转换通道
棕色表示注入式转换通道
另外只有ADC1使用了DMA,使用的是“DMA2 Stream 0”
ADC转换时的触发方式:
规则组的触发方式和采样种类 | 注入组的触发方式和采样种类 | |
ADC1 | 软件触发 | TIM1_TRGO 上升沿 (Vbus) |
ADC2 | TIM8_TRGO 上升沿 (M1 Ib) | TIM1_TRGO 上升沿 (M0 Ib) |
ADC3 | TIM8_TRGO 上升沿 (M1 Ic) | TIM1_TRGO 上升沿 (M0 Ic) |
表2
查看文件:“Board\v3\Src\tim.c”中的“MX_TIM1_Init”和“MX_TIM8_Init”:
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
可知:
TIM1_TRGO 和TIM8_TRGO 都是“update”事件,也就是计数溢出更新事件。
更新事件这个脉冲宽度和“CK_PSC”一致
总结:
1)TIM1的更新事件会触发ADC1~ADC3的注入组自动采集,会采集出Vbus,M0电机的B相和C相的电压
2)TIM8的更新事件会触发ADC2和ADC3的规则组的自动采集,会采集出M1电机的B相和C相的电压
3)软件中没有单独针对TIM1的Update中断进行处理,只有TIM8的中断“TIM8_UP_TIM13_IRQHandler”,在里面将TIM1触发的注入组和TIM8触发的规则组采集出来的数据一起处理。