打印

PMSM控制程序 F281X_ileg2_dcbus_drv_read模块

[复制链接]
948|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1475405344|  楼主 | 2018-3-30 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 1475405344 于 2018-3-30 11:24 编辑

void F281X_ileg2_dcbus_drv_read(ILEG2DCBUSMEAS *p)
{
       int32 Tmp;
           int16 DatQ15;
           int16 dat[4]={0,0,0,0};
           int16 i=0;
        // Wait until ADC conversion is completed
        while (AdcRegs.ADCST.bit.SEQ1_BSY == 1)
        {};
                dat[0] = AdcRegs.ADCRESULT1>>4;
                dat[1] = AdcRegs.ADCRESULT2>>4;
                dat[2] = AdcRegs.ADCRESULT5>>4;
                dat[3] = AdcRegs.ADCRESULT6>>4;

        DatQ15=0;
            for(i=0;i<4;i++)
                {
                  DatQ15 += dat;
                }
                DatQ15 = (int16)(DatQ15>>2);
                DatQ15 = DatQ15-(2314-2048);
                if(DatQ15>2408||DatQ15<1688)
                {
               
                }
                DatQ15 = (int16)(DatQ15<<4)^0x8000;    //将采样的12位电流数变成16位并变为双极性数据
        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
               
                dat[0] = 0;
                dat[1] = 0;
                dat[2] = 0;
                dat[3] = 0;
        dat[0] = AdcRegs.ADCRESULT0>>4;  // ADC转换结果缓冲寄存器(RESULTn)为前12位,后4位无效
        dat[1] = AdcRegs.ADCRESULT3>>4;  // 同时转换为12位数据相加避免了数据溢出
        dat[2] = AdcRegs.ADCRESULT4>>4;  
        dat[3] = AdcRegs.ADCRESULT7>>4;
        
                DatQ15=0;
            for(i=0;i<4;i++)
                {
                  DatQ15 += dat;
                }
        DatQ15 = (int16)(DatQ15>>2);
       DatQ15 = DatQ15 - (2309-2048);
                if(DatQ15>2408||DatQ15<1688)
                {
                //        EvbRegs.COMCONB.bit.FCOMPOE=0;
                }

                DatQ15 = (int16)(DatQ15<<4)^0x8000;    //将采样的12位电流数变成16位并变为双极性数据
        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采集模块的程序,文中标颜色的地方不是很懂。请问DatQ15-(2314-2048) ,if(DatQ15>2408||DatQ15<1688)  中间的数都是啥意思呢?还有Q15,Q13,Q15格式有啥不一样呢,有知道的指导一下哈,感谢     

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

24

帖子

1

粉丝