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.

[参考译文] TMS320F28055:需要代码来读取模拟通道 B

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1182544/tms320f28055-need-code-to-read-analog-channel-b

器件型号:TMS320F28055

您好!

在解决方案资源管理器中、我有一个模拟通道读取示例。  同样、我无法读取模拟通道 B 数据。  

您能否提供 模拟 B 通道读取代码的配置代码或示例链接? 我对确切配置有点困惑。

我将逐个读取所有 ADC INB 通道数据。

此致-

Sudip

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

    您好、SDIP、

    我使用 example_2805xexc以及 相应 的寄存器中的 example_2805xexcands 项目来查看输入、并且似乎在相应的寄存器中选择了 B 通道8-15。  您是否尝试修改此项目以使用它?

    此致、

    Omer Amir

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

    您好   Omer Amir、

    非常感谢您的快速响应。

    示例:Example_2805xAdis c

    实际上、我需要 逐个读取 B 通道输入中的所有 ADC。  对于 INA/INB 选择、哪些寄存器设置?

    您可以提供 exapme 代码吗?

    此致-

    Sudip

    EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
    PieVectTable.ADCINT1 =&ADC_ISR;
    EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的

    //
    //步骤4. 初始化所有器件外设:
    //
    InitAdc ();//对于此示例,初始化 ADC
    AdcOffsetSelfCal();

    //
    //步骤5. 特定于用户的代码、启用_interrupts:
    //
    //在 PIE 中启用 ADCINT1
    //
    PieCtrlRegs.PIEIER1.bit.INTx1 = 1;//在 PIE 中启用 INT 1.1
    IER |= M_INT1;//启用 CPU 中断1
    EINT;//启用全局_中断 INTM
    ERTM;//启用全局实时__interrupt DBGM

    LoopCount = 0;
    ConversionCount = 0;

    //
    //配置 ADC
    //注意:
    //通道 ADCINA4将被双采样以先解决 ADC 问题
    //修订版0芯片勘误表的样例问题。
    //由于循环,SOC0首先转换,然后是 SOC1,最后是 SOC2
    //
    EALLOW;
    AdcRegs.ADCCTL1.bit.INTPULSEPOS= 1;//ADCINT1在 AdcResults 锁存后跳闸
    AdcRegs.INTSEL1N2.bit.INT1E = 1;//启用 ADCINT1
    AdcRegs.INTSEL1N2.bit.INT1CONT = 0;//禁用 ADCINT1连续模式
    AdcRegs.INTSEL1N2.bit.INT1SEL = 2;//设置 EOC2以触发 ADCINT1
    AdcRegs.ADCSOC0CTL.bit.CHSEL = 4;//将 SOC0通道选择设置为 ADCINA4
    AdcRegs.ADCSOC1CTL.bit.CHSEL = 4;//将 SOC1通道选择设置为 ADCINA4
    AdcRegs.ADCSOC2CTL.bit.CHSEL = 2;//将 SOC2通道选择设置为 ADCINA2
    AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5;//设置 EPWM1A 上的 SOC0启动触发器
    AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5;//设置 EPWM1A 上的 SOC1启动触发器
    AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 5;//设置 EPWM1A 上的 SOC2启动触发
    AdcRegs.ADCSOC0CTL.bit.ACQPS = 9;//SOC0 S/H 窗口= 10 (9+1)个时钟周期
    AdcRegs.ADCSOC1CTL.bit.ACQPS = 9;//SOC0 S/H 窗口= 10 (9+1)个时钟周期
    AdcRegs.ADCSOC2CTL.bit.ACQPS = 9;//SOC0 S/H 窗口= 10 (9+1)个时钟周期
    EDIS;

    //
    //假设 ePWM1时钟已在 InitSysCtrl()中启用;
    //
    EPwm1Regs.ETSEL.bit.SOCAEN = 1;//启用组上的 SOC
    EPwm1Regs.ETSEL.bit.SOCASEL = 4;//从 CPMA 中选择 SOC、以进行递增计数
    EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在发生第一个事件时生成脉冲
    EPwm1Regs.CMPA.half.CMPA = 0x0080;//设置比较值
    EPwm1Regs.TBPRD = 0xFFFF;//为 ePWM1设置周期
    EPwm1Regs.TBCTL.bit.CTRMODE = 0;//向上计数并启动

    //
    //等待 ADC _interrupt
    //
    for (;;)

    LoopCount++;

    _interrupt void ADC_ISR (void)

    //
    //将 ADCRESULT0作为针对 rev0的第1个样本勘误表的权变措施的一部分丢弃
    //
    Voltage1[ConversionCount]= AdcResult.ADCRESULT1;
    Voltage2[ConversionCount]= AdcResult.ADCRESULT2;

    //
    //如果记录了10次转换,则重新开始
    //
    if (ConversionCount = 9)

    ConversionCount = 0;

    其他

    ConversionCount++;

    //
    //清除 ADCINT1标志为下一个 SOC 重新初始化
    //
    AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
    PieCtrlRegs.PIEACK.all = PIEACK_Group1;//确认__interrupt 到 PIE

    返回;

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

     您好 Omer Amir、  

    非常感谢您的宝贵回复。 可能是我丢失了一些东西。  

    我将重试。

    此致-

    Sudip

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

    您好、SDIP、

    [引用 userid="452796" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1182544/tms320f28055-need-code-to-read-analogue-channel-b/4453940 #4453940"]

    实际上、我需要 逐个读取 B 通道输入中的所有 ADC。  对于 INA/INB 选择、哪些寄存器设置?

    您可以提供 exapme 代码吗?

    [/报价]

    这里的代码对于这个器件来说已经足够了、你只需要更改你在 CHSEL 和其他地方使用 B 通道时使用的值、使用的位字段应该是一样的。 如果要读取通道 B 上的所有输入、只需配置所有16个 SOC (可以复制用于配置 SOC 的现有代码、只需更改 SOC 编号、以便包含0到15)。 您可以查看参考手册中的"ADC SOC0-SOC15控制寄存器(ADCSOCxCTL)"部分、了解 SOC 控制寄存器中需要更改的内容。 您可以决定要使用哪些触发器、或者是否要执行软件触发器。

    此致、

    Omer Amir

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

    您好 Omer Amir、

    非常感谢您的回复。  我根据您的信息进行了实验。  现在、我能够读取通道 B

    但有一个问题。

    我注意到 B1、B4、B6、B7无法读取。
    对于+VCC=4095计数、0V=0计数、休息 B 通道。
    所述通道+/-相同的值~519计数。

    您能告诉我这个问题的原因吗? 配置如下所示:

    此致-
    Sudip

    MAIN ()

    //////////////////////////////////////////////////////////////////////////////////////
    InitSysCtrl();
    Dint;
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();

    //////////////////////////////// ///////////////////////////////////////////////////////////
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
    EDIS;

    EALLOW;
    AdcRegs.ADCCTL1.bit.ADCBGPWD = 1;//电源 ADC BG
    AdcRegs.ADCCTL1.bit.ADCREFPWD = 1;//电源基准
    AdcRegs.ADCCTL1.bit.ADCPWDN = 1;//电源 ADC
    AdcRegs.ADCCTL1.bit.ADCENABLE = 1;//启用 ADC
    AdcRegs.ADCCTL1.bit.ADCREFSEL = 0;//选择内部 BG
    EDIS;
    DELAY_US (1000);
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    PieCtrlRegs.PIEIER1.bit.INTx1 = 1;//在 PIE 中启用 INT 1.1
    IER |= M_INT1;//启用 CPU 中断1
    EINT;//启用全局_中断 INTM
    ERTM;//启用全局实时__interrupt DBGM

    EALLOW;
    AdcRegs.ADCSOC0CTL.bit.CHSEL = 15;//值9、12、14、15无响应
    AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5;//设置 EPWM1A 上的 SOC0启动触发器
    AdcRegs.ADCSOC0CTL.bit.ACQPS = 9;//SOC0 S/H 窗口= 10 (9+1)个时钟周期
    EDIS;

    //
    EPwm1Regs.ETSEL.bit.SOCAEN = 1;//启用组上的 SOC
    EPwm1Regs.ETSEL.bit.SOCASEL = 4;//从 CPMA 中选择 SOC、以进行递增计数
    EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在发生第一个事件时生成脉冲
    EPwm1Regs.CMPA.half.CMPA = 0x0080;//设置比较值
    EPwm1Regs.TBPRD = 0xFFFF;//为 ePWM1设置周期
    EPwm1Regs.TBCTL.bit.CTRMODE = 0;//向上计数并启动

    for (;;)

    unsigned int r0 = AdcResult.ADCRESULT0;

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

    您好、SDIP、

    我注意到您没有 AdcOffsetSelfCal()函数来重新校准 ADC 零偏移误差、这是有原因的吗? 您还能解释一下您的硬件设置吗? 您是否正在使用 controlCARD?

    此致、

    Omer Amir