TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049C: ADC数值跳动

Part Number:TMS320F280049COther Parts Discussed in Thread:LAUNCHXL-F280049C,

使用官方的LAUNCHXL-F280049C开发板,跑adc_ex1_soc_software例程验证ADC采样的问题顶,我在while(1)循环中把最后的ESTOP0屏蔽,然后在线调试,观察myADC0Result0的数值变化,给开发板的A0通道接入了信号源,给1V,发现转换结果在1200-1300之间跳变,数据很不准确,想问下是什么原因?

cuizhuangping:

//#############################################################################
//
// FILE:adc_ex1_soc_software.c
//
// TITLE:ADC Software Triggering
//
//! \addtogroup driver_example_list
//! <h1>ADC Software Triggering</h1>
//!
//! This example converts some voltages on ADCA and ADCC based on a software
//! trigger.
//!
//! The ADCC will not convert until ADCA is complete, so the ADCs will not run
//! asynchronously. However, this is much less efficient than allowing the ADCs
//! to convert synchronously in parallel (for example, by using an ePWM//! trigger).
//!
//! \b External \b Connections \n
//!- A0, A1, C2, and C3 should be connected to signals to convert
//!
//! \b Watch \b Variables \n
//! - \b myADC0Result0 - Digital representation of the voltage on pin A0
//! - \b myADC0Result1 - Digital representation of the voltage on pin A1
//! - \b myADC1Result0 - Digital representation of the voltage on pin C2
//! - \b myADC1Result1 - Digital representation of the voltage on pin C3
//!
//
//#############################################################################
//
//
// $Copyright:
// Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com/
//
// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions// are met:
////Redistributions of source code must retain the above copyright//notice, this list of conditions and the following disclaimer.
////Redistributions in binary form must reproduce the above copyright
//notice, this list of conditions and the following disclaimer in the//documentation and/or other materials provided with the//distribution.
////Neither the name of Texas Instruments Incorporated nor the names of
//its contributors may be used to endorse or promote products derived
//from this software without specific prior written permission.
//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//#############################################################################
////
// Included Files
//
#include "driverlib.h"
#include "device.h"
#include "board.h"//
// Globals
//
uint16_t myADC0Result0;
uint16_t myADC0Result1;
uint16_t myADC1Result0;
uint16_t myADC1Result1;//
// Main
//
void main(void)
{//// Initialize device clock and peripherals//Device_init();//// Disable pin locks and enable internal pullups.//Device_initGPIO();//// Initialize PIE and clear PIE registers. Disables CPU interrupts.//Interrupt_initModule();//// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).//Interrupt_initVectorTable();//// Set up ADCs, initializing the SOCs to be triggered by software//Board_init();//// Enable Global Interrupt (INTM) and realtime interrupt (DBGM)//EINT;ERTM;//// Loop indefinitely//while(1){//// Convert, wait for completion, and store results//ADC_forceMultipleSOC(myADC0_BASE, (ADC_FORCE_SOC0 | ADC_FORCE_SOC1));//// Wait for ADCA to complete, then acknowledge flag//while(ADC_getInterruptStatus(myADC0_BASE, ADC_INT_NUMBER1) == false){}ADC_clearInterruptStatus(myADC0_BASE, ADC_INT_NUMBER1);ADC_forceMultipleSOC(myADC1_BASE, (ADC_FORCE_SOC0 | ADC_FORCE_SOC1));//// Wait for ADCC to complete, then acknowledge flag//while(ADC_getInterruptStatus(myADC1_BASE, ADC_INT_NUMBER1) == false){}ADC_clearInterruptStatus(myADC1_BASE, ADC_INT_NUMBER1);//// Store results//myADC0Result0 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);myADC0Result1 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER1);myADC1Result0 = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER0);myADC1Result1 = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER1);DEVICE_DELAY_US(100);//// Software breakpoint. At this point, conversion results are stored in// myADC0Result0, myADC0Result1, myADC1Result0, and myADC1Result1.//// Hit run again to get updated conversions.////ESTOP0;}
}

,

Daniel:

您好

这里有几个可能的原因和解决方案供你参考:

‌参考电压和分辨率问题‌:

