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.

[参考译文] CCS/EK-TM4C123GXL:通过 ADC 转换器读取电压值

Guru**** 2473270 points
Other Parts Discussed in Thread: EK-TM4C123GXL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/681957/ccs-ek-tm4c123gxl-reading-voltage-values-by-adc-converter

器件型号:EK-TM4C123GXL

工具/软件:Code Composer Studio

下午好!

我想知道我的代码中哪里有故障、因为我可以运行 ADC 转换器并读取 vaues、但这些值不正确。 我从"TM4C123G_LaunchPad_Workshop_Workbook"获取信息、并编辑了示例代码 示例。 我必须读取 PD1 (AIN6)形式的值。 当我 测量1、65V (3、3V/2)时、我会在调试窗口中看到(我使用选项"Add watch expression..." 和带有"刷新所有窗口"的断点)值~0、43 (变量"wynik")、变量"ui32TempAvg"的值~1763。 当我将导线连接到 GND 时,我看到0,所以仅测量 计算是不正确的?
我使用 的是 EK-TM4C123GXL 板。

(抱歉我的英语、但 这不是我的母语、我只是在学习)

谢谢。


这是我的代码:

#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/sysctl.h"
#include "driverlib/adc.h"

float wynik;

int main (空)

uint32_t ui32ADC0Value[4];
volatile uint32_t ui32TempAvg;
volatile uint32_t ui32TempValueC;
volatile uint32_t ui32TempValueF;


SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);

SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);

ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_PROCESSOR、0);

ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH6);
ADCSequenceStepConfigure (ADC0_BASE、1、1、ADC_CTL_CH6);
ADCSequenceStepConfigure (ADC0_BASE、1、2、ADC_CTL_CH6);
ADCSequenceStepConfigure (ADC0_BASE、1、3、ADC_CTL_CH6|ADC_CTL_IE|ADC_CTL_END);

ADCSequenceEnable (ADC0_BASE、1);
while (1)

ADCIntClear (ADC0_BASE、1);
ADCProcessorTrigger (ADC0_BASE、1);
while (!ADCIntStatus (ADC0_BASE、1、false))
{}
ADCSequenceDataGet (ADC0_BASE、1、ui32ADC0Value);

ui32TempAvg =((ui32ADC0Value[0]+ ui32ADC0Value[1]+ ui32ADC0Value[2]+ ui32ADC0Value[3]+ 2)/4);
wynik =((float) ui32TempAvg / 4096);


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、Pawel、
    欢迎来到论坛。
    在车间中、ADC 配置为测量内部温度传感器。 您的代码中读取的是一个简单的电压。 将读数转换为温度的公式毫无意义。 存储在数组 ui32ADC0Value 中的值是多少? 如果 AIN6上的电压为 VDDA 的1/2、则电压应约为2048 (0x0800)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢先生的帮助。 Bob。 我使用万用表测量电压(我使用分压器、因此兆欧电阻器不精确)、并获得1、55V 电压、不是1、65V 电压。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想所发生的情况是、与采样时间相比、您的源阻抗较大。 我注意到、每次连续转换都接近理想的2048。 ADC 内部有一个在采样时间内充电的电容器。 如果用于创建分压器的电阻较大、则在转换完成之前、电容器不会充满电。 在调用 ADCSequenceConfigure 之前添加此行,尝试配置时钟速率。

    ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PIOSC | ADC_CLOCK_RATE_Eighth、1); 

    您用于创建分压器的电阻器的值是多少? 您可能需要使用较小的电阻器来获得精确的测量结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 user="Bob Crosby"]ADCClockConfigSet (ADC0_BASE、ADC_CClock_SRC_PIOSC | ADC_CClock_RATE_八分之一、1);[/引用] 

    如果我使用此代码片段、我的程序将失败。 我无法读取任何变量。

    [引用 user="Bob Crosby"]您用来创建分频器的电阻器的值是多少?
    我将使用两个电阻各为100k 的电阻器、但这只是测试电路、因此不必精确。

    我更改代码中的一行:

    wynik =(((float) ui32TempAvg*3.3)/4096);

    我在调试窗口中看到1、42V、但正确的值是1、55V...

    我有一个问题。 为什么我在   "ui32ADC0Value"表 中重新获得4个非常不同的测量值(1540、1739、1855、1919)?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您收到了4个值、因为您使用四个步骤配置了该序列。 每个步骤都是在 AIN6上执行转换。

    尝试使用较小的电阻器、如2K 到5K 范围。 我想您将看到一个更接近1.55V 的值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,我试了一下,谢谢:)

    我知道为什么我收到4个值、但我不明白为什么这些值不相似。 从1540到1919年、几乎有400个单元的差异。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于高源电阻、内部电容器在第一次转换时未能完全充电至1.55V。 在第二次转换期间、它会变得越来越近。 每次转换尝试都允许电容器充电更多。 如果转换了串联中处于不同电压的不同通道、则会改变电容器上的电荷并影响结果。 底线是您必须具有足够低的源阻抗、以便内部电容器电压在为采样转换指定的时间内与源电压进行均衡。 在本例中为250nS。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的! 你是对的。 我更改了两个1k 上的电阻器、并看到1、65V
    非常感谢:)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    "具有"刷新所有窗口"的断点)值~0、43 (变量"wynik")、变量"ui32TempAvg"的值~1763。 当我将导线连接到 GND 时、我看到0、"

    简单:您期望什么值?您现在得到什么值?

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

    **喜欢**

    [引用 user="Bob Crosby"]由于高源电阻、内部电容器在第一次转换时未能充满电至1.55V。 在第二次转换期间、它会变得越来越近。 每次转换尝试都允许电容器充电更多。[/quot]

    现在有两个"高质量"写-每个写文件都详细说明需要 (在某种程度上)将"外部源阻抗"与 MCU ADC 输入的"外部源阻抗"匹配。

    添加至(从不执行列表... 在" 将源与 ADC 的输入阻抗匹配"中添加"更强、更强的方向"以及"类似"的恢复)。

    这种阻抗不匹配在 "此处" (以及其他 MCU 论坛)无界限的规律性情况下发生-这种"强调得当的指南"证明缺失。   (此类"无效证明"-永远不会结束的客户"错过了"(但未得到完美传达)要求...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题已解决。 我必须更改电阻器值和一行代码。 我在调试窗口中看到的结果与万用表相同。