资源描述:
《基于proteus仿真的转速测量系统.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、基于Proteus仿真的转速测量系统设计摘要:利用增量式编码器的信号特征、proteus软件的基本功能,设计以AT89C52单片机为控制中心的编码器转速测量电路,详细分析软件实现的方法,并给出c语言程序,利用Proteus软件进行仿真得到预期的测量结果。本文便是运用AT89C52单片机控制的智能化转速测量仪。电机在运行过程中,需要对其进行监控,转速是一个必不可少的一个参数。本系统基于proteus仿真对电机转速进行测量,并可以和PC机进行通信,显示电机的转速,并观察电机运行的基本状况。本设计主要用AT89C52作为控制核心,由
2、增量式编码器、LED数码显像管、HIN232CPE电平转换、及RS232构成。详细介绍了单片机的测量转速系统及PC机与单片机之间的串行通讯。充分发挥了单片机的性能。本文重点是测量速度并显示在5位LED数码管上。其优点硬件是电路简单,软件功能完善,测量速度快增、精度高、控制系统可靠,性价比较高等特点。关键字:单片机;转速;编码器一、设计任务在工程实践中,经常会遇到各种需要测量转速的场合,测量转速的方法分为模拟式和数字式两种。模拟式采用测速发电机为检测元件,得到的信号是模拟量。数字式通常采用光电编码器,霍尔元件等为检测元件,得到的
3、信号是脉冲信号。随着微型计算机的广泛应用,特别是高性能价格比的单片机的出现,转速测量普遍采用以单片机为核心的数字式测量方法。本课程需要设计一个以单片机为控制中心的编码器转速测量系统,编码器信号利用信号源直接输入。七段数码发光管作为转速显示输出。本组通过设计整个系统方案,单片机选型为AT89C52,源代码进行设计以及注释,绘制出系统硬件电路图以及控制软件的主程序与子程序的流程图,并且成功的基于proteus进行了系统仿真。二、总体设计三、硬件设计利用ProteusISIS新建项目,通过左侧栏区得P命令,在Pickdevices窗
4、口中选择系统元器件。根据需要找出所需元器件,排列,然后进行布线。如图所示,采用AT89c52单片机作为控制器,使用(7SEG-MPX4-CA-RED)4位七段数码发光管作为转速输出,可以输出0-9999之间的数值。单片机P1口8个引脚接在LED显示器的段选码(a、b、c、d、e、f、g、dp)引脚上,单片机的P2口的4个引脚接在LED显示器位选码(1、2、3、4)引脚上,电阻起限流作用,采用总线方式接线使电路更为简洁。为简化设计编码器信号利用信号源直接输入P3.4和P0.4口以代替。在工具栏内选中信号源工具,在对象选择窗口选择
5、“PLUSE”对象,分别连接在P3.2、P0.4作为编码器A、B路信号、参数设为类型为plus、频率为1kHz、电压幅值为5V模拟正向转动时将B路信号延时250微秒(1kHz时1周期对应1ms,滞后90度即延时250微秒)为区分编码器是正转、反转以确定对计数脉冲进行递增或递减操作。利用介入P3.2口信号的下降沿触发外部中断INTO,在中断服务程序中,判断此时P0.4口的电压,如果是高电平,则为正向运转,正向运行标志位P0.5置1,并对脉冲计数加1,相反如果此时P0.4口为低电平,则为反向运转,将运行方向标志清零,对脉冲数减1。
6、一、软件设计1、软件设计思路分析2、程序流程图主程序流程图1、源代码#include#include#defineucharunsignedchar#defineuintunsignedintsbitSIGA=P0^3;//A路信号sbitSIGB=P0^4;//B路信号sbitDIREC=P0^5;//方向指示灯ucharflag,m;uintpcount,temp,temp1,m1;ucharcodetable[18]={0xc0,0xf9,0xb0,0x99,0x92,0x82,0
7、xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xf9,0x0c,};uchara[4]=0;uchar*bp;voidinit(void){DIREC=1;pcount=0;TMOD=0x01;//定时器0方式1TH0=0x3c;TL0=0xb0;EA=1;ET0=1;//开中断IT0=1;EX0=1;TR0=1;}voidtim0(void)interrupt1using1//定时器中断程序{TH0=0x3d;TL0=0xb0;temp1=pcount-temp;//计算
8、T0的时间内脉冲数temp=pcount;flag=1;//设标志}voidint0(void)interrupt0using0//外部中断程序{if(SIGB==1)//B信号为高电平{DIREC=1;//正向运行pcount++;}else{DIREC=0;//反向运行p