完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、介绍
霍尔传感器是根据霍尔效应制作的一种磁场传感器。霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。后来发现半导体、导电流体等也有这种效应,而半导体的霍尔效应比金属强得多,利用这现象制成的各种霍尔元件,广泛地应用于工业自动化技术、检测技术及信息处理等方面。 二、组件 ★Raspberry Pi主板*1 ★树莓派电源*1 ★40P软排线*1 ★PCF8591模数转换器模块*1 ★霍尔传感器模块*1 ★双色LED灯模块*1 ★双色LED模块*1 ★面包板*1 ★跳线若干 三、实验原理 磁场中有一个霍尔半导体片,恒定电流I从A到B通过该片。在洛仑兹力的作用下,I的电子流在通过霍尔半导体时向一侧偏移,使该片在CD方向上产生电位差,这就是所谓的霍尔电压。 霍尔电压随磁场强度的变化而变化,磁场越强,电压越高,磁场越弱,电压越低,霍尔电压值很小,通常只有几个毫伏,但经集成电路中的放大器放大,就能使该电压放大到足以输出较强的信号。若使霍尔集成电路起传感作用,需要用机械的方法来改变磁感应强度。上图所示的方法是用一个转动的叶轮作为控制磁通量的开关,当叶轮叶片处于磁铁和霍尔集成电路之间的气隙中时,磁场偏离集成片,霍尔电压消失。这样,霍尔集成电路的输出电压的变化,就能表示出叶轮驱动轴的某一位置,利用这一工作原理,可将霍尔集成电路片用作点火正时传感器。霍尔效应传感器属于被动型传感器,它要有外加电源才能工作,这一特点使它能检测转速低的运转情况。 本实验中霍尔传感器有两个输出:模拟输出(AO),数字输出(DO)。当传感器检测到有磁场时,模拟输出低电平,否则输出高电平。有磁场时数字输出信号读值ADC.read(0)==0,没有有磁场时数字输出信号读值ADC.read(0)==255,存在少量误差。 该模块可以检测出所用磁铁南北极,本实验不讨论。 四、实验步骤 第1步: 连接电路。 [tr]树莓派T型转接板PCF8591模块[/tr]
第2步: PCF8591模块采用的是I2C(IIC)总线进行通信的,但是在树莓派的镜像中默认是关闭的,在使用该传感器的时候,我们必须首先允许IIC总线通信。 第3步: 开始编程。这里先编写一个PCF8591.py库文件,后面再编写一个python程序引入这个库文件。 PCF8591.py库文件就是PCF8591模块的程序,单独编写是为了便于重用。在这个脚本中,我们使用了一个放大器用于模拟输入和一个LED灯用于模拟输出,模拟输入不能超过3.3V! 该程序也可以单独运行,用于测试3个电阻模块的功能。需用短路帽连接AIN0和INPUT0(电位计模块),连接AIN1和INPUT1(光敏电阻模块),以及连接AIN2和INPUT2(热敏电阻模块)。 连接LED灯,AIN0(模拟输入0)端口用于接收来自电位计模块的模拟信号,AOUT(模拟输出)用于将模拟信号输出到双色LED模块,以便改变LED的亮度。 PCF8591的详细内容请查看树莓派基础实验12:PCF8591模数转换器实验。 #!/usr/bin/env python #------------------------------------------------------ # # 您可以使用下面语句将此脚本导入另一个脚本: # “import PCF8591 as ADC” # # ADC.Setup(Address) # 查询PCF8591的地址:“sudo i2cdetect -y 1” # i2cdetect is a userspace program to scan an I2C bus for devices. # It outputs a table with the list of detected devices on the specified bus. # ADC.read(channal) # Channal范围从0到3 # ADC.write(Value) # Value范围从0到255 # #------------------------------------------------------ #SMBus (System Management Bus,系统管理总线) import smbus #在程序中导入“smbus”模块 import time # for RPI version 1, use "bus = smbus.SMBus(1)" # 0 代表 /dev/i2c-0, 1 代表 /dev/i2c-1 ,具体看使用的树莓派那个I2C来决定 bus = smbus.SMBus(1) #创建一个smbus实例 #在树莓派上查询PCF8591的地址:“sudo i2cdetect -y 1” def setup(Addr): global address address = Addr def read(chn): #channel if chn == 0: bus.write_byte(address,0x40) #发送一个控制字节到设备 if chn == 1: bus.write_byte(address,0x41) if chn == 2: bus.write_byte(address,0x42) if chn == 3: bus.write_byte(address,0x43) bus.read_byte(address) # 从设备读取单个字节,而不指定设备寄存器。 return bus.read_byte(address) #返回某通道输入的模拟值A/D转换后的数字值 def write(val): temp = val # 将字符串值移动到temp temp = int(temp) # 将字符串改为整数类型 # print temp to see on terminal else comment out bus.write_byte_data(address, 0x40, temp) #写入字节数据,将数字值转化成模拟值从AOUT输出 if __name__ == "__main__": setup(0x48) #在树莓派终端上使用命令“sudo i2cdetect -y 1”,查询出PCF8591的地址为0x48 while True: print '电位计 AIN0 = ', read(0) #电位计模拟信号转化的数字值 print '光敏电阻 AIN1 = ', read(1) #光敏电阻模拟信号转化的数字 print '热敏电阻 AIN2 = ', read(2) #热敏电阻模拟信号转化的数字值 tmp = read(0) tmp = tmp*(255-125)/255+125 # 125以下LED不会亮,所以将“0-255”转换为“125-255”,调节亮度时灯不会熄灭 write(tmp) time.sleep(2) 若想深入学习模/数转换等模电知识,强烈推荐以下书籍,国外大学最经典模电教程,比国内教程生动有趣更易懂。扫码购买或者点击下面的链接。 |
||
|
||
只有小组成员才能发言,加入小组>>
2388 浏览 0 评论
8918 浏览 4 评论
36495 浏览 19 评论
4986 浏览 0 评论
24318 浏览 34 评论
1379浏览 2评论
1633浏览 1评论
2022浏览 1评论
1445浏览 0评论
392浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 11:17 , Processed in 1.177637 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号