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.

[参考译文] LAUNCHXL-F28379D:TMS320F28379D

Guru**** 2527890 points
Other Parts Discussed in Thread: LAUNCHXL-F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1225624/launchxl-f28379d-tms320f28379d

器件型号:LAUNCHXL-F28379D

我正在使用 HIL 设置读取12个电压值、其中使用3个具有4个通道的 ADC (总共12个)、每个 ADC (A、B、C)都使用不同的 SOC (SOC0、SOC1、SOC2、SOC3)配置为读取电压值、但问题是每个通道的偏移值不同。 屏幕截图显示了输入电压为2伏时的12个读数、其中 ADC 读数为2.30至2.41伏、而它每1e-3变化一次、因为我每1e-3读取一次。 此外、如果我将 电压值从2伏更改为2.5伏或3伏、则偏移就不同了。 如何调整此 ADC 失调电压?  

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

    您好!  

    为了确认我的理解、您想更改 ADC 失调电压、因为您的 ADC 样本不准确? 这是可能的、但 F28379D 器件上 ADC 的典型偏移误差远低于300mV。 您使用什么作为 ADC 的基准电压? 此外、您是否会 按照 TRM 本节中所述同步触发 ADC?  

    此致、

    Ben Collier

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

    感谢您的答复。 我使用 MATLAB Simulink 连接到代码微控制器、但不使用 CCS。 MATLAB 本身生成代码、因为我对该代码不是很熟悉。 MATLAB 生成的代码显示、所有 ADC (A、B、C)都具有相同的触发器和 ACQPS 值、只是通道选择和 SOC 值不同。  

    什么是 ADC 的基准电压? 我刚刚读取12个外部信号、每个信号的电压范围为2.5V 至3.3V。

    void CONFIG_ADCA_SOC0 ()

     EALLOW;
     AdcaRegs.ADCSOC0CTL.bit.CHSEL = 2; /*将 SOC0通道选择设置为 ADCIN2*/
     AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 1;
     AdcaRegs.ADCSOC0CTL.bit.ACQPS = 14.0;
                    /*将 SOC0 S/H 窗口设置为15.0 ADC 时钟周期*/
     AdcaRegs.ADCINTSOCSEL1.bit.SOC0 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdcaRegs.ADCOFFTRIM.bit.OFFTRIM = AdcaRegs.ADCOFFTRIM.bit.OFFTRIM;/*设置偏移错误纠正值*/
     AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdcaRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*全部处于轮询模式 SOC 优先级*/
     EDIS;
    }

    void CONFIG_ADCA_SOC1 ()

     EALLOW;
     AdcaRegs.ADCSOC1CTL.bit.CHSEL = 3; /*将 SOC1通道选择设置为 ADCIN3*/
     AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 1;
     AdcaRegs.ADCSOC1CTL.bit.ACQPS = 14.0;
                    /*将 SOC1 S/H 窗口设置为15.0个 ADC 时钟周期*/
     AdcaRegs.ADCINTSOCSEL1.bit.SOC1 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdcaRegs.ADCOFFTRIM.bit.OFFTRIM = AdcaRegs.ADCOFFTRIM.bit.OFFTRIM;/*设置偏移错误纠正值*/
     AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdcaRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*全部处于轮询模式 SOC 优先级*/
     EDIS;
    }

    void CONFIG_ADCA_SOC2 ()

     EALLOW;
     AdcaRegs.ADCSOC2CTL.bit.CHSEL = 4; /*将 SOC2通道选择设置为 ADCIN4*/
     AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 1;
     AdcaRegs.ADCSOC2CTL.bit.ACQPS = 14.0;
                    /*将 SOC2 S/H 窗口设置为15.0个 ADC 时钟周期*/
     AdcaRegs.ADCINTSOCSEL1.bit.SOC2 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdcaRegs.ADCOFFTRIM.bit.OFFTRIM = AdcaRegs.ADCOFFTRIM.bit.OFFTRIM;/*设置偏移错误纠正值*/
     AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdcaRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*全部处于轮询模式 SOC 优先级*/
     EDIS;
    }

    void CONFIG_ADCA_SOC3 ()

     EALLOW;
     AdcaRegs.ADCSOC3CTL.bit.CHSEL = 5; /*将 SOC3通道选择设置为 ADCIN5*/
     AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = 1;
     AdcaRegs.ADCSOC3CTL.bit.ACQPS = 14.0;
                    /*将 SOC3 S/H 窗口设置为15.0个 ADC 时钟周期*/
     AdcaRegs.ADCINTSOCSEL1.bit.SOC3 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdcaRegs.ADCOFFTRIM.bit.OFFTRIM = AdcaRegs.ADCOFFTRIM.bit.OFFTRIM;/*设置偏移错误纠正值*/
     AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdcaRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*全部处于轮询模式 SOC 优先级*/
     EDIS;
    }

    void CONFIG_ADCB_SOC0 ()

     EALLOW;
     AdcbRegs.ADCSOC0CTL.bit.CHSEL = 2; /*将 SOC0通道选择设置为 ADCIN2*/
     AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 1;
     AdcbRegs.ADCSOC0CTL.bit.ACQPS = 14.0;
                    /*将 SOC0 S/H 窗口设置为15.0 ADC 时钟周期*/
     AdcbRegs.ADCINTSOCSEL1.bit.SOC0 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdcbRegs.ADCOFFTRIM.bit.OFFTRIM = AdcbRegs.ADCOFFTRIM.bit.OFFTRIM;//*设置偏移错误纠正值*/
     AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdcbRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*全部处于轮询模式 SOC 优先级*/
     EDIS;
    }

    void CONFIG_ADCB_SOC1 ()

     EALLOW;
     AdcbRegs.ADCSOC1CTL.bit.CHSEL = 3; /*将 SOC1通道选择设置为 ADCIN3*/
     AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 1;
     AdcbRegs.ADCSOC1CTL.bit.ACQPS = 14.0;
                    /*将 SOC1 S/H 窗口设置为15.0个 ADC 时钟周期*/
     AdcbRegs.ADCINTSOCSEL1.bit.SOC1 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdcbRegs.ADCOFFTRIM.bit.OFFTRIM = AdcbRegs.ADCOFFTRIM.bit.OFFTRIM;//*设置偏移错误纠正值*/
     AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdcbRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*全部处于轮询模式 SOC 优先级*/
     EDIS;
    }

    空 CONFIG_ADCB_SOC2 ()

     EALLOW;
     AdcbRegs.ADCSOC2CTL.bit.CHSEL = 4; /*将 SOC2通道选择设置为 ADCIN4*/
     AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = 1;
     AdcbRegs.ADCSOC2CTL.bit.ACQPS = 14.0;
                    /*将 SOC2 S/H 窗口设置为15.0个 ADC 时钟周期*/
     AdcbRegs.ADCINTSOCSEL1.bit.SOC2 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdcbRegs.ADCOFFTRIM.bit.OFFTRIM = AdcbRegs.ADCOFFTRIM.bit.OFFTRIM;//*设置偏移错误纠正值*/
     AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdcbRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*全部处于轮询模式 SOC 优先级*/
     EDIS;
    }

    空 CONFIG_ADCB_SOC3 ()

     EALLOW;
     AdcbRegs.ADCSOC3CTL.bit.CHSEL = 5; /*将 SOC3通道选择设置为 ADCIN5*/
     AdcbRegs.ADCSOC3CTL.bit.TRIGSEL = 1;
     AdcbRegs.ADCSOC3CTL.bit.ACQPS = 14.0;
                    /*将 SOC3 S/H 窗口设置为15.0个 ADC 时钟周期*/
     AdcbRegs.ADCINTSOCSEL1.bit.SOC3 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdcbRegs.ADCOFFTRIM.bit.OFFTRIM = AdcbRegs.ADCOFFTRIM.bit.OFFTRIM;//*设置偏移错误纠正值*/
     AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdcbRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*全部处于轮询模式 SOC 优先级*/
     EDIS;
    }

    void CONFIG_ADCC_SOC0 ()

     EALLOW;
     AdccRegs.ADCSOC0CTL.bit.CHSEL = 2; /*将 SOC0通道选择设置为 ADCIN2*/
     ADccRegs.ADCSOC0CTL.bit.TRIGSEL = 1;
     ADccRegs.ADCSOC0CTL.bit.ACQPS = 14.0;
                    /*将 SOC0 S/H 窗口设置为15.0 ADC 时钟周期*/
     AdccRegs.ADCINTSOCSEL1.bit.SOC0 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdccRegs.ADCOFFTRIM.bit.OFFTRIM = AdccRegs.ADCOFFTRIM.bit.OFFTRIM;/*设置偏移错误纠正值*/
     ADccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdccRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*均处于循环模式 SOC 优先级*/
     EDIS;
    }

    void CONFIG_ADCC_SOC1 ()

     EALLOW;
     AdccRegs.ADCSOC1CTL.bit.CHSEL = 3; /*将 SOC1通道选择设置为 ADCIN3*/
     ADccRegs.ADCSOC1CTL.bit.TRIGSEL = 1;
     AdccRegs.ADCSOC1CTL.bit.ACQPS = 14.0;
                    /*将 SOC1 S/H 窗口设置为15.0个 ADC 时钟周期*/
     AdccRegs.ADCINTSOCSEL1.bit.SOC1 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdccRegs.ADCOFFTRIM.bit.OFFTRIM = AdccRegs.ADCOFFTRIM.bit.OFFTRIM;/*设置偏移错误纠正值*/
     ADccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdccRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*均处于循环模式 SOC 优先级*/
     EDIS;
    }

    空 CONFIG_ADCC_SOC2 ()

     EALLOW;
     AdccRegs.ADCSOC2CTL.bit.CHSEL = 4; /*将 SOC2通道选择设置为 ADCIN4*/
     ADccRegs.ADCSOC2CTL.bit.TRIGSEL = 1;
     AdccRegs.ADCSOC2CTL.bit.ACQPS = 14.0;
                    /*将 SOC2 S/H 窗口设置为15.0个 ADC 时钟周期*/
     AdccRegs.ADCINTSOCSEL1.bit.SOC2 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdccRegs.ADCOFFTRIM.bit.OFFTRIM = AdccRegs.ADCOFFTRIM.bit.OFFTRIM;/*设置偏移错误纠正值*/
     ADccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdccRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*均处于循环模式 SOC 优先级*/
     EDIS;
    }

    空 CONFIG_ADCC_SOC3 ()

     EALLOW;
     AdccRegs.ADCSOC3CTL.bit.CHSEL = 5; /*将 SOC3通道选择设置为 ADCIN5*/
     AdccRegs.ADCSOC3CTL.bit.TRIGSEL = 1;
     AdccRegs.ADCSOC3CTL.bit.ACQPS = 14.0;
                    /*将 SOC3 S/H 窗口设置为15.0个 ADC 时钟周期*/
     AdccRegs.ADCINTSOCSEL1.bit.SOC3 = 0;
                      /* SOCx 无 ADCINT 中断触发选择。*/
     AdccRegs.ADCOFFTRIM.bit.OFFTRIM = AdccRegs.ADCOFFTRIM.bit.OFFTRIM;/*设置偏移错误纠正值*/
     ADccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                    /*延迟中断脉冲触发 AdcResults lock*/
     AdccRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;/*均处于循环模式 SOC 优先级*/
     EDIS;
    }

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

    您好!

    感谢您确认您是  同步触发 ADC。 您使用的是 TI 电路板还是定制电路板? ADC 的基准电压提供给器件上的这些引脚(请参阅下面的数据表屏幕截图)。 还有 VREFLO 引脚、它们通常接地。  

    由于 ADC 输出代码的含义由基准电压决定、如下面的 TRM 屏幕截图所示、因此了解您使用的电压基准很重要。   

    此致、

    Ben Collier

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

    我使用的  是 TI 电路板 LaunchXL-F28379D。  具有电压范围(0至3.3伏)的 USB 端口直接连接到 PC、该端口提供5伏电压、然后根据需要在内部将电压进一步分为3.3伏。 由于 VREFLO< ADCINy < VREFHI ,这就是 为什么  ADC 块输出乘以 增益(3.3/4095)得到实际的电压 值。  

    我的主要问题是 ADC 失调电压、我 从 TI 板引脚读取了1或2伏的固定电压、但 MATLAB Simulink 显示随机失调电压? 这是使用 USB 电缆将 TI 电路板连接到 MATLAB 吗?  

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

    它是3.0V。 在 LAUNCHXL-F28379D 的原理图中可以看到一个电压基准 IC REF5030IDGKT。

    我建议将模型中的所有增益块改为3.0/4095。

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

    Kier、

    感谢您的意见。 我同意、Adnan 需要将增益更改为(3.0/4095)。

    Adnan、

    请在进行此更改后告诉我您的问题是否仍然存在。

    此致、

    Ben Collier

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

    谢谢。 我将电压基准更改为3伏、从而减少了偏移误差。 我发现 偏移误差不是由 ADC 造成的、而是由输入信号造成的、其变化大约为50mV。 我可能必须使用滤波器来降低信号噪声。  

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

    好的、

    我很高兴你似乎找到了解决你的问题的办法。 如果您有其他问题、请重新打开此主题帖、如果有新问题、请启动新主题帖。

    此致、

    Ben Collier