天津大学-智能装置课程设计报告 精品.doc_第1页
天津大学-智能装置课程设计报告 精品.doc_第2页
天津大学-智能装置课程设计报告 精品.doc_第3页
天津大学-智能装置课程设计报告 精品.doc_第4页
天津大学-智能装置课程设计报告 精品.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

智能装置课程设计报告一、设计题目 空调控制系统二、设计目的1. 深入了解PIC16F877单片机的工作原理,熟练掌握汇编语言程序设计方法,熟练使用MPLAB-ICD仿真器及MPLAB-IDE仿真调试软件。2. 通过该课程设计使学生初步掌握以单片机为核心的智能装置设计的简单原则、步骤和方法。3. 熟悉智能装置设计中有关的硬件设计调试,如人机界面等。4. 熟悉智能装置设计中相关软件的设计、编程和调试。三、设计内容1. 以16F877单片机为核心,结合给出的其他原器件和智能装置实验系统原有的内容设计空调遥控系统硬件电路。2. 利用实验系统提供的电机模拟空调的压缩机,按键及LED显示模拟遥控器,可调电阻模拟温度传感器(可调电阻输出电压1-3V代表10-30)。3. 编制软件实现设置温度、起停空调、温度控制、风速控制等功能。4. 利用MAX515实现低、中、高3档风速调整。5. 实现空调温度自动控制,温度高于设定温度2度启动低风,高于4度启动中风,4度以上启动高风。(选做)四、设计要求1. 根据实验指导书的设计内容及所给出的元件,设计空调系统硬件原理图。2. 按照设计好的硬件原理图在实验板上用导线搭建硬件电路。3. 用万用表检查硬件电路连接是否正确,检查无误后上电并编制简单的测试程 序分步调试各部分功能。4. 在各部分功能实现后,编制完整的空调系统软件,并进行软硬件联调,直到达到设计要求。5. 按照设计内容要求测试仪表误差并做分析,给出仪表精度,完成后由教师进行验收检查。五、实验设备1. MPLAB-ICD模块与仿真头2. 智能装置实验系统3. 安装了MPLAB-IDE开发软件的计算机4. 数字万用表5. 导线若干六、实验项目 1. 设计空调系统硬件电路 采用16F877单片机,利用实验板上提供的电机、MAX515构成空调系统,利用按键及LED构成控制器,可调电阻模拟温度(可调电阻输出电压1-3V代表10-30)。(2)将设置的温度值、空调工作状态通过LED显示 (3)利用MAX515输出调整电压,控制转速。2. 硬件电路连接与检查将设计好的电路由指导老师检查完毕后,在实验系统上用导线将实际的电路连接出来。接线完成后对照原理图用万用表逐根连线检查电路连接是否正确,特别是电源VCC和VDD有无短路。检查无误后连接仿真头后通电。3. 编制软件对硬件电路分步调试(1) 对数码管显示电路进行调试,编制简单程序实现将数据在数码管上显示#include #include temperature_header_file.h#define DECODE_MODE 0x09 /译码控制寄存器#define INTENSITY 0x0A /亮度控制寄存器#define SCAN_LIMIT 0x0B /扫描界限寄存器#define SHUT_DOWN 0x0C /关断模式寄存器#define DISPLAY_TEST 0x0F /测试控制寄存器#define DIG0 0x02 /DIG0void max7219_write(unsigned char address,unsigned char dat);void max7219_init(void);void delay1();void delay();void init();int get_ad();unsigned char a=0;void max7219_write(unsigned char address,unsigned char dat) unsigned char i;MAX7219_LOAD=0; /拉低片选线,选中器件 /发送地址for (i=0;i8;i+) /移位循环8次,最高频率为10MHz MAX7219_CLK=0; /清零时钟总线if(address&(17-i)MAX7219_DIN=1;/每次取高字节elseMAX7219_DIN=0;MAX7219_CLK=1;/时钟上升沿,发送地址/发送数据for (i=0;i8;i+)MAX7219_CLK=0;if(dat&(10;i-);void init()TRISA=0x01;/A口RA0输入TRISC=0x00;PORTA=0x00;PORTC=0x00;ADCON0=0x41;/0100 0001 8倍fosc 0通道 开adADCON1=0x0e;/0000 1110 adfm=0 直接读低8位 1110 选择RA0delay();int get_ad() int adval;ADGO=1;while(ADGO);adval=ADRESH;return adval;void delay()for(int i=500;i0;i-);(2) 编制MAX515程序,驱动电机旋转。#include #include temperature_header_file.hvoid max515_write(unsigned char data) unsigned char i;MAX515_CS=0; /拉低片选线,选中器件 /发送地址for (i=0;i8;i+) /移位循环8次,最高频率为10MHz MAX515_SCLK=0; /清零时钟总线if(data&(111-i)MAX515_DIN=1;/每次取高字节elseMAX515_DIN=0;MAX515_SCLK=1;/时钟上升沿,发送地址MAX515_CS=1;/发送结束,上升沿锁存数据void max515_init(void)TRISD=0x00;PORTD=0x00;MAX515_CS=1;MAX515_SCLK=0;void main(void)max515_init(); /MAX515初始化while(1)max515_write(0x00AF);/0x00FF-4.69V,0x00CF-2.53V,0x00AF-1.27V,0x00-0V (3) 编制按键程序,控制显示和电机的起停。#include #include temperature_header_file.hint ONOFF=0;/0-off,1-onint MANAUTO=0;/0-manual,1-autoint SPEEDCTRL=0;int TEMPCTRL=20;void key_init();void key_onoff();void key_ctrl();void key_manauto();void delay();void main(void)while(1);void key_onoff()if(RC3=1 & ONOFF=0)/按下开delay();if(RC3=1)ONOFF=1; if(RC3=1 & ONOFF=1)/再按下关delay();if(RC3=1)ONOFF=0;void key_manauto()if(ONOFF=1)if(RC2=0 & MANAUTO=0)/手动切自动delay();if(RC2=0)MANAUTO=1;if(RC2=0 & MANAUTO=1)/自动切手动delay();if(RC2=0)MANAUTO=0;void key_ctrl()if(ONOFF=1 & MANAUTO=0)/开且为手动,上下键调整风速if(RC0=0 & SPEEDCTRL=0)delay();if(RC0=0)SPEEDCTRL=SPEEDCTRL-1;if(RC1=0 & SPEEDCTRL=10)delay();if(RC0=0)TEMPCTRL=TEMPCTRL-1;if(RC1=0 & SPEEDCTRL0;i-); 每部分编制结束并调试通过后,与前面的程序依次连接成大程序并调试出结果,最终完成整个程序的编制与调试。该部分程序将在第九部分程序清单中呈现。4. 仪表软硬件联调实现要求的功能 将各部分程序进行组合,逐项实现设计要求的功能。 我们编写程序的顺序与上述步骤不完全相同。首先,我们实现了四个按键的所有逻辑功能,并在按键子程序中提供了其他模块接入的接口。再按照先调试输入部分、后调试输出部分的顺序进行程序的编写,第二步实现了电压信号的A/D转换并将数字信号输入PIC单片机,接下来实现了按键通过MAX515芯片及驱动电路对电机的转速有级调节,最后实现了将温度LED数码管显示的功能。 功能完成后用万用表对可调电阻输出和温度显示对应取若干个点记录实验结果。温度/11121314151617181920电压/V1.1061.2061.3071.4031.5051.6051.7051.8021.9082.003温度/21222324252627282930电压/V2.1062.2032.3062.4132.5052.6062.7052.8052.9032.996利用MATLAB对以上数据进行分析,可以看出电压与温度采集的A/D信号呈线性关系。 编制使用说明我组设计的温度自动控制空调装置由以下几部分组成:温度传感器(用电压信号模拟)、温度显示、空调压缩机(用电机模拟)、遥控器(用按键模拟)等几部分组成。下面简要介绍遥控器(按键)部分的使用方法,并简要说明数码管显示功能。按键共有四个,分别为开关键、自动/手动切换键、加温度键(自动模式)/加风速键(手动模式)、减温度键(自动模式)/减网速键(手动模式)。初始状态空调为关,电机停转。按下开关键一次,空调处于ON状态,再按开关键一次,空调处于OFF状态。在空调处于ON状态时,默认空调处于手动模式,且风速为最小。风速分为0、1、2、3四个控制档,0为停止,3为最大。当空调处于手动模式时,每按下一次加风速键,风速增大一档,达到3以后再按下该键,风速不再增大;每按下一次减风速键,风速减小一档,达到0以后再按下该键,风速不再减小。若在手动模式时按下自动/手动切换键,则空调进入自动温控工作模式,系统初始设定温度为20度。每按下一次加温度键,设定温度增加一度,达到30度后不再增加;每按下一次减速温度键,设定温度减小一度,达到10度后不再减小。自动温控的方式为:当环境温度低于设定温度时,风速置为0档;当环境温度高于设定温度2度以内时,风速置为1档;当环境温度高于设定温度2度至4度时,风速置为2档;当环境温度高于设定温度4度以上时,风速置为3档。当空调处于ON状态时,不论处于哪种工作状态,一旦按下开关键,系统停止运行,并且所有状态恢复初始值。数码管显示部分:左边的两个数码管不论空调处于开/关状态,始终显示环境温度(10度30度),起到温度计的作用。右边的两个数码管当处于手动模式时,左侧的数码管将显示风速档位,右侧的始终显示0;当处于自动模式时,显示设定温度。 误差分析 本套智能空调设置我们采用05V电压信号作为模拟输入信号,经PIC单片机的片内集成A/D转换后变为8位的数字信号,相当于0V对应数字量0x00,5V对应数字量0xFF。我们将数字量信号除以5,使得数字量变为050(51只对应0xFF一个数字量,故忽略),正好对应0至50温度,即0V对应0,5V对应5,A/D转换是线性变换,故取一部分转换结果,其对应关系也为线性,即1V对应10,3V对应30,即符合设计要求。误差分析:由于对数字信号除5取整,故显示的温度值为向下取整,损失了部分精度。最大测量误差为:7、 调试的步骤及调试过程中出现的问题和解决的方法调试步骤已经在上一部分进行过介绍,故不赘述。下面说明在调试过程中出现的问题和解决的方法。这一次课程设计遇到的最大问题就是MAX7219的写入问题。7219的写入顺序为:先拉低CS片选信号,在每个时钟信号上升沿发送一位数据,并将数据移位,循环16次。为使程序清晰易读,对输出端口采用宏定义方式,然而在调试中我们发现PICC编译器无法识别该宏定义,导致MAX7219的控制时序逻辑错误,浪费了我们很多的时间。将宏定义去掉,改用实际端口表示后,该问题解决。八、软件设计流程图及带注释的全部程序的清单/temperature_header_file.h/#include /Define MAX7219#define MAX7219_DIN RD2#define MAX7219_LOAD RD0#define MAX7219_CLK RD1/Define MAX515#define MAX515_DIN RD5#define MAX515_SCLK RD4#define MAX515_CS RD3/Define Analog Input#define AINPUT RA0/ad.c/#include #include temperature_header_file.hchar get_ad() char adval;ADGO=1;while(ADGO);adval=ADRESH;return adval;/delay.c/void delay_short(int x)int i;for(;x0;x-)for(i=100;i0;i-);void delay_long(int x)int i;for(;x0;x-)for(i=1000;i0;i-);/init.c/#include #include temperature_header_file.hvoid init()/AD输入、按键输入、LED显示输出 初始化TRISA=0x01;/RA0作为模拟量输入接口PORTA=0x00;TRISC=0x0F;/RC0RC3为四个按键输入,RC4RC7为四个LED灯显示PORTC=0x00;ADCON0=0x41;/0100 0001 8倍fosc 0通道 开adADCON1=0x0e;/0000 1110 adfm=0 直接读低8位 1110 选择RA0/MAX515,MAX7219接口初始化TRISD=0x00;/RD0RD2为MAX7219接口,RD3RD5为MAX515接口PORTD=0x1B;/0b xx 011 011/要检查!/key.c/#include #include temperature_header_file.hextern char ONOFF;/0-off,1-onextern char MANAUTO;/0-manual,1-autoextern char SPEEDCTRL;/风速控制,初始值为0档(停转)extern char TEMPCTRL;/设定温度值,初始值为20度extern char BTEMP;void delay_short(int x);void delay_long(int x);/*void main(void)while(1);*/void key_onoff()if(RC3=0 & ONOFF=0)/按下开delay_short(2);if(RC3=0 & ONOFF=0)ONOFF=1;delay_long(20);/会不会延时太长?if(RC3=0 & ONOFF=1)/再按下关delay_short(2);if(RC3=0 & ONOFF=1)ONOFF=0;delay_long(20);void key_manauto()if(ONOFF=1)if(RC2=0 & MANAUTO=0)/手动切自动delay_short(2);if(RC2=0 & MANAUTO=0)MANAUTO=1;delay_long(20);if(RC2=0 & MANAUTO=1)/自动切手动delay_short(2);if(RC2=0 & MANAUTO=1)MANAUTO=0;delay_long(20);void key_ctrl()if(ONOFF=1 & MANAUTO=0)/开且为手动,上下键调整风速if(RC0=0 & SPEEDCTRL0)/原来为大于等于0,貌似不对,因为等于0时不能再减1了delay_short(2);if(RC0=0 & SPEEDCTRL0)SPEEDCTRL=SPEEDCTRL-1;delay_long(20);if(RC1=0 & SPEEDCTRL3)/原来为小于等于3,貌似不对,因为等于3时不能再加1了delay_short(2);if(RC1=0 & SPEEDCTRL10)/判断条件改动同上delay_short(2);if(RC0=0 & TEMPCTRL10)TEMPCTRL=TEMPCTRL-1;delay_long(20);if(RC1=0 & TEMPCTRL30)/判断条件改动同上delay_short(2);if(RC1=0 & TEMPCTRL30)TEMPCTRL=TEMPCTRL+1;delay_long(20);/max515.c/#include #include temperature_header_file.hvoid max515_write(unsigned char data) unsigned char i;MAX515_CS=0; /拉低片选线,选中器件 /发送地址for (i=0;i8;i+) /移位循环8次,最高频率为10MHz MAX515_SCLK=0; /清零时钟总线if(data&(111-i)MAX515_DIN=1;/每次取高字节elseMAX515_DIN=0;MAX515_SCLK=1;/时钟上升沿,发送地址MAX515_CS=1;/发送结束,上升沿锁存数据/max7219.c/#include #include temperature_header_file.h#define DECODE_MODE 0x09 /译码控制寄存器#define INTENSITY 0x0A /亮度控制寄存器#define SCAN_LIMIT 0x0B /扫描界限寄存器#define SHUT_DOWN 0x0C /关断模式寄存器#define DISPLAY_TEST 0x0F /测试控制寄存器void max7219_write(unsigned char address,unsigned char dat) unsigned char i;RD0=0; /拉低片选线,选中器件 /发送地址for (i=0;i8;i+) /移位循环8次,最高频率为10MHz RD1=0; /清零时钟总线if(address&(17-i)RD2=1;/(bit)(data&0x80); /每次取高字节 ?elseRD2=0;RD1=1;/时钟上升沿,发送地址/发送数据for (i=0;i8;i+)RD1=0;if(dat&(17-i)RD2=1;/(bit)(data&0x80); /每次取高字节 ?elseRD2=0;RD1=1;/时钟上升沿,发送数据RD0=1;/发送结束,上升沿锁存数据/MAX7219初始化void max7219_init()max7219_write(SHUT_DOWN,0x01); /开启正常工作模式(0xX1)max7219_write(DISPLAY_TEST,0x00); /选择工作模式(0xX0)max7219_write(DECODE_MODE,0xFF); /选用全译码模式max7219_write(SCAN_LIMIT,0x03); /只用前4只LED ;这里没问题max7219_write(INTENSITY,0x04); /设置初始亮度max7219_write(0x04,0xF8);max7219_write(0x03,0xF8);max7219_write(0x02,0xF8);max7219_write(0x01,0xF8);/main.c/#include #include temperature_header_file.hvoid init();void max7219_init();void delay_long(int x);void delay_short();void key_onoff();void key_manauto();void key_ctrl();void max515_write(unsigned char data);void max7219_write(unsigned char address,unsigned char dat);char get_ad();/这里的静态变量定义有些问题!待解决!char ONOFF=0;/0-off,1-onchar MANAUTO=0;/0-manual,1-autochar SPEEDCTRL=0;/风速控制,初始值为0档(停转)char TEMPCTRL=20;/设定温度值,初始值为20度(实际温度)char TEMPOBSV=20;/实际检测温度,在ad.c中引用char oa=0;/存放环境温度十位char ob=0;/存放环境温度个位char ca=0;/存放设定温度十位char cb=0;/存放设定温度个位void main()init();max7219_init();while(1)key_onoff();key_manauto();key_ctrl();/温度检测及显示转换TEMPOBSV=get_ad();TEMPOBSV=TEMPOBSV/5;/测量环境温度if(TEMPOBSV 0x1D)TEMPOBSV=30;if(TEMPOBSV 0x0A)/使环境温度测量范围为10度至30度TEMPOBSV=10;oa=TEMPOBSV/10;/取环境温度十位ob=TEMPOBSV%10;/取环境温度个位ca=TEMPCTRL/10;/取设定温度十位cb=TEMPCTRL%10;/取设定温度个位/手动模式控制风速if(ONOFF=0)max515_write(0x0000);max7219_write(0x04,0x0F);max7219_write(0x03,0x0F);max7219_write(0x02,0x0F);max7219_write(0x01,0x0F);MANAUTO=0;SPEEDCTRL=0;if(ONOFF=1 & MANAUTO=0)if(SPEEDCTRL=0)max515_write(0x0000);max7219_write(0x02,0x00);/写入DIG1max7219_write(0x01,0x00);/写入DIG0if(SPEEDCTRL=1)max515_write(0x00AF);max7219_write(0x02,0x01);/写入DIG1max7219_write(0x01,0x00);/写入DIG0if(SPEEDCTRL=2)max515_write(0x00CF);max7219_write(0x02,0x02);/写入DIG1max7219_write(0x01,0x00);/写入DIG0if(SPEEDCTRL=3)max515_write(0x00FF);max7219_write(0x02,0x03);/写入DIG1max7219_write(0x01,0x00);/写入DIG0/自动模式控制温度if(ONOFF=1 & MANAUTO=1)if(TEMPOBSV-TEMPCTRL = 0)max515_write(0x0000);else if(TEMPOBSV-TEMPCTRL 2) max515_write(0x00AF);else if(TEMPOB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论