简 介: 测了了ITR8307的基本特性,包括它的静态、动态特性等。并通过测量独轮车惯量轮转速展示了它的应用。
关键词: ITR8307,反射式光电管
§01 反射式光电管
ITR8307 是一款集成有红外发射管与接收三极管的光电管。在 TB ITR8307 可以购买到SOP-4封装的小型光电管。
一、基本信息
反射式光电开关 ITR8307 是一款集红外发射管与红外接收管于一体的光电开关,当有被检测到物体经过的时候,物体将光电开关发射端发射的信号反射到接收端,于是光电开关就产生开关型号。
▲ 图1.1 基本封装
在 ITR8307/S18/TR8反射式光电开关传感器感应距离测距1mm贴片SOP-4 给出了SOP-4封装下的引脚功能分布。
▲ 图1.2 SOP-4封装管脚功能图
在 ITR8307光耦反射式非接触 传感器,有人将该传感器制作成通用的检测模块。 原装亿光ITR8307/S17/TR8(B)贴片反射式光电开关红外线光电传感器 给出的价格只有RMB0.37。
▲ 图1.3 ITR8307实际管教分布
二、特性测试
1、静态特性
使用万用表(DM3068)二极管档,测量 PIN2-1:前向导通电压。PIN2+, PIN1-。
红外发光二极管测量结果:
电流: 1mA
电压:1.077V
测量PIN3,4之间的电阻,可以验证三极管两个方向电阻不一样。并且随着手遮挡光电管上面的光线,PIN3,4之间的电阻会变大。
光电三极管测量结果:
PIN3+,PIN4-:0.577MΩ
PIN3-,PIN4+:∞
2、引线封装
▲ 图1.2.1 引出光电管管脚
引出的PIN4引线(100mil)的管脚定义与ITR8307的管脚 ① ~ ④ 一致。
3、测试电路
在面包板上搭建如下的测试电路。工作电压为+5V。
电路测量:
V2:1.193V
V3:4.98V
▲ 图1.2.2 测试电路原理图
手持反射式光电管对准白纸,可以看到V3的变化不大。
4、不同R2
为了提高输出电压的灵敏度,提高R2可以增加输出电压的灵敏度。这同时也会使得环境光线对于光电管的影响。
(1) 光电管平行放置
将光电管平行放置,此时光电管周围并没有反射物体。
使用变阻箱,改变R2阻值:100k ~ 1M对应的V3电压的变化。
【表1-4-1 光电管平行放置,对应不同Rc时V3电压值】
R(100k)1 | R(100k)2 | R(100k)3 | R(100k)4 | R(100k)5 | R(100k)6 | R(100k)7 | R(100k)8 | R(100k)9 | R(100k)10 |
---|---|---|---|---|---|---|---|---|---|
4.661900 | 4.357700 | 4.064400 | 3.779500 | 3.504000 | 3.234400 | 2.972500 | 2.715700 | 2.463400 | 2.228700 |
(2) 光电管垂直放置
设置R2=500kΩ,移动光电管,由于实验桌上面的台灯亮度不同,会引起V3电压的变化。
▲ 图1.4.1 光电管不同位置引起电位变化
三、距离对于输出电压影响
利用 单轴步进驱动模块SH-20403 控制单轨步进滑轨带动光电管移动,测量距离白纸之间的距离与V3电压之间的关系。
▲ 图1.3.1 使用步进电轨带动光电管
1、实验1
实验条件:
步长Step:200
步数:100
R2电阻:500kΩ
R1电阻:330Ω
移动距离:20mm
测量数据如下:
▲ 图1.4.1 不同步数下的输出电压
观察测量数据,可以看到, 在步数小于55(约11mm距离)之前,输出电压都是很低;当步数大于55之后,V3电压呈现快速上升趋势;
在V3上升过程中,电压出现了比较明显的波动现象。具体原因不详。
2、实验2
实验条件:
移动步长:500
移动步数:100
R1,R2的数值与实验1相同。测量结果如下:
▲ 图1.2.2 不同移动步数下输出电压
3、实验3
减少R2的阻值,降低到 200kΩ,重新测量移动距离与输出电压之间的关系。
实验条件:
移动步长:200
移动步数:100
R2阻值:200kΩ
R1阻值:330Ω
▲ 图1.2.3 不同移动步数下输出电压变化
可以看到随着R2的增加,输出电压信号相比实验1有了以下变化:
输出电压拐点缩小了,大约35部(越7mm距离);
电压没有了波动线性,非常平滑了。
4、实验4
实验条件:
移动步长:200
移动步数:100
R2阻值:900kΩ
▲ 图1.2.4 不同步数下输出电压
可以看到随着R2的增加,输出电压的拐点增加到了75步(大约距离15mm)。
from headm import *
import lscm8
from tsmodule.tsstm32 import *
'''
lscm8.lscm8mf(20000)
exit()
'''
vdim = []
step = 200
for i in range(100):
lscm8.lscm8mb(step)
time.sleep(2)
meter = meterval()
printff(i, meter[1])
vdim.append(meter[1])
tspsave('measure', vdim=vdim)
plt.plot(vdim)
plt.xlabel("Step")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# LSCM8.PY -- by Dr. ZhuoQing 2020-01-14
#
# Note:
#============================================================
from head import *
import serial
#------------------------------------------------------------
cmdportdef = 'COM2'
cmdport = serial.Serial(cmdportdef, baudrate=115200, timeout=0.1)
cmdport.setDTR(False)
#cmdport.setRTS(False)
printf("Open %s for LSCM8."%cmdportdef)
#------------------------------------------------------------
COMMAND_FRAME_HEAD = 0x56
COMMAND_FRAME_TAIL = 0x65
COMMAND_STATUS_WAIT = 0x0
COMMAND_STATUS_COMMAND = 0x1
COMMAND_STATUS_LENGTH = 0x2
COMMAND_STATUS_DATA = 0x3
COMMAND_STATUS_CHECK = 0x4
COMMAND_STATUS_TAIL = 0x5
#------------------------------------------------------------
COMMAND_HELLO_ECHO = 0x20
COMMAND_BEEP_ON = 0x21
COMMAND_BEEP_OFF = 0x22
COMMAND_DIR_ON = 0x23
COMMAND_DIR_OFF = 0x24
COMMAND_REL_ON = 0x25
COMMAND_REL_OFF = 0x26
COMMAND_PUL_SET = 0x27
COMMAND_PUL_STOP = 0x28
COMMAND_GOTO_HEAD = 0x29
COMMAND_GOTO_TAIL = 0x2A
COMMAND_GET_STATE = 0x2B
COMMAND_GET_PULSEOUT = 0x2C
COMMAND_CLEAR_PULSEOUT = 0x2D
#------------------------------------------------------------
def lscm8cmd(cmd, cmddata):
checksum = cmd + len(cmddata)
for cd in cmddata:
checksum = checksum + cd
checksum = (checksum & 0xff) ^ 0xff
cmdstr = b'' + byte(COMMAND_FRAME_HEAD) + byte(cmd) + byte(len(cmddata)) +\
cmddata + byte(checksum) + byte(COMMAND_FRAME_TAIL)
# printf(cmdstr)
cmdport.write(cmdstr)
def lscm8hello():
lscm8cmd(COMMAND_HELLO_ECHO, b'')
def lscm8beepon():
lscm8cmd(COMMAND_BEEP_ON, b'')
def lscm8beepoff():
lscm8cmd(COMMAND_BEEP_OFF, b'')
#------------------------------------------------------------
def lscm8relon(bits):
cmd = bits.to_bytes(1, byteorder='big')
lscm8cmd(COMMAND_REL_ON, cmd)
#------------------------------------------------------------
# bits:0:relay0, 1:relay1
def lscm8reloff(bits):
cmd = bits.to_bytes(1, byteorder='big')
lscm8cmd(COMMAND_REL_OFF, cmd)
def lscm8diron(bits):
cmd = bits.to_bytes(1, byteorder='big')
lscm8cmd(COMMAND_DIR_ON, cmd)
def lscm8diroff(bits):
cmd = bits.to_bytes(1, byteorder='big')
lscm8cmd(COMMAND_DIR_OFF, cmd)
#------------------------------------------------------------
def lscm8setpulse(bits, pulse):
cmd = bits.to_bytes(1, byteorder='big') +\
pulse.to_bytes(4, byteorder='big')
lscm8cmd(COMMAND_PUL_SET, cmd)
def lscm8stoppulse():
lscm8cmd(COMMAND_PUL_STOP, b'')
def lscm8gotohead():
lscm8cmd(COMMAND_GOTO_HEAD, b'')
def lscm8gototail():
lscm8cmd(COMMAND_GOTO_TAIL, b'')
def lscm8clearpulseout():
lscm8cmd(COMMAND_CLEAR_PULSEOUT, b'')
def lscm8mf(steps):
lscm8diron(3)
lscm8reloff(3)
lscm8setpulse(3, steps)
def lscm8mb(steps):
lscm8diroff(3)
lscm8reloff(3)
lscm8setpulse(3, steps)
#------------------------------------------------------------
if __name__ == "__main__":
time.sleep(.5)
if len(sys.argv) > 1:
step = int(sys.argv[1])
if step > 0:
lscm8mf(step)
else: lscm8mb(-step)
else:
lscm8mb(1000)
tspbeep(1500, 100)
printf('End of the command')
#------------------------------------------------------------
# END OF FILE : LSCM8.PY
#============================================================
§02 应用测试
一、测试独轮车转速
独轮车也许是下一届 智能车竞赛 的车模。下面使用反射式的宫外光电管测量它在自载电池作用下的转速。
车载电池为两节1.5V干电池。为了能够使用反射式的光电管测量转速,使用记号笔在惯量轮上涂抹一段1.5cm的黑色标记。
▲ 图2.1.0 使用反射式光电管测量独轮车惯量轮的转速
1、测试结果
测量条件:
R2阻值: 50kΩ
▲ 图2.1.1 测了V3波形
测量得到:脉冲的频率: 80.91Hz,这也反映了惯量轮的转速为80转/秒。
通过波形,也可以看到在50kΩ Rc 下,光电管的频率响应大约是1kHz。
▲ 图2.2.2 独轮车在行进
▲ 图2.2.3 独轮车运行
二、测量频率响应
改变反射式桑外光电二极管的电压,测量输出波形。
1、测量结果
R2的阻值: 50k欧姆。
▲ 图2.2.2 在方波驱动下的输出波形
R2的阻值: 100kΩ。
▲ 图2.2.3 在方波驱动下的输出波形
R2的阻值: 10kΩ
▲ 图2.2.4 在方波驱动下的输出波形
§测量结论
ITR8307是一款反射式的光电管。可以用于近距离的反射物运动测量。测量距离通过不同的Rc 可以在5mm - 15mm左右
————————————————