2172|1

8

帖子

3

TA的资源

一粒金砂(初级)

楼主
 

PMSM3-4例程问题 [复制链接]

 求问各位大佬,TI的例程程序中电流采样的问题,程序如下,如下红色部分,这个跟0x8000进行异或之后,产生了0x8000--0x7FF0之间的数,但是这么处理后,好像就直接转化成了IQ(-1)~IQ(1)之间的值是,那么如何进行电流解算的呢,程序中为什么没有写电流值是多少,就直接转化成了IQ(-1)~IQ(1)之间的值,我要反解算电流,应该怎么处理呢?
#include "DSP281x_Device.h"
#include "f281xileg.h"

#define CPU_CLOCK_SPEED      6.6667L   // for a 150MHz CPU clock speed
#define ADC_usDELAY 5000L
#define DELAY_US(A)  DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_CLOCK_SPEED) - 9.0L) / 5.0L)

extern void DSP28x_usDelay(unsigned long Count);

void F281X_ileg2_drv_init(ILEG2MEAS *p)
{
    DELAY_US(ADC_usDELAY);       

    AdcRegs.ADCTRL1.all = ADC_RESET_FLAG;                 // Reset the ADC Module  
        asm(" NOP ");
        asm(" NOP ");   

    AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;                // Power up bandgap/reference circuitry
        DELAY_US(ADC_usDELAY);                                            // Delay before powering up rest of ADC

    AdcRegs.ADCTRL3.bit.ADCPWDN = 1;                           // Power up rest of ADC
    AdcRegs.ADCTRL3.bit.ADCCLKPS = 6;                     // Set up ADCTRL3 register
        DELAY_US(ADC_usDELAY);       

    AdcRegs.ADCTRL1.all = ADCTRL1_INIT_STATE_ILEG2;                // Set up ADCTRL1 register
    AdcRegs.ADCTRL2.all = ADCTRL2_INIT_STATE_ILEG2;         // Set up ADCTRL2 register
        AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 1;        // Specify two conversions
    AdcRegs.ADCCHSELSEQ1.all = p->ChSelect;      // Configure channel selection

        EvaRegs.GPTCONA.bit.T1TOADC = 1;                      // Set up EV Trigger with Timer1 UF
}  

void F281X_ileg2_drv_read(ILEG2MEAS *p)
{
       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

        p->ImeasC = -(p->ImeasA + p->ImeasB);     // Compute phase-c current

        AdcRegs.ADCTRL2.all |= 0x4040;                 // Reset the sequence

}            

点赞 关注(1)
 

回复
举报

8

帖子

3

TA的资源

一粒金砂(初级)

沙发
 
求各位大佬给解释一下,这段程序的转换机制?不给电流基值,直接转化成了标幺值,那么我如何根据标幺值反算电流值,目前觉得电流环采样不对
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【干货上新】电源解决方案和技术第二趴 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 1

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表