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.

[参考译文] LMT01:连接 Arduino MEGA 2560

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1200203/lmt01-to-interface-with-arduino-mega-2560

器件型号:LMT01

尊敬的社区:

我目前在将传感器连接到我的 Arduino Mega 2560时遇到困难。 尽管尝试了各种代码和电路设计、但仍然无法从传感器成功读取脉冲计数或温度值。 我曾尝试使用 TI 的培训视频和示例代码、但似乎什么都不起作用。

未来、我希望将总共15个 LMT01传感器连接到 Arduino Mega 2560、因此非常感谢为解决我当前的问题提供任何指导或帮助。

提前感谢您的帮助。

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

    尊敬的 Aravind -  

    感谢您发帖、欢迎访问 E2E。  

    我可以为您指出这份培训材料、其中包括示例代码(第二个链接、来自 LMT01的产品页面)。

    https://training.ti.com/how-interface-lmt01-temperature-sensor-arduino 

    https://www.ti.com/lit/zip/snic014 

    (由于 Mega2560没有内置 LCD、您可以将 LCD 打印替换为 Serial.prints 到 UART)

    如果您仍然有问题、那么如果 您可以分享您连接的引脚/您正在执行的操作的原理图、这将有助于进一步帮助您。   

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

    Josh、感谢您的答复。

    我尝试了您之前提供的相同代码、但做了一些修改、如下所示。 但 Arduino 串行显示器上没有输出。 我使用 WSON 封装。 VP 引脚连接到3.3电压、VN 连接到 Arduino MEGA 2560的数字引脚3、带有6.8k 的分流电阻器。

    +3.3V ---------------- 副总裁-- [LMT01]----- VN ---------------- 数字引脚3

                                                                          |

                                                                   |

                                                               R (6.8K)

                                                                   |

                                                                  |

                                                              接地

    ------------------

    //声明一个变量来保存脉冲计数,初始设置为0
    volatile int pulseCount = 0;
    //声明一个用于保持温度的变量,并将其初始设置为0
    浮点温度= 0;
    //声明一个变量来保持先前的脉冲计数,并将其初始设置为0
    内部保持= 0;

    //在电路板上电或复位时运行一次的设置功能
    空 setup()

     //将引脚3设置为输入
     引脚模式(3、输入);
     //以9600波特率开始串行通信
     Serial.begin(9600);
     //将模拟比较器控制和状态寄存器设置为 B01011010
     ACSR = B01011010;
     //将中断附加到引脚3上,该中断在信号从高电平下降到低电平时触发
     attachInterrupt (digitalPinToInterrupt (3)、countPulses、Falling);
    }

    //重复运行的主循环函数
    void loop()

     //如果脉冲计数不为0 (即已接收到脉冲)
     如果(pulseCount!= 0)
     {
       //等待脉冲计数稳定(即不再变化)
       while (pulseCount!= HOLD)
       {
         HOLD = pulseCount;
         延迟(1);
       }
       //根据脉冲计数计算温度,以摄氏度为单位
       温度= 0.0625 * pulseCount - 50;
       //将脉冲计数和温度打印到串行监视器上
       serial.print ("脉冲计数:");
       serial.print(pulseCount);
       serial.print ("、温度:");
       serial.print(temperature);
       serial.println (" C");
       //将脉冲计数重置为0以重新开始计数
       pulseCount = 0;
     }
     //等待2毫秒,然后再次检查脉冲计数
     延迟(2);
    }

    //在引脚3上接收到脉冲时触发的中断服务例程
    void countPulses()

     //脉冲计数递增1
     pulseCount += 1;

    }

    -------------------------------------------------------

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

    尊敬的 Aravind -  

    我认为您需要使用引脚 AIN0和 AIN1、如视频中所述、并由固件设置要使用的引脚。  

    在此处、根据进一步检查、与 UNO 不同、AIN0引脚(比较器的正输入)未映射到接头、但 AIN1引脚(比较器的负输入)是、因此您可能需要切换到 UNO 或 MSP430 LaunchPad。

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

    Josh、您好!

    我当前正在使用 Arduino UNO 板、但未能找到其上的 AIN0和 AIN1引脚。 我一直在参考一个视频[https://www.youtube.com/watch?v=CWDX6PdF-ZY&t=238s ]和原理图作为指南,我也尝试使用一些代码,但它没有产生所需的结果。

    volatile int pulseCount = 0
    浮点温度= 0
    内部保持= 0

    setup()
     //设置 ACSR 寄存器,以便初始化比较器

     /*     ACSR 位说明
     *  
     ACD -清除 ACD 以启用模拟比较器
     ACBG -将 ACBG 设置为1以使用内部1.1V 基准
     ACO -清除 ACIO (将被忽略-只读)
     ACI -通过写入1复位模拟中断标志
     ACIE -设置 ACIE 以启用比较器中断
     ACIC -清除 ACIC、未连接到计时器/计数器
     ACIS1 -设置 ACIS1以在下降沿触发中断
     ACIS0 -清除 ACIS0、以在下降沿触发中断
     */

     
     ACSR = B01011010;  //根据上面的位说明进行设置
     
     Serial.begin(9600); //以9600波特率初始化串行通信
    }

    void loop()
     //如果尚未计算脉冲数,则不必再进入循环。
     if (pulseCount!= 0)
     {
      //等待计数完成
      while (pulseCount!= HOLD)
      {
       HOLD = pulseCount;
       延迟(1)
      }
     
      //将脉冲计数打印到串行监视器
      serial.print ("脉冲:");
      serial.println (pulseCount);
      
      //将温度打印到串行监视器
      温度= 0.0625 * pulseCount - 50
      serial.print ("TEMP (C):");
      serial.println (温度);
      
      //重置下一个循环的 pulseCount
      pulseCount = 0
     }
     延迟(2)
    }


    //中断服务例程,对脉冲进行计数
    ISR (ANALOG_COMP_VECT)
     //递增脉冲计数
     pulseCount += 1
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Aravind -  

    请访问: https://upload.wikimedia.org/wikipedia/commons/c/c9/Pinout_of_ARDUINO_Board_and_ATMega328PU.svg 

    引脚6和7是比较器的输入。  

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

    Josh、感谢您的帮助。 我已经通过在 UNO 引脚 D7或 Mega 引脚 D5上将 VN 连接到 AIN1成功激活了我的传感器。 我的下一个目标是以这种方式连接15个传感器、从而获取多个温度读数。 [在 MEGA 上]对这种设置本身进行任何修改、这是否可能?

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

    若要读取多个 LMT01、您可以使用 GPIO 切换电源、如 LMT01数据表中的图34所示。

    谢谢。

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

    尊敬的任用户:

    如前所述、i 仅在将 VN 连接到 Arduino MEGA 2560上比较器 AIN01 (数字引脚5)的负极后才获得读数 。 我如何将 VN 从15个传感器连接到单个 Arduino Mega 2560、就像您提供的那样? 这是我需要帮助的地方。 有可能吗?

    谢谢你。

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

    图34显示了连接到同一比较器的多个 VN。 您要读取的传感器由 GPIO 在 VP 端提供电源、而其余传感器在 VP 端接收悬空状态。 您需要进行的更改是 Vp、而不是 VN。

    谢谢。

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

    尊敬的任用户:

    我很抱歉地说、我仍在努力理解您之前解释的逻辑。 您能否提供进一步的解释和指导? 我特别想知道是否有特定的 GPIO 需要连接到 Vp、以及您所描述的逻辑是否可用于同时收集来自多个传感器的输出。

    对于给您带来的不便、我深表歉意、但我需要充分理解这一点、因为我需要同时从多个传感器获取数据。

    感谢您的帮助。

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

    问题可能是您需要"同时来自多个传感器的数据"。 建议的解决方案按顺序从传感器收集数据。 一次只能为一个传感器供电。 LMT01上电需要100ms 并接收其传输信号;您可能每秒从10个 LMT01传感器接收数据。 如果您需要的比较器更多、则需要更多的比较器、这可能同时还需要使用更多 MCU。

    谢谢。