查看: 1582|回复: 6

[原创] [LPC55S69]逐飞LPC55S69 IOT开发板进阶例程--传感器模块篇

[复制链接]
  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    97

    主题

    836

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    3975
    最后登录
    2024-4-16
    发表于 2020-10-26 14:47:31 | 显示全部楼层 |阅读模式
    本帖最后由 mgn 于 2020-10-26 16:54 编辑

    逐飞的IOT板子配了好多个传感器模块,这也是为什么我们叫它IOT板子的原因之一。

    逐飞也提供的对应的例程,无奈 我强迫症,凡事儿都要自己来一遍才放心。

    这篇帖子以这些传感器的驱动例程为主。目前接口用的都是Flexcomm6,后边再说动态调整的事儿,先测试功能。理解这些传感器

    --------------------------------------------------------------------------------------
    第一个例程 MS5611 气压计的例程

    实例代码: MS5611气压传感器.zip (719 KB, 下载次数: 6)
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    97

    主题

    836

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    3975
    最后登录
    2024-4-16
     楼主| 发表于 2020-10-26 15:25:38 | 显示全部楼层
    2020-10-26 15:25 更新了温湿度传感器的例程
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    97

    主题

    836

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    3975
    最后登录
    2024-4-16
     楼主| 发表于 2020-10-26 16:55:14 | 显示全部楼层
    2020-10-26 16:54 更新了飞行时间 测距传感器V53L0x的例程
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2020-10-26 23:59:56 | 显示全部楼层
    有的时候,数字传感器调试相对简单,缺少了模拟器件那分动态、随机与收敛的兴奋。
    有的时候,数字传感器的结果的算法也确实挺让人头痛的。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7092
    最后登录
    2023-4-20
    发表于 2020-10-27 00:25:57 | 显示全部楼层
    本帖最后由 jinglixixi 于 2020-12-3 08:16 编辑

    这有时候写的妙!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-11-4 13:30
  • 签到天数: 47 天

    [LV.5]常住居民I

    3

    主题

    167

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    379
    最后登录
    2024-4-16
    发表于 2020-10-27 11:29:36 | 显示全部楼层
    支持
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    35

    主题

    356

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2569
    最后登录
    2023-6-23
    发表于 2020-12-2 18:44:59 | 显示全部楼层
    给大家看个好玩的

    MS5611_Demo.png

    以下是代码:

    1. from cup import I2C
    2. import utime

    3. I2C_MS5611                 =        0b1110111   # Address of MS5611

    4. MS5xxx_CMD_RESET =  0x1E        # perform reset
    5. MS5xxx_CMD_ADC_READ=0x00        # initiate read sequence
    6. MS5xxx_CMD_ADC_CONV=0x40        # start conversion
    7. MS5xxx_CMD_ADC_D1 = 0x00        # read ADC 1
    8. MS5xxx_CMD_ADC_D2 = 0x10        # read ADC 2
    9. MS5xxx_CMD_ADC_256 =0x00        # set ADC oversampling ratio to 256
    10. MS5xxx_CMD_ADC_512 =0x02        # set ADC oversampling ratio to 512
    11. MS5xxx_CMD_ADC_1024=0x04        # set ADC oversampling ratio to 1024
    12. MS5xxx_CMD_ADC_2048=0x06        # set ADC oversampling ratio to 2048
    13. MS5xxx_CMD_ADC_4096=0x08        # set ADC oversampling ratio to 4096
    14. MS5xxx_CMD_PROM_RD =0xA0        # initiate readout of PROM registers

    15. def ms5611_send_cmd(i2c, cmd):
    16.     i2c.send(cmd, I2C_MS5611)

    17. def ms5611_read_prom(i2c):
    18.     ms5611_send_cmd(i2c, MS5xxx_CMD_RESET)
    19.     utime.sleep_ms(3)
    20.     for loop_count in range(8):
    21.         ms5611_send_cmd(i2c, MS5xxx_CMD_PROM_RD+2*loop_count)
    22.         read_buffer = i2c.recv(2, I2C_MS5611)
    23.         ms5611_read_buffer[loop_count] = ((read_buffer[0] & 0xFF) << 8) | (read_buffer[1] & 0xFF)

    24. def ms5611_read_adc(i2c, cmd):
    25.     ms5611_send_cmd(i2c, MS5xxx_CMD_ADC_CONV + cmd)
    26.     cmd &= 0x0F
    27.     if cmd == MS5xxx_CMD_ADC_256:
    28.         utime.sleep_us(900)
    29.     elif cmd == MS5xxx_CMD_ADC_512:
    30.         utime.sleep_ms(3)
    31.     elif cmd == MS5xxx_CMD_ADC_1024:
    32.         utime.sleep_ms(4)
    33.     elif cmd == MS5xxx_CMD_ADC_2048:
    34.         utime.sleep_ms(6)
    35.     elif cmd == MS5xxx_CMD_ADC_4096:
    36.         utime.sleep_ms(10)
    37.     ms5611_send_cmd(i2c, MS5xxx_CMD_ADC_READ)
    38.     func_data_buffer = i2c.recv(3, I2C_MS5611)
    39.     value = (func_data_buffer[0] & 0xFF) << 16
    40.     value |= (func_data_buffer[1] & 0xFF) << 8
    41.     return value | (func_data_buffer[2] & 0xFF)

    42. def ms5611_read_out(i2c):
    43.     # Reserve these float variables
    44.     dT      = float(0.0)
    45.     OFF     = float(0.0)
    46.     SENS    = float(0.0)
    47.     T2      = float(0.0)
    48.     OFF2    = float(0.0)
    49.     SENS2   = float(0.0)

    50.     data2 = ms5611_read_adc(i2c, MS5xxx_CMD_ADC_D2+MS5xxx_CMD_ADC_4096)
    51.     data1 = ms5611_read_adc(i2c, MS5xxx_CMD_ADC_D1+MS5xxx_CMD_ADC_4096)

    52.     dT                  = data2 - (ms5611_read_buffer[5] << 8)
    53.     OFF                 = (ms5611_read_buffer[2] << 16) + (dT*ms5611_read_buffer[4] / 0x80)
    54.     SENS                = (ms5611_read_buffer[1] << 15) + (dT*ms5611_read_buffer[3] / 0x100)
    55.     ms5611_temperature  = (2000 + (dT * ms5611_read_buffer[6] / 0x800000))
    56.     ms5611_pressure     = (((data1 * SENS) / 0x200000 - OFF) / 0x8000)

    57.     if ms5611_temperature < 2000:
    58.         T2              = dT * dT / 0x80000000
    59.         OFF2            = 5 * (ms5611_temperature - 2000) * (ms5611_temperature - 2000) / 0x02
    60.         SENS2           = 5 * (ms5611_temperature - 2000) * (ms5611_temperature - 2000) / 0x04
    61.         if ms5611_temperature < -1500:
    62.             OFF2        += 7 * (ms5611_temperature + 1500) * (ms5611_temperature + 1500)
    63.             SENS2       += 11 * (ms5611_temperature + 1500) * (ms5611_temperature + 1500) / 0x02

    64.     ms5611_temperature  -= T2
    65.     OFF                 -= OFF2
    66.     SENS                -= SENS2
    67.     ms5611_pressure     = (((data1 * SENS) / 0x200000 - OFF) / 0x8000)
    68.     return ms5611_temperature, ms5611_pressure

    69. ms5611_read_buffer = [0,] * 8

    70. i2c = I2C(1, I2C.MASTER, baudrate=50000)

    71. ms5611_send_cmd(i2c, MS5xxx_CMD_RESET)
    72. utime.sleep_ms(1)
    73. ms5611_read_prom(i2c)

    74. for _ in range(5):
    75.     temperature, pressure = ms5611_read_out(i2c)

    76.     print("ms5611_get_temperature: %d.%d." % (temperature/100, temperature%100))
    77.     print("ms5611_get_pressure : %d." % pressure)
    78.     utime.sleep_ms(1000)
    复制代码



    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-25 13:54 , Processed in 0.263489 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表