畜舍通风换气风机自动控制设计 精品.docx

上传人:b****5 文档编号:6368818 上传时间:2023-01-05 格式:DOCX 页数:16 大小:296.04KB
下载 相关 举报
畜舍通风换气风机自动控制设计 精品.docx_第1页
第1页 / 共16页
畜舍通风换气风机自动控制设计 精品.docx_第2页
第2页 / 共16页
畜舍通风换气风机自动控制设计 精品.docx_第3页
第3页 / 共16页
畜舍通风换气风机自动控制设计 精品.docx_第4页
第4页 / 共16页
畜舍通风换气风机自动控制设计 精品.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

畜舍通风换气风机自动控制设计 精品.docx

《畜舍通风换气风机自动控制设计 精品.docx》由会员分享,可在线阅读,更多相关《畜舍通风换气风机自动控制设计 精品.docx(16页珍藏版)》请在冰豆网上搜索。

畜舍通风换气风机自动控制设计 精品.docx

畜舍通风换气风机自动控制设计精品

微机原理课程设计报告

题目:

畜舍通风换气风机自动控制设计

学生姓名:

刘桂奇

学号:

200817010121

专业班级:

计算机科学与技术08101班

同组姓名:

 王国策

指导教师:

杨红杰

设计时间:

2011年上学期第19周

指导老师意见:

 

评定成绩:

签名:

日期:

 年月日

目录

一、设计前言2

1.1设计目的意义2

1.2设计任务2

1.3设计要求2

二、总体设计2

2.1温度数据采集模块3

2.2温度转换及显示模块3

2.3LED显示控制模块4

2.4蜂鸣器控制模块4

2.5直流电机控制模块4

三、课程设计过程5

3.1硬件设计5

3.2软件设计5

四、系统测试6

4.1系统调试6

4.2过程调试6

五、程序代码清单7

六、课程设计总结15

一、设计前言

1.1设计目的意义

随着智能畜禽农业规模的不断扩大,环境的好坏对农业产品健康的影响逐步地体现出来,只有创造一个空气新鲜,温、湿度适宜,干暖舒适的环境条件,才能让农业产品更好的生长,保持旺盛,发病率降低,获得较高的增长速度和转换率,创造较高的经济效益。

因此,调控好室内空气、湿度和温度等环境,是农业产品管理的最根本问题。

1.2设计任务

通过A/D采集并存储蓄舍温度,根据蓄舍温度要求,通过D/A输出控制信号,控制风机的转速及风机的启动、停止,实现蓄舍温度及空气的自动调节。

1.3设计要求

(1)当温度≤18℃,风机不转动,并且四个红灯闪烁。

(2)当18℃<温度≤20℃,启动风机低速转动。

(3)当20℃<温度≤25℃,启动风机中速转动。

(4)当25℃<温度≤30℃,启动风机高速转动。

(5)当温度超过30℃,红色发光二极管全亮、喇叭连续发声报警。

(6)用直流电机带动风机,计算机输出的数字量经D/A转换后变为高、中、低三种电压,控制直流风机的三种转速。

二、总体设计

使用可编程并行接口8255对实验箱上的温度检测芯片DS18B20进行控制和数据传输,编写程序对数据进行读取并转换为相应的BCD码,判断从外界采集的温度并根据此温度与所在的不同区间的温度来调用的相应的子程序,并利用DA0832进行数模转换来控制风机的转动。

利用8255PA端口控制LED灯的显示、PC端口(C1)进行蜂鸣器的控制,并提取温度转换为非压缩的BCD码,显示到八段数码管上。

该设计主要分为以下几个主要功能模块:

2.1温度数据采集模块

本模块利用实验箱自带的数字温度计DS18B20测量温度,程序通过可编程并行接口8255的PC0口对DS18B20写读写命令,并将读到的温度数据从PC0口按位读取出来,存放在AX寄存器内。

2.2温度转换及显示模块

本模块将数据采集模块得到的温度数值首先转换为BCD码,提取温度数据,转换为非压缩型BCD码。

具体转换过程可参考附录

的核心代码的BCD转换部分。

转换完后调用Display8在八段数码管上显示温度。

2.3LED显示控制模块

根据此次课程设计的目的与要求,当温度超过30℃时,红色发光二极管闪烁。

