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.

[参考译文] AFE4300EVM-PDK:阻抗测量和使用SPI传输数据

Guru**** 2560800 points
Other Parts Discussed in Thread: AFE4300EVM-PDK, AFE4300

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/584768/afe4300evm-pdk-impedance-measurement-and-transferring-data-using-spi

本线程中讨论的其他部件:AFE4300EVM-PDKAFE4300

我们正在尝试使用AFE4300EVM-PDK来测量体脂肪百分比。 我们希望使用Raspberry Pi通过SPI控制AFE,并让AFE通过SPI将体脂肪测量结果发送回Pi。 我们已详细查看了用户指南(sbas586b)和应用说明(sbaa202),但无法找到如何将主板与Raspberry Pi等外部设备连接。

  • 是否可以将AFE4300EVM-PDK设置为在不使用GUI的情况下执行阻抗测量,只需连接板即可与Raspberry Pi进行SPI通信?
  • 我们还想知道ADC_DATA_Result寄存器是否包含我们应使用SPI发送给Pi的阻抗测量的最终结果? 如果没有,是否有技术参考手册提供我们可能需要使用的登记册的完整文件?

在应用手册中,我们介绍了设置和执行FWR生物阻抗测量的步骤。

  • 是否可以使用不是参考电阻器(R56-59)的电阻器校准AFE的阻抗测量?
  • 在WriteRegisters.csv文件中,默认值4130与ADC数据速率64sps有何对应关系? 我们如何更改此频率值以获得不同的数据速率?

