基于CAN总线的温湿度及光感度测量单片机课程设计Word格式文档下载.docx
《基于CAN总线的温湿度及光感度测量单片机课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于CAN总线的温湿度及光感度测量单片机课程设计Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
主控芯片选择
(1)用可编程逻辑器件设计。
可采纳ALTERA公司的FLEX10K系列PLD器件。
设计起来结构清楚,各个模块,从硬件上设计起来相对简单,操纵与显示的模块间的连接也会比较方便。
可是考虑到本设计的特点,EDA在功能扩展上比较受局限,而且EDA占用的资源也相对多一些。
从本钱上来讲,用可编程逻辑器件来设计也没有什么优势。
(2)用MSP430F149作主控芯片,编程简单,功能丰硕,速度专门快,功耗很低。
因此选择430作为数据搜集和显示处置的主控芯片。
2显示部份的方案选择
(1)数码管显示方式
采纳八段数码管经济实惠,亮度高,对照度高,显示清楚;
但操作很复杂,占用很多CPU时刻。
(2)液晶显示方式
液晶显示成效出众,操作简单,输入完显示信息后不占用CPU时刻,显示容量也大,因此采纳1602液晶显示器。
3传感器选择
(1)采纳DS18B20数字温度传感器,精度高,灵敏度高;
但不能搜集湿度信息;
(2)采纳DHT11数字温度传感器,可同时测量温度和湿度,精度和灵敏度,转换速度也都能知足本次系统要求,而且DHT11采纳单总线通信模式,占用IO口少。
因此选用DHT11数字温湿度传感器。
2系统设计
采纳MSP430F149作为数据搜集和接收处置显示模块的主控芯片,430和各类传感器通信读出各类测量参数,通过CAN操纵器将信息发送到CAN总线上;
数据接收模块从CAN总线上读取各类信息并通过显示模块显示出来。
传感器
数据采集
数据接收
显示模块
CAN总线
图1远程温湿度数据采集
3单元电路设计
温湿度搜集系统
DHT11
数字温湿度
BH1750FVI环境光强度传感器
MSP
430
F149
SJA
1000
CAN控制器
TJA
l050
收发器
CANBUS
图2远程温湿度数据采集模块
由图2所示,温湿度数据搜集模块的硬件由以下四部份组成:
传感器DHT11,微操纵器MSP430F149,CAN操纵器和CAN收发器。
微操纵器MSP430F149要紧负责对传感器输出的两路模拟信号进行循环搜集并AD转换,SJAl000的初始化,通过操纵JAl000实现数据的发送和接收。
SJAl000负责数据链路层的工作,把发送缓冲器的数据通过处置后送到TJAl050,信息通过处置后放到接收缓冲器等待微处置器的读取。
TJA1050提供SJA1000与物理总线之间的接口。
数据处置显示模块
图3数据接收处理显示模块
En
C/S
R/W
1602液晶显示器
如图3所示TJA1050收发器将信号差分放大去除噪声后送给SJA1000操纵器,操纵器将接到的报文处置后提取数据给430,430将数据显示到1602显示器上。
4系统功能
本文设计的系统能实时测量远程温湿度及光强度。
测量范围:
温度0~50℃,湿度20~90%RH,光强1lx-65535lx;
分辨率:
温度1℃,湿度+/-2℃,光强1lx;
测量距离:
1km
5程序模块流程图
开始
初始化系统
初始化SJA1000
是否中断
接收一个字节
数据转存
是否发完
发送一个字节
图4数据接收模块程序流程图
图5数据发送模块程序流程图
参考文献
[1]李正军编著.现场总线及其应用技术[M].北京机械工业出版社.2005.1
[2]任广永等.基于AT89C55和CAN总线的远程数据搜集系统的设计[J].电脑学习.2007.2
[3]潘琢金,施国君.C8051FXXX高速SOC单片机原理及应用[M].北京:
北京航空航天大学出版社.2002
[4]吴文珍,韩玉祥,司光宇等.基于CAN总线智能检测仪的设计[D].大庆石油学院学报.2005,29(5)
[5]SJAl000独立CAN操纵器数据手册.广州周建功单片机进展.
心得体会
谢广昊:
通过这次课程设计,使我加倍扎实的把握了有关CAN总线方面的知识,在设计进程中尽管碰到了一些问题,但通过一次又一次的试探,一遍又一遍的检查终于找出了缘故所在,也暴露出了前期我在这方面的知识欠缺和体会不足。
实践出真知,通过亲自动手制作,使咱们把握的知识再也不是纸上谈兵。
过而能改,善莫大焉。
在课程设计进程中,咱们不断发觉错误,不断更正,不断领会,不断获取。
最终的检测调试环节,本身确实是在践行“过而能改,善莫大焉”的知行观。
这次课程设计终于顺利完成了,在设计中碰到了很多问题,最后在教师的指导下,终于游逆而解。
在尔后社会的进展和学习实践进程中,必然要不懈尽力,不能碰到问题就想到要畏缩,必然要不厌其烦的发觉问题所在,然后一一进行解决,只有如此,才能成功的做成想做的事,才能在尔后的道路上劈荆斩棘,而不是知难而退,那样永久不可能收成成功,收成喜悦,也永久不可能取得社会及他人对你的认可!
马少波:
我以为,在这学期的实验中,不仅培育了独立试探、动手操作的能力,在各类其它能力上也都有了提高。
更重要的是,在实验课上,咱们学会了很多学习的方式。
而这是往后最有效的,真的是收成颇丰。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这关于咱们的以后也有专门大的帮忙。
以后,不管有多苦,我想咱们都能变苦为乐,找寻有趣的情形,发觉其中宝贵的情形。
就像中国提倡的艰苦奋斗一样,咱们都能够在实验终止以后变的加倍成熟,会面对需要面对的情形。
回忆起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,能够说得是苦多于甜,可是能够学到很多很多的东西,同时不仅能够巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我知道了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会效劳,从而提高自己的实际动手能力和独立试探的能力。
在设计的进程中碰到问题,能够说得是困难重重,但可喜的是最终都取得了解决。
张巨龙:
回忆起这次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两礼拜的日子里,能够说得是苦多于甜,可是能够学到很多很多的的东西,同时不仅能够巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
在设计的进程中碰到问题,能够说得是困难重重,这毕竟第一次做的,不免会碰到过各类各样的问题。
最后在教师的辛勤指导下,终于游逆而解。
同时,在教师的身上我学取得很多有效的知识,在次我表示感激!
同时,对给过我帮忙的所有同窗和列位指导教师再次表示忠心的感激!
附录一
元件清单
器件
数量
MSP430F149芯片
2
SAJ1000CAN控制器
BH1750光强度传感器
1
DHT11温湿度传感器
排线
5*8=40
排针
电阻2K
4
红色发光二级管
BUTTON(复位开关)
附录二
系统程序清单
#include<
>
#include"
"
返回值说明:
0:
波特率设置成功
1:
波特率设置失败
**********************************************************/
unsignedcharrate_tab[]={
0x53,0x2f,c
//**************************精准延时**********************************
#defineCPU_F((double)8000000)
#definedelay_us(x)__delay_cycles((long)(CPU_F*(double)x/)
#definedelay_ms(x)__delay_cycles((long)(CPU_F*(double)x/)
//********************************************************************
#defineuintunsignedint
#defineucharunsignedchar
#definercv_flag0x01//接收中断标志
#defineerr_flag0x04//错误中断标志
#defineOver_flag0x08//CAN总线超载标志
voidinit_CPU(void);
//初始化MSP430
charinit_SJA1000(void);
//初始化SJA1000
voidCan_error();
//CAN总线错误中断处置
voidCan_DATA_OVER();
//CAN总线溢出中断处置
voidCan_DATA_Rcv();
//接收CAN总线数据到rcv_data数组
voidCan_DATA_Send();
//通过CAN总线发送send_data数组中的数据
voidSJA_Process(void);
voidBH1750_conversion(uchartemp_data[2]);
//数据转换出个,十,百,千,万
voidinit_display(void);
//显示单位
ucharsend_flag=0;
//CAN总线发送标志
unsignedcharCan_INT_DATA=0;
//用于存储SJA1000的中断寄放器数据,430中不能位寻址
//--------------------------------------
uintge,shi,bai,qian,wan;
//显示变量
//--------------------------------------
voidmain(void)
{
ucharRead_BUF[2]={1,2};
//读回BH1750数据变量
ucharSENSOR_DATA[8];
//温湿度数据
init_CPU();
init_disp