用8255的PA端口来控制红灯亮,中间再调用一个延时,可以从视觉上

看出红灯闪烁。

具体过程可参考附录中的程度代码。

2.4蜂鸣器控制模块

根据此次课程设计的目的与要求,当温度值大于30℃时,要控制蜂鸣器做出报警。

本程序是利用8255PC端口(PC1)来控制蜂鸣器发出报警声音。

2.5直流电机控制模块

根据此次课程设计的目的与要求,当温度超过20℃小于25℃时,要控制风机低速转动。

当温度超过25℃小于30℃时,要控制风机中速转动,当温度超过30℃时,要控制风机高速转动。

设计中通过不同区间数据的比较,给低、中、高三种不同的转速赋予不同的电压值传送给DA0832,利用DA0832控制直流电机转动,由于输出高电平功率较小,导致无法自动驱动电机转动,所以在输出之后接试验箱的功放模块,放大功率后,输出高电平可自动驱动直流电机转动。

三、课程设计过程

3.1硬件设计

3.1.1硬件电路连线

表1硬件连线

E5:

B、C

--

G5:

B、C

A3:

CS1

--

B4:

CS

A3:

CS2

--

B4:

CS

A3:

CS5

--

E5:

CS

A3:

A0

--

E5:

A0

A3:

A1、A0

--

B4:

A1、A0

G1:

TOUT

--

B4:

PC0

G6:

发光二极管

--

B4:

JP56

B2:

2M

--

G1:

TCTRL

E2:

IN1

--

B3:

OUT

E2:

OUT1

--

F1:

CTRL

B4:

PC1

--

D1:

CTRL

3.2软件设计

软件部分利用实验箱为运行平台,运用汇编指令编写。

控制程序主要包括温度数据采集模块、温度转换及显示模块、LED显示控制模块、蜂鸣器控制模块、风机控制模块等。

初始化程序包含:

8255初始化程序、18B20初始化子程序。

四、系统测试

4.1系统调试

按照硬件连线连接电路,为方便调试,将程序内的温度区间作了调整。

将原来设计要求里的<=10℃暂时设定为18℃到20℃,10℃到30℃设定为25℃到30℃。

系统启动后,温度传感器得到当前室温,但是温度过低。

之后给温度采集模块的Ctrl引脚一定的电压,手动升温,当温度到20℃不超过25℃风机开始低速转动,当温度到了25℃但不超过30℃时,风机开始中速转动,当温度超过30℃时,此时蜂鸣器开始发出报警声,红色发光二极管开始闪烁,表示温度过高。

4.2过程调试

在调试过程中,虽然遇到了很多的问题,程序代码有错误,线路连接的不恰当等,通过老师和同学的帮助,出通过查一些资料,最终解决了这些问题。

完成了设计。

4.2.1蜂鸣器控制问题

设计中,当温度低于20℃或者温度大于40℃时,需要控制蜂鸣器报警,设计初期想利用可编程并行接口8255的PC1口输出低电平控制蜂鸣器,但是调试过程中发现,由于程序运行过程中需要对8255不断的进行初始化操作,导致PC1口的电平不稳定,使蜂鸣器不能很好的控制,通过查资料,修改设计,利用PC1、PC2、PC3输出高电平,接74LS138译码器控制蜂鸣器报警,这样就能很好的解决该问题。

4.2.2电机控制问题

调试中,由于室内的温度过低,在要求的温度范围内带动风机不能转动,所以决定加上一定的电压使采集的温度不至少于太低,经过调试后,由于输出的功率不高,带动风机转动不明显,所以在DA0832的输出端口OUT端连上了功放电路,这时当温度在某个区间时,风机就可以明显地看出转速的快慢。

由此解决了电机的控制问题。

4.3.3发光管问题

设计中,利用可编程并行接口8255的PA口控制发光管。

当需要某一颜色的发光管常亮时,其他的发光管需要处于熄灭状态,但通过调试发现,实际运行过程中,当某一颜色的发光管常亮时,其他发光管长时间处于熄灭状态,但还会出现一个短暂的点亮的过程,导致其他发光管出现闪烁,后来经过请教老师得知,由于程序运行过程中需要对8255不断的进行初始化操作,每次初始化,8255的PA口会输出高电平,导致某些发光管出现短暂的闪烁,解决方法是可以使用另外一个可编程并行接口8255,用这个8255的PA口来控制发光管,程序运行过程不会多次对这个8255初始化,所以不会再出现上一个问题。

