畜舍通风换气风机自动控制设计 精品.docx
《畜舍通风换气风机自动控制设计 精品.docx》由会员分享,可在线阅读,更多相关《畜舍通风换气风机自动控制设计 精品.docx(16页珍藏版)》请在冰豆网上搜索。
![畜舍通风换气风机自动控制设计 精品.docx](https://file1.bdocx.com/fileroot1/2023-1/5/f99cb016-15c6-44c5-b3b3-2f5ee6ec28f9/f99cb016-15c6-44c5-b3b3-2f5ee6ec28f91.gif)
畜舍通风换气风机自动控制设计精品
微机原理课程设计报告
题目:
畜舍通风换气风机自动控制设计
学生姓名:
刘桂奇
学号:
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芯片根据温度数据调用子程序来控制风机的转动、发光管的亮灭以及蜂鸣器的报警等。
在设计过程中遇到了很多问题,如风机的控制、发光二极管的显示、蜂鸣器发声音等等,通过与同学的相互交流,在老师的帮助下,查一些相关资料,成功地解决了问题。
在此,感谢老师,感谢同学的热心的帮助。
同时,通过此次的课程设计,使我们更好地把学过的接口知识运用到实践当中去,实现了硬件和软件相结,理论和实践相结合。
拓宽了我们学习的知识面。