F280049C的ADC模块通常有一个固定的参考电压(如Vref),并且具有固定的分辨率(如12位或16位)。你需要确认你的ADC配置是否正确设置了参考电压和分辨率。
如果参考电压是3.3V(或你实际使用的电压值),那么1V的输入应该对应一个特定的ADC计数值。例如,如果分辨率是12位,那么理论上1V应该对应大约1V / 3.3V * 4096(假设参考电压为3.3V且分辨率为12位)的计数值,即约1241。

‌信号源和输入通道问题‌:

确认你的信号源是否稳定且准确地输出了1V的电压。
检查开发板上的A0通道是否连接正确,没有短路或断路的情况。

‌ADC校准和偏移‌:

ADC模块可能需要校准来消除偏移和增益误差。检查你的代码中是否包含了ADC校准的步骤。
如果没有,你可以尝试进行ADC校准,看看是否能改善采样结果的准确性。

‌噪声和干扰‌:

外部噪声或电源波动可能会干扰ADC的采样结果。尝试使用屏蔽电缆或增加滤波电路来减少噪声的影响。
检查开发板的电源是否稳定,以及是否有其他潜在的干扰源。

‌代码和配置问题‌:

仔细检查你的代码,确保ADC的配置(如采样率、触发源等)是正确的。
确认你的代码中没有其他逻辑错误或配置错误,这些错误可能会影响ADC的采样结果。

为了更具体地诊断问题,你可以尝试以下步骤:

使用示波器或万用表检查信号源的输出电压是否稳定且准确。
在开发板上使用其他ADC通道进行采样,看看是否仍然存在同样的问题。
尝试使用不同的参考电压设置,看看采样结果是否有所变化。
检查并更新你的ADC校准参数。

,

cuizhuangping:

非常感谢您的解答,我这边情况是这样的,设计了一款基于TMS320F280049C的电源板,ADC这边数值跳动很大,大约波动有100左右,相对于12位ADC波动达到了2.5%,所以就回过头去看官方的开发板,发现用开发板跑官方例程,用信号源直接给信号的形式波动也比较大,今天又试了将模拟输入引脚短接到开发板的地和VREFHI,波动会小一点,但是也达到了10左右,相当于12位ad只能做到9位左右稳定度,想问下,这个片内的AD理论上能做到多高的稳定度,先不谈精度了?

,

Daniel:

您好

1. 电源稳定性

‌影响‌:电源噪声会直接影响ADC的采样精度和稳定度。
‌优化方法‌:使用高质量的电源滤波器,确保电源线路的稳定和干净。同时,将ADC的模拟电源(VDDA)和模拟地(VSSA)分别连接到单独的、干净的电源和地,以减少数字电路对模拟电路的干扰。

2. 参考电压稳定性

‌影响‌:参考电压的波动会导致ADC转换结果的偏移和不稳定。
‌优化方法‌:使用稳定的参考电压源,并确保参考电压线路的稳定和干净。如果可能,可以使用外部精密参考电压源来提高稳定度。

3. 输入信号质量

‌影响‌:输入信号的噪声和干扰会影响ADC的采样结果。
‌优化方法‌:在ADC输入端添加适当的滤波电路,以减少高频噪声的干扰。同时,确保输入信号在ADC的输入范围内,并避免过压或欠压情况。

4. ADC配置和校准

‌影响‌:ADC的配置参数(如采样速度、分辨率、输入衰减等)和校准状态会影响其稳定度。
‌优化方法‌:根据实际应用需求,合理配置ADC的参数。同时,定期进行ADC校准,以消除内部电容器组变化带来的误差。校准过程中,需要确保ADC处于断电状态,并按照校准时序图进行操作。

5. 时钟稳定性

‌影响‌:ADC时钟的稳定性和精度会影响其采样结果的准确性和稳定度。
‌优化方法‌:为ADC提供稳定且精确的时钟源。可以使用专用的可编程预分频器来调整ADC时钟的频率,以满足实际应用需求。

6. 环境和布局因素

‌影响‌:环境温度、湿度以及PCB布局和布线等因素也会对ADC的稳定度产生影响。
‌优化方法‌:将ADC模块放置在温度稳定且湿度适中的环境中。同时,在PCB布局时,确保ADC相关的信号线路尽可能短且远离高噪声区域。此外,还可以采取适当的屏蔽措施来减少外部干扰。

这是影响单片机内部ADC稳定的相关因素,建议您通过上述建议优化。

,

cuizhuangping:

非常感谢宝贵建议

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049C: ADC数值跳动
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1