当前位置:文档之家› 传感器课程设计

传感器课程设计

传感器课程设计传感器课程设计学院电气信息学院专业测控技术与仪器年级班别 09级测控01学号 0904010117 学生姓名王龙龙目录一、绪论设计内容与设计要求 (6)1.1设计内容: (6)1.2设计要求: (6)二、设计原理及框图 (6)2.1设计原理: (7)2.2系统框图: (7)三、方案选择及论证 (7)3.1方案一: (7)3.2方案二: (8)3.3方案三: (8)3.4方案论证: (8)四、电路与最小系统设计 (8)4.1驱动电路: (8)4.2显示电路 (9)4.3稳压电路 (10)4.4最小系统的设计 (11)五、红外控制原理及设计 (12)5.1红外原理 (12)5.2红外电路设计 (13)六、控制流程与程序 (14)6.1程序流程 (14)6.2控制程序 (14)参考文献 (43)摘要:本次课程设计是利用接近传感器和单片机技术设计制作一个显示电机转速的速度测定系统,尽可能的提高测量误差,用4位LED 数码管显示速度。

电机测速系统由红外接收电路、单片机最小系统、数码管显示电路、电机驱动电路以及激光测速电路构成。

红外接收电路用来接收用户输出的红外信息,实现测试参数的设置。

关键词:传感器;转速:显示:Abstracts:This course is designed to use proximity sensors and single chip microcomputer design a show the speed of the motor speed determination system, as far as possible to improve the measure error, with four LED digital display speed tube. Motor speed system consists of infrared receiving circuit, single chip minimize system, digital pipe display circuit, motor drive circuit and laser speed circuit to form. Infrared receiving circuit used to receive a user output of infrared information, realizing test parameters Settings.Keywords: sensors; Speed: display:一、绪论设计内容与设计要求1.1设计内容:传感器和单片机技术设计制作一个显示电机转速的速度测定系统。

测量范围为750~3000 rps,尽可能的提高测量误差,用4位LED 数码管显示速度。

1.2设计要求:1.了解所选用的接近开关的工作原理,工作特性等。

2.设计合理的信号调理电路(有的传感器已经设计好了,可以直接应用;有的则不)。

3.用单片机对脉冲信号处理,要有Protel画的硬件接线原理图、利用C语言在单片机开发软件中编写相关程序,并对单片机的程序作详细解释。

4.列出制作该装置的元器件,制作实验板,并调试运行成功。

二、设计原理及框图2.1设计原理:本次课程设计电机测速系统是采用红外接收电路、单片机最小系统、数码管显示电路、电机驱动电路以及激光测速电路构成。

红外接收电路用来接收用户输出的红外信息,实现测试参数的设置。

单片机是整个系统的核心,用以分配所以的任务。

数码管用于显示当前的PWM占空比与电机转速,激光测速则是为了检测当前的电机转速。

2.2系统框图:电机转速的速度测定三、方案选择及论证3.1方案一:选择驱动能力较强的MOS管和逻辑门构建H桥电机驱动电路,由于MOS的输入阻抗很高,输出阻抗很低,所以使得其带载能力很强3.2方案二:使用三极管作为控制开关,搭建甲乙类互补对称功率放大电路,形成推挽输出,用以驱动电机。

3.3方案三:采用集成的功率放大芯片,这样驱动电路显得会相对简单,也便于单片机对电机的控制,集成功率放大芯片L298能同时接收4路PWM,控制两组电机的旋转状态,这样可交替使用便于控制电机的旋转方向。

3.4方案论证:集成功率放大芯片存在一定的散热问题,其输出的电流也非常有限,而三极管也多用于对小信号的放大,带载能力有限,所以采用方案三,用MOS管搭建电机驱动电路。

四、电路与最小系统设计4.1驱动电路:次设计的驱动电路将一个增强型P沟道MOS场效应管和一个增强型N沟道MOS场效应管组合在一起使用本系统选用IRF530、IRF9530对管为H桥的驱动芯片,再加上合适的数字逻辑电路,方可实现单片机对电机的转速和方向的控制。

4.2显示电路本系统中,利用4位共阳极数码管,动态地显示当前电机的旋转状态。

