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.

[参考译文] TMS570LS3137:TMS570LS3137模拟引脚可读为数字

Guru**** 2535750 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1266024/tms570ls3137-tms570ls3137-analog-pin-read-as-digital

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

大家好!

我们正在使用 TMS570开发应用。
我想以数字方式读取 AD1[15]引脚、即逻辑高电平或逻辑低电平。 当我启动 ADC 时、输出值并不总是一致。
具体情况如下:
我使用 Halcogen 从组1选择 AD1[15]引脚作为启用。
当我启动 ADC 时、adcData_t 的值为101。
但是、例如、将 AD1[8]引脚连接到3V3时,它将变成158。 然而,AD1[8]没有通过 halcogen 启用。
如何以数字方式只读取相关模拟引脚上的数据?

感谢您的帮助

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

    您好、Ali、

    首先、测量出问题:

    但是,例如,当 AD1[8]引脚连接到3V3时,它变成了158。 [/报价]

    您可以看到、ADC 可以在8位、10位或12位分辨率下运行、这意味着如果您在8位分辨率、3.3V 基准电压下运行 ADC、那么当您将3.3V 连接到 ADC 引脚时、您应该得到0xFF (255)值。

    或者、如果您以10位分辨率和3.3V 基准电压运行 ADC、那么如果您连接的是3.3V 输入、则应获得0x3FF (1023)值。

    或者、如果您以12位分辨率和3.3V 基准电压运行 ADC、那么、如果您连接的是3.3V 输入、那么您应该获得0xFFF (4095)值。

    例如、您可以在下面的 pic 中看到、当我以12位分辨率、3.3V 基准电压和3.3V 输入电压操作 ADC 时。

    请确保您设置正确。

    我想以数字方式读取 AD1[15]引脚,即逻辑高电平或逻辑低电平。

    您不能直接以数字方式操作模拟输入、但可以执行一项操作:

    实际上、数字输入引脚的工作方式将如下所示:

    如果输入电压介于0到0.8V 之间、则控制器会将输入视为逻辑低电平。

    或者、如果输入处于2到3.3V 之间、则控制器会将输入视为逻辑高电平。

    并且如果电压介于(0.8V 至2V)之间、则无法预测。 如果您希望模拟输入作为数字输入运行、那么在读取模拟输入值之后、再转换其等效电压并将等效电压与我提到的上述限值进行比较、根据此范围、您可以将输入视为逻辑高电平或逻辑低电平。

    示例:

    如果我以12位分辨率运行 ADC、那么如果我得到 ADC 值为4000 (0xFA0)、则根据下面的公式、其等效模拟电压将为3.22V

    模拟电压=(3.3 / 4095)* Analog_Value

    因为我的输入电压为3.22、高于2V、所以我会将其视为代码中的逻辑高电平并执行必要操作。

    --

    谢谢。此致、
    Jagadish。

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

    您好!

    感谢您的答复。 但是、

    我了解 ADC 分辨率与 ADC 分辨率之间的关系。 我期望相应的值、但其他引脚中的变化会影响 ADC 数据。
    首先、我想确保:
    我们使用以下命令从 ADC 引脚读取:
    adcEnableNotification (adcREG1、adcGROUP1);
    adcStartConversion (adcREG1、adcGROUP1);
    while (!adcIsConversionComplete (adcREG1, adcGROUP1);
    adcStopConversion (adcREG1、adcGROUP1);

    创建了用于读取传入数据 adcData_t 数据的变量;
    value =(uint16_t) adcGetData (adcREG1、adcGROUP1、&DATA);
    如果目前情况合适的话,我想提出以下问题。 具体而言、我将如何在 ADC 引脚15上获取数据。
    因为我看到这里的值会根据其他输入而变化。

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

    您好、Ali、

    以下是 LS3137的一个工作示例、供您参考。

    请将该代码与您的代码进行比较。

    e2e.ti.com/.../ADC_5F00_TEST_5F00_LS3137.zip

    --

    谢谢。此致、
    Jagadish。

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

    您好!

    我将您的代码与我的代码进行了比较。 但我没有获得我想要的结果。

    问题是、我已经在 Halcogen 的下面配置了 ADC 寄存器。

    启用引脚8和启用引脚15。

    并编写以下代码以读取 ADC 组2通道[15]。

    模拟基准引脚配置如下:

    ADREFHI -> 3.3V

    ADREFLO -> GND

    问题从这里开始:

    我会针对模拟输入中的不同输入获得不同的值。

    如果我把 AD1[8]和 AD1[15]连接到3.3V,我得到的值是993或992。

    如果将 AD1[8]连接到 GND,将 AD1[15]连接到3.3V,我得到的值为0。

    如果我在 Halcogen 中禁用了 AD1[8]通道并将 AD1[15]连接到3.3V,我会得到值~2590 (相同的代码)。

    我不明白这一点。 我必须使用多个 ADC 引脚进行数字输入。 但通道会相互影响。 如何单独使用 ADC 读数。

    感谢您的支持。

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

    您好!

    您能否压缩整个项目并在结束时附上、以便进行调试?

    --

    谢谢。此致、
    Jagadish。

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

    您好!

    我添加了代码。

    我正在使用 IAR 编译器。 我希望这对您来说不是问题。

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

    您好!

    我对您的代码不太清楚。

    主要功能如下:

    1.您将"adc_data"数组声明为16  

    这意味着你的数组将从 ADC_DATA[0]开始,并将从 ADC_DATA[15]结束,对吗?

    然后选择两个通道、分别是 ADC_8和 ADC_15。

    如果您将数组的最后一个地址、即  ADC_DATA[15]地址传递给函数"adcGetData"、第二个通道数据将存储在何处?

    第一个通道将存储在 ADC_DATA[15]中,第二个通道的阵列将会溢出?

    为什么不将起始地址传递给函数,即&ADC_DATA[0]? 如果这样做、通道8数据将 存储在 ADC_DATA[0]中、而通道15数据将存储在 ADC_DATA[1]中  

    2.命令数组的用途是什么?

    将在何处将数据移动到此命令?

    --

    谢谢。此致、
    Jagadish。

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

    您好!

    1)是的 adcData[16]试图将 ADC 数据保持在0和16之间。

    是的、我通过 Halcogen 将两个通道激活为通道。

    "是的,我知道。" 我能够在两个单独的通道上看到零数据。 谢谢你。



    我跳过了将数据传输到下一个元素的步骤。

    这个问题似乎可以解决,但目前,通道8和15是相互影响的。
    所以它是这样的:
    当通道8和通道15连接到零时、两个值都为零。


    当通道8连接到 GND 通道15 3.3V 时、我看到通道15的值在800和300之间。


    当通道8和通道15连接到3.3V 时、通道15和通道8会返回1500-1800之间的值。  

    这里的问题是、我无法始终获得相同的值。
    是压降还是其他原因造成的?

    2)命令数组是打印到串行端口的单字符串。

    感谢您的付出

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

    您好、Ali、

    当通道8连接到通道15 3.3V 时,通道15的值介于800和300之间。[/quoto][quotoid="574708" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1266024/tms570ls3137-tms570ls3137-analogue-pin-read-as-digital/4795658 #4795658"]当通道8和通道15连接到3.3V 时,通道15和通道15的值介于1500-1800之间。  [/报价]

    这些结果是不可预料的。

    我的意思是、由于我们以12位分辨率运行、因此如果我们连接3.3V、结果应接近4095。

    您能帮我解决这些问题吗?

    1.您使用的电路板是什么? 是特定于 TI 还是定制电路板?

    2.为什么不在没有 RTOS 优先的情况下尝试简单的裸机代码? 您的 ADC 代码对我来说似乎没问题、但可能由于 RTOS 调度程序或 RTOS 中的任何其他外设、它可能会产生影响? 因此、首先只需在没有 RTOS 的情况下单独试用 ADC?

    如果我们使用裸机代码进行测试、那么我们就可以轻松地了解它是硬件问题还是软件问题?

    --

    谢谢。此致、
    Jagadish。

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

    您好!

    1. 您使用的电路板是什么? 是特定于 TI 还是定制电路板?

    我使用的是德州仪器的 Hercules 板。

    为什么不在不首先使用 RTOS 的情况下尝试简单的裸机代码呢? 您的 ADC 代码对我来说似乎没问题、但可能由于 RTOS 调度程序或 RTOS 中的任何其他外设、它可能会产生影响? 因此、首先只需在没有 RTOS 的简单裸机代码上单独试用 ADC?

    好主意。 我更新了代码并重试。 但结果是一样的。 ( 已附加 e2e.ti.com/.../sys_5F00_main.txt 裸机代码)

    之后、我将 ADREFHI 引脚更改为外部3.3引脚、并将 AD1_15连接到该外部3.3V 总线。

    结果如下:

    它比以前更接近4095。

    我认为模拟基准和输入电压的问题。 我对吗?

    谢谢!此致

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

    您好、Ali、

    我认为模拟基准和输入电压存在问题。 我对吗?

    没错、这是模拟基准电压造成的。

    基准电压取决于 R1x 和 R2x。 如果您的电路板上未安装 J8、则基准电压将为5V。 如果连接了 J8、那么基准电压将变为3V。

    如果您将外部3.3V 连接到 ADREFHI、那么您应该移除 R22和 R31以获得更准确的结果。

    --

    谢谢。此致、
    Jagadish。

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

    对我来说,这是一个很好的信息。 J8跳线以前被移除、但我看不到。

    如果您将外部3.3V 连接至 ADREFHI,则应移除 R22和 R31以获得更准确的结果。

    我以前不知道。 谢谢!

    现在就完成了。 我将收到4095。

    谢谢!

    此致。

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

    很高兴听到这个消息。