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:
非常感谢宝贵建议