《本系统AVR与虚拟仪器.docx》由会员分享,可在线阅读,更多相关《本系统AVR与虚拟仪器.docx(7页珍藏版)》请在第壹文秘上搜索。
1、本系统AVR与虚拟仪器张兴成20051001168摘要:本系统利用DS18B20数字温度传感器与Atmel公司生产的AVR系列ATmega16单片机采集被测环境温度,将测得的数据经串口传给计算机。计算机利用LabVIEW的VISA读取串口数据并进行处理与显示,实现基于VlSA的串口温度采集监控。关键词:DS18B20温度传感器AVR单片机VISA串口1、概述实时数据采集是工业操纵系统中必不可少的构成部分,是进行工业分析,工业处理与工业操纵的根据。近年来由于大规模集成电路、单片机、计算机等在工业操纵领域中的广泛应用,数字化的数据采集成为必定。这就对传感器的A/D性能,单片机的数据采集、处理与传输
2、性能,计算机接口与通信技术提出了更高的要求。本系统使用AImel公司生产的高速8位单片机AVR系列ATmega16单片机作为温度数据采集与传输的主控芯片,温度传感器使用单总线方式的集成数字温度传感器DS18B20O采集得到的数据利用单片机经串口通讯的方式传输至计算机的串口。计算机上位机软件使用数据处理能力超强的LabVIEW软件编写,利用其所带的VISA驱动进行串口的数据采集与处理,实现基于VlSA的串口温度采集监控。2、硬件设计AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(ReducedInstructionSetCPU)精简指令集高速8位单片机。AVR的单
3、片机能够广泛应用于计算机外部设备、工业实时操纵、仪器仪表、通讯设备、家用电器等各个领域,它与51单片机、PlC单片机相比具有一系列的优点:1:在相同的系统时钟下AVR运行速度最快;2:芯片内部的FISah、EEPROMSRAM容量较大;3:所有型号的FlaSh、EEPROM都能够反复烧写、全部支持在线编程烧写(ISP);4:多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等功能,零外围电路也能够工作;5:每个IO口都能够以推换驱动的方式输出高、低电平,驱动能力强;6:内部资源丰富,通常都集成AD、DA模数器、PWM、SPLUSART、TWkI2C通信口、丰富的中断源等。目前支持AVR单
4、片机编译器的语言要紧有汇编语言、C语言、BASIC语言等。其中C编译器要紧有CodeViSionAVR、AVRGCC、IAR、ICCAVR等,C语言编译器由于它具有功能强大、运用灵活、代码小、运行速度快等先天性的优点,使得它在专业程序设计上具有不可代替的地位。DS18B20数字温度计提供9位(二进制)温度读数,指示器件的温度。信息通过单线接口送入DS18B20或者从DS18B20送出,因此从主机CPU到DS18B20仅需一条线(与地线),DS18B20的电源能够由数据线本身提供而不需要外部电源。由于每一个DS18B20在出厂时已经给定了唯一的序号,因此任意多个DS18B20能够存放在同一条单线
5、总线上,这同意在许多不一致的地方放置温度敏感器件。DS18B20的测量范围从-55摄氏度到+125摄氏度增量值为0.5摄氏度。可在1s(典型值)内把温度变换成数字。系统的硬件设计要紧分为四个部分:单片机、供电电路、DS18B20.串口通讯。VCCPBO (TO)OPBl (Tl)PB2 (AlNO) PB3(AIKl) PB4 (南 PB5 (MOSI) PB6 (MISO) PB? (SCK)PDO (RXD) PDl (TXD) PD2 (INTO) PD3 (INTl) PD4 (OClB) PD5 (OClA) PD6 (ICP) PD? (T0SC2)RESETXl(ADCO) PA
6、O (ADCl)PAl(ADC2) PA2 (ADC3) PA3 (ADC4) PA4 (ADC5) PA5 (ADC6) PA6(ADC?) PA7(SCL)Pa) (SDA)PCl (TCK)PC2(TMS)PC3 (TD0)PC4(TDI)PC5 (TOSCl) PC6 (TOSC2)PC7AVCCAREFAGHD40 P_4039 P_3938 P237 P_3736 P_3635 P_3534 P二34图1:单片机部分电路设计单片机部分的电路设计如图I所示,要紧包含复位电路、ISP接口、JTAG接口、晶振电路、A/D参考电压电路(此部分用于AD采集,本系统并未使用)。复位电路使用了钳
7、位二极管钳位,防止触点电压过高烧坏RESET引脚。图3: DS18B20电路设计供电电路如图2所示,供电电路使用了BMlII7进行稳压,防止电压过高烧坏单片机,并能够提高系统习惯电压的范围,即使供电电压高于单片机正常工作电压也能够由BM1I17稳压到单片机正常工作电压的范围。DS18B20的工作电路如图3所示,使用外部供电而非总线供电的方式,只需一个电容与两个电阻。XH图4:串口通信电路串口通信使用Max232进行电平转换,电路原理图如图4所示,实物照片如图5所示。图5:实物照片3、软件设计下位机软件使用C语言编写,包含DS18B20的读写与串口通信两个要紧部分。上位机软件使用LabVIEW编
8、写。有关程序段如下所示:获取DS18B20数据:uint8gettemp(void)读取温度值uint8temh,teml,wm,wm1,Wm2,Wm3,temp;init_182O();复位18b20write-l820(0xCC);/跳过ROMwrite_1820(0x44);/温度变换init_l820();write_1820(0xCC);跳过RoMwrite-l820(0xbe);/读暂存存储器teml=read_l820();读数据temh=read_1820();wm=teml4;只要高8位的低四位与低8位的高四位,温度范围。99Wm1=temh4;wm2=wml+wm;16进制
9、转10进制returnwm2;)系统下位机主函数:voidmain(void)(unsignedchari=O,tmp=O;USARTnit(9600);/波特率9600初始化串口while(l)(tmp=gettemp();USART_Transmit(tmp);)上位机软件使用当前测试测量应用最广泛的LabVlEW编写LabVIEW(LaboratoryVirtualinstrumentEngineering)是一种图形化的编程语言,它广泛地被工业界、学术界与研究实验室所同意,视为一个标准的数据采集与仪器操纵软件。LabVIEW集成了与满足GPIB、VXkRS-232与RS-485协议的硬
10、件及数据采集卡通讯的全部功能。它还内置了便于应用TCP/IP.ActiveX等软件标准的库函数。这是一个功能强大且灵活的软件。利用它能够方便地建立自己的虚拟仪器,其图形化的界面使得编程及使用过程都生动有趣。图形化的程序语言,又称之“G”语言。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图或者流程图。它尽可能利用了技术人员、科学家、工程师所熟悉的术语、图标与概念,因此,LabVlEW是一个面向最终用户的工具。它能够增强你构建自己的科学与工程系统的能力,提供了实现仪器编程与数据采集系统的便利途径。使用它进行原理研究、设计、测试并实现仪器系统时,能够大大提高工作效率。利用LabVlEW,
11、可产生独立运行的可执行文件,它是一个真正的32位编译器。像许多重要的软件一样,LabVIEW提供了WindOWs、UNIX、Linux、MaeintOSh的多种版本。上位机的软件前后面板如图6所示:图6上位机软件前后面板视图4、结束语本系统利用数字化的温度传感器进行温度的采集监控,利用串口通信将采集的温度数据传给电脑,利用电脑进行数据处理与显示。既实现了采集监控的功能,又能够进行数据的进一步处理与分析。附录:要紧下位机程序代码18B20.c#include,config.huint8count,wmh,wml;/count为实际温度,wmh为温度的高位,wml为温度的低位voidinit_18
12、20(void)(SET-TEM-DDR;设置数据端口为输出SET_TEM_SDT;CLR_TEM_SDT;delay_us(480);Z480us以上SET_TEM_SDT;CLR_TEM_DDR;delay_us(20);/1560usWhile(CHECK_TEM_SDT);SET_TEM_DDR;SET_TEM_SDT;delay_us(140);Z60240us)voidwrite_1820(uint8data)(uint8i;for(i=0;i8;i+)(CLR-TEM-SDT;/从高到低,产生写间隙if(data&(li)写数据,先写低位SET_TEM_SDT;elseCLR_T
13、EM_SDT;delay_us(40);/1560usSET_TEM_SDT;1SET_TEM_SDT;)uint8read_1820(void)(uint8temp,k,n;temp=0;for(n=0;n8;n+)(CLR_TEM_SDT;SET-TEM-SDT;从高到低再到高,产生读间隙CLR_TEM_DDR;设为输入k=CHECK_TEM_SDT;读数据,从低位开始if(k)temp=(l4;只要高8位的低四位与低8位的高四位,温度范围099Wm1=temh8);UBRRL=(unsignedchar)tmp;*接收器与发送器使能*/UCSRB=(1RXEN)(1TXEN);/*设置帧格式:8个数据位,2个停止位*/UCSRC=(1URSEL)(1USBS)(1UCSZO)(1UCSZI);)/数据发送【发送5到8位数据位的帧】voidUSART_Transmit(unsignedchardata)(*等待发送缓冲器为空*/while(!(UCSRA&(1UDRE),/*将数据放入缓冲器,发送数据*/UDR=data;)/数据接收【以5到8个数据位的方式接收数据帧