经过测试,这样做可以解决该问题。

五、程序代码清单

.MODELTINY

;连线

;8255CS-->CS1

;8255.PC.0-->18B20.TOUT

;A0-->A0

;A1-->A1

;18B2018B20.TOUT-->8255.PC.7

CON_8255EQU0F003H

PC_8255EQU0F002H

PB_8255EQU0F001H

PA_8255EQU0F000H

DA0832EQU0D000H

EXTRNDISPLAY8:

NEAR

.STACK300

.DATA

VOLTAGEDB0

BUFFERDB8DUP(0);温度临时存放区

.CODE

START:

MOVAX,@DATA

MOVDS,AX

MOVES,AX

NOP

CALLINIT8255

MAIN:

CALLSTART_TEMPERATURE;向DS18B20发送读温度指令

JBMAIN

CALLDELAYTIME

CALLRD_TEMPERATURE;读出温度值,并转换为BCD码

CALLTEMPERATURE_CASE

CALLDELAYTIME

CALLDAC0832

CALLDIS_BCD;提取温度数据,转换为非压缩型BCD码,并显示

JMPMAIN

;判断温度控制电机速度

TEMPERATURE_CASEPROCNEAR

PUSHAX

;写1(8255.PC.1=1)

MOVDX,PC_8255;蜂鸣器不响

MOVAL,03H

OUTDX,AL

MOVBX,AX

CMPBX,0120H;18℃

JBCASE1

CMPBX,0140H;20℃

JBCASE2

CMPBX,0190H;25℃

JBCASE3

CMPBX,01E0H;30℃

JBCASE4

;写0(8255.PC.1=0)

MOVDX,PC_8255;超过30℃时,驱动蜂鸣器响

MOVAL,02H

OUTDX,AL

JMPCASE5

RETURN:

POPAX

RET

CASE1:

MOVVOLTAGE,0FH

JMPRETURN

CASE2:

MOVVOLTAGE,0FH

JMPRETURN

CASE3:

MOVVOLTAGE,20H;20℃~25℃间风机开始低速转动

JMPRETURN

CASE4:

MOVVOLTAGE,55H;25℃~30℃间风机中速转动

JMPRETURN

case5:

MOVDX,PA_8255;超过30℃时风机高速转动,此时红灯闪烁

MOVAL,0CCH

OUTDX,AL

CALLDELAYTIME

MOVDX,PA_8255

MOVAL,00H

OUTDX,AL

MOVVOLTAGE,99H

JMPRETURN

TEMPERATURE_CASEENDP

DAC0832PROCNEAR

PUSHAX

MOVDX,DA0832

MOVAL,VOLTAGE

OUTDX,AL

POPAX

RET

DAC0832ENDP

 

;********************************

;温度转换/显示

;********************************

DIS_BCDPROCNEAR

MOVBX,AX

LEADI,BUFFER+7

STD

MOVAL,10H;10H表示不需要显示

STOSB

STOSB

STOSB

STOSB

TESTAH,08H

JNZDIS_BCD1

STOSB;正数

JMPDIS_BCD2

DIS_BCD1:

MOVAL,11H

STOSB;负数

NEGBX

DIS_BCD2:

;将温度整数位转换为ASCI

SHLBX,1;将温度的个位与十位合在BH中

SHLBX,1

SHLBX,1

SHLBX,1

MOVAX,10

XCHGAL,BH

DIVBH

CMPAL,0

JNZDIS_BCD3;判断温度的十位是否为0进行相应处理

MOVAL,10H;十位为0

XCHGAL,[DI+1]

STOSB

JMPDIS_BCD4

DIS_BCD3:

STOSB

DIS_BCD4:

MOVAL,AH

ORAL,80H;小数点

STOSB

XORAL,AL;转换小数部分

TESTBL,10H

JZDIS_BCD5

MOVAL,6

DIS_BCD5:

TESTBL,20H

JZDIS_BCD6

ADDAL,12H

DAA

DIS_BCD6:

TESTBL,40H

JZDIS_BCD7

ADDAL,25H

