您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > PIC单片机课程设计
《PIC单片机课程设计》报告题目:温度监测与控制学生姓名:学号:指导教师:年月日第1页目录一.课程设计性质与目的····································02二.课程设计任务和要求····································02三.课程设计具体步骤3.1总体方案设计说明·································033.2硬件设计说明·····································033.3软件设计说明·····································06四.设计总结与体会4.1设计结果··········································084.2问题及解决方法····································084.2感想及体会········································08五.参考文献············································09六.附录·············································10第2页一.课程设计性质和目的:《PIC单片机课程设计》是电气工程与自动化专业及相近专业的一门重要的专业实践课,本课程在《PIC单片机》课程的基础上,通过硬件设计与软件编程与实际实验板调试的实践,进一步掌握PIC单片机的C程序语言的编写与调试,是毕业设计前的一次重要的实践,为今后走上工作岗位打下坚实的单片机应用基础。具体来说,这次课程设计能让我扩展、加深对PIC单片机应用的了解,包括中断、定时器、PWM、显示等功能模块的应用;接触项目中C语言编程的逻辑,如何一步一步实现所想要的功能;通过分析选择元件,学着查找相关元件资料;在后期,优化程序,使之能满足实际运行要求;最终完成该课程设计。二.课程设计任务和要求:我的课程设计题目是《温度监测与控制》,要求当温度T超过电机启动设定值(START_T)时,为了防止在临界温度值时的风扇频繁启/停,控制风扇的启/停要有一定的回差值(DELTA_T),即当T=START_T时启动风扇,当T(START_T-DELTA_T)时关闭风扇,并要求START_T和DELTA_T能由用户设定。具体来说:1)利用LCD,显示实时温度,电机启动温度值及温度控制回差值;2)能够通过按键的设置增大或减小转启动温度及回差温度;3)通过LED亮灭实现预警;4)通过风扇(直流电机)实现散热。第3页三.课程设计具体步骤:3.1总体方案设计说明本课程设计利用TC74温度传感器采用温度数据,通过PIC16F877芯片IIC通信模块传送温度数据,经BCD转换,在LCD上显示出来。并且该温度值将与电机启动设定值对比,与电机启动设定值和回差值的差进行对比,调控风扇的转停,LED的闪灭。为了防止电机旋转转速过高,根据脉宽调制原理编写相应程序,利用单片机调整输出PWM的高电平时间控制直流电机的转速。3.2硬件设计说明整个系统硬件电路包括四个主要模块:LCD显示模块、按键输入模块、微型直流电机PWM控制模块。3.2.1LCD显示模块课设板所用的LCD型号为YB1602A,接线如图3.2.1所示。图中采用4位数据线接线方式,是为了节省单片机的IO口。从图中可以知道,要使用该LCD时,短路插P38、图3.2.1了解课设所需元件、模块,实现功能流程编写C程序,利用MPLAB经行调试在PROTEUS上绘制硬件仿真图在实验板上调试程序第4页P22的短路插(除RD7外)均要插上。如要使用背光控制,可将P22的短路插8插短接,如不用背光,该短路插不接。表1为LCDYB1602A的引脚功能说明。引脚名功能RS命令/数据选择:1:数据,0:命令R/W读/写选择:1:读,0:写E数据使能:下降沿送入有效DB7~DB0数据线,如用4位数据,使用高4位表1LCDYB1602A引脚功能表上电后要延时15ms后,才能进行初始化,LCD初始化过程详见附录。3.2.2按键输入模块采用课设板上4×4按键中的三个普通按键S1、S5、S9即可,三个按键对应的功能见表2,接线如图3.2.2所示,其中P45须短接到地,P20的1~3短路插短接,用到RB0~RB2共3个引脚,编程时利用RB0/INT中断与RB电平变化中断进行按键处理。表2按键功能表按键功能S1(SET)进入调整模式,或者退出调整模式S5(INC)每按一次,则数值增1S6(DEC)每按一次,则数值减1图3.2.2第5页3.2.3微型直流电机PWM控制模块本模块的接线图如图3.3.3所示,利用单片机输出的PWM波形控制T3的通断,对VCC电压进行斩波,通过改变PWM占空比从而改变直流电机的电枢电压,从而改变电机转速。为了防止T3断开时电机产生的过电流使板上器件烧毁,在电机两端反并联了二极管D4。本设计采用CCP1模块即通过RC2输出1kHz的PWM波控制电机转速,P26需将2用短路插短接。3.2.4TC74温度传感器模块温度传感器TC74是Microchip公司的一款IIC接口的数字式温度传感器。其测温范围为-40~125℃,在25~85℃之间的误差为-2~+2℃,在0~125℃之间的误差为-3~+3℃。它有两种分装,如下图:图3.3.3第6页电机运转、LED闪亮LED灯灭,电机不启动温度值超过电机启动值与回差值的差?LED长亮KEY.FLAG==1?进入修改设置状态5秒内有操作?硬件框图:3.3软件设计说明3.3.1主程序框图:ynynnyny是n开始初始化温度的读取显示温度值超过电机启动值?220V电源变压器单片机PIC16F877pwmRBIIC按键中断温度检测TC74液晶显示控制直流电机LED灯第7页3.3.2各部分功能实现3.3.2.1按键功能程序流程图本设计用了3个按键,一个是接于RB0/INT的按键,它利用INT中断功能,为功能设置键;另两个是接与RB1、RB2的按键,它们利用RB电平变化中断,为+1和-1键。因此程序要用到INT中断与RB电平变化中断。为了方便编程,定义了结构体类型STRU变量KEY:KEY的成员SET为3位,保存按键SET的次数,次数只能在0~2间循环,但结构体预留了3位,最大可至7,便于程序功能扩展;成员INC=1表明有INC按键按下,但未处理,处理后令其等于0,就不会重复处理了;成员DEC=1表明有DEC按键按下,其他操作与成员INC相同;成员FLAG=1表明有按键需要处理,成员CHANGE=1表明显示需要刷新。在按键的处理中,中断程序中只是设置了标志位,处理按键均在主程序中进行,一旦有有效按键按下(先按SET后按INC或DEC),启动TMR1进行延时计时时,超过5秒内无按键,程序自动退出按键状态,因此每次有效按键时,TMR1的中断次数计数值T1N均清零。3.3.2.2PWM输出程序设计本设计采用CCP1模块从RC2引脚输出1kHz(即周期为1000s)的PWM波,预分频比用1:16,晶振为8MHz,则1000=(PR2+1)×4×0.125×16PR2=124假设高电平时间为,HT则由CCPR1L及CCP1CON的5、4两×位共10位的X值为HT,时间单位为s。而占空比10HDT改变PWM的高电平时间,只需对CCPR1L和CCP1CON的5、4两位重新赋值即可。3.3.2.3温度采样显示程序设计LCD液晶显示及IIC初始化,单片机通过IIC通信向TC74发送地址,地址在字节的高7位,最低位为0表示为写,接着单片机向TC74发送第二个数据,即读温度命令字RTR(0b00000000);然后再重新开始,单片机再向TC74发送地址,但此时最低位为1,表示接下来要读TC74的温度值。最后单片机接受TC74发出的温度值。经过BCD转码后,将该温度值显示在LCD液晶屏上。第8页4、结论4.1设计结果本次课程设计能够满足题目要求,实现温度监测与控制,能够根据用户设置的设定值启动风扇降温,并通过灯光信号变化预警。4.2问题及解决方法1)第一个碰到的问题编译是有不少错误,只能一个一个解决,不仅需要看书,还需要和同学多交流,比如,书上IIC_SEND程序中STAT_RW在MPLAB里一直报错,后来改成RW就可以了;2)是LCD液晶屏无法显示数据。有PROTEUS上接线的错误,线脚直接接在LCD的针脚上,程序中初始化定义出错,未能理解LCD_WRITE及LCD_WRITE_4的不同,后来通过在项目中设置LED检测,从主程序开头逐句排查,了解程序运行卡在哪里,逐一解决,实现正常显示;3)温度显示T=000,先排除显示模块出现问题的可能,屏蔽按键中断功能,反复检查IIC初始化,及IIC主动接收、主动发送程序,发现在IIC端口加IIC调试器观察IIC通信是否正常工作;4)按键失灵,按键没有反应,解决办法是检查相关程序,着重检查端口设置;5)刚开始对电机何时运行,LED的闪灭情况有些混乱,解决办法是,把功能设定用文字写下来,再根据文字编写程序;6)实际烧写发现LCD显示异常,按键没有反应,又重新梳理程序,更改了按键程序逻辑;7)实际电机运转时,电机转速忽大忽小,无法稳定。这种情况可能是由于程序里对PWM的高电平时间调整得过于频繁,或者是由于调整的幅度过大,可在相应程序段插入一段延时,或者将PWM高电平时间调整的幅度减小。4.3感想及体会1)确定课题后,就确定了要用到哪些元件、芯片及PIC16F887的哪几个功能模块,所以,必须对这些有个比较深的了解和认识,这样在编写程序时能减少错误,构思出程序流程图,再根据流程图写确定主函数框架,确定子程序,这样程序编写起来才不会乱,也有助于检查时迅速找到相应的程序段;2)观察实验板实际电路,根据实验板确定使用哪些端口,之后再进行相应程序编写;第9页3)程序的编写,需分模块写,子程序化设计做到细致认真,特别是端口地址设置,编译出现错误耐心解决,在编译成功后,而仿真运行发生故障时,一个一个检查相应模块程序运行是否正常,并且对硬件设计也要多加留心,有时是硬件接线的问题;4)实时保存,留有备份,以防万一,对出现问题的程序段可反复推敲;5)程序基本构架完毕和调试成功后,对程序可进行必要的删减和优化,使其更加简练。还可以添加一些附加功能,使系统设计更完善和人性化。通过这次课程设计使我对PIC单片机有了更深的了解,积累了一些设计经验,懂得了理论与实际相结合是很重要的,严谨和细心才能把程序做好做漂亮。不同的课题使我在做课设的过程中更加独立,掌握到更多知识。虽然只是一个小小的题目,但是却有很丰富的内容,比如还可以加入电机测试模块,对电机进行调速,这都是我接下来要实现的目标。参考书目:[1]《PIC16系列单片机C程序设计与PROTEUS仿真》江和,北京航空航天大学出版社,2010[2]《福州大学PIC单片机课程设计指导书》江和,鲍光海,2012年3月第10页附录第11页#includepic.h__CONFIG(0x3771);//引脚定义#defineLCD_RSRD4//LCD寄存器选择数据H/指令L#defineLCD_RWRD5//LCD读H/L写控制线#defineLCD_ERD6//LCDE时钟#defineLEDRA5//LED#defineFSRC2//电机#defineKEY_DECRB2#defineKEY_INCRB1//常数定义#defineTC74_ADD0b1001101#defineCOM0#defineDAT1#defineLINE10b10000000#defineLINE20b11000000#defineRTR0b00000000#defineST_POSITIONLINE2+5#defineDT_POSITIONLINE2+13//函数声明voidCSH();voidLCD_CSH(void);voidLCD_WRIT
本文标题:PIC单片机课程设计
链接地址:https://www.777doc.com/doc-3438576 .html