还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
.摘要1测速是工农业生产中经常遇到的问题,学会使用单片机技术设计测速仪表具有很重要的意义要测速,首先要解决是采样的问题在使用模拟技术制作测速表时,常用测速发电机的方法,即将测速发电机的转轴与待测轴相连,测速发电机的电压高低反映了转速的高低使用单片机进行测速,可以使用简单的脉冲计数法只要转轴每旋转一周,产生一个或固定的多个脉冲,并将脉冲送入单片机中进行计数,即可获得转速的信息系统结构
2.本文主要针对电机的转速进行测量,然后用数码管把电机的转速显不出来!本装置主要有两部分构成1光电测速部分2测得的脉冲处理处理和显示部分!光电测速部分主要由光电传感器构成!脉冲处理部分主要经施密特触发器对接收到的脉冲进行波形校正,由单片机的T1口输入,经80c51处理后显示输出电机的转速下面我们来了解一下光电测速部分!O、脉冲信号的获得3可以有多种方式来获得脉冲信号,这些方法有各自的应用场合下面逐一进行分析LED_SEG2=0;LED DAT=table[Disbuf
[2]];Delay1;P2|二OxFO;LED_SEG3=0;LED_DAT=table[Disbuf
[3]];Delay1;P2|二OxFO;〃计算转速,并把结果放入数码管缓冲区void ClacSpeeduint speed;uint PlusCounter;PlusCounter=TH1*256+TL1;speed=K*PlusCounter/PLUS_PER/60;〃K是校准系数,如速度不准,调节K的大小Disbuf
[0]=speed/1000%10;Disbuf
[1]二speed/100%10;Disbuf
[2]=speed/10%10;Disbuf
[3]=speed%10;//初始化定时器TOTMOD=OxfO;〃定时10毫秒/*Timer0mode1withvoid inittimerOsoftware gate*/TMOD=0x01;/*GATEO=O;C/TO#=O;M10=0;M00=l;THO=OxCO;/*init values*/TLO=0x00;ETO=1;/*enable timerO interrupt*/EA=1;/*enable interrupts*/TRO=1;/*timerO run*///延时函数void Delayuintmsuchar i;whilems--for i=0;i100;i++;〃初始化定时器T1void init timerl TMOD=OxOF;/*Counter1mode1with softwaregateTMOD0x50;/*GATEO=O;C/TO#=1;M10=0;M00=l;TH1=0x00;/*init values*/TL1=0x00;ET1=1;/*enable timerlinterrupt*/EA=1;/*enable interrupts*/TR1=1;/*timerl run*/
6.软件仿真:如上图光电传感器测得脉冲由555的2或5脚输入,由555的三脚输出,接入AT9c
7.用protel DXP画出原理图如下
8、根据原理图得到的PCB
9、硬件调试结果这次课程设计,主要对电机进行测速,在电机的码盘上转了10个孔,没10ms对电机测量一次转速!由于工具不太足,做硬件的时候遇到了不少的困难!总体来说能够实现其基本功能!电机转速700—-1500r/min.尔传感器
3.
1.霍尔传感器是对磁敏感的传感元件,常用于开关信号采集的有CS
3020.CS3040等,这种传感器是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常是集电极开路(0C)门输出,工作电压范围宽,使用非常方便如图1所示是CS3020的外形图,将有字面I此主题相关图片如下:
1.jpg对准自己,三根引脚从左向右分别是Vcc,地,输出O图1CS3020外形图使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴的圆周上粘上一粒磁钢,让霍尔开关靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出如果在圆周上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出在粘磁钢时要注意,霍尔传感器对磁场方向敏感,粘之前可以先手动接近一下传感器,如果没有信号输出,可以换一个方向再试这种传感器不怕灰尘、油污,在工业现场应用广泛光电传感器
3.
2.光电传感器是应用非常广泛的一种器件,有各种各样的形式,如透射式、反射式等,基本的原理就是当发射管光照射到接收管时,接收管导通,反之关断以透射式为例,如图2所示,当不透光的物体挡住发射与接收之间的间隙时,开关管关断,否则打开为此,可以制作一个遮光叶片如图3所示,安装在转轴上,当扇叶经过时,产生脉冲信号当叶片数较多时,旋转一周可以获得多个脉冲信号多C图2光电传感器的原理图图3遮光叶片光电编码器
3.
3.光电编码器的工作原理与光电传感器一样,不过它已将光电传感器、电子电路、码盘等做成一个整体,只要用连轴器将光电传感器的轴与转轴相连,就能获得多种输出信号它广泛应用于数控机床、回转台、伺服传动、机器人、雷达、军事目标测定等需要检测角度的装置和设备中如图4所示,是某光电编码器的外形,二图4成品光电编码器这次课设我选的是光电传感器,采用穿透法测量电机转速光电传感器的原理上面有详细的介绍当不透光的物体挡住发射与接收之间的间隙时,开关管关断,否则打开为此,可以制作一个遮光叶片如图3所示,安装在转轴上,当扇叶经过时,产生脉冲信号当叶片数较多时,旋转一周可以获得多个脉冲信号这里我们才用转10个孔的方式!在一分钟的时间内,假如产生了10000脉冲,则电机的转速就为lOOOr/min.、硬件连接4测速的方法决定了测速信号的硬件连接,测速实际上就是测频,因此,频率测量的一些原则同样适用于测速通常,可以用计数法、测脉宽法和等精度法来进行测试所谓计数法,就是给定一个闸门时间,在闸门时间内计数输入的脉冲个数;测脉宽法是利用待测信号的脉宽来控制计数门,对一个高精度的高频计数信号进行计数由于闸门与被测信号不能同步,因此,这两种方法都存在±1误差的问题,第一种方法适用于信号频率高时使用,第二种方法则在信号频率低时使用等精度法则对高、低频信号都有很好的适应性这里为简化讨论,仅采用计数法来进行测试如上图因为光电传感器不好仿真,这里我们采用了555芯片构成一个施密特触发器,由.经89c51编程处理后由P1口输出通过数码管显示出转速!、实验程序及分析5测量转速,使用光电传感器,被测电机带动纸片旋转,我们在纸片上开了10小孔,电机每旋转一周就会产生10个脉冲,产生12个脉冲,要求将转速值(转/分)显示在数码管上实验程序如下#define ucharunsigned char#define uintunsigned int#define ulongunsigned long#define LED_DAT Plsbit LED_SEG0=P03;sbit LED_SEG1=P(T2;sbit LED_SEG2=PO^l;sbitLED_SEG3=POO;//sbit pin_SpeedSenser=P3c5;〃光电传感器信号接在T1上4define TIME_CYLC100〃12M晶振,定时器10ms中断一次我们1秒计算一次转速〃1000ms/10ms=100^define PLUS_PER10〃码盘的齿数,这里假定码盘上有10个齿,即传感器检测到10个脉冲,认为1圈unsigned charcode tablet.={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar dataDisbuf
[4];//显示缓冲区uint Tcounter=0;〃时间计数器bit Flag_Fresh=0;//刷新标志bit Flag_clac=0;//计算转速标志bit Flag_Err=0;〃超量程标志〃在数码管上显示一个四位数void DisplayFresh;〃计算转速,并把结果放入数码管缓冲区void ClacSpeed;〃初始化定时器TOvoid init_timer0;〃初始化定时器T1void inittimerl;〃延时函数void Delayuintms;void it_timerOinterrupt1/*interrupt addressis0x000b*/TFO=0;//d定时器TO用于数码管的动态刷新THO=OxCO;/*init values*/TLO=0x00;Flag_Fresh=1;Tcounter++;ifTcounterTIME_CYLC{Flag_clac=1;〃周期到,该重新计算转速了void it_timerlinterrupt3/*interrupt addressis0x001b*/TF1=0;〃定时器T1用于单位时间内收到的脉冲数〃要速度不是很快,T1永远不会益处Flag_Err=1;〃如果速度很高,我们应考虑另外一种测速方法,脉冲宽度算转速void mainvoidDisbuf[O]=0;//开机时,初始化为0000Disbuf
[1]=0;Disbuf
[2]=0;Disbuf
[3]=0;init_timerO;inittimerl;while1ifFlag_Fresh{Flag_Fresh=0;DisplayFreshO;//定时刷新数码管显示if Flag_clac{Flag_clac=0;ClacSpeedO;〃计算转速,并把结果放入数码管缓冲区Tcounter=0;〃周期定时清零TH1=TL1=0x00;〃脉冲计数清零if Flag_Err〃超量程处理〃数码管显示字母EEEEDisbuf[O]=0x9e;〃开机时,初始化为0000Disbuf
[1]=0x9e;Disbuf
[2]=0x9e;Disbuf
[3]=0x9e;while1{DisplayFresh;〃不再测速等待复位i〃在数码管上显示一个四位数void DisplayFreshP2|二OxFO;LED_SEGO=0;LED_DAT=table[Disbuf[O]];Delay1;P2|=OxFO;LED_SEG1=0;LED DAT=table[Disbuf
[1]];Delay1;P2=OxFO;。
个人认证
优秀文档
获得点赞 0