基于PSoC3的多节点温度采集系统设计报告.docx
- 文档编号:30180449
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:26
- 大小:1.46MB
基于PSoC3的多节点温度采集系统设计报告.docx
《基于PSoC3的多节点温度采集系统设计报告.docx》由会员分享,可在线阅读,更多相关《基于PSoC3的多节点温度采集系统设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
基于PSoC3的多节点温度采集系统设计报告
目录
封面1
目录2
一、实验名称3
二、实验任务3
要求3
三、实验设备及环境4
1.实验设备4
2.实验环境4
四、实验原理4
1.理论4
2.原理图5
3.软件流程图7
五、步骤9
1.新建工程9
2.绘制原理图9
3.编写主程序14
4.引脚分配17
5.设置中断优先级18
6.连接导线并验证实验结果18
六、测试方法、测试结果、结果分析18
七、心得体会19
附录一:
测试效果图
附录二:
分工表
一、实验名称:
基于PSoC3的多节点温度采集系统
二、实验任务:
(1)利用PSoC实验平台上的温度传感器LM35DZ测量环境温度并实现三点监控,温度值通过LCD和上位机显示。
(2)节点NO.1和NO.2将采集的温度数据通过串口发给节点NO.0,节点NO.0将三个节点的温度数据汇总后发送给上位机以实现温度的实时监控。
(3)测量结果保留1~2位整数,1位小数,单位‘℃’,测量误差不大于0.5℃。
(4)可通过上位机软件修改三个节点相关的参数(温度上下限及数据发送的时间间隔),超过门限时通过蜂鸣器、LED进行声光报警,要求采用不同的报警声音。
(5)上位机发送的指令
开启温度采样
开启所有节点温度采样(start_all)
开启单一节点温度采样(start_n(n=0,1,2))
关闭温度采样
关闭所有节点温度采样(stop_all)
关闭单一节点温度采样(stop_n(n=0,1,2))
设置温度上下限
a)设置温度上限
设置所有节点温度上限tem_h_all=xx.x℃
设置单一节点温度上限tem_h_n=xx.x℃(n=0,1,2)
b)设置温度下限
设置所有节点温度下限tem_l_all=xx.x℃
设置单一节点温度下限tem_l_n=xx.x℃(n=0,1,2)
xx.x为所设置的温度值,实际设置时没有下划线,范围0~100℃,步进0.5℃。
(6)设置数据发送周期
t_all=x.xs
x.x为设置的时间范围。
范围:
0.5s–5s,步进0.5s
(7)设置节点修改权限
au_all_en
au_n_en(n=0,1,2)
au_all_dis
au_n_dis(n=0,1,2)
当节点本身修改参数后,上位机有相应提示,并实时更新参数。
(8)显示格式
No.o:
温度,门限,权限;
No.1:
温度,门限,权限;
No.2:
温度,门限,权限。
(9)缺省(默认)值
所有节点处于stop
所有节点权限dis
缺省门限15℃--20℃
发送周期1s
三、实验设备及环境:
实验设备
1.微型计算机(安装了PSoCCreator2.0集成开发软件)
2.PSoC实验平台
3.DC9V电源
4.导线若干
实验环境:
PSoC是在一个专有的MCU(MicroprogrammedControlUnit)内核周围集成了可配置的模拟和数字外围器件阵列PSoC块,利用芯片内部的可编程互联阵列,有效地配置芯片上的模拟和数字块资源,将微控制器、可编程逻辑阵列、模拟可编程阵列等资源成在单芯片上,达到可编程片上系统的目的。
四、原理:
(一)理论:
1.ADC模块:
ADC模块内部结构图
PSoC中的ADC模块的具体结构包括:
a)输入放大器;提供高输入阻抗和用户可选择的增益。
b)3阶Δ-Σ调制器。
c)抽取器包含一个4阶的CIC抽取滤波器和后端处理单元。
后端处理单元执行可选的增益,偏置和采样滤波器功能。
输入缓冲区(InputBuffer):
连接到内部和外部总线输入复用开关上。
来自输入复用开关上的信号直接或者通过缓冲区传递到Δ-Σ调制器。
Δ-Σ执行真正的模拟-数字的转换。
调制器过采样输入,产生串行的比特流输出。
抽取器将高速的串行数据流转换成并行的ADC结果。
抽取器控制分辨率和采样率;输出是最后四个采样的函数。
当输入多路复用开关被切换,输出的前三个采样就不是有效的,直到开关切换后的第四个采样才是有效的。
2.LCD显示模块:
LCD模块为字母数字字符以及有限自定义字体提供可视显示。
字符LCD组件包含一组库子程序,通过这些库子程序可易于使用遵循Hitachi44780标准4位接口的一行、两行或四行LCD模块。
LCD模块为字母数字字符以及有限自定义字体提供可视显示。
3.温度传感模块LM35DZ:
LM35DZ输出标准化为摄氏度,操作电压4到30V,电流不超过60毫安,输出电压与摄氏温标呈线性关系,即0°C时输出为0V,每升高1°C,输出电压增加10mV。
LM35DZ输出电压的精度为0.5°C,摄氏温度传感器的范围是+2°C到+150°C。
4.UART接口模块:
将温度值以1s为间隔通过串口调试助手显示在电脑上,实现实时监控。
5.声光报警模块:
1)蜂鸣器模块:
通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,当输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,则蜂鸣器不会发出声音。
2)LED灯模块:
LED灯D0的初始态为低电平,当I/O口输入为高电平时点亮。
3)上位机模块:
(简介)上位机可方便地实现PC与单片机之间进行信息传递交互,能够更加容易对其进行控制,实现操作可视化,更加直观,保存重要数据等功能。
上位机使用VisualBasic6.0来编制。
通过MSComm控件来发送和接收串口数据。
(功能介绍)首先有参数设置功能可以选择串口、选择波特率、校验位、数据位、停止位;然后有打开、关闭串口功能。
此外还有手动发送,清空重填、清空接受区和停止显示按钮。
最后还有日期,时间显示。
(二)原理图:
电位器LM35DZ
蜂鸣器LED模块
UART接口上位机模块
(三)、软件流程图:
主节点NO.0流程图:
NO.1和NO.2流程图
总体思路:
首先写NO.0的部分,通过串口和电脑通信,然后NO.0接收NO.1和NO.2采集的数据,并将其与自身采集数据发送给电脑,实现温度的实时监控。
同时电脑通过上位机修改NO.0参数并以NO.0为节点修改NO.1和N0.2参数。
五、步骤:
1.新建工程双击打开PSoCCreator2.0软件File->New–>Project。
注:
文件的保存路径不能是中文路径。
2.绘制如下原理图
No.0的原理图
No.1、No.2的原理图(图):
1)设置No.0的参数:
放置ADC_DelSig模块并设置参数:
选择连续采样模式,分辨率设为16位,转换速率设为1000SPS,时钟频率设为640KHZ;采用单端输入(Single),输入范围选择Vssa~6.144V,缓冲器增益设为1,缓冲器模式设为RailToRail,Verf选用内部1.024V。
放置LCD_Char模块并设置参数:
将LCD_Char模块的LCD自定义字符集设置为默认;
放置中断isr_1并设置参数将isr_1的InterruptType设置成默认设置DERIVED;
放置中断UART_isr与UART_isr并设置参数(图)
放置定时器与时钟并设置参数
时钟源设为单口输入,频率为1KHZ,定时器周期设为100ms,即每100ms进入一次中断。
放置URAT模块并设置参数:
URAT只接收来自电路板的信息,并以1s为间隔,通过串口调试助手显示在电脑上,实现实时监控。
放置蜂鸣器和LED并设置参数
蜂鸣器和LED灯设为不与硬件连接,其设置如图所示:
RX1
TX1:
将模块参数设置好之后连接导线完成原理图的绘制。
2)设置No.1的参数:
放置ADC_DelSig模块并设置参数:
选择连续采样模式,分辨率设为16位,转换速率设为1000SPS,时钟频率设为640KHZ;采用单端输入(Single),输入范围选择Vssa~6.144V,缓冲器增益设为1,缓冲器模式设为RailToRail,Verf选用内部1.024V。
放置LCD_Char模块并设置参数:
将LCD_Char模块的LCD自定义字符集设置为默认;
将模块参数设置好之后连接导线完成原理图的绘制
No.2的原理图与No.1的原理图相同。
3.编写主程序
a)编写No.0的主程序:
1)声明函数,设置接收缓存数组CharBuffer[],设置报警电压门限值,阈值温度上限的初始值设为20°C,下限的初始值设为15°C,并为使当温度值超过2位数时,保证小数点对齐,在定义上限阈值温度时,定义为"0200";设置初始的修改状态为“dis”,即不可修改。
设置串口默认发送数据间隔时间为(10*0.1)S,定义各节点启动标志位,全局使能标志位,声明所需函数。
2)系统初始化,使能全局中断,初始化关闭蜂鸣器,启动UART及相应中断使能液晶显示,LCD清屏,启动AD转换,启动定时器触摸板块初始化。
3)设置节点权限,匹配是否发送开启节点权限的指令,"au_",若存在则继续判断指令是针对所有节点"au_all_en"的权限,还是单独某个节点"au_0_en""au_1_en"或"au_2_en"的权限;若不存在,则关闭节点权限"au_all_dis"或"au_0_en"或"au_1_en"或"au_2_en"。
4)匹配是否发送开节点的启动与停止的指令,即"st_",若发送指令为"start_all",即开启所有节点,则将标志为位置1,等待AD转换结束,读取AD转换结果,并在LCD屏上的第一行显示当前摄氏温度值,若读到错误的温度值则丢弃,串口发送"start_all",清除缓存,并将从上位机上接收到的字符存入缓存数组;若发送指令为"start_0",即开启节点0,则将标志为位置1,等待AD转换结束,读取AD转换结果,并在LCD屏上的第一行显示当前摄氏温度值,若读到错误的温度值则丢弃,清除缓存,并将从上位机上接收到的字符存入缓存数组;若发送指令为"start_1",即开启节点1,则将标志为位置1,等待AD转换结束,读取AD转换结果,并在LCD屏上的第一行显示当前摄氏温度值,若读到错误的温度值则丢弃,清除缓存,并将从上位机上接收到的字符存入缓存数组;若发送指令为"start_2",即开启节点2,则将标志为位置1,等待AD转换结束,读取AD转换结果,并在LCD屏上的第一行显示当前摄氏温度值,若读到错误的温度值则丢弃,清除缓存,并将从上位机上接收到的字符存入缓存数组。
若发送指令为"stop_all",即关闭所有节点,则将标志为位置0,串口发送"stop_all",清除缓存,并将从上位机上接收到的字符存入缓存数组;若发送指令为"stop_0",即关闭节点1,则将标志为位置0,清除缓存,并将从上位机上接收到的字符存入缓存数组;若发送指令为"stop_1",即关闭节点2,则将标志为位置0,清除缓存,并将从上位机上接收到的字符存入缓存数组;若发送指令为"stop_2",即关闭节点2,则将标志为位置0,清除缓存,并将从上位机上接收到的字符存入缓存数组。
5)匹配修改各节点的上下限及串口发送时间“t”:
若发送指令“tem_h_all=”,则修改所有节点的上限温度值,且是以0.5为不仅进行修改,若修改的上限值低于下限值,则判断其值是以0或是0.5结尾,并在其基础上加0.5作为上限值,清除缓存,并将从上位机上接收到的字符存入缓存数组,每隔(temp*0.1)s向上位机发送一次数据;若发送指令“tem_h_0=”,则修改所有节点的上限温度值,且是以0.5为步进进行修改,若修改的上限值低于下限值,则判断其值是以0或是0.5结尾,并在其基础上加0.5作为上限值,清除缓存,并将从上位机上接收到的字符存入缓存数组,每隔(temp*0.1)s向上位机发送一次数据;若发送指令“tem_h_1=”,则修改所有节点的上限温度值,且是以0.5为不仅进行修改,若修改的上限值低于下限值,则判断其值是以0或是0.5结尾,并在其基础上加0.5作为上限值,清除缓存,并将从上位机上接收到的字符存入缓存数组每隔(temp*0.1)s向上位机发送一次数据;若发送指令“tem_h_2=”,则修改所有节点的上限温度值,且是以0.5为步进进行修改,若修改的上限值低于下限值,则判断其值是以0或是0.5结尾,并在其基础上加0.5作为上限值,清除缓存,并将从上位机上接收到的字符存入缓存数组,每隔(temp*0.1)s向上位机发送一次数据。
若发送指令“tem_l_all=”,则修改所有节点的下限温度值,且是以0.5为步进进行修改,若修改的下限值高于上限值,则判断其值是以0或是0.5结尾,并在其基础上减0.5作为上限值,清除缓存,并将从上位机上接收到的字符存入缓存数组,每隔(temp*0.1)s向上位机发送一次数据;若发送指令“tem_l_0=”,则修改所有节点的下限温度值,且是以0.5为步进进行修改,若修改的下限限值高于上限值,则判断其值是以0或是0.5结尾,并在其基础上减0.5作为上限值,清除缓存,并将从上位机上接收到的字符存入缓存数组,每隔(temp*0.1)s向上位机发送一次数据;若发送指令“tem_l_1=”,则修改所有节点的下限温度值,且是以0.5为步进进行修改,若修改的下限值高于上限值,则判断其值是以0或是0.5结尾,并在其基础上加0.5作为上限值,清除缓存,并将从上位机上接收到的字符存入缓存数组,每隔(temp*0.1)s向上位机发送一次数据;若发送指令“tem_h_2=”,则修改所有节点的下限温度值,且是以0.5为步进进行修改,若修改的下限值高于上限值,则判断其值是以0或是0.5结尾,并在其基础上加0.5作为下限值,清除缓存,并将从上位机上接收到的字符存入缓存数组,每隔(temp*0.1)s向上位机发送一次数据。
6)通过串口将采集到的温度值,端口名称、状态,上下限阈值,能否修改上下限阈值显示在上位机上,并保证个数据之间数位对齐。
7)定时器每隔1s清空一次接收缓存数组以消除误操作产生的影响,接收串口发送来的和数据,若超过上限阈值电压,则以200ms为周期,让报警装置报警;若低于下限阈值电压,则以500ms为周期,让报警装置报警
8)将接收到的节点1、2的温度值存入缓存数组。
b)编写No.1的主程序:
1)声明函数,设置未接收时CharBuffer[],设置报警电压门限值,阈值温度上限的初始值设为20°C,阈值温度下限的初始值设为15°C,并为使当温度值超过2位数时,保证小数点对齐,在定义上限阈值温度时,定义为"0200"。
设置各节点启动标志位,全局使能标志位,声明所需函数。
2)系统初始化,使能全局中断,初始化关闭蜂鸣器,启动UART及相应中断使能液晶显示,LCD清屏,启动AD转换,启动定时器触摸板块初始化。
3)设置节点权限,strcmp()函数是否发送开启所有节点"au_all_en"的权限,还是单独某个节点"au_1_en";若不存在,则关闭节点权限"au_all_dis"或"au_1_en"。
4)利用strcmp()函数是否发送开节点的启动指令"start_all",即开启所有节点,则将标志为位置1,等待AD转换结束,读取AD转换结果,并在LCD屏上的第一行显示当前摄氏温度值,若读到错误的温度值则丢弃,清除缓存,并将从上位机上接收到的字符存入缓存数组;若发送指令为"start_1",即开启节点0,则将标志为位置1,等待AD转换结束,读取AD转换结果,并在LCD屏上的第一行显示当前摄氏温度值,若读到错误的温度值则丢弃,清除缓存,并将从上位机上接收到的字符存入缓存数组。
若发送指令为"stop_all",即关闭所有节点,则将标志为位置0,清除缓存,并将从上位机上接收到的字符存入缓存数组;若发送指令为"stop_1",即关闭节点1,则将标志为位置0,清除缓存,并将从上位机上接收到的字符存入缓存数组。
5)修改所有节点的上下限,打开全局中断,将修改温度的阈值,清除缓存,并将从上位机上接收到的字符存入缓存数组,每隔(temp*0.1)s向上位机发送一次数据;修改节点1的上下限,打开全局中断,将修改温度的阈值,清除缓存,并将从上位机上接收到的字符存入缓存数组,每隔(temp*0.1)s向上位机发送一次数据。
6)通过串口将采集到的温度值,端口名称、状态,上下限阈值,能否修改上下限阈值显示在上位机上,并保证个数据之间数位对齐。
7)定时器每隔1s清空一次接收缓存数组以消除误操作产生的影响,接收串口发送来的和数据,若超过上限阈值电压,则以200ms为周期声光报警;若低于下限阈值电压,则以500ms为周期声光报警。
8)将接收到的节点1、2的温度值存入缓存数组。
c)编写No.2的主程序:
同No.1。
5.管脚的分配(图)
NO.0:
NO.1:
NO.2:
6.设置各个中断的优先级(图)
7.编译、下载编译
下载:
用仿真器连接电脑和实验
8.连接导线并验证实验结果。
六、测试方法、测试结果、结果分析:
1)测试方法:
1.根据管脚分布图连接导线,使各个节点能正常工作。
2.测试时,用导线将温度传感模块LM35DZ接入电路板中,看LCD屏上是否能显示室内温度,并将温度上传至电脑,然后依次通过上位机不同指令修改不同节点的参数
2)测试结果:
七、心得体会:
能够顺利的完成这个实验,我们首先要感谢我们的PSoC实验课的辅导老师,感谢他们在实验课上对我们遇到各种困难是给予的帮助和指点迷津,没有他们的指导我们是不可能完成这个实验的。
在这个实验中,我们对PSoC进行了学习,包括中断、传感器、UART串口调试、LCD显示、ADC转换等内容。
尽管在老师的悉心教导下,我们从开始一无所知到现在的略懂一二,但我们仍然无法估计自己掌握知识的情况。
因此,这次综合实验对我们来说是一次检验的好机会。
刚拿到题目时我们一头雾水,多番思量之后依然毫无头绪。
我们也设想了许多从未想过的难题,比如误差很难消除,我们做了大量的反复试验,还有显示正常下载却运行不正常的状态,LCD部分功能与说明也不是很相符,还有实验板子的不正常也许影响了实验的行程等等诸多问题,但是基于之前做过的PSoCI/O口实验、LED驱动显示实验、A/D转换实验,我们慢慢思索实践,最终也都在我们的不断思考与实践中解决了。
本次试验中,我们学会的不仅仅是如何使用PSOC,如何种趣味使用各种集成电路器件,如何去查询帮助文档来编写程序,更是学会了如何去通过自己的查阅来对各器件进行正确的连接并按照自己的电路去完成相应的工作,如何通过理论计算和实验数据的结合去解决实验中的各个错误,增强了对语言方面的熟悉度。
通过一段时间的关于PSoC的学习,这对我们来说是一次莫大的鼓舞。
遇到的问题:
首先在写各节点的连接过程中,不能正常显示温度值,很多都是乱码,然后我们先复位实验板然后清空以前的程序发现还是会有很多乱码,最终更换了实验板终于解决了问题。
在写上位机的过程中,由于之前没有了解过太多这方面的知识所以刚开始有些迷茫,然后我们相互学习,查阅资料,一步步的改进最终完成了比较满意的结果。
在调试过程中,我们发现输入各个指令时,只能输入一个字母,而输入字符串是不能正常执行指令。
然后我们把程序中的字符型定义改为字符串型,最终实现了指令的正常执行。
收获与体会
基于PSoC3的多节点温度采集系统的设计使我们对PSoC平台的操作和设计更加熟悉了。
我们了解了和基本掌握了LCD显示模块、ADC模块、蜂鸣器报警、UART串口调试等模块的工作原理,也锻炼了我们的对PSoC实验平台的操作能力。
并且在遇到问题和解决问题的过程中,我们的独立思考能力和收集资料的能力也受到了很好的锻炼,同时也使我们对学习到的知识有了更为深刻的记忆,收获了很多从书本上很难学到的东西。
附1:
测试效果图
温度在限定范围内时:
当温度超出限定值时:
附2:
分工表
姓名
学号
班级
分工
刘金龙
2010210029
0191002
编写主节点程序
王平
2010210026
0191002
编写上位机程序
林辛鑫
2010210378
0191002
编写分节点程序
耿义佳
2010210400
0191002
负责报告部分
王秋贻
2010210147
0191001
张文艺
2010210164
0191002
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 PSoC3 节点 温度 采集 系统 设计 报告