1、基于 CAN 总线的温湿度及光感度测量单片机系统课程设计报告专 业:组 员:指 导 教 师:完成日期:2013 年 7 月 11 日基于 CAN 总线的温湿度及光感度测量基于 CAN 总线的温湿度及光感度测量摘要:随着我国工业生产的发展和自动化程度的不断提高,迫切需要对各种生产过程中的物理量进行精确检测。温度、湿度作为大多数生产过程中的重要物理量,对它们的精确检测和远传越来越受到人们重视。因此,研制一种高精度、高稳定性、低成本的温湿度仪表将具有重要意义,必将拥有广阔的市场前景。同时,由于工业现场对抗电磁干扰和传输距离有比较高的要求,所以本文设计了一种基于CAN(ControlArea Netw
2、ork 局域网控制)总线的远程实时温湿度数据采集系统。该系统主要由两大模块构成,分别是数据现场采集模块、和显示处理模块。本设计使用 C 语言进行了各个模块软件的设计,完成对传感器信号的处理和 CAN 模块报文的发送和接收。关键词:430 CAN DHT11 温湿度 光感度1 设计方案论证1.1 主控芯片选择(1) 用可编程逻辑器件设计。可采用 ALTERA 公司的 FLEX10K 系列 PLD 器件。设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接也会比较方便。但是考虑到本设计的特点,EDA 在功能扩展上比较受局限,而且 EDA 占用的资源也相对多一些。从成本上来
3、讲,用可编程逻辑器件来设计也没有什么优势。 (2) 用 MSP430F149 作主控芯片,编程简单,功能丰富,速度很快,功耗很低。因此选择 430 作为数据采集和显示处理的主控芯片。2 显示部分的方案选择(1) 数码管显示方式采用八段数码管经济实惠,亮度高,对比度高,显示清晰;但操作很复杂,占用很多 CPU 时间。(2) 液晶显示方式 液晶显示效果出众,操作简单,输入完显示信息后不占用 CPU 时间,显示容量也大,因此采用 1602 液晶显示器。基于 CAN 总线的温湿度及光感度测量3 传感器选择(1) 采用 DS18B20 数字温度传感器,精度高,灵敏度高;但不能采集湿度信息;(2) 采用
4、DHT11 数字温度传感器,可同时测量温度和湿度,精度和灵敏度,转换速度也都能满足本次系统要求,而且 DHT11 采用单总线通信模式,占用 IO口少。因此选用 DHT11 数字温湿度传感器。2 系统设计采用 MSP430F149 作为数据采集和接收处理显示模块的主控芯片,430 和各种传感器通信读出各种测量参数,通过 CAN 控制器将信息发送到 CAN 总线上;数据接收模块从 CAN 总线上读取各种信息并通过显示模块显示出来。传感器数据采集数据接收显示模块CAN 总线图 1 远程温湿度数据采集3 单元电路设计3.1 温湿度采集系统基于 CAN 总线的温湿度及光感度测量DHT11数字温湿度传感器
5、BH1750FVI环境光强度传感器MSP430F149SJA1000CAN控制器TJAl050收发器CAN BUS图 2 远程温湿度数据采集模块由图 2 所示,温湿度数据采集模块的硬件由以下四部分构成:传感器 DHT11,微控制器 MSP430F149,CAN 控制器和 CAN 收发器。微控制器 MSP430F149 主要负责对传感器输出的两路模拟信号进行循环采集并 AD 转换,SJAl000 的初始化,通过控制 JAl000 实现数据的发送和接收。SJAl000 负责数据链路层的工作,把发送缓冲器的数据经过处理后送到 TJAl050,信息经过处理后放到接收缓冲器等待微处理器的读取。TJA10
6、50 提供 SJA1000 与物理总线之间的接口。3.2 数据处理显示模块SJA1000CAN控制器TJAl050收发器CAN BUS图 3 数据接收处理显示模块MSP430F149EnC/SR/W1602液晶显示器如图 3 所示 TJA1050 收发器将信号差分放大去除噪声后送给 SJA1000 控制器,控制器将接到的报文处理后提取数据给 430,430 将数据显示到 1602 显示器上。4 系统功能基于 CAN 总线的温湿度及光感度测量本文设计的系统能实时测量远程温湿度及光强度。测量范围:温度 050,湿度 2090%RH,光强 1lx-65535lx;分辨率:温度 1,湿度+/-2,光强
7、 1lx;测量距离:1km基于 CAN 总线的温湿度及光感度测量5 程序模块流程图开始初始化系统初始化SJA1000是否中断接收一个字节数据转存开始初始化系统初始化SJA1000是否发完发送一个字节图 4 数据接收模块程序流程图图 5 数据发送模块程序流程图参考文献1 李正军编著现场总线及其应用技术M北京机械工业出版社200512 任广永等基于 AT89C55 和 CAN 总线的远程数据采集系统的设计J电脑学习200723 潘琢金,施国君C8051FXXX 高速 SOC 单片机原理及应用M北京:北京航空航天大学出版社20024吴文珍,韩玉祥,司光宇等基于 CAN 总线智能检测仪的设计D大庆石油
8、学院学报2005,29(5)5SJAl000 独立 CAN 控制器数据手册广州周立功单片机发展有限公司基于 CAN 总线的温湿度及光感度测量心得体会谢广昊:通过此次课程设计,使我更加扎实的掌握了有关 CAN 总线方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。 过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完
9、成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!马少波:我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有
10、很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是
11、困难重重,但可喜的是最终都得到了解决。 张巨龙:回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题。最后在老师的辛勤指导下,终于游逆而
12、解。同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!基于 CAN 总线的温湿度及光感度测量附录一元件清单器件 数量MSP430F149 芯片 2SAJ1000CAN 控制器 2BH1750 光强度传感器 1DHT11 温湿度传感器 11602 液晶显示器 1排线 5*8=40排针 5*8=40电阻 2K 4红色发光二级管 4BUTTON(复位开关) 2基于 CAN 总线的温湿度及光感度测量附录二系统程序清单Main.c#include#include “SJA1000.h“#include “DHT11.h“#includ
13、e “BH1750.h“#include “IIC.h“/*精确延时*#define CPU_F (double)8000000)#define delay_us(x) _delay_cycles(long)(CPU_F*(double)x/1000000.0)#define delay_ms(x) _delay_cycles(long)(CPU_F*(double)x/1000.0)/*#define uint unsigned int#define uchar unsigned char#define rcv_flag 0x01 /接收中断标志#define err_flag 0x02 /
14、错误中断标志#define Over_flag 0x04 /CAN 总线超载标志void Init_BH1750(); /BH1750 初始化void SJA_Process(void);void init_CPU (void); /初始化 MSP430uchar send_flag = 0; /CAN 总线发送标志unsigned char Can_INT_DATA=0; /用于存储 SJA1000 的中断寄存器数据,430 中不能位寻址 /-uchar rcv_data10; /接收数据数组 /-void main( void )WDTCTL = WDTPW + WDTHOLD; / St
15、op watchdog timer to prevent time out resetuchar SJA_status;init_CPU (); /初始化 MSP430Init_BH1750(); /初始化 BH1750dodelay_ms(10); /小延时SJA_status = init_SJA1000 (); while(SJA_status); /初始化 SJA1000基于 CAN 总线的温湿度及光感度测量Can_INT_DATA=0; /CAN 中断变量清零delay_ms(1000);_EINT(); /开总中断while(1) uchar Read_BUF2 = 0,0; /读
16、回 BH1750 数据变量read_TRH(); /读取温湿度传感器 delay_ms(120);Read_1Byte_currentaddress(Read_BUF); /读回 BH1750 数据send_data6 = Read_BUF0;send_data7 = Read_BUF1;send_flag = 1;SJA_Process();/SJA 最终处理 /*函数原型:void Init_BH1750();函数功能:BH1750 初始化*/void Init_BH1750()Write_1Byte(0x01); /通电,等待测量指令Write_1Byte(0x07); /通电后,重置数字寄存器Write_1Byte(0x10); /连续 H 分辨率模式/*函数功能:SJA_1000 最终处理函数*/void SJA_Process(void)if(Can_INT_DATA /清除接收标志位SJA_rcv_data(rcv_data); /接收 CAN 总线数据到 rcv_data 数组if(send_flag)/发送中断send_flag=0; /清除发送标志位SJA_send_data(send_data); /把 send_data 数组中数据写入到发送缓冲区if(Can_INT_DATA & Over_flag)=Over_flag)/溢出中断