您好,欢迎访问三七文档
基于LabVIEW的温度检测声光报警系统指导教师:班级:学号:姓名:基于LabVIEW的温度检测声光报警系统摘要:介绍了LabVIEW中VISA串口通信函数的功能;通过ATmega128单片机采集温度数据,利用LabVIEW的开发平台编写通信源程序,通过其串口实现二者之间的数据通讯,达到监视温度,加热,降温的目的。关键词:LabVIEW,单片机,串口,温度采集,温度控制,报警单元绪论:本文主要利用LabVIEW软件创建一个上位机窗口,作为监控软件。监控窗口面板上设有通讯串口的串口号,波特率,校验位,数据位以及停止位;数字量显示模块,温度计显示模块以及XY坐标图显示模块,另设报警灯显示模块。可以便于直接观察。根据使用需要,设置波特率为9600,校验为设置为NONE,数据位设置为8,停止位设置为1.利用ATmega128单片机处理由DS18B20温度芯片采集回来的温度值,并通过串口发送到监控面板上。在监控面板上对温度进行分析,当温度值小于21度时,定义为温度过低,并且打开温度低报警指示灯,此时数据通过串口发送给ATmega128单片机,打开现场低温报警指示灯,同时报警,启动加热装置;当温度大于24度时,定义为温度过高,同时温度高报警指示灯亮起,数据通过串口发送给ATmega128单片机,打开现场高温报警指示灯,同时报警,启动制冷装置。系统主要研究内容1.LabVIEW部分的设计在LabVIEW中编制的程序叫做虚拟仪器程序,简称VI。一个VI包括前面板和程序框图面板。前面板类似实际仪表面板,可以放置诸如旋钮,按钮,显示元件和文本框等。框图程序是实现程序功能的核心部分,包括以图标为代表的常数、函数和VI程序等,并通过连接引线引导数据流,编写和调试程序都很直观方便。1.1LabVIEW通讯资源VISA简介VISA是虚拟仪器软件结构框架(virtualinstrumentationsoftwarearchitecture)的简称。它本身不提供仪器编程能力,是一个调用底层代码来控制硬件的高层API(应用程序接口),为高级仪器驱动程序和低级I/O驱动程序之间提供了一个层,使得高级仪器驱动程序和硬件无关,更大大提高了仪器(目前主要是VXI仪器,CPIB仪器,RS232仪器)的互换性。1.2VISA库中的串口通讯函数在LabVIEW里使用VISA,必须安装NI-VISA程序包,安装后与串口通信相关的VISA函数位于serial子模板上,如下图:其中共有8个操作函数,下面分别介绍在串口通讯中常用到的4个函数。1.VISA配置串口功能:设定波特率,数据位,停止位,奇偶校验位,流控制,超时处理,终止符和终止符使能等参数,将VISA资源名称指定的串口按特定设置初始化。2.VISA写入功能:将“写入缓冲区”的数据写入VISA资源名称指定的串口。3.VISA读取功能:从VISA资源名称所指定的串口中读取指定字节的数据,并将数据返回至读取缓冲区。4.VISA关闭功能:关闭VISA资源名称指定的串口会话或事件对象。1.3由LabVIEW设计的显示界面前面板:注释:1.调试时串口号是变化的,点击“请选择串口号”右边的下拉按钮会出现刷新提示,单击刷新,可以连接到当前工作的串口上。2.所用LabVIEW串口通讯程序的波特率设置为9600,无奇偶校验,8位数据位,一位停止位。后面板如下:2.单片机部分的设计2.1硬件部分2.11ATmega128单片机内部有两个功能强大的全双工串行口,每个串行口都有4种工作方式,波特率可用软件设置。有4个物理上独立的接收,发送缓冲器SBUF,对外也有4个独立的接收和发送信号线RXD0,TXD0,RXD1,TXD1。2.12本设计采用RS-232串行接口标准。由于ATmega128单片机系统的信号输入输出均为TTL电平,而TTL逻辑电平和RS-232的电气特性完全不同,RS-232的逻辑0电平规定为+3v~~+15v之间,逻辑1电平为—3v~~—15v之间;而TTL逻辑0电平规定为0.4V左右,逻辑1电平规定为3.8V左右。因此,必须要外接电路实现TTL电平到RS232电平的转换。本设计采用MAX232实现此转换,并外接USB转串口连接线。2.13利用DS18B20温度芯片进行数据采集。DS18B20数字温度计提供9位温度读数,指示器件的温度,信息经过单线接口送入DS18B20或从DS18B20送出。读,写和完成温度变换所需的电源可以由数据线本身提供。2.14利用风扇的启停达到降温的目的。风扇由ATmega128单片机的PD0口控制,高电平开启,低电平关闭。2.15利用加热器的启停达到加热的目的。加热器由ATmega128单片机的PD1口控制,高电平开启,低电平关闭。2.16报警单元由蜂鸣器模块构成。蜂鸣器由ATmega128单片机的PC5口控制,高电平开启,低电平关闭。硬件电路图如下:2.2软件部分下面给出单片机软件部分的主要程序。波特率设置为9600,用定时器1产生波特率,串口工作在方式1,无奇偶校验。程序见附录1。3.结论本文利用单片机做为前端数据采集(温度采集),通过串口实现了与LabVIEW的数据通讯。本程序人机界面设计合理,操作方面,显示直观。通过本设计可以进一步掌握LabVIEW的编程方法,特别是串口函数的应用。LabVIEW是当今最流行的图形化编程环境,由于其采用图形化的编程方式,因此也被称作G语言。LabVIEW是目前国际上唯一的基于数据流的编译型开发软件,与基于文本的编程语言不同,LabVIEW的程序由图形语言构成,用简单或图标提示的方法选择功能,并用引线把各种功能图形连接起来的简单图形编程方式,从而大大提高了工作效率,减轻了科研和工程技术人员的工作量。由于LabVIEW软件简洁直观,功能强大灵活,目前广泛应用于自动化测量系统、工业过程自动化、实验室仿真等各个领域。4.参考文献杨乐平,LabVIEW程序与应用电子工业出版社刘萍萍,虚拟仪器与程序设计北京航空航天大学出版社马潮ATmega128原理与开发应用指南北京航空航天大学出版社附录:主要程序:#includeavr/io.h#includeavr/interrupt.h#includedelay.h#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlonguchartemp[6];voidsend_data(uchardata){uchari;for(i=0;i8;i++)//循环8次{PORTC&=~(17);//置低CLKif(data&0x80)//判断数据极性PORTC|=(16);//如果数据为1置高elsePORTC&=~(16);//否则置低data=1;//左移一位PORTC|=(17);//置高CLK}}voidwr_command(uchardata){send_data(0xf8);send_data(data&0xf0);//写命令字高4位//命令字:通知所发送的数据为控制指令send_data(data4);//写命令字低4位delay_1ms();}voidwr_byte(uchardata){send_data(0xfa);//命令字:通知所发送的数据为显示数据send_data(data&0xf0);//写数据高4位send_data(data4);//写数据低4位delay_1ms();}voidsetaddress(ucharx,uchary){ucharmove;if(x==1){move=0x80+y;}if(x==2){move=0x90+y;}if(x==3){move=0x88+y;}if(x==4){move=0x98+y;}wr_command(move-1);delay_1ms();}voidLCD_write(ucharx,uchary,uchar*p){setaddress(x,y);while(*p){wr_byte(*p);p++;}}voidchushihua_1820(){PORTD&=~(17);//发送低电平信号delay_nus(3000);//480us以上的低电平信号可以使18B20复位DDRD&=~(17);delay_nus(40);//15~70us,等待18B20复位完成while(PIND&(17));//PIND7引脚如果为1(高电平)保持等待;为0跳出DDRD|=(17);PORTD|=(17);delay_nus(150);//70~240us}charread_1820(){chartemp=0,k,n;for(n=0;n8;n++){PORTD&=~(17);//PD7置零//delay_nms(2);PORTD|=(17);//PD7置一//delay_nms(2);DDRD&=~(17);//PD7置零k=(PIND&(17));//读数据,从低位开始if(k)temp|=(1n);elsetemp&=~(1n);delay_nus(50);//70~120usDDRD|=(17);}return(temp);}voidwrite_1820(charx){charm;for(m=0;m8;m++){PORTD&=~(17);if(x&(1m))//写数据,从低位开始PORTD|=(17);elsePORTD&=~(17);delay_nus(40);//15~70usPORTD|=(17);}PORTD|=(17);}voidusart_init(){cli();UCSR0B=(1RXEN0)|(1TXEN0)|(1RXCIE0);UBRR0H=0;UBRR0L=51;UCSR0C=(1UCSZ01)|(1UCSZ00)|(1UCPOL0);sei();}voidsend_usart(ucharc)//向串口发送字符{while(!(UCSR0A&(1UDRE0)));UDR0=c;}unsignedchargetchar()//接收串口发送来的字符{while(!(UCSR0A&(1RXC0)));returnUDR0;//返回接收来的字符给getchar()}voidport_init(){DDRC|=(12)|(14);}intmain(){port_init();usart_init();DDRC=(16)|(17);PORTC=(16)|(17);wr_command(0x30);//功能设定delay_1ms();wr_command(0x0c);//显示状态开关delay_1ms();wr_command(0x01);//清除屏幕delay_1ms();wr_command(0x06);//进入点设定delay_1ms();LCD_write(1,1,当前温度是:);while(1){uchartemh,teml;//定义所用符号ulongcount;uinttempcount;uinti;chushihua_1820();//复位18b20write_1820(0xcc);//跳过ROM命令write_1820(0x44);//温度转换命令chushihua_1820();//复位18b20write_1820(0xcc);//跳过ROM命令write_1820(0xbe);//读暂存存储器命令teml=read_1820();//读数据低位temh=read_1820();//读数据高位count=(temh*257+teml)*6.25;//计算具体温度值tempcount=count;for(i=5;i0;i--)//取出每位中的数据{temp[i]=tempcount%10;//temp[i]中的数据就是十进制数据tempcount/=10;//除10取整数}setaddress
本文标题:VISA串口通信
链接地址:https://www.777doc.com/doc-2253735 .html