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.

[参考译文] ADS1232

Guru**** 2540720 points
Other Parts Discussed in Thread: ADS1232, ADS1235

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/758682/ads1232

主题中讨论的其他器件:REF5025ADS1232ADS1235

您好!

而电路板的最终布局尚未准备就绪。
我决定购买测试板(请访问链接)

en.aliexpress.com/.../32955526756.html a2g03.search0104.3.207.2263376bMTd8Uc 和 ws_ab_test = searchweb0_0 2Csearchweb201602_3_10065_10068_10547_319_5730915_317_10548_106963_10084_454_10083_106183_10307_533_533_533_5729815_10059_1084_108887_100031_10084_453_b3b5321_f3b3b_10083_10083_105379_5b_5b3b5b_5b_539_539_539b_5320b_b_b_f3b3b1b3b1b1b3b3b3b1b3b1b3b3b1b1b3b5b3b3b1b1b1b3b3b3b3b1b3b3b3b_

随附了(.c)和(.h)驱动程序文件以及电路板原理图。 最重要的是扫描​​传递到文件 screen.jp 中序列的 AD 值

问题是、即使将电池与 REF5025结合使用、我也会看到 AD 的最后8位发生了很大变化、我认为这是错误的。

以下是 AD 读取函数:


//读取
空读(空)

unsigned int data = 0;

while (DOUT_READ_BIT);

数字++;

对于(char count = 0;count <25;count ++)

SCLK (1);
date =日期<< 1;

IF (DOUT_READ_BIT)
日期=日期| 0x000001;
其他
数据=日期和0xFFFFFE;

SCLK (0);

值=数据>> 1;

总和+=值;

以下是要读取的任务和平均读取

/* StartDefaultTask 函数*/
void StartDefaultTask (void const *参数)

  /*用户代码 begin 5 */
  /*无限循环*/
  对于(;)
  {
osDelay (5);//每5ms
读为();
  }
  /*用户代码结束5 */

