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.

[参考译文] TMS320F28386D:配置 ADCA1和 ADCA2的结果错误

Guru**** 2448780 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1340077/tms320f28386d-configure-adca1-and-adca2-getting-wrong-reasults

器件型号:TMS320F28386D

您好!

我配置 ADCA1和 ADCA2、问题是  

如果我只为 ADCA1提供输入、那么输入会自动进入 ADCA2、而不会为 ADCA2提供输入。 
如果我配置 ADCA1和 ADCB1比没有问题它的工作完美.

我通过 CPU 计时器为 ADC 的 soc 提供触发
下面是我的配置。
void myadca_init (){
//
// ADC 初始化:写入 ADC 配置并为 ADC 上电
//
//配置模数转换器模块预分频器。
//
ADC_setPrescaler (myADCA_BASE、ADC_CLK_DIV_8_0);
//
//配置模数转换器分辨率和信号模式。
//
ADC_setMode (myADCA_BASE、ADC_Resolution_12bit、ADC_MODE_single_ended);
//
//设置转换结束脉冲的计时
//
ADC_setInterruptPulseMode (myADCA_BASE、ADC_PULSE_END_OF_CONV);
//
//为模数转换器内核加电。
//
ADC_enableConverter (myADCA_BASE);
//
//延迟1ms 以允许 ADC 时间上电
//
device_delay_us (500);
//
// SOC 配置:设置 ADC EPWM 通道和触发器设置
//
//禁用 SOC 突发模式。
//
ADC_disableBurstMode (myADCA_BASE);
//
//设置 SOC 的优先级模式。
//
ADC_setSOCPriPriority (myADCA_BASE、ADC_PRI_ALL_ROUND_Robin);
//
//转换开始2配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
/// SOC 编号: 2
//触发条件:ADC_TRIGGER_CPU1_TINT0
//通道:ADC_CH_ADCIN2
//示例窗口:100个 SYSCLK 周期
//中断触发:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (myADCA_BASE、ADC_SOC_number2、ADC_TRIGGER_CPU1_TINT0、ADC_CH_ADCIN2100u);
ADC_setInterruptSOCTrigger (myADCA_BASE、ADC_SOC_number2、ADC_INT_SOC_TRIGGER_NONE);
//
//转换开始5配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
/// SOC 编号: 5
//触发条件:ADC_TRIGGER_CPU1_TINT0
//通道:ADC_CH_ADCIN5
//示例窗口:100个 SYSCLK 周期
//中断触发:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (myADCA_BASE、ADC_SOC_Number5、ADC_TRIGGER_CPU1_TINT0、ADC_CH_ADCIN5100u);
ADC_setInterruptSOCTrigger (myADCA_BASE、ADC_SOC_Number5、ADC_INT_SOC_TRIGGER_NONE);
//
// ADC 中断1配置
//来源:adc_soc_number2
//中断源:已启用
//连续模式:已禁用
//
//
ADC_setInterruptSource (myADCA_BASE、ADC_INT_number1、ADC_SOC_number2);
ADC_clearInterruptStatus (myADCA_BASE、ADC_INT_number1);
ADC_disableContinuousMode (myADCA_BASE、ADC_INT_number1);
ADC_enableInterrupt (myADCA_BASE、ADC_INT_number1);
//
// ADC 中断2配置
//来源:ADC_SOC_Number5
//中断源:已启用
//连续模式:已禁用
//
//
ADC_setInterruptSource (myADCA_BASE、ADC_INT_number2、ADC_SOC_Number5);
ADC_clearInterruptStatus (myADCA_BASE、ADC_INT_number2);
ADC_disableContinuousMode (myADCA_BASE、ADC_INT_number2);
ADC_enableInterrupt (myADCA_BASE、ADC_INT_number2);


void INT_myADCA_2_ISR ()
{
静态双 AdcBufPtr1;
AdcBufPtr1 = ADC_readResult (myADCA_Result_BASE、myADCA_SOC5);
adcAResult1=AdcBufPtr1*(3.3/4095);

INTERRUPT_clearACKGROUP (INT_myADCA_2_INTERRUPT_ACK_GROUP);
ADC_clearInterruptStatus (myADCA_BASE、ADC_INT_number2);



以下是我在不向 ADCA2提供输入时的 ADC 结果、但0.72是作为 ADCA2的结果


请帮助。

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

    尊敬的 Sudhir:

    您能解释一下"不为 ADCA2提供输入"的意思吗?  你让它保持悬空吗?  如果您没有为 ADCA2提供输入并读取电压、您是否可以将电压表放在该 ADCA2上?

    谢谢。

    约瑟夫

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

    您好,Joseph

    我已经配置了 ADCA1和 ADCA2、我只在 ADCA1上提供输入并将 ADCA2保持为悬空。 
    当我将电压表放在 ADCA2上时、它显示为0.72V (与在 ADC 结果寄存器中反映的值相同)。

    然而、悬空 ADCB1不存在此错误、即使在配置后仍显示为0.00。

    谢谢。

    苏迪尔

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

    尊敬的 Sudhir:

    很抱歉回复延迟。   如果您参考数据表上的 ADC 输入模型(图7-31)、通过关闭开关、采样保持电容器(Ch)将充电至 ADC 输入引脚上配置的电平、该电平在发生转换触发时(在您的 CPU 计时器中)就会发生。  此开关将在 ACQPS 指定的持续时间内闭合。  这里正在发生的情况是、当您将电压表放在 ADCA2上时、只要 CPU 计时器发生触发、存储在采样电容器 Ch 中先前 COS/通道中的残留电荷就会流出引脚。

    此致、

    约瑟夫

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

    感谢 Joseph Casuga