void FCL_initADC_3In(MOTOR_Vars_t *gsMC, const uint32_t adcBaseW,
const uint32_t adcResultBaseU, ADC_PPBNumber adcU_PPBNum,
const uint32_t adcResultBaseV, ADC_PPBNumber adcV_PPBNum,
const uint32_t adcResultBaseW, ADC_PPBNumber adcW_PPBNum )
{
uint16_t adcPPBCurU, adcPPBCurV, adcPPBCurW;
adcPPBCurU = (uint16_t)(ADC_PPBxRESULT_OFFSET_BASE +(uint16_t)adcU_PPBNum * 2);
adcPPBCurV = (uint16_t)(ADC_PPBxRESULT_OFFSET_BASE +(uint16_t)adcV_PPBNum * 2);
adcPPBCurW = (uint16_t)(ADC_PPBxRESULT_OFFSET_BASE +(uint16_t)adcW_PPBNum * 2);
gsMC->curA_PPBRESULT = adcResultBaseU + adcPPBCurU;
gsMC->curB_PPBRESULT = adcResultBaseV + adcPPBCurV;
gsMC->curC_PPBRESULT = adcResultBaseW + adcPPBCurW;
gsMC->curA_resultBase = adcResultBaseU;
gsMC->curB_resultBase = adcResultBaseV;
gsMC->curC_resultBase = adcResultBaseW;
gsMC->curA_PPBNumber = adcU_PPBNum;
gsMC->curB_PPBNumber = adcV_PPBNum;
gsMC->curC_PPBNumber = adcW_PPBNum;
gsMC->AdcIntFlag = (union ADCINTFLG_REG *)(adcBaseW + ADC_O_INTFLG);
return;
}
Annie Liu:
这些都是指针变量。 指针被广泛用于使程序模块化。 由于它们都具有相同的结构,因此可以在一处进行基本的寄存器地址定义,然后使用这些指针变量将其传递给各种函数。
adcPPBCurU ===> ADC 连接相电流 U 的 PPB 地址读取
gsMC->curA_PPBRESULT ===> 保存当前 A PPBRESULT 寄存器地址的指针
gsMC->curA_resultBase ===> 持有与相电流 A 相关的结果寄存器基地址的指针
gsMC->curA_PPBNumber ===> 存储与相电流 A 相关的 ADC 的 PPB 编号
,
futian jishu:
您说的指针这些我都明白,我需要知道的是:
(1)这里的表达式乘以2,是什么意思呢
adcPPBCurU = (uint16_t)(ADC_PPBxRESULT_OFFSET_BASE +(uint16_t)adcU_PPBNum * 2);adcPPBCurV = (uint16_t)(ADC_PPBxRESULT_OFFSET_BASE +(uint16_t)adcV_PPBNum * 2);adcPPBCurW = (uint16_t)(ADC_PPBxRESULT_OFFSET_BASE +(uint16_t)adcW_PPBNum * 2);
(2)因为FOC控制,所需要的输入为三相电流,是由上面的那些量转换得到的呢?
(3)上面的程序是FCL(快速电流环路)里面的,我自己用寄存器配置好的那些底层函数,是否能够利用FCL库函数呢,怎么更好的对接这一部分呢?
,
Annie Liu:
1) 这个寄存器大小是两个内存位置,所以下一个寄存器地址将在这两个之后。
2) &3) 是的,可以。 源代码都是开放的,您需要编辑函数来解决这个问题。我们没有任何注释可供参考。 由于源代码都是开放的,您能够根据自己的喜好对其进行调整。
,
futian jishu:
您好!请问TI公司有关于电机库函数的指导文档吗,个人感觉库函数较为晦涩难懂,要是有库文件的指导文档,能否发我一份,谢谢!
,
Annie Liu:
抱歉,没有这样的文档。
,
futian jishu:
好的,谢谢