DAA

DIS_BCD7:

TESTBL,80H

JZDIS_BCD8

ADDAL,50H

DAA

DIS_BCD8:

MOVCL,4

RORAL,CL

ANDAL,0FH

STOSB

CLD

LEASI,BUFFER;显示温度

CALLDISPLAY8

RET

DIS_BCDENDP

;延时程序

DELAYTIMEPROCNEAR

XORCX,CX

LOOP$

LOOP$

LOOP$

RET

DELAYTIMEENDP

;写0

W_LPROCNEAR

PUSHAX

MOVDX,CON_8255

MOVAL,80H

OUTDX,AL

POPAX

RET

W_LENDP

;写1

W_HPROCNEAR

PUSHAX

MOVDX,CON_8255

MOVAL,01H

OUTDX,AL

POPAX

RET

W_HENDP

;DS18B20复位初始化子程序

INIT_18B20PROCNEAR

CALLW_L;主机发出501us复位低脉冲

MOVCX,136

LOOP$

MOVDX,CON_8255

MOVAX,89H

OUTDX,AL;PC输入状态

DECDX

MOVCX,15

INIT_18B20_1:

INAL,DX

TESTAL,01H

JZINIT_18B20_2

LOOPINIT_18B20_1

STC;置位标志位,表示DS18B20不存在

RET

INIT_18B20_2:

MOVCX,136

LOOP$

CLC;复位标志位,表示DS18B20存在

RET

INIT_18B20ENDP

;写操作

WRITE_18B20PROCNEAR

MOVCX,8;一共8位数据

WRI:

CALLW_L;0->PC0

RORAL,1

JNBWRI1

CALLW_H

WRI2:

PUSHCX

MOVCX,12

LOOP$;延时55us

POPCX

CALLW_H

LOOPWRI

RET

WRI1:

PUSHCX

POPCX

JMPWRI2

WRITE_18B20ENDP

;读操作

READ_18B20PROCNEAR

MOVCX,8;数据一共有8位

READ:

MOVDX,CON_8255

MOVAL,80H

OUTDX,AL;0->PC0

MOVAL,89H

OUTDX,AL;输入状态

NOP

NOP

NOP

MOVDX,PC_8255

INAL,DX

RORAL,1

RCRBL,1

MOVDX,CON_8255

MOVAL,80H

OUTDX,AL

MOVAL,01H

OUTDX,AL;1->PC0

LOOPREAD

MOVAL,BL

RET

READ_18B20ENDP

;******************************************

;判断DS18B20是否存在,启动DS18B20;CY为判断标志

;******************************************

START_TEMPERATURE:

CALLINIT_18B20;先复位DS18B20

JBGET_T

MOVAL,0CCH;跳过ROM匹配

CALLWRITE_18B20

MOVAL,44H;发出温度转换命令

CALLWRITE_18B20

CLC

GET_T:

RET

;******************************************

;读出转换后的温度值,存在AX

;******************************************

RD_TEMPERATURE:

CALLINIT_18B20;准备读温度前先复位

MOVAL,0CCH;跳过ROM匹配

CALLWRITE_18B20

MOVAL,0BEH;发出读温度命令

CALLWRITE_18B20

CALLREAD_18B20;读出温度

MOVAH,AL;存放到AX

CALLREAD_18B20

XCHGAL,AH

RET

INIT8255PROCNEAR

MOVDX,CON_8255

MOVAL,80H

OUTDX,AL

DECDX

MOVAL,0FFH

OUTDX,AL

RET

INIT8255ENDP

 

ENDSTART

 

六、课程设计总结

本次的课程设计通过使用实验箱上自带的DS18B20温度模块采集温度数据,并使有可编程并行接口8255芯片根据温度数据调用子程序来控制风机的转动、发光管的亮灭以及蜂鸣器的报警等。

在设计过程中遇到了很多问题,如风机的控制、发光二极管的显示、蜂鸣器发声音等等,通过与同学的相互交流,在老师的帮助下,查一些相关资料,成功地解决了问题。

在此,感谢老师,感谢同学的热心的帮助。

同时,通过此次的课程设计,使我们更好地把学过的接口知识运用到实践当中去,实现了硬件和软件相结,理论和实践相结合。

拓宽了我们学习的知识面。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1