动态显示就是让各位显示元件分时工作,利用动态显示法可以降低系统功耗。

4.3稳压电路为了保证整个控制系统能够正常的工作,所以在电源供电方面我们采用+5V的稳压电源给主控电路供电因为本设计中控制回路需要的是+5V的稳压电源,我们采用三端稳压芯片7805作为该电路的主控芯片。

对于电源的选择,如果采用干电池供电,使用一段时间后,电池的输出电压将会不断下降,满足7805芯片的输入电压的要求,可能会导致输出的电压低于5V。

所以直接取用220V交流电作为本系统的电源。

4.4最小系统的设计稳定的+5V电源供电系统,有合适的外部起振源,复位电路,串口通信电路。

五、红外控制原理及设计5.1红外原理红外遥控电路包括两部分:发射电路和接收电路。

由于本设计中只是运用红外技术来控制电机的测速,而不是设计红外电路,在此,直接使用红外遥控成品,只介绍本设计中对于红外解码、控制程序的软件设计原理,而不对红外的产生与接收电路作详细介绍。

红外接收时需要对这些信息解调后才能将原来的二进制信息释放出来。

解调的过程是通过红外接收管进行接收的。

外接收管接收到的识别码和操作码,而将引导码作为红外信息的前置特征,增加了抗干扰能力。

在对识别码和操作码的数据接收时,应注意到二进制信息的判断方式。

5.2红外电路设计六、控制流程与程序6.1程序流程6.2控制程序/**************************************** *************************红外控制电机测速STOP键······关闭遥控以及一切控制电路,相当于电源;MODE键·····选择自动调节PWM,调整到PWM为50%;SCIENT键···关闭指示灯闪烁,改为声音提示;PAULSE键···暂停当前状态,显示暂停。

LEFT键·····正转RIGHT键····反转EQ键VOL_键调节PWM减的速度VOL+键调节PWM增的速度RPT键U_SD键数字键:0;PWM=0;1;PWM=1;2;PWM=2;3;PWM=3;4;PWM=4;5;PWM=5;6;PWM=6;7;PWM=7;8;PWM=8;9 PWM=9;***************************************** *************************/#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit smg1=P3^7;sbit smg2=P3^6;sbit smg3=P3^5;sbit smg4=P3^4;sbit p1=P0^1;sbit run=P0^6; //电机sbit dir=P0^7; //方向sbit irdata=P3^2; //红外sbit beep=P2^6; //键音sbit led1=P0^4; //指示灯1sbit led2=P0^5; //指示灯2uchartemp1[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82 ,0xf8,0x80,0x90}; //不带点0~9uchardif[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x 78,0x00,0x10}; //带点0~9uchar over[5]={0xc0,0xc1,0x86,0x08,0x7f};//“over”uint counter=0;uint vv=0;uint NUM,t;uchar PWM;uchar ircode[4]; //键值码uint gat=60;uchar kiss=0xfe;uchar ki=0x01;uchar i;uchar end=0;bit newh=0;bit yy=0;void close();void overgame();void open();uchar a,e;bit ppm=0;void delay_140us(uint x) //x*0.14MS //红外中断必用{uchar i;while(x--)for (i=13;i>0;i--);}void sound() //键音{uchar i;for(i=0;i<100;i++){d elay_140us(2);b eep=!beep; //BEEP取反}beep=1;}void ir_EX0() interrupt 0 using 0 //外部中断服务程序{uchar i,j,k=0;EX0=0;delay_140us(15);if(irdata==1){EX0=1;return;}//确认ir信号出现while(!irdata); //等ir变为高电平,跳过9ms的前导低电平信号。

for(i=0;i<4;i++) //收集四组数据{for (j=0;j<8;j++) //每组数据有8位{while (irdata); //等ir 变为低电平,跳过4.5ms的引导码高电平信号。