/* StartTask02函数*/
void StartTask02 (void const *参数)

  /*用户代码 begin StartTask02 */
  /*无限循环*/
  对于(;)
  {
osDelay (500);

Avg =(浮点)总和/数字;
AD =(int)平均值;
范围=(平均偏移);
重量=范围/系数;

if (EAS_GetOffset){
偏移=平均值;
EAS_GetOffset = 0;

if (EAS_GetFactor){
系数=(浮点)(平均偏移量)/EAS_Weight;
EAS_GetFactor = 0;

snprintf (向量、sizeof (向量)、"平均值:% f、AD:% x、总和:% d、 nReadings:% d、Weight:% f \ r \ n"
Avg、Ad、Sum、Num、Weight);

while (HAL_UART_Transmit)(& hart1、(uint8_t *) Vector、strlen (Vector))= HAL_OK);

num = 0;
总和= 0;
  }
  /*用户代码 end StartTask02 */

[相关]

e2e.ti.com/.../2754796

e2e.ti.com/.../ADS1232.zip

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

    您尚未显示 ADS1232的引脚设置。 了解您所使用的速度和增益设置非常重要。 不清楚测量的实际噪声是多少、或者您实际尝试测量的噪声是多少(例如输入源和电压)。 首先、我要尽可能简化您的处理、只需查看返回的原始代码并确定噪声、然后与 ADS1232数据表中的噪声表进行比较。

    您使用的输入负载单元是否与上一个主题中讨论的相同? 在该讨论中、我提到了几个方面、例如使用与基准相同的激励电压、以便进行比例式测量。 您还应该对模拟输入和基准具有类似的滤波。 原理图中没有基准滤波。 我建议在靠近 ADS1232基准引脚的位置至少放置一个0.1uF 的电容。

    使用2.5V 基准似乎是一个好主意、但比例式测量将更好地消除常见噪声和漂移。 此外、当使用2.5V 基准电压时、LSB 大小将小得多、并且结果将出现更多噪声。

    就数据而言、实际转换的数据显示的内容远不止是在计算出错时尝试求平均值。 不清楚平均部分是否实际工作。 您似乎还具有用于确定 DOUT/DRDY 状态的宏集。 但是、从器件读取的最后一位可能是高电平或低电平、因此在轮询引脚时需要强制 DOUT/DRDY 处于高电平。 这是通过发送第25个时钟来实现的。

    如果最后8个位正在切换、这可能是正确的、具体取决于您使用的基准。 如果您使用2.5V 基准、无噪声位数将比数据表表中显示的值更糟。 此外、您还将看到激励源的噪声。 这就是使测量比例式的原因。

    我还对您的代码感到困惑、因为在两个地方、您有无限循环、我看不到无法从这些循环中中断。 通过使用逻辑分析仪或示波器验证时序和 DOUT/DRDY 引脚的状态、确保代码按预期工作。

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

    e2e.ti.com/.../ADS1232_5F00_02.zip

    感谢 Bob 的关注。

    我需要知道使用 ads1232是否可以测量[kg]和[g]的物体、或者更准确地测量[0.5g]的物体。 或者、使用另一个组件可能是这样。 你能再建议一个吗?

     我看到的一个大问题是、当我设置偏移时、我注意到[ADC-OFFSET]值发生波动、这看起来在很大的时间范围内像是正弦波信号。 我不知道这是否真的是一个问题、或者它是否是使用 Delta-SIGMA 的组件的一个功能、您能告诉我吗? 如果是、我可能也会遇到其他组件的问题。

    我正在使用:

    增益= 128

    SPS = 80

    ADC = 5V (SPX3819)

    VREF = 2.5V (REF5025)

    VDD = 3.3V

    我使用的是同一个负载单元。

    但其他负载单元也会发生相同的误差。

    在正在开发的 PCB 板上、激励电压和基准电压将相同、但在该测试板上、我使用 REF5025来提供2.5V 电压。

    基准中没有滤波器、但我使用电池为 AD 和基准供电、结果不应显著改善?

    我相信这种平均水平是不可行的,但我不知道如何改善这种阅读。 有什么想法吗?

    我不知道如果我使用电池、噪声会是什么样的。

    在我使用的代码中(free-RTOS)、任务同时工作、实际上是同时工作的、并且它们的结构是无限循环的、这允许使用 for、同时不会通过时间分段中断固件。

    以下是宏:

    [代码]

    #define A0 (x)((x)? (HAL_GPIO_WritePin (AD1232_A0_GPIO_Port、ADS1232_A0_Pin、GPIO_PIN_SET):

    (HAL_GPIO_WritePin (ADS1232_A0_GPIO_Port、ADS1232_A0_Pin、GPIO_PIN_RESET));

    #define SCLK (x)((x)? (HAL_GPIO_WritePin (ADS1232_SCK_GPIO_Port、ADS1232_SCK_Pin、GPIO_PIN_SET):

    (HAL_GPIO_WritePin (ADS1232_SCK_GPIO_Port、ADS1232_SCK_Pin、GPIO_PIN_RESET));

    #define speed (x)((x)? (HAL_GPIO_WritePin (ADS1232_SPEED_GPIO_Port、ADS1232_SPEED_Pin、GPIO_PIN_SET):

    (HAL_GPIO_WritePin (ADS1232_SPEED_GPIO_Port、ADS1232_SPEED_Pin、GPIO_PIN_RESET);

    #define PDOWN (x)((x)? (HAL_GPIO_WritePin (ADS1232_PDOWN_GPIO_Port、ADS1232_PDOWN_Pin、GPIO_PIN_SET):

    (HAL_GPIO_WritePin (ADS1232_PDOWN_GPIO_Port、ADS1232_PDOWN_Pin、GPIO_PIN_RESET));

    #define GAIN_1 (x)((x)? (HAL_GPIO_WritePin (ADS1232_GAIN1_GPIO_Port、ADS1232_GAIN1_Pin、GPIO_PIN_SET):

    (HAL_GPIO_WritePin (ADS1232_GAIN1_GPIO_Port、ADS1232_GAIN1_Pin、GPIO_PIN_RESET));

    #define GAIN_0 (x)((x)? (HAL_GPIO_WritePin (ADS1232_GAIN0_GPIO_Port、ADS1232_GAIN0_Pin、GPIO_PIN_SET):

    (HAL_GPIO_WritePin (ADS1232_GAIN0_GPIO_Port、ADS1232_GAIN0_Pin、GPIO_PIN_RESET));

    #define DOUT_READ_BIT HAL_GPIO_ReadPin (ADS1232_DOUT_GPIO_Port、ADS1232_DOUT

    [/代码]

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

    ADS1232专为称重传感器而设计。 ADC 测量电压时不会转换为重量。 分辨率的程度将取决于刻度的最大重量除以 ADS1232的总无噪声分辨率。 无噪声分辨率基于系统的峰峰值噪声。 非屏蔽电缆可用作天线来拾取噪声。

    如果您在数据中看到的是正弦波、那么您很可能会从灯具等处获取电源线周期频率。 如果使用10sps 而不是80sps、则该值应减小、因为 ADS1232数字滤波器的 SINC 滤波器将陷波50/60Hz。 您可以使用原始数据并将其绘制为时域图来验证这一点。

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

    10个样本至少需要100ms 才能进行下一次读取、这在我看来有点慢。 我需要在不到1分钟的时间内对权重进行平均计算。 对于此类称重、您建议使用什么组件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Erisson、

    很抱歉、我的回复延迟了、因为我们在美国有一个假日期。 ADS1232的工作原理是几乎不进行平均值计算。 ADS1232是一款具有内部数字 SINC 滤波器的过采样器件。 数字滤波器将在10sps 的电源线路周期频率处陷波、而不是80sps。 如果您遇到电力线循环噪声并尝试以80sps 运行、则50/60Hz 在转换器的通带内。 您将获得该噪声并将其传递给结果。 在增益级之前尽可能减少任何外部噪声源、这一点非常重要。 如何实现这一点取决于噪声源、因此需要进行大量调查以确定噪声源。

    因此、可以对结果进行多次求平均值、但这并不一定意味着您将获得成功。 您可以使用具有更快转换速率的 ADS1235、但我怀疑、除非首先消除噪声、否则会有任何改善。 ADS1232在数百万个刻度中成功使用、但没有实现性能的快捷方式。

    此致、
    Bob B