基于 labview的光照度检测.doc

上传人:hs****ma 文档编号:545070178 上传时间:2024-02-10 格式:DOC 页数:6 大小:245.51KB
返回 下载 相关 举报
基于 labview的光照度检测.doc_第1页
第1页 / 共6页
基于 labview的光照度检测.doc_第2页
第2页 / 共6页
基于 labview的光照度检测.doc_第3页
第3页 / 共6页
基于 labview的光照度检测.doc_第4页
第4页 / 共6页
基于 labview的光照度检测.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《基于 labview的光照度检测.doc》由会员分享,可在线阅读,更多相关《基于 labview的光照度检测.doc(6页珍藏版)》请在金锄头文库上搜索。

1、基于 labview的光照度检测光在生活中无处不在,因此对人类的生活以及生产活动都产生了各种各样的影响。如实验室中有的实验对光的强度有严格的要求,在某些工业化生产中也需要严格控制光的强度,因此光强的检测在生活中有着非常广泛的应用。我们由此设计了一套可以检测并显示光强的模型,可以实时感知光的强度,并记录数据,实现人机交互,方便实现光的自动化控制。一、系统方案(一) 设计流程通过传感器实时测量所处环境的光强度,然后将信号转换成电平信号输入单片机,单片机读取电压的变化将信号输入电脑,电脑通过labview读取信号并将信号显示的记录。(二) 模块选择1、 光照测量模块我们采用光敏电阻作为检测光强的传感

2、器,基本特性及其主要参数其电阻会随着光强度的变化而变化,在光敏电阻两端的金属电极之间加上固定电压,其中便有电流通过,受到适当波长的光线照射时,电流就会随光强的增加而变大,从而实现光电转换。 2、 信号转换采用mega16单片机片内的AD读取电压值,然后单片机将电压信号通过USB线传给电脑3、 信号显示与记录电脑上通过labview读取单片机传来的信号值,将其转换成光的强度大小并且实时显示出来,记录相应时间的光强度的变化。(三) 电路设计电路设计十分简单,给光敏电阻加上5V电压,然后直接与单片机相连,然后利用RS-232转接USB与电脑相连二、LabView程序设计1) 数据的获得: 采用VIS

3、A接口程序库,程序编写见图Figure 1。因为在LabView中没有将二进制字符串转化为数值的express控件,便编写了一个将二进制字符串调整为十六进制的子Vi。这样通过USB口边可以接收我们需要的数据。Figure 22) 数据显示部分: 采用了两种显示方式:一、直接用数值显示控件;二、用仪表显示数值。3) 数据提取部分: 并不是所有的情况下,都是有人盯着数据的,于是我们编写了一段数据记录的程序段,将数据存储到了excel表格中,程序如图Figure 3。这一部分花费的时间最长,本来只想将这一部分放入原先的vi程序中,结果有时间刷新的冲突,最后采用全局变量的方法,将数据用另一个程序来存储

4、。Figure 34) 报警部分:将报警部分编成了一个子Vi的形式:5) 整体的程序框图:用于仪表显示的数据是经过采样八次求取平均值的方法。6) 整体界面的设计: 采用了最常规的设计方法,只是将颜色给修改了一下,调节的相对匀称一点。采用了双界面的形式:选项卡1用来设置参数;选项卡二用来显示工作状态,以及我们所观察的对象。三、总结最终的测试结果我们都基本满意,可以较准确感知当前光强度的变化,而且可生成excel文件记录数据,方便查询利用。本模型虽然精度没有那么高,只能给出光照强度的相对变化,但是总体结构十分简单,采用的元器件也都很普通,因此成本十分低廉,便于推广利用,为节约生产成本提供了一个简单

5、的选择。附录:单片机程序的设计:因为项目主要用的是LabView,所以单片机用到的知识并不是很多。主要是Usart总线和AD转化两个部分。程序内容如下:/*File name: 实时测量Chip type : ATmega16LProgram type : ApplicationClock frequency : 4.000000 MHzMemory model : SmallExternal SRAM size : 0Data Stack size : 256*/#include #include #define BAUD 9600 /波特率采用9600bps#define CRYSTAL

6、4000000/系统时钟4MHz/计算和定义波特率设置参数#define BAUD_SETTING (unsigned int)(unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)#define BAUD_H (unsigned char)(BAUD_SETTING8)#define BAUD_L (unsigned char)(BAUD_SETTING)/ USART控制和状态寄存器的标志位定义#define RXC 7 / UCSRA位定义#define TXC 6#define UDRE 5#define FE 4#define DOR 3

7、#define PE 2#define U2X 1#define MPCM 0#define RXCIE 7 / UCSRB位定义#define TXCIE 6#define UDRIE 5#define RXEN 4#define TXEN 3#define UCSZ2 2#define RXB8 1#define TXB8 0#define URSEL 7 / UCSRC位定义#define UMSEL 6#define UPM1 5#define UPM0 4#define USBS 3#define UCSZ1 2#define UCSZ0 1#define UCPOL 0 #defi

8、ne FRAMING_ERROR (1FE)#define PARITY_ERROR (1PE)#define DATA_OVERRUN (1DOR)#define DATA_REGISTER_EMPTY (1UDRE) float data_average100; / Timer 0 比较匹配中断服务interrupt TIM0_COMP void timer0_comp_isr(void) void USART_Transmit(char data)while (!(UCSRA & DATA_REGISTER_EMPTY); / 等待发送寄存器空 UDR = data; / 发送数据 /

9、ADC 转换完成中断服务interrupt ADC_INT void adc_isr(void) static float v_value=0; unsigned char temp; static int i; v_value+= ADCW/1024.0*5.0; i+; if(i=500) v_value/=500; temp=(unsigned char)(v_value*50); USART_Transmit(temp); temp=0; i=0; v_value=0 ; void main( void ) PORTD = 0x03; / TXD(PD1)输出 DDRD = 0x02;

10、 / RXD(PD0)输入,上拉有效 DDRA=0x00; PORTA=0x00; UCSRA = 0x00; / USART初始化 UCSRB = (1TXEN); /发送允许 /UCSRB = 0x98; UCSRC = (1URSEL)|(1UCSZ1)|(1UCSZ0); / 8 Data, 1 Stop, No Parity /UCSRC = 0x86; UBRRH = BAUD_H; / 设置波特率 UBRRL = BAUD_L; / T/C0 初始化TCCR0=0x0B; / 内部时钟,64分频(4M/64=62.5KHz),CTC模式TCNT0=0x00; OCR0=0x7C; / OCR0 = 0x7C(124),(124+1)/62.5=2msTIMSK=0x02; / 允许T/C0比较中断 / ADC 初始化 ADMUX=0x40; / 参考电源AVcc、ADC0单端输入 SFIOR&=0x1F; SFIOR|=0x60; / 选择T/C0比较匹配中断为ADC触发源 ADCSRA=0xAD; / ADC允许、自动触发转换、ADC转换中断允许、ADCclk=125Kz #asm(sei) / 开放全局中断 while (1)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号