基于Proteus仿真的转速测量系统设计摘要:利用增量式编码器的信号特征、Proteus软件的基本功能,设计以AT89C52单片机为 控制中心的编码器转速测量电路,详细分析软件实现的方法,并给出c语言程序,利用 Proteus软件进行仿真得到预期的测量结果本文便是运用AT89C52单片机控制的智能化转速测量仪电机在运行过程中,需要对 其进行监控,转速是一个必不可少的一个参数本系统基于proteus仿真对电机转速进行测 量,并可以和PC机进行通信,显示电机的转速,并观察电机运行的基本状况本设计主要用AT89C52作为控制核心,由增量式编码器、LED数码显像管、HIN232CPE 电平转换、及RS232构成详细介绍了单片机的测量转速系统及PC机与单片机ZI'可的串行 通讯充分发挥了单片机的性能本文重点是测量速度并显示在5位LED数码管上其优点硕件是电路简单,软件功能完善,测量速度快增、精度高、控制系统可靠,性价 比较高筹特点关键字:单片机;转速;编码器—、设计任务在工程实践中,经常会遇到各种需要测量转速的场合,测量转速的方法分为 模拟式和数字式两种模拟式采用测速发电机为检测元件,得到的信号是模拟量。
数字式通常采用光电编码器,霍尔元件等为检测元件,得到的信号是脉冲信号 随着微型计算机的广泛应用,特别是高性能价格比的单片机的出现,转速测量普 遍采用以单片机为核心的数字式测量方法本课程需要设计一个以单片机为控制小心的编码器转速测量系统,编码器信 号利用信号源直接输入七段数码发光管作为转速显示输出本组通过设计整个 系统方案,单片机选型为AT89C52,源代码进行设计以及注释,绘制出系统硬件 电路图以及控制软件的主程序与子程序的流程图,并II成功的基于proteus进行 了系统仿真二、 总体设计三、 硬件设计利用Proteus ISIS新建项Fl,通过左侧栏区得P命令,在Pick devices 窗口中选择系统元器件根据需要找出所需元器件,排列,然后进行布线如图所示,采用AT89c52单片机作为控制器,使用(7SEGT1PX4-CA-RED) 4位七段数 码发光管作为转速输出,可以输出0-9999 Z间的数值单片机P1 口 8个引脚接 在LED显示器的段选码(a、b、c、d、e、f、g、dp)引脚上,单片机的P2 口的 4个引脚接在LED显示器位选码(1、2、3、4)引脚上,电阻起限流作用,采用 总线方式接线使电路更为简洁。
为简化设计编码器信号利用信号源直接输入P3. 4和P0. 4 口以代替在工具 栏内选中信号源工具,在对象选择窗口选择“PLUSE”对彖,分别连接在P3.2、 P0.4作为编码器A、B路信号、参数设为类型为plus.频率为1kHz、电床幅值 为5V模拟正向转动时将B路信号延时250微秒(1kHz吋1周期对应Ims,滞后 90度即延时250微秒)为区分编码器是正转、反转以确定对计数脉冲进行递增或递减操作利用介 入P3. 2 口信号的下降沿触发外部中断INTO,在中断服务程序中,判断此时P0.4 口的电压,如果是高电平,则为正向运转,正向运行标志位P0.5置1,并对脉 冲计数加1,相反如果此时P0.4 口为低电平,则为反向运转,将运行方向标志清零,对脉冲数减1 :"fA,上C2:・ ・#i ncIude#def i ne uchar uns i gned char#def i ne ui nt unsigned intsbit SIGA=P0^3;//A 路信号sbit SIGB=P0^4;//B 路信号sbit DIREC=P(f5;//方向指示灯uchar flag, m;u i nt pcount, temp, tempi, ml;uchar code table[18] = {0xc0, 0xf9, OxbO, 0x99, 0x92, 0x82, 0xf8, 0x80,0x90, 0x88, 0x83, 0xc6, 0xa1,0x86, 0x8e, Oxff, Oxf9,0x0c,};uchar a[4]=0;uchar *bp;void i ni t (void)DIREC=1;pcount二0;TMOD二0x01 ;//定吋器0方式1THO二0x3c;TLO二OxbO;EA 二 1;ETO二1;//开中断IT0=1;EX0=1;TRO二1;}void t imO(void) i nterrupt 1 us i ng 1//定时器中断程序{THO二0x3d;TLO二OxbO;tempi =pcount-temp;//计算TO的时问内脉冲数temp二pcount;f lag二1 ;//设标志}void into (void) i nterrupt 0 us i ng 0//外部中断程序{if(SIGB=1)//B信号为高电平{DIRECT;//正向运行pcount++;}e I se {DIREC=O;//反向运行pcount——;}} void delayms(uchar ms)//延时程序uchar i;while (ms一一){for (i二0;i<20;i++);}}void displayl (char idata *ap)//显示子程序{uchar seI, i ;P2二0;//关显示sei二0x08;//选最左边 ledfor (i二0;i<4;i++){P1=table[*ap];//送断码P2二sei;//送位选码delayms (500);ap++;P2二 0;sei 二 sel>>1 ;//右移一位}1void chang(i nt num)//转换子程序 {uchar t;i nt num1;t 二0;if (num<0)//取绝对值{num二-num;}num1二20*num; //转换成每秒脉冲数for (t=0;t<4;t++) a [t] =num1 %10; //取余数送数组anum1=num1/10;// 除 10}}void ma i n (){Init ();do {if(flag=1){血二七emp1 ;chang(ml);flag二0;}bp二&a[0];displayl (bp);}whi le(1);}五、仿真在Keil vsionS环境下,新建Keil项H,选用AT89C52单片机作为工作 CPU,新建kcsj. c文件并加载至项目中,在“Option for tonget”中打开“Output” 窗口,选择“Crest hex file"选项,工作主频率设定为12MHz0设计程序并进 行编译,编译成功后将产生kcsh. hex文件。
在proteus中选中AT89C52进彳亍设 置,设置单片机工作频率为12MHz,按照正确的路径加载kcsj. hex文件单击 Proteus ISIS编辑环境下的运行仿真按钮,针对调试仿真得到的结果若需修 改硬件在Proteus中进行,软件在Keil vision3中修改,重新生成hex文件 输入信号频率设为1kHz,仿真可以得到结果,数码管显示1000即采集脉冲数, 与编码器设定频率完全一致六、设计总结。