谢谢!

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

    要将Raspberry Pi (RPI)与AFE4300EVM连接起来,您必须这样做
    1)删除MSP430和AFE4300之间的所有数字信号连接。
    2)将AFE4300上的所有数字信号用蓝线连接至RPI。
    3)使用板载稳压器为AFE4300供电。

    是的,您可以将AFE4300连接到RPI,并对RPI进行编程,以便仅处理所有任务,例如使用校准信息对AFE4300进行编程,校准,推断车身阻抗。

    ADC_DATA_Result包含ADC的输出。 要找到阻抗,您必须找到激励电流和校准例程的偏移量(这是通过两个已知电阻器完成的)。

    您可以使用其他未使用的IOUT和VSENSE通道,使用外部已知电阻器(非R56-R59)校准AFE。

    使用ADC_CONTRAT_REGISTER1的D6,D5和D4设置数据速率。 “4130”是此寄存器的十六进制值(即 0x4130)。 因此0x4130将D6:D4作为011,这是设置为64sps。 如果要更改数据速率,必须使用适当的值设置ADC_CONTRAL_REGISTER1的D6:D4。

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

    感谢你的帮助。 我还有一个跟进问题。

    要为AFE供电,我们需要使用J102,对吗? 但是,J102的引脚未在任何地方列出。 J102的每个引脚是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Nimish,

    对于J102引脚,您可以查看MMB3板的J2。
    MMB3板的示意图可在中找到
    ftp.ti.com/.../MMB3_Schematic.pdf

    或者,您可以使用AFE4300 EVM的J2为不使用MMB3板的AFE4300 EVM供电。

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

    感谢所有的帮助。 我们目前在使用GUI校准主板时遇到问题。 我们尝试使用多组不同的板载电阻器来校准板。问题是从校准中获得的R1和R2的MAG似乎过低。 您是否知道导致这种情况的原因?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Nimish,

    您是否可以共享用于校准的电路,标有"R1"和"R2"?

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

    是否可以通过电话或网络聊天与您交谈? 我们对如何将AFE4300EVM连接到Raspberry Pi有很多问题(例如,为电路板计时,为电路板供电,通过SPI执行阻抗测量),并且认为与通过此论坛向您提问相比,电话通话对我们双方来说效率更高。 您可以致电512-862-7345联系我们

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

    我完全理解你的情况,但我认为在论坛上讨论不仅解决了你的问题,而且也有助于其他成员面对类似的问题。 这种做法确实反映了建立这一论坛的主要目标。
    因此,我建议我们尝试一次解决所有问题,看看情况如何。 尽管如此,如果有必要,我们一定可以打电话。

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

    您好,Prabin

    我们正在使用SPI将AFE4300EVM连接到Pi,还有一些问题:

    • 我们是否需要在每次读取ADC_DATA_Result之前检查RDY以确保数据准备就绪?
    • 我们是否总是将J103上的STE留为0?
    • J103上的SDQ是什么? 我们如何修改它以控制SPI?
    • ADC_PD与AFE4300数据表(sbas586)第21页上的ADC_PDN是否相同?
    • 要进行单次测量,我们将1写入ADC_CONV_MODE和ADC_PD,然后读取ADC_CONV_MODE,直到该位为1。 此时ADC_PD应为0,然后读取ADC_DATA_Result。 这是我们需要做的吗? 如果没有,您能否说明单次测量的流程?
    • 在FWR模式下,读取ADC_DATA_Result后,我们是否将其插入校准期间获得的线性函数中以获得阻抗测量? 换言之,在公式中插入v,Mag = m*v-o来自应用程序注释“AFE4300的阻抗测量”(SBAA202)?

    谢谢!

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

    您好,Nimish,

    以下是答案,

    #1:是的,您需要在读取数据之前检查ADC_RDY。

    #2:如果SPI总线中没有任何其他从属设备,则可以将STE绑定到0。

    #3:不需要J103中的SDQ。 保持其浮动状态。

    #4:对于单次激发转换,请按照下列步骤操作:

    • 设置ADC_PD = 1
    • 设置ADC_CONV_MODE = 1
    • 等待ADC_RDY
    • 阅读数据。
    • 重置ADC_CONV_MODE,即ADC_CONV_MODE = 0
    • 要进行下一次拍摄,请从第2步开始执行。

    #5:是的,您必须在公式Mag = m*v + o中将adc_data_result作为'v',其中'm'和'o'是从校准例程中获得的斜率和偏移。

    此致,

    Prabin

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

    要确认,ADC_RDY与J103 (引脚15)上的RDY引脚是否相同? 此外,这是否为active_low pin (如RDY==low表示数据可用)?

    此外,当我们在连接到MMB3时,使用示波器测量SPI时钟时,它看起来像是2MHz (一段500ns的时间)。 但是,文档显示SCLK的周期为250ns,即4MHz。 文档是否错误,或者我们应提供时钟的频率是多少?

    我们需要对Raspberry Pi做的事情总结如下。 您能否确认这一说法是否正确,或者告诉我们我们我们的错误是什么:

    初始化:

    • 将0x0000写入MISC_REGISTER1
    • 将0xffff写入MISC_REGISTER2
    • 将0x6006写入device_control1 //这将设置主体构成的设备,这就是我们正在做的事情
    • 将0x0032写入DAC_FREQ //这应初始化DAC_clock到50kHz,这是GUI使用的
    • 将0x0063写入ADC_CONTINT_REGISTER2
    • 将0x0030写入MISC_REGISTER3

    校准:

    • //使用750欧姆电阻器
    • 将0x0201写入VSENSE_MUX
    • 将0x0201写入ISW_MUX
    • 结果1 =测量//见下文
    • //使用950欧姆电阻器
    • 将0x0202写入VSENSE_MUX
    • 将0x0202写入ISW_MUX
    • 结果2 =测量//见下文
    • //使用两个结果确定斜率和偏移

    测量:

    • 将0xC1C0写入ADC_CONTROL_REGISTER1 //这会将ADC_PD设置为1,ADC_CONV_MODE设置为1,ADC_DATA_RATE设置为128 SPS (默认值),并将ADC_MEAS_MODE设置为差分SPS
    • while (RDY=high){//wait or sleep, data is not ready }(当(RDY=HIGH){//WAIT或睡眠,数据未就绪})
    • 将0x2000写入SPI MOSI //读取ADC_DATA_REGISTER的请求
    • 结果=从SPI miso读取
    • 写入0x41C
    • 0至ADC_CONTINT_REGISTER1 //设置ADC_CONV_MODE = 0
    • 返回结果

    感谢所有的帮助!

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

    您好,Prabin

    我们附上了我们的代码,它在最后一篇文章中实现了伪代码。

    我们正在使用WiringPi的SPI库来执行SPI。 但是,RDY引脚永远不会回到低电平,并且尝试读取ADC_DATA_Result时给出0。 您知道为什么RDY引脚从未设置为高电平吗? 文档建议我们可能应该检查ADC_CONTINT_REGISTER1上的ADC_PD或ADC_CONV_MODE,但我们不确定。 另外,您知道我们是需要更多的SPI手动控制还是只是使用了库吗?

    e2e.ti.com/.../BIA.he2e.ti.com/.../BIA.cpp

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

    您好,Nimish,

    是的,ADC_RDY是AFE4300的RDY引脚,它是低电平有效信号。
    AFE4300支持高达4MHz (250nS)的SPI,但您可以随时降低速度。 这就是为什么在我们的EVM中将SPI配置为2MHz的原因。

    代码注释。
    1)您是否使用板载参考电阻器(R56和R57)进行校准? 如果是,请删除R58和R59。 将R57更改为950欧姆。
    2)要读取ADC_DATA_REGISTER,您需要传输3个字节(0x20万)并同时采样SOMI。 最后2个字节(共3个)将包含ADC_DATA_REGISTER。

    选择单次激发模式是否有任何特定的原因?
    我建议最好以连续模式启动并运行所有内容(至少用于调试目的,因为它将确认设置)。
    稍后您可以切换到单次激发模式。

    此致,
    Prabin

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

    您好,Prabin

    我们更新了代码以执行连续模式(我们首先调用构造函数,然后调用testContinuen)。 但是,RDY引脚始终较高,ADC_DATA_Result的值始终为0。 我正在通过R56测量进行测试,因此我们应该得到一个非零代码。 为什么我们没有获得代码的合理数字?

    我们使用板载参考电阻器(R56和R57)进行校准。 删除R58和R59是什么意思? 另外,R57还不是950欧姆电阻器吗? 这是主板的一部分,因此我们不能更改。

    谢谢

    e2e.ti.com/.../6330.BIA.he2e.ti.com/.../0044.BIA.cpp</s>0044.

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

    您好,Nimish,

    您是否向CLK引脚提供1MHz信号?

    另外,您能否验证是否正在进行SPI写入?  按照下面给出的步骤验证SPI写入。

    1)执行硬件重置。

    2)测量VLDO针脚处的电压。 应为~0V

    3)启用体重秤(即将0x6005写入device_control1)

    4)测量VLDO针脚处的电压。 应为~1.7V

    下面给出了参考电阻器的示意图  

    如图所示,R56,R57,R58和R59是串联的。 因此,如果您正在测量R57,您将获得R57的值||(R56 + R58 + R59)。 这就是我建议您删除R58和R59的原因。

    从图像中,R57的值为10Kohm (不是950 Ohm)。

    此致,

    Prabin

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

    嘿Prabin,

    我们意识到我们的代码没有正确地为AFE4300计时。 我们不确定原因,但我们找到了另一个python库(pigpio)并重新实施了我们的代码。 现在,当我们尝试校准时,我们确实会收到代码。 使用R56校准时,我们收到~1500-2000;2000;使用R57校准时,我们收到~3000-3500。3500。 我们使用寄存器的低级别配置以及用于连续捕获ADC的工具将这些代码与GUI进行了比较。 在这两种情况下,R56的~9000-9500 (9500 (将VSENSE/ISW设置为0x0201)和R57的~1.2万-12500 (1.25万 (将VSENSE/ISW设置为0x0201)。 我们也上传了我们的python代码(论坛不允许我们上传.py文件,因此它作为.txt附加)。 您是否知道为什么这些代码远远超出预期?

    此外,我们需要写入哪些寄存器/值(以及以什么顺序),才能使用四极配置获得单次激发阻抗?

    我们不会取出R58和R59,因为如果您使用并联电阻器进行计算,R56|||(R57+R58+R59)= 700和R57||||(R56+R58+r59)= 950,这是文档(和我们)获得值的位置。

    谢谢!

    尼米什

    e2e.ti.com/.../BIA.txt

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

    您好,Nimish,

    我浏览了您的代码,“读取”函数的返回语句应该是

    返回(0xFF00和(data[1]<8))|(0xff和数据[2])

    在前面的答复中已经提到了单次激发模式的步骤。 此外,您的"测量"功能也在执行单次激发转换。 对于连续转换模式,ADC_PD应为0。

    对于参考寄存器,只要您在校准中考虑串联/并联电阻, 您就可以继续。

    此致,

    Prabin