摘 要:本设计采用光电传感器作为计数装置,解决了传统仪器中激光发射器和接收器的调整问题,简化了仪器的操作步骤。同时选用51单片机作为控制核心,接收计数信号,处理按键信息,利用定时器计时,输出计数和计时结果到数码管进行显示。通过自制实验仪器,可提高教师业务能力,并减轻了实验仪器更新换代的压力。
关键词:光电传感器;单片机;自制
三线摆测量刚体转动惯量是理工科大学物理实验中的一个基础实验,其测量公式T2,式中m为下圆盘质量,R为悬线下端悬点到下圆盘中心距离,r 为悬线上端悬点到上圆盘中心的距离,H为两圆盘之间的垂直距离,T为下圆盘的摆动周期。从中可以看出,下圆盘摆动周期的测量是本实验的关键。为了提高实验的精确度,一般都是测量多个周期所用的时间。传统的计数计时仪是以激光发射器和接收器来进行周期计数的,仪器调整较为麻烦。在本设计中,以光电传感器作为计数装置,节省了仪器调整的时间。进而以单片机作为控制核心,设计制作了新的光电计数计时仪。
1 选用单片机介绍
STC89C52是市面上常见的一种51内核单片机,它具有以下标准功能[2]: 8K字节Flash,512字节RAM,4组共32个I/O 口,看门狗定时器,内置4KB EEPROM,3个16 位定时器/计数器,2个外部中断,全双工串行口。因为它简单易学,成本较低,成为广大电子设计爱好者的入门级单片机。本设计就是以STC89C52作为控制核心,加入晶振电路和复位电路构成单片机工作的最小系统。

图1 单片机最小系统原理图
2 计数部分
现有仪器中计数部分采用的是激光计数,激光接收器接收到激光是正常状态,对应指示灯灭,接收不到激光,对应指示灯亮。摆线挡光一次,指示灯亮一次,计数器加1。在使用过程中,需要每次调整激光发射器和接收器的位置,以使接收器能够接收到激光。有时候,学生们的非正常操作导致接收器内部激光接收头位置发生改变,这时无论怎样调整激光接收器的位置,也不能够正常的接收到激光,就需要打开接收器去调整激光接收头的位置,大大延长了仪器的调整时间。

图2 光电传感器
漫反射光电开关又称为光电接近开关,它是将输入电流在发射器上转换为光信号射出,接收器根据接收到的光线强弱或有无对目标物体进行判断。如果有物体遮挡,传感器上的指示灯亮,传感器输出低电平,正常状态输出高电平。物体不限于金属,所有能反射光线的物体均可以被检测。图3是光电传感器与单片机相连的接线图。

图3 光电开关原理图
我们这里采用漫反射光电开关作为计数装置,不需要单独的接收端,在有限的范围内(0~30 cm可调),摆线经过光电开关一次,指示灯亮一次,光电开关输出低电平一次,单片机计数一次。这样大大节省了实验过程中仪器的调整时间,同时仪器的结构也变的简单。
光电传感器的输出端接单片机的P12口,当检测到低电平信号,并且低电平信号结束,对应变量加1。程序为
if(js==0){while(js==0);cishu++;}
3 计时部分
本设计是采用单片机内部的定时器来进行计时的。在51单片机内部共有两个16位可编程的定时器/计数器,即定时器T0和定时器T1。它们即有定时功能又有计数功能,通过设置与它相关的特殊功能寄存器可以选择启动定时功能或计数功能[3]。无论是定时功能还是计数功能都是对脉冲进行计数。
晶振频率的倒数是振荡周期,12个振荡周期为1个机器周期。在定时器模式下,加1计数器是对内部的机器周期进行计数。我们选用的是12 MHz晶振,一个机器周期为1 μs,也就是每过1 μs,定时器中的计数器加1。
定时器有4个工作模式,模式0和模式3不常用,模式1是16位定时器,最大定时长度为216-1=65535 μs,模式2是具有自动重载的8位计时器,最大定时长度为28-1=256 μs。考虑到本设计时间精度是ms,选择模式1。定时器一旦启动,计满16位计数器需要216-1个机器周期,再过一个机器周期定时器溢出,产生中断。我们要定时1 ms,需要先给16位定时器装一个初值,在这个初值的基础上计1 000个脉冲后,定时器溢出,即 1 ms中断一次。
在主函数中对定时器进行设置,程序为
TMOD=0x01;//设置定时器0工作模式
TH0=0xFC;
TL0=0x3B;//设置定时器初始值
EA=1;ET0=1; //中断设置
TR0=0; //初始定时器0不工作
定时器0中断函数为
void T0_INT() interrupt 1
{ TH0=0xFC;
TL0=0x3B;
time++;//系统计时精度为1ms
}
4 显示部分
参考现在使用的计数计时仪,2位计数显示,5位计时显示,我们选择2个四位共阳数码管作为显示器件。图4是四位共阳数码管的引脚图,a、b、c、d、e、f、g、dp是八位段选码,控制数码管的显示内容,1、2、3、4是数码管的位选码,控制那一位数码管显示。在数码管内部,四个位对应的段选码是连在一起的,所以不能够同时让四位显示不同的数字。要想让四位显示不同的数字,需要在程序中引入动态扫描,也就是某一时刻段选码对应一定显示内容,设置位选码来确定那一位显示,短暂显示后,改变段选码内容,改变位选码,让下一位显示新内容,依次类推。由于人的视觉停留,看起来就好像四位数码管同时显示了不同的内容。

