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.

[参考译文] PGA460-Q1:与 UART 通信混淆。

Guru**** 2609955 points
Other Parts Discussed in Thread: PGA460-Q1, PGA460, ENERGIA, BOOSTXL-PGA460, LMP91000, SN65HVDA100-Q1

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/586528/pga460-q1-confused-with-uart-communication

器件型号:PGA460-Q1
主题中讨论的其他器件: PGA460ENERGIABOOSTXL-PGA460LMP91000SN65HVDA100-Q1

大家好、团队、

我遇到了 pga460-Q1、它非常适合我的距离传感应用。 我对 UART 通信有些困惑。 我想将 pga460与 Arduino uno 相连接。 有人能帮我解决这个问题吗? 并与 EEPROM 写入和刻录方法相混淆。 请帮我解决这个问题。 请向我推荐适用于 pga460和 Arduino 的精确编码过程。

提前感谢...  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Pradeep、
    您是否参考过 PGA460-Q1软件开发指南(www.ti.com/.../slaa730) 和 PGA460 Energia 库和代码示例(www.ti.com/.../slac741)

    在这些文档中、我们提供了示例代码、并演示了如何在库文件中构建 UART 主站传输数据。

    EEPROM 烧写功能也作为示例提供。 以下是代码片段:

    //*** EEPROM 程序烧写-开始***//
    字节 pga460::burnEEPROM()

    字节 BurnStat = 0;
    字节 temp = 0;

    //将"0xD"写入 EE_UNLCK 以解锁 EEPROM、并将"0"写入 EE_CNTRL 寄存器的 EEPRGM 位
    regAddr = 0x40;
    regData = 0x68;
    字节 buf10[5]={synctyte、SRW、regAddr、regData、calcChecksum (SRW)};
    SERIAL1.write (buf10、sizeof (buf10));
    延迟(1);

    //向 EE_UNLCK 写入"0xD"以解锁 EEPROM、并向 EE_CNTRL 寄存器的 EEPRGM 位写入"1"
    regAddr = 0x40;
    regData = 0x69;
    buf10[2]= regAddr;
    buf10[3]= regData;
    buf10[4]= calcChecksum (SRW);
    SERIAL1.write (buf10、sizeof (buf10));
    延迟(1000);

    //读回 EEPROM 程序状态
    pga460SerialFlush();
    regAddr = 0x40;// EDD 开始
    字节 buf9[4]={synctyte、srr、regAddr、calcChecksum (SRR)};
    SERIAL1.write (buf9、sizeof (buf9));
    延迟(10);
    for (int n=0;n<3;n++)

    如果(n=1)

    burnStat = Serial1.read();

    其他

    temp = Serial1.read();



    返回 BurnStat;

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

    谢谢你 Akeem Whitehead

    那么、在解锁 EEPROM 后、我们可以写入所有 EEPROM 寄存器。

    如果不是、请告诉我步骤。

    谢谢  

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

    您只需解锁 EEPROM 以保存影子寄存器的当前值。 通常、您需要在实验期间编辑影子寄存器(易失性存储器)。 无需解锁或刻录 EEPROM 即可修改影子寄存器。

    以下是 PGA460-Q1用户指南中的说明:

    3.5.1.6.1 EEPROM 编程
    GUI 执行的所有写入命令都写入影子寄存器、而不是直接写入 EEPROM。
    器件的所有操作都引用了影子寄存器。 在启动时为 PGA460-Q1器件
    将存储在 EEPROM 中的值加载到影子寄存器中。 如果 PGA460-Q1器件已通电
    影子寄存器被清除、影子寄存器被基于 EEPROM 的重新加载
    值。

    要将影子寄存器中的当前值保存到 EEPROM、请单击"Program EEPROM"按钮
    将这些值刻录到 EEPROM 中。 影子寄存器烧写到 EEPROM 后
    器件会在下电上电之前保留最近更新的值。

    要将基于 EEPROM 的值重新加载到影子寄存器中、请单击 Reload EEPROM (重新加载 EEPROM)按钮。
    阈值存储在 RAM 中、不能烧写到存储器中。 阈值必须是
    在 PGA460-Q1的每个实例循环通电和启动后写入。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Akeem Whitehead。 这就是我的算法和电路。
    PGA TX 到 Arduino 的10引脚。
    从 PGA RX 到 Arduino 的11引脚。
    首先是使用批量命令写入 EEPROM
    它们正在使用解锁和编程命令进行编程
    最后读取 EEPROM 值、但它仅提供一组255个值。 我认为批量写入和编程在我的算法中无法正常工作。
    您能不能帮助我解决这个问题...



    #include

    软件串行 mySerial (10、11);

    #define synctyte 0x55
    字节 EEBW = 0x60;//EEPROM 批量写入
    字节 EE_UNLCK = 0x50;// EEPROM 解锁
    字节 EEREAD = 0x48;// EEPROM 读取
    字节 USER_DATA[20];
    字节 BurnStat = 0;
    字节 temp = 0;

    void setup()

    引脚模式(10、输入);
    引脚模式(11、输出);
    mySerial.begin(9600);//pga 通信
    Serial.begin(9600);//serial 显示器打印





    EEPROM_bulkwrite();
    EEPROM_UNLOCK_PRgrm ();
    EEPROM_READ();


    void loop()




    void EEPROM_bulkwrite()



    for (int i=0;i<20;i++)

    USER_DATA[I]= 0x11;

    字节 TVGAIN0 = 0xAA;
    字节 TVGAIN1 = 0xAA;
    字节 TVGAIN2 = 0xAA;
    字节 TVGAIN3 = 0x51;

    字节 TVGAIN4 = 0x45;
    字节 TVGAIN5 = 0x14;
    字节 TVGAIN6 = 0x50;
    字节 init_gain = 0x54;
    字节频率= 0x32;
    字节死区时间= 0xA0;
    字节 PULSE_P1 = 0x08;
    字节 PULSE_P2 = 0x10;
    字节 CURR_LIM_P1 = 0x55;
    字节 CURR_LIM_P2 = 0x55;
    字节 REC_LENGTH = 0x19;
    字节 FREQ_DIAG = 0x33;
    字节 SAT _FDIAG_TH = 0xEE;
    字节 FVOLT_DEC = 0x7C;
    字节 DECPL_TEMP = 0x4F;
    字节 DSP_SCALE = 0x00;
    字节 TEMP_TRIM = 0x00;
    字节 P1_GAIN_CTRL = 0x09;
    字节 P2_GAIN_CTRL = 0x09;

    字节 buf1[46]={synctyte、EEBW、USER_DATA[0]、USER_DATA[1]、USER_DATA[2]、 USER_DATA[3]、USER_DATA[4]、
    USER_DATA[5]、USER_DATA[6]、USER_DATA[7]、USER_DATA[8]、USER_DATA[9]、
    USER_DATA[10]、USER_DATA[11]、USER_DATA[12]、USER_DATA[13]、USER_DATA[14]、
    USER_DATA[15]、USER_DATA[16]、USER_DATA[17]、USER_DATA[18]、USER_DATA[19]、
    TVGAIN0、TVGAIN1、TVGAIN2、TVGAIN3、TVGAIN4、TVGAIN5、TVGAIN6、
    INIT_GAIN、FREQUENCY、死区时间、
    PULSE_P1、PULSE_P2、CURR_LIM_P1、CURR_LIM_P2、
    REC_LENGTH、FREQ_DIAG、SAT_FDIAG_TH、FVOLT_DEC、DECPL_TEMP、
    DSP_SCALE、TEMP_TRIM、P1_GAIN_CTRL、P2_GAIN_CTRL};


    mySerial.write (buf1、sizeof (buf1));
    延迟(50);


    void EEPROM_UNLOCK_prgrm ()

    字节 regAddr = 0x40;
    //将"0xD"写入 EE_UNLCK 以解锁 EEPROM

    字节 regData = 0x68;
    字节 buf2[4]={synctyte、EE_UNLCK、regAddr、regData};
    mySerial.write (buf2、sizeof (buf2));

    延迟(1);

    //将 EE_CNTRL 寄存器的 EEPRGM 位写入"1"

    字节 regData1 = 0x69;
    字节 buf3[4]={synctyte、EE_UNLCK、regAddr、regData1};

    mySerial.write (buf3、sizeof (buf3));

    延迟(1000);


    空 EEPROM_READ ()

    //读回 EEPROM 程序状态
    //pga460SerialFlush();
    字节 regAddr = 0x40;// EDD 开始
    字节 buf4[3]={synctyte、EEREAD、regAddr};
    mySerial.write (buf4、sizeof (buf4));
    延迟(10);
    for (int n=0;n<44;n++)

    如果(n=1)

    burnStat = mySerial.read();
    serial.println (burnStat);

    其他

    temp = mySerial.read();
    serial.println (temp);


    以及从 EEPROM 读取后获得的结果

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

    您好 Pradeep、

    如何为 PGA460-Q1供电? 最低电源电压要求为6V。 如果您使用 Arudino 的5V 电源轨为 PGA460-Q1供电、我们的器件将无法正常工作。

    您是否能够从 PGA460-Q1成功读取任何数据?

    Arduino 3.3V 或5V 逻辑电平是否被引用? 如果逻辑电平为3.3V、则 PGA460-Q1的 TXD 和 RXD 引脚默认设置为3.3V、并应正常工作。 如果逻辑电平必须为5V、则:

    TEST 引脚执行的数字电压电平选择在器件加电时执行。 上电时、
    器件检查 TEST 引脚的电平。 如果电平为低电平、则数字输出引脚以3.3V 电压运行。如果进行测试
    引脚连接高电平(3.3V 或5V 均被视为高电平状态)、数字输出引脚以5V 电压运行。这一点很重要
    PGA460-Q1器件中锁存了条件、以便测试多路复用器可以像以前一样进一步使用 TEST 引脚
    所述。 如果应用要求使用5V 数字输出、并且必须提取测试多路复用器输出
    然后、可以在测试引脚上连接一个弱上拉电阻器、如所示
    图40 (数据表的)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我们在设计中使用 PGA460-Q1。 EVM 原理图显示了外部 SRAM 23LC512。 是否还需要包含23LC512? 否则、内部 EEPROM 就足以进行数据采集。
    此致、
    Sumathi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我们可以将12V 连接到 PGA、VVPWR_XF 输入和变压器的中心抽头吗?

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

    你(们)好
    我认为内部 EEPROM 就足够了。
    是使用 BOOSTXL-PGA460还是仅使用 PGA460芯片。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Pradeep、您好!
    感谢您的回复。
    我们仅将 PGA460-Q1相关电路与变压器配合使用。 IO、UART TX 和 RX 连接到基于 ARM 的微控制器。
    由于 PGA460的最小电压输入为6V、因此我们连接了12V。 问题是、我们是否需要 UART TX、RX 的任何电平转换器。由于微控制器是3.3V 逻辑?

    请回复:

    此致、
    Sumathi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、sumathi
    我也有同样的困惑,但现在我克服了这个问题。
    只需阅读"2017年4月12日晚上10:42 "帖子。 Akeem 回答得很好。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Pradeep、
    非常感谢您的快速回复。
    我非常感谢您的澄清。
    我还有一个问题、但这与 CO2传感器有关。 可以将 LMP91000与 MG812一起用于 CO2气体传感器应用。 MG812到 LMP91000、RE、CE 的引脚连接、我们不确定。 我们将 MG812的加热器引脚连接到5V。 其他两个引脚连接到(RE&CE 短接)和 WE。 这是否起作用?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我们可以将12V 连接到 PGA、VVPWR_XF 输入和变压器的中心抽头吗?

    此致、
    Sumathi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、sumathi
    我对 CO2传感器不太了解。

    我们能否将12V 连接到 PGA、VVPWR_XF 输入和变压器的中心抽头?
    您可以为 PGA 提供高达28V 的直流电压。 但我真的不知道我可以为变压器提供多大的最大电压。 我为变压器选择了3.3V。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sumathi、
    是的、您可以将12V 连接到 PGA460的 VPWR 引脚和变压器的中心抽头。 您可以通过调整 PGA460的预设驱动器电流限值(在50M-500mA 之间)来控制变压器次级侧(连接到传感器)的峰峰值电压。 调节驱动器电流限制可有效地改变变压器的等效匝数比、从而避免使用较大的中心抽头电压(例如12V)对传感器进行过驱。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    EEPROM 要求:
    PGA460不需要任何外部 EEPROM 存储器、并且只能使用 UART 或 TCI 进行操作。 BOOSTXL-PGA460 EVM 仅包括用于捕获同步模式输出数据的专用测试用例的外部 EEPROM、这不是一项标准功能。 PGA460的内部 EEPROM 和 RAM 能够存储所有必要的配置和结果信息、外部微控制器可以通过 UART (仅限 TXD 和 RXD;如果未使用 SCLK、可通过10kOhm 电阻器拉至接地)或 TCI 直接读取这些信息。

    UART 逻辑电平:
    使用 UART 时、PGA460能够根据 TEST 引脚的启动条件在内部生成3.3V 或5.0V 逻辑轨。 如果 TEST 保持悬空或通过10kOhm 电阻器拉至接地、则逻辑电平将设置为3.3V。 如果通过100kOhm 电阻器将 TEST 上拉至5V、则逻辑电平将设置为5V。 RXD、TXD、SCLK、DECPL 和 TEST 引脚受此选择的影响。
    有关详细信息、请参阅 PGA460数据表第7.3.12节"测试引脚功能"。 UART 引脚无需电平转换器。

    IO 逻辑电平:
    IO 引脚以 VPWR (6-28V)为基准。 要将其连接到低电压逻辑电平微控制器、需要使用电平转换器/收发器。 对于 TCI 或低速单线 UART (低于19.2kBaud)、可使用 SN65HVDA100-Q1。 对于高速单线 UART、BOOSTXL-PGA560电路上的分立式 OWU 实现可以支持这些通信速度。

    注:
    您无需同时使用 UART (TXD/RXD)和 TCI (IO)。 只需要其中一个通信接口。