您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 基于LabVIEW的电机转数显示
基于LabVIEW的电机转数显示摘要:利用Proteus软件,单片机系统实现步进电机的正转和反转,LabVIEW显示界面显示上位机串口的配置和电机运转的圈数。实现了单片机控制系统下位机与LabVIEW上位机通过串口来进行通信的功能。关键词:步进电机,串口通信,联合仿真,LabVIEW0引言本系统由Proteus单片机电路和LabVIEW上位机联合仿真组成。下位机使用proteus软件联合keil利用51单片机最小系统来仿真实现步进电机的正转和反转,使用LabVIEW制作的上位机显示界面和下位机进行通信。上位机显示电机正转和反转的转数。1下位机原理正反转可控步进电机系统由单片机最小系统、步进电机和COM控件组成,该系统是实际电路的一个仿真,通过虚拟串口能够实现和上位机之间的通信。熟悉步进电机四相双四拍方式的驱动原理。其硬件原理图如图一:图1硬件原理图其中步进电机由ULN2003A驱动,P1.0控制电机的正转,P1.1控制电机的反转,P1.2控制电机运转的停止,COM口通过虚拟串口连接上位机。实现功能:P1.0“正转”按钮按下,步进电机实现正转,计数器aa记下正转的圈数;P1.1“反转”按钮按下,步进电机实现反转,计数器bb记下反转的圈数;P1.2“停止”按钮按下,步进电机停止运转,通过串口发送正转和反转的圈数给上位机。调试运行时刻图如图2。图2运行时刻图COM口配置:通过虚拟串口软件VirtualSerialPortDriver配置串口,COM1写入,COM2读出。串口配置如图3。图3串口配置COMPIM串口设置如图4,其中波特率取9600bps,数据位取8位。图4COMPIM串口配置2上位机设计虚拟仪器软件软件架构(VirtualInstrumentsSoftwareArchitecture,VISA),实质上是一个I/O软件库及其规范的总称。VISA是应用于仪器编程的标准加应用程序接口,是工业界通用的仪器驱动器标准API(应用程序接口),采用面向对象编程,具有很好的兼容性、扩展性和独立性。用户可用一个API控制包括VXI、GPIB及串口仪器在内的不同种类的仪器,它还支持多平台工作、多接口控制,是一个多类型的函数库。在LabVlEW中编写的VISA接口程序,当外部设备变更时,只需要更换几个程序模块即可使用,简单方便而且开发效率高。本次设计采用VISA读写串口设备,设计出了一个显示界面。上位机显示界面如图5。图5上位机显示界面VISA资源配置中串口选用COM2口,与COM1口配对,其总程序如下图图6总程序框图在LabVIEW中,串口通信的基本步骤大致分为3步:第一,初始化串口,利用VISA配置串口节点设定串口的端口、波特率、停止位、校验位、数据位,需要注意的是在LabVIEW中串口号是从0开始编号的。第二,读写串口,利用VISA读取节点和VISA写入节点对串口进行读写。第三,关闭串口,停止所有读写操作。串口初始化节点见图7所示,该节点主要用于串口的初始化,主要参数意义如下:VISA资源名称:指PC的串口名,例如:COMl、COM2等。波特率:串口速率,默认为9600bps。数据比特:一帧信息中的位数,LabVIEW中允许5~8位数据,默认为8。奇偶:奇偶校验位,可选为无校验、奇校验或偶校验,默认为无校验。停止位:一帧信息中的停止位的位数,可选为1位、1.5位或2位。流控制:设置传输机制使用的控制类型,可选为None、XON/XOFF软件流控或RTS/CrS硬件流控,默认为None。终止符:设置一帧数据的结束符,即当接收串口数据时,当收到终止符时,软件自动结束一帧数据接收。串口读操作节点见图8所示,字节总数:要读取的字节数量;读取缓冲区PC串口收到的数据;返回数:实际读取的字节数,字节总数应大于或等于返回数,否则会丢失数据。串口用完要关闭,关闭串口采用如图9所示VISA关闭节点。由于LabVIEW项目表现为一种层次结构,为了将底层发生的错误信息原封不动地传递到顶层VI,LabVIEW利用错误簇来作为传递错误信息的载体。本设计采用简易错误处理器VI来显示发生的错误信息,如发生错误,该VI返回错误描述,或选择性显示对话框,如图10。图7VISA配置串口图8VISA读取图9VISA关闭图10简易错误处理器附录1#includereg51.h#includeabsacc.hsbitp10=P1^0;sbitp11=P1^1;sbitp12=P1^2;#defineUP20#defineDOWN30#defineSTOP40#defineuintunsignedcharunsignedchartemp,aa,bb;voiddelay()//延时100ms{unsignedi,j;for(i=100;i0;i--)for(j=110;j0;j--);}/*****************串口初始化函数*************************/voidinit(){TMOD=0x20;//设定T1定时器为工作方式2TH1=0xFD;//T1定时器装初值TL1=0xFD;TR1=1;//T1定时器赋初值REN=1;//允许串口接收SM0=0;//设定串口工作方式SM1=1;EA=1;//开总中断ES=1;//开串口中断}main(){init();while(1){{if(p10==0){temp=UP;//控制正转P2=0xFF;delay();aa=0;}if(p11==0){temp=DOWN;//控制反转P2=0xFF;delay();bb=0;}if(p12==0){temp=STOP;//控制停止}switch(temp){caseDOWN:P2=0x03;//控制反转delay();P2=0x06;delay();P2=0x0c;delay();P2=0x09;delay();aa++;SBUF=aa;break;caseUP:P2=0x03;//控制正转delay();P2=0x09;delay();P2=0x0c;delay();P2=0x06;delay();bb++;SBUF=bb;break;caseSTOP:P2=0xFF;//控制停止ES=0;SBUF=aa;while(!TI);TI=0;SBUF=bb;while(!TI);TI=0;ES=1;break;}}}}
本文标题:基于LabVIEW的电机转数显示
链接地址:https://www.777doc.com/doc-2570345 .html