This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] F28M35H52C:Concerto:使用PWMSOCA和PWMSOCB读取ADC1A和ADC1B所有通道

Guru**** 2535750 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/642080/f28m35h52c-concerto-read-adc1a-and-adc1b-all-channels-using-pwmsoca-and-pwmsocb

部件号:F28M35H52C

您好,

我正在尝试初始化ADC1的所有ADC信道以读取cconcto的模拟信号,为了开始转换,我使用PWM SOCA和SOCB。我参考了ADC_SoC示例代码来执行此操作。但在读取ADC1B 8信道时遇到了问题。 任何人都可以提供帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    是否已根据需要配置GPIO设置? 您能否向我们提供有关您所面临问题的更多详细信息? 如果可能,请向我们提供如何完成配置的代码片段。

    谢谢,此致,
    Veena
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Veena,

    下面是代码,此处不写入主要功能,仅写入ADC配置,ADC启用和ADC ISR。 同样在下面的代码中,对于ADC1的15个通道,我配置了相同的PWM触发器SOCA。 运行此示例后,我只能在ADC1A通道中获取数据。从通道8到15,我没有获得任何值。我在 这些模拟输入上应用了从0到3.3 的电压。如果我在初始化时出错,请告诉我。  

    UINT16转换计数;
    UINT16 adc1Voltage_ChannelA0[10];
    UINT16 adc1Voltage_ChannelA2[10];

    UINT16 adc1Voltage_ChannelA3[10];
    UINT16 adc1Voltage_ChannelA4[10];

    UINT16 adc1Voltage_ChannelA6[10];
    UINT16 adc1Voltage_ChannelA7[10];

    UINT16 adc1Voltage_ChannelB0[10];
    UINT16 adc1Voltage_ChannelB3[10];

    UINT16 adc1Voltage_ChannelB4[10];
    UINT16 adc1Voltage_ChannelB7[10];

    void adcConfig()函数

    // GPIO配置

    GpioG1CtrlRegs.GPADIR.bit.GPIO0 = 1;//设置为输出

    GpioG1CtrlRegs.GPADIR.bit.GPIO8 = 1;//设置为输出

    GpioG1CtrlRegs.GPAMUX1.bit.GPIO0 = 1;//将mux设置为EPWM1A
    GpioG1CtrlRegs.GPAMUX1.bit.GPIO8 = 3;//将mux设置为ADCSOCAn

    //分配给饼图向量表的中断

     PieVectorTable.ADCINT1 =&ADC1_ISR;

    // ADC1启用

    EALLOW;
    ADc1Regs.ADCCTL1.bit.ADCBGPWD = 1;//电源ADC1 BG
    Adc1Regs.ADCCTL1.bit.ADCREFPWD = 1;//电源参考
    ADc1Regs.ADCCTL1.bit.ADCPWDN = 1;//电源ADC1
    ADC1Regs.ADCCTL1.bit.ADCENABLE = 1;//启用ADC1
    Adc1Regs.ADCCTL1.bit.ADCREFSEL = 0;//选择内部BG
    EDIS;

     DELAY_US (ADC_USDELAY);   

    // PIE和CPU中断启用

    PieCtrlRegs.PIEIER1.bit.INTx1 = 1;             //在PIE中启用INT 1.1

    IER |= M_INT1;                             //启用CPU中断1


    //配置ADC
    EALLOW;

    Adc1Regs.ADCCTL2.bit.ADCNONOVERLAP = 1;          //启用非重叠模式,即
    Adc1Regs.ADCCTL1.bit.INTPULSEPOS = 1;             // ADCINT1在 AdcResults锁定后跳闸

    //已启用ADCINT1

    Adc1Regs.INTSEL1N2.bit.INT1E = 1;//已启用ADCINT1
    Adc1Regs.INTSEL1N2.bit.INT1CONT =0;//禁用ADCINT1连续模式
    Adc1Regs.INTSEL1N2.bit.INT1SEL = 15;//设置EOC15以触发ADCINT1  

    //选择ADC输入通道

    Adc1Regs.ADCSOC0CTL.bit.CHSEL = 0;  
    Adc1Regs.ADCSOC1CTL.bit.CHSEL = 1;  
    Adc1Regs.ADCSOC2CTL.bit.CHSEL = 2;  
    Adc1Regs.ADCSOC3CTL.bit.CHSEL = 3;  
    Adc1Regs.ADCSOC4CTL.bit.CHSEL = 4;  
    Adc1Regs.ADCSOC5CTL.bit.CHSEL = 5;
    Adc1Regs.ADCSOC6CTL.bit.CHSEL = 6;  
    Adc1Regs.ADCSOC7CTL.bit.CHSEL = 7;  
    Adc1Regs.ADCSOC8CTL.bit.CHSEL = 8;  
    Adc1Regs.ADCSOC9CTL.bit.CHSEL = 9;  
    Adc1Regs.ADCSOC10CTL.bit.CHSEL = 10;  
    Adc1Regs.ADCSOC11CTL.bit.CHSEL = 11;  
    Adc1Regs.ADCSOC12CTL.bit.CHSEL = 12;  
    Adc1Regs.ADCSOC13CTL.bit.CHSEL = 13;  
    Adc1Regs.ADCSOC14CTL.bit.CHSEL = 14;  
    Adc1Regs.ADCSOC15CTL.bit.CHSEL = 15;

    AnalogSysctrlRegs.TRIG1sel.all = 5;             //将EPWM1SOCA分配给ADC模块的ADC触发器1

    Adc1Regs.ADCSOC0CTL.bit.TRIGSEL = 5;
    Adc1Regs.ADCSOC1CTL.bit.TRIGSEL = 5;  
    Adc1Regs.ADCSOC2CTL.bit.TRIGSEL = 5;  
    Adc1Regs.ADCSOC3CTL.bit.TRIGSEL = 5;  
    Adc1Regs.ADCSOC4CTL.bit.TRIGSEL = 5;  
    Adc1Regs.ADCSOC5CTL.bit.TRIGSEL = 5;  
    Adc1Regs.ADCSOC6CTL.bit.TRIGSEL = 5;  
    Adc1Regs.ADCSOC7CTL.bit.TRIGSEL = 5;  
    Adc1Regs.ADCSOC8CTL.bit.TRIGSEL = 5;  
    Adc1Regs.ADCSOC9CTL.bit.TRIGSEL = 5;  
    Adc1Regs.ADCSOC10CTL.bit.TRIGSEL = 5;
    Adc1Regs.ADCSOC11CTL.bit.TRIGSEL = 5;  
    Adc1Regs.ADCSOC12CTL.bit.TRIGSEL = 5;
    Adc1Regs.ADCSOC13CTL.bit.TRIGSEL = 5;
    Adc1Regs.ADCSOC14CTL.bit.TRIGSEL = 5;  
    Adc1Regs.ADCSOC15CTL.bit.TRIGSEL = 5;  

    //设置7个ADC时钟周期的S/H窗口
    adc1Regs.ADCSOC0CTL.bit.ACQPS = 6;      // S/H = ACQPS + 1
    adc1Regs.ADCSOC1CTL.bit.ACQPS = 6;      // S/H = ACQPS + 1
    Adc1Regs.ADCSOC2CTL.bit.ACQPS = 6;     // S/H = ACQPS + 1
    Adc1Regs.ADCSOC3CTL.bit.ACQPS = 6;    // S/H = ACQPS + 1
    Adc1Regs.ADCSOC4CTL.bit.ACQPS = 6;    // S/H = ACQPS + 1
    Adc1Regs.ADCSOC5CTL.bit.ACQPS = 6;    // S/H = ACQPS + 1
    Adc1Regs.ADCSOC6CTL.bit.ACQPS = 6;    // S/H = ACQPS + 1
    Adc1Regs.ADCSOC7CTL.bit.ACQPS = 6;    // S/H = ACQPS + 1
    Adc1Regs.ADCSOC8CTL.bit.ACQPS = 6;    // S/H = ACQPS + 1
    Adc1Regs.ADCSOC9CTL.bit.ACQPS = 6;    // S/H = ACQPS + 1
    Adc1Regs.ADCSOC10CTL.bit.ACQPS = 6;   // S/H = ACQPS + 1
    Adc1Regs.ADCSOC11CTL.bit.ACQPS = 6;   // S/H = ACQPS + 1
    Adc1Regs.ADCSOC12CTL.bit.ACQPS = 6;  // S/H = ACQPS + 1
    Adc1Regs.ADCSOC13CTL.bit.ACQPS = 6;  // S/H = ACQPS + 1
    Adc1Regs.ADCSOC14CTL.bit.ACQPS = 6;  // S/H = ACQPS + 1
    Adc1Regs.ADCSOC15CTL.bit.ACQPS = 6;  // S/H = ACQPS + 1

    EDIS;

    ////假定ePWM1时钟已在InitSysCtrl()中启用;

    //为ADC SOC1设置事件触发器(SOCA)


    EPwm1Regs.ETSEL.bit.SOCAEN = 1;//在组上启用SOC
    EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTRU_CMPA;//在计数增加时从CMPA中选择SOC
    EPwm1Regs.etps.bit.SOCAPRD =3;//每三次//事件生成脉冲

    //时基寄存器

    EPwm1Regs.TBPRD = 1000;       //设置定时器周期,PWM频率=1/周期
    EPwm1Regs.TBPHS.ALL = 0;        //时基相位寄存器
    EPwm1Regs.TBCTR = 0;          //时基计数器寄存器
    EPwm1Regs.TBCTL.bit.PRDLD = TB_immediate;        //立即设置负载
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;        //计数模式:用于非对称PWM
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;             //禁用相位加载
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

    //将阴影寄存器加载设置为零

    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADO;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//在CTR上加载=零
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;//在CTR上加载=零

    //设置比较值

     EPwm1Regs.CMPA.Halt.CMPA = 500;  //初始设置占空比50 %
    EPwm1Regs.CMBB =500;           //初始设置占空比50 %

    ////设置操作
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;           //将PWM2A设置为零
     EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;       //清除事件A上的PWM2A,运行计数
     EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;       //将PWM2B设置为零
     EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;          //在事件上清除PWM2B

    }

    __interrupt void ADC1_ISR(void)


    adc1Voltage_ChannelA0[ConversionCount]= adc1Result.ADCRESULT0;
    adc1Voltage_ChannelA2[ConversionCount]= Adc1Result.ADCRESULT2;

    adc1Voltage_ChannelA3[ConversionCount]= adc1Result.ADCRESULT3;
    adc1Voltage_ChannelA4[ConversionCount]= adc1Result.ADCRESULT4;

    adc1Voltage_ChannelA6[ConversionCount]= adc1Result.ADCRESULT6;
    adc1Voltage_ChannelA7[ConversionCount]= adc1Result.ADCRESULT7;

    adc1Voltage_ChannelB0[ConversionCount]= adc1Result.ADCRESULT8;
    adc1Voltage_ChannelB3[ConversionCount]= adc1Result.ADCRESULT11;

    adc1Voltage_ChannelB4[ConversionCount]= adc1Result.ADCRESULT12;
    adc1Voltage_ChannelB7[ConversionCount]= adc1Result.ADCRESULT15;

    IF (ConversionCount == 9)

    ConversionCount = 0;
    }
    Else ConversionCount++;

    adc1Regs.ADCINTFLGCLL.bit.ADCINT1 = 1;//清除ADCINT1标志重新初始化
    //用于下一个SOC
    PIECtrlRegs.PIEACK/ALL = PIEACK_Group1;//确认中断到PIE

    返回;
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Sandeep,

    对此延误深表歉意。 我无法重现此问题。
    我使用了此线程中提供的代码,并且能够读取所有ADC结果寄存器。 根据我的理解,您可以达到ADC ISR,但通道8-15的结果寄存器为0。 是这样吗?
    您能否提供有关您正在使用的主板的更多详细信息? 您是否已将ADC引脚连接到某些信号或它们是否浮动?

    谢谢,此致,
    Veena
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉,这实际上是我测试的错。 从协力控制卡到扩展坞总共有16个连接,ADC1A -6通道和ADC1B -2通道在A0上映射到扩展坞上ADC的A7引脚(J6连接器)也从ADC2A-6通道和ADC2B-2通道在B0到B7引脚(J7连接器)上映射 插接站上的ADC。

    我当时以为只有一个ADC1 16通道的ADC进入了坞站。因此我把信号应用到B0到B7上的错误引脚,将其视为ADC1B 8到15通道。因为命名,我感到困惑 在坞站上A0至A7和B0至B7。

    现在,在完成坞站和Concerto卡的示意图后,问题已解决。 感谢你的帮助。

    此致,
    Sandeep
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sandeep,

    很抱歉,我明白这可能会让人沮丧。 您在哪里找到了“扩展坞A0至A7和B0至B7的命名”? 我将尝试为Concerto controlCARD的其他用户更清楚地说明这一点。

    我很高兴您找到了解决方案,我们所做的假设可能导致最简单的事情最难找到。

    此致,
    科迪  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Cody:

    如我所述,您可以在坞站上找到ADC A0至A7和B0至B7连接。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sandeep,

    啊,好的! 您使用 的是180到100针DIMM适配器吗? 较新的180引脚版本的controlCARD坞站已修订此标签。

    我们无法更新DIMM 100坞站上的标签,因为它对于许多DIMM 100 controlCARD仍然是准确的。 不过,我会看到是否可以在文档中添加一些内容,以便更清楚地说明这一点。

    感谢您的反馈!
    科迪