图4 四位数码管引脚图
一般数码管的设计,是8个段选码连接单片机8个IO口,设计几位显示就再连接几个单片机IO口。由于设计思路简单,通俗易懂,初学者都是这样设计。但是不足之处也是很明显的,一方面,占用单片机IO口资源较多,另一方面在动态扫描的时候,会出现“鬼影”,也就是在正常显示某一位数字的同时,会隐约显示前一位的数字。我们这里引入两片74HC595芯片作为数码管的驱动芯片。

图5 74HC595引脚图
74HC595是串入/并出带锁存的移位寄存器[4-6],图5是它的引脚图,Q0~Q7是八位并行输出端,DS是串行数据输入,Q7'是串行数据输出,SHCP是数据输入时钟线,STCP是输出存储器锁存时钟线,MR接高电平,OE接低电平。通过共用SHCP和STCP,Q7'接下一级的DS,能够多个74HC595芯片级联。由于是带锁存的移位寄存器,在下一级输出时,上一级输出的内容不会变化,从而可以实现三个I/O口静态驱动多个一位数码管显示。

图6 两片74HC595芯片驱动两个四位共阳数码管原理图
74HC595也常用来动态驱动四位共阳数码管,能够在数据显示时有效的消除“鬼影”。在本设计中,使用2片74HC595芯片级联输出16个二进制数据,前8位对应数码管的段选码,后8位对应8个位选码。段选码输出显示数据,位选码输出显示的位,然后改变段选码显示内容,改变位选码内容,依次类推。显示程序如下:
void display(void)//显示数码管子程序
{INT8U i,k;
for(i=0;i<8;i++)
{ //在第4位显示小数点
if(i==3)k=table[shuju[i]]&0x7F;elsek=table[shuju[i]];
// 1字节数据串行输入595子程序
Serial_Input_595(k);
k=wx[i];
Serial_Input_595(k);
//595并行输出子程序
Parallel_Output_595();
}
}
5 成品展示
把以上各部分有机的结合到一起,加上电源电路和按键电路,就完了成我们的制作,图7是总的电路原理图。在电源电路中我们加入了稳压二极管和滤波电容以提供更为稳定的电压,如果用电池作为电源的话,这部分稳压电路就可以省去。按键电路是用来设置计数的次数。

图7 本设计原理图
开机后,前2位显示“--”作为计数部分,第3位灭,第4位到第8位显示“00.000”作为计时部分。按下“加”键一次,计数部分数字加1,按住“加”键计数部分数字将连续加1。按下“减”键一次,计数部分数字减1,按住“减”键计数部分数字将连续减1。计数值不为0时,摆线挡光一次,变量chu++,如果“加”键或“减”键按下,变量chu=0,当变量chu=4时,正式进入计数计时。也就是设置计数值结束,摆线挡光四次后,系统进入计数计时状态,此后每挡一次光,变量cishu++,计数计时值改变一次,直到cishu变量等于设置的计数值,停止计数计时,如图8所示。按复位键回到初始状态。

图8 实际运行效果图
在三线摆实验中,测量20个圆盘振动周期所用时间,本设计测量结果与现有仪器测量结果相比,差别在毫秒级。
6 结 论
本设计采用单片机作为控制核心设计制作了新的计数计时仪,选择光电传感器作为计数器件,替代传统仪器中的激光计数装置,大大缩减了实验过程中的仪器调整时间,使学生们能够更专心的去研究实验现象,分析实验规律。同时,通过购买电子元件器自制实验仪器,一方面能够减轻仪器更新换代的压力,别一方面也能够降低仪器后期维修的费用。下一步我们计划选择独立的数码管,改善显示效果,画出印制电路板,交付厂家生产,以期能够作为实用性的产品替代现在实验中的计数计时仪。