while (!irdata); //等ir 变为高电平,开始接收地址码w hile (irdata) //计算ir高电平时长{delay_140us(1);k++;i f (k>=25) //不符合最大长度{EX0=1;return;} //0.14ms计数过长自动离开。

} //高电平计数完毕ircode[i]=ircode[i]>>1; //数据最高位补“0”if (k>=8)i rcode[i]=ircode[i]|0x80; //数据最高位补“1”k=0; //计数后清零}//完成8位数据接收}//完成4字节的接收if(ircode[2]!=~ircode[3]) //验码{EX0=1;return; //若验码错误,则返回}switch(ircode[2]) //功能编码{/*****************数字键**************************//*0*/ case 0x16:P0=0xf0;gat=50;break; // /*1*/ case 0x0c:P0=0xf1;gat=70;break; // /*2*/ case 0x18:P0=0xf2;gat=90;break; // /*3*/ case 0x5e:P0=0xf3;gat=110;break; // /*4*/ case 0x08:P0=0xf4;gat=130;break; // /*5*/ case 0x1c:P0=0xf5;gat=150;break; // /*6*/ case 0x5a:P0=0xf6;gat=170;break; // /*7*/ case 0x42:P0=0xf7;gat=190;break; // /*8*/ case 0x52:P0=0xf8;gat=200;break; // /*9*/ case 0x4a:P0=0xf9;gat=210;break; ///*****************功能键***************************//*STOP*/ case 0x45:ppm=1;break; // /*MODE*/ // case0x46:FLAG=0x11;break;/*SCIENT*/ // case0x47:FLAG=0x12;break;/*PAULSE*/ //case 0x44:FLAG=0x13;break ;/*LEFT*/ case 0x40:dir=0;break; ///*RIGHT*/ case 0x43:dir=1;break; ///*EQ*/ //case 0x07:FLAG=0x16;break;/*VOL+*/ // case0x09:FLAG=0x17;break;/*VOL-*/ // case 0x15:FLAG=0x18;break; /*RPT*/ // case 0x19:FLAG=0x19;break; /*U/SD*/ // case 0x0d:FLAG=0x1a;break;default : p1=0;}sound();EX0=1;}void count_EX1 () interrupt 2 using 2{counter++;}/******************固化***********************/void PWM_t0() interrupt 1 using 1 //PWM /**/{ /**/TR0=0; //暂停计时/**/ NUM++; /**//**/if(NUM%2==1) //奇数次/**/ { /**/run=0; //1 /**/TH0=0xff; //控制1的时间,PWM++,THL初值越小,所占用时间越长,提高了占空比TL0=0xff-PWM; //装满,不用/**/TR0=1; //启动定时器,/**/} /**//**/if(NUM%2==0) //偶数次/**/{ /**/run=1; //0 /**/TH0=0xff; //互补时间/**/TL0=PWM; //装满,不用/**/TR0=1; //启动定时器,/**/} /**/} /**//*********************固化*********************/void count_t1() interrupt 3 using 3 //专门用来定时的timer1方式1{TH1=0xd8; //10ms // TH1=0x7f; TL1=0x18; //33msTL1=0xf0;a++;e++;if(end==1){newh=1;run=1;EA=0;}if(a==gat){a=0;t++;if(t<=13){PWM=PWM+0x0a; }if((t>=13)&&(t<=24)) {PWM=PWM-0x0a; }if(t>=25){t=0;end++;sound();}}/*编码器测速*/if(e==10){EX1=1;// beep=!beep;led1=~led1;led2=~led2; }if(e==20){EX1=0;e=0;vv=counter;counter=0;}}void display(uchar mm,uint num) {smg1=0;smg2=1;smg3=1;smg4=1; //占空比P1=dif[mm*10/256];delay_140us(1);P1=0xff;smg1=1;smg2=0;smg3=1;smg4=1; //百位P1=temp1[(num/100)%10];delay_140us(1);P1=0xff;smg1=1;smg2=1;smg3=0;smg4=1; //十位P1=temp1[(num/10)%10]; delay_140us(1);P1=0xff;smg1=1;smg2=1;smg3=1;smg4=0; //个位P1=temp1[num%10];delay_140us(1);P1=0xff;}void open(){for(i=0;i<8;i++){P1=kiss;beep=!beep;kiss=~((~kiss)<<1);delay_140us(3000);}kiss=0xfe;for(i=0;i<5;i++){P0=kiss;beep=!beep;kiss=~((~kiss)<<1);delay_140us(3000); }beep=1;}void close(){smg1=0;smg2=0;smg3=0;smg4=0;for(i=0;i<8;i++){P1=ki;beep=!beep;ki=~((~ki)<<1);delay_140us(3000);}beep=1;}void overgame(){for(i=0;i<150;i++){smg1=0;smg2=1;smg3=1;smg4=1; //P1=over[0];delay_140us(20);P1=0xff;smg1=1;smg2=0;smg3=1;smg4=1; //百位P1=over[1];delay_140us(20) ;smg1=1;smg2=1;smg3=0;smg4=1; //十位P1=over[2];delay_140us(20);P1=0xff;smg1=1;smg2=1;smg3=1;smg4=0; //个位P1=over[3];delay_140us(20);P1=0xff;}beep=!beep;for(i=0;i<150;i++){smg1=0;smg2=1;smg3=1;smg4=1; //P1=over[1];delay_140us(20);P1=0xff;smg1=1;smg2=0;smg3=1;smg4=1; //百位P1=over[2];delay_140us(20);P1=0xff;smg1=1;smg2=1;smg3=0;smg4=1; //十位P1=over[3];delay_140us(20);P1=0xff;smg1=1;smg2=1;smg3=1;smg4=0; //十位P1=over[4];delay_140us(20);P1=0xff;}beep=!beep;for(i=0;i<150;i++){smg1=0;smg2=1;smg3=1;smg4=1; //P1=over[2];delay_140us(20);P1=0xff;smg1=1;smg2=0;smg3=1;smg4=1; //百位P1=over[3];delay_140us(20);P1=0xff;smg1=1;smg2=1;smg3=0;smg4=1; //十位P1=over[4];delay_140us(20);P1=0xff;smg1=1;smg2=1;smg3=1;smg4=0; //十位P1=over[4];delay_140us(20);P1=0xff;}beep=!beep;for(i=0;i<150;i++){smg1=0;smg2=1;smg3=1;smg4=1; //P1=over[3];delay_140us(20);P1=0xff;smg1=1;smg2=0;smg3=1;smg4=1; //十位P1=over[4];delay_140us(20);P1=0xff;smg1=1;smg2=1;smg3=0;smg4=1; //十位P1=over[4];delay_140us(20);P1=0xff;smg1=1;smg2=1;smg3=1;smg4=0; //十位P1=over[4];delay_140us(20);P1=0xff;}beep=!beep;for(i=0;i<150;i++){smg1=0;smg2=1;smg4=1; //P1=over[4];delay_140us(20);P1=0xff;smg1=1;smg2=0;smg3=1;smg4=1; //十位P1=over[4];delay_140us(20);P1=0xff;smg1=1;smg2=1;smg3=0;smg4=1; //十位P1=over[4];delay_140us(20);P1=0xff;smg2=1;smg3=1;smg4=0; //十位P1=over[4];delay_140us(20);P1=0xff;}beep=1;smg1=1;smg2=1;smg3=1;smg4=1;}void main(){smg1=0;smg2=0;smg3=0;smg4=0;// open();smg1=1;smg2=1;smg3=1;smg4=1;beep=1;led1=0;led2=1;/***红外***/EA=1;IT0=1;EX0=1; //开机时就必须开启irdata=1; //红外口初始化/*测速*/IT1=1; //TR1=1-EX1=1;/*PWM*/ //控制着测速、显示、PWM调制ET0=1;TR0=0;TH0=0xff; //装满,不用PWMTL0=0xff-PWM; //控制灯亮的时间TMOD=0x11; //设置定时器/*计数*/ET1=1;TH1=0xd8;TL1=0xf0; //10msTR1=0;PWM=0x01;while(!ppm);led1=0;led2=1;while(!yy){/******************数字键*********************/EX0=0;TR0=1;TR1=1;if(newh==0){display(PWM,vv*5/4) ; }if(newh==1){close();delay_140us(3000);overgame();yy=1;}while(yy){smg1=1;smg2=1;smg3=1;smg4=1;beep=1;P0=0xff;}}}参考文献[1] 扬帆,吴晗平等. 传感器技术及其应用. 北京:化学工业出版社,2010.10[2] 秦实宏,徐春晖. MCS-51单片机原理及应用. 武汉:华中科技大学出版社[3] 康华光,陈大钦,张林. 电子技术基础. 北京:高等教育出版社,2006.1。

相关主题