TI论坛
直播中

陈博朴

7年用户 172经验值
私信 关注
[问答]

请问2812矢量控制例程pmsm3_1中为什么CLARKE变换需要_IQ15toIQ转换?

专家,您好:
        有个事情不懂,想请教您一下。
        在ti公司提供的2812矢量控制例程pmsm3_1中,为什么CLARKE变换,需要_IQ15toIQ转换呢,多谢!

回帖(14)

冯敬宇

2018-8-31 09:46:47
xiaoyuan,
请把具体的代码或注释贴上来。另外,你也可以查看相应的文档,比如motor lib关于FOC算法中应用到的宏模块的说明。这么转换的话应该是前后模块数据格式的匹配。
Eric
                                                                         - ERIC
举报

庄当甜

2018-8-31 10:02:40
Hi xiaoyuan,
ADC转换的结果是Q15格式的,CLARK变换的计算以及后面的一些计算是Global Q格式,所以需要把Q15转成Global Q才能参与运算。
Regards,
Jay
举报

陈博朴

2018-8-31 10:19:21
引用: guigui_7044 发表于 2018-8-31 08:36
xiaoyuan,
请把具体的代码或注释贴上来。另外,你也可以查看相应的文档,比如motor lib关于FOC算法中应用到的宏模块的说明。这么转换的话应该是前后模块数据格式的匹配。
Eric

多谢您!
clarke1.As = _IQ15toIQ((int32)ilg2_vdc1.ImeasA);//将AD采集值,进行CLARKE变换
clarke1.Bs = _IQ15toIQ((int32)ilg2_vdc1.ImeasB);
clarke1.calc(&clarke1);
就是这段代码。
举报

陈博朴

2018-8-31 10:37:47
引用: 小Qhhui 发表于 2018-8-31 08:52
Hi xiaoyuan,
ADC转换的结果是Q15格式的,CLARK变换的计算以及后面的一些计算是Global Q格式,所以需要把Q15转成Global Q才能参与运算。
Regards,

int16 DatQ15;
int32 Tmp;
// Wait until ADC conversion is completed
while (AdcRegs.ADCST.bit.SEQ1_BSY == 1)
[];
DatQ15 = AdcRegs.ADCRESULT0^0x8000; // Convert raw result to Q15 (bipolar signal)
Tmp = (int32)p->ImeasAGain*(int32)DatQ15; // Tmp = gain*dat => Q28 = Q13*Q15
p->ImeasA = (int16)(Tmp>>13); // Convert Q28 to Q15
p->ImeasA += p->ImeasAOffset; // Add offset
p->ImeasA *= -1; // Positive direction, current flows to motor
DatQ15 = AdcRegs.ADCRESULT1^0x8000; // Convert raw result to Q15 (bipolar signal)
Tmp = (int32)p->ImeasBGain*(int32)DatQ15; // Tmp = gain*dat => Q28 = Q13*Q15
p->ImeasB = (int16)(Tmp>>13); // Convert Q28 to Q15
p->ImeasB += p->ImeasBOffset; // Add offset
p->ImeasB *= -1; // Positive direction, current flows to motor

DatQ15 = (AdcRegs.ADCRESULT2>>1)&0x7FFF; // Convert raw result to Q15 (unipolar signal)
Tmp = (int32)p->VdcMeasGain*(int32)DatQ15; // Tmp = gain*dat => Q28 = Q13*Q15
if (Tmp > 0x0FFFFFFF) // Limit Tmp to 1.0 in Q28
Tmp = 0x0FFFFFFF;
p->VdcMeas = (int16)(Tmp>>13); // Convert Q28 to Q15
p->VdcMeas += p->VdcMeasOffset; // Add offset
p->ImeasC = -(p->ImeasA + p->ImeasB); // Compute phase-c current
AdcRegs.ADCTRL2.all |= 0x4040; // Reset the sequence

这段是AD代码,进行数据转换的原因是什么,多谢您!
1 举报
  • 远: 您好,这段源代码在哪里能找到呢?我想找pmsm3_3的

更多回帖

发帖
×
20
完善资料,
赚取积分