完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我做基于磁阻传感器 HMC5983 和 ESP8266(NodeMCU ESP-12e 模块)的磁场无线测量设备。
传感器连接到 I2C 接口上的 ESP8266。ESP8266 轮询传感器并将其发送到数据收集器 (RaspberryPi)。 对我来说,在一秒钟内实现尽可能多的计算量非常重要,因为用于后续处理的所获得数据的质量取决于它。 HMC5983 支持标准、快速和高速模式下的 I2C 接口。但 NodeMCU I2C 模块仅支持 i2c.SLOW 速度 然后我通过 I2C 将 HMC5983 直接连接到 RaspberryPi 我可以在单次测量模式下实现每秒约 500 次测量(通过监控 DRDY 输入引脚),在连续测量模式下每秒进行 200 次测量(数据输出速率为 220 Hz - 完全正确) ). 该程序是用 Python 编写的,她的代码是: 代码:全选#!/usr/bin/python import smbus #for i2c use import time import os bus = smbus.SMBus(1) #use i2c port 1 on Rasspberry Pi addr = 0x1e #address HMC5983 0x1E bus.write_byte_data(addr,0x00,0b00011100) #Write to CRA Speed 220Hz bus.write_byte_data(addr,0x01,0b00100000) #Write to CRB Gain 660 +-2.5Ga 1.52mG/Lsb print "Start measuring..... while True: #if we need infinity cycle bus.write_byte_data(addr,0x02,0b00000001) #Write to Mode single-measurement mode while bus.read_byte_data(addr,0x09) == 0b11: #Wait RDY in Status Register () #DATA READY data = bus.read_i2c_block_data(addr,0x03,6)#Take data from data registers #convert three 16-bit 2`s compliment hex value to dec values and assign x,y,z x = data[0]*256+data[1] if x > 32767 : x -= 65536 y = data[2]*256+data[3] if y > 32767 : y -= 65536 z = data[4]*256+data[5] if z > 32767 : z -= 65536 print "X=",x, "\tY=",y, "\tZ=",z 当我将HMC5983连接到ESP8266时,我在单次计算模式下只能达到每秒140次左右的计算量...... 代码:全选----------THIS IS FOR SINGLE-MEASUREMENT MODE------------- --init i2c function H_init(sda,scl) i2c.setup(id, sda, scl, i2c.SLOW) print("I2C started...") end -- reads 6byte from the sensor function read_axis() i2c.start(id) i2c.address(id, dev_addr, i2c.RECEIVER) data = i2c.read(id, 6) i2c.stop(id) return data end --set register function set_reg(reg_addr,val) i2c.start(id) i2c.address(id, dev_addr, i2c.TRANSMITTER) i2c.write(id,reg_addr) i2c.write(id,val) i2c.stop(id) end --------GPIO INITILIZATION------- drdyn_pin=3 gpio.mode(drdyn_pin, gpio.INPUT) -------I2C INITILIZATION------- id = 0 i2c = i2c local i=0 dev_addr = 0x1e H_init(1,2) set_reg(0x00,0x1c) --set speed 220Hz set_reg(0x01,0x20) --set gain print("Start measurement...") while true do set_reg(0x02,0x01) --single-measurement mode while(gpio.read(drdyn_pin) == 1) do end data = read_axis() tmr.wdclr() end 之后,我将传感器配置为连续测量模式,每秒接收相同的 200 次测量。 NodeMCU 中的 I2C 接口是否可以高速运行?有人可以提供如何尝试加速传感器的查询? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1153 浏览 1 评论
583浏览 6评论
480浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
465浏览 5评论
466浏览 4评论
441浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 11:47 , Processed in 0.897634 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号