资源描述
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
实验1 光电传感器测小车转速
1 实验目的
1. 观察了解光电传感器。
2. 测试光电传感器的应变输出。
3. 计数公式:轮子直径*3.14/20格码盘=6.5Cm*3.14/20约=1cm
2 实验原理
本实验说明光电传感器的原理和工作情况。
光电传感器由敏感元件、转换元件、基本转换电路三部分组成。它把光型号转换成为电信号,直接检测来自物体的辐射信息,也可以转换其它物理量成为光信号。其主要的原理是光电效应。当光照射到物质上的时候,物质上的电效应发生改变,这里的电效应宝库奥电子发射、电导率和电位电流等。然后通过类似光敏电阻这样的器件把光能转化成为电能,然后通过放大和去噪声处理就得到了所需要的输出信号。这里的输出电信号和原始的光信号接近线性的关系。
光电传感器电路图 1
3 实验所需部件
超声波传感器,L298驱动模块,光电传感器,单片机控制模块等
超声波传感器 1 光电传感器 1
L298电机驱动模块 单片机芯片 1
4 实验步骤:
1.测试。先让点击空转显示小车转速,然后与理论计算相比。
2.按图(4)将实验部件用实验线连接成测试桥路。桥路中R1、R2、R3和WD为电桥中的固定电阻和直流调平衡电位器,R为应变片(可任选上、下梁中的一片工作片)。直流激励电源为 士4v。测微头装于悬臂梁前端的永久磁钢上,并调节使应变梁处于基本水平状态。
小车测速程序如下:
#include<AT89x51.H>
#define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;}
#define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;}
#define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;}
#define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;}
#define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;}
#define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;}
sbit led1 =P2^0;
sbit led2 =P2^1;
sbit led3 =P2^2;
sbit led4 =P2^3;
Unsigned code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned code dis[] ={0xfe,0xfd,0xfb,0xf7};
unsigned char disbuff[5]={0};
unsigned char time=0; unsigned char i =0;
unsigned int count1=0;
unsigned int V=0;
/************************************************************************/
//延时函数
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/************************************************************************/
//显示数码管字程序
void Display_SMG(void)
{
if(++i>=4)i=0;
P0=table[disbuff[i]];
P2=dis[i];
}
/************************************************************************/
///*TIMER0中断服务子函数产生2MS定时扫描数码管与产生0。5S*/
void timer0()interrupt 1 using 2
{
TH0=(65536-2000)/256; //2MS定时
TL0=(65536-2000)%256;
time++;
Display_SMG();
if(time>=250) //250次即是,0。5S
{
time=0;
V=count1*2; //计数公式:轮子直径*3.14/20格码盘=6.5Cm*3.14/20约=1cm 即一个脉冲走1CM距离 ((count1*1))/0.5S= (count1*2)CM/S
count1=0; //清计数
disbuff[0]=V/1000; //更新显示
disbuff[1]=V%1000/100;
disbuff[2]=V%1000%100/10;
disbuff[3]=V %1000%100%10;
}
}
/***************************************************/
//外部0中断用于计算左轮的脉冲
void intersvr1(void) interrupt 0 using 1
{
count1++;
}
void run(void)
{
Left_moto_go ;
Right_moto_go ;
}
void backrun(void)
{
Left_moto_back ;
Right_moto_back ;
}
void leftrun(void)
{
Left_moto_back ;
Right_moto_go ;
}
void rightrun(void)
{
Left_moto_go ;
Right_moto_back ;
}
void stoprun(void)
{
Left_moto_Stop ;
Right_moto_Stop ;
}
/*********************************************************************/
/*--主函数--*/
void main(void)
{
TMOD=0X01;
TH0=(65536-2000)/256; //2MS定时
TL0=(65536-2000)%256;
TR0= 1;
ET0= 1;
EX0=1;
IT0=1;
IE0=0;
EA = 1;
run();
while(1)
{
if(Left_2_led==0&&Right_1_led==0)
run();
else
{
if(Right_1_led==1&&Left_2_led==0)
{
Left_moto_go;
Right_moto_back;
}
if(Left_2_led==1&&Right_1_led==0)
{
Right_moto_go;
Left_moto_back;
}
}
}
5 实验心得
在过去几周里,我非常幸运参加杨淑珍老师组织的实验课程。在实验中,我遇到很多问题。从选材开始,我们就开始查资料,从光电传感器的工作电压、传感模式、工作模式、传感范围、安装方式等一点点查起。先是光电测速码盘,安装到4个电机上,电机转动时光电测速码盘会走有晃动。最后我们选择一个相对较平稳的电机装上光电测速码盘。因为我们组选用的小车底盘高度太矮,光电传感器安装还是出了问题。为了使光电传感器的安装更稳定,刚开始选择的是卡在小车上底盘,结果小车跑起来数据偏差较大。杨老师建议我们固定光电传感器,我们为了省事,直接用胶带粘,结果还是不行。最后改为用双面胶彻底固定光电传感器,数据显示正常。在杨老师刚开始给我们建议的时候,我还自大地以为不是那个问题,一直在其他方面找原因。现在终于明白自己跟杨老师差距太大,在实验过程中还发现了自己很是粗心大意的毛病,跟杨老师认真细致比起来,我要学的还很多。
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
展开阅读全文