基于STM32F103的网络温度报警器物联网讲述Word格式文档下载.docx
《基于STM32F103的网络温度报警器物联网讲述Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于STM32F103的网络温度报警器物联网讲述Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
本系统使用STM32F103实现了接收由上位机通过TCP协议发出的温度报警阈值信
号,并存于SD片卡中。
单片机利用普通二极管的PN结测试环境温度,每30s采集一次,
将采集到的温度信息补充上时间(时、分、秒、毫秒)标注存储在存储芯片中。
并将报警时的温度值与当前时间的温度进行比较,当前温度大于阀值温度时,通过发光二极管或蜂鸣器
报警。
上位机通过TCP,向单片机发送“Read」nfo”命令后,单片机能将SD卡中存储的所有数据发到PC机的串口助手中;
数据格式美观、易懂。
本系统采用普通二极管PN节的温度特性来测量环境温度不失为一种低成本而又容易
实现的环境温度测量方式。
使用STM32自带的ADC模块进一步降低了成本和设计难度。
采用大容量存储芯片可以长时采集环境数据,并且在采集到的温度补充上时间信息使数据更
加可信,同时移植了文件系统方便文件在WINDOWS下的读取和处理。
本系统采用了无线传输的方式配合可靠的电源设备或太阳能设备可以在室外持续的传
输回温度信息或其他的气象数据(需配合适当的传感器),减少了人工成本,并且更加适应于野外大规模投放接点。
2.利用普通二极管PN结测试环境温度原理
温度是表示物体或环境冷热程度的一种物理量,而温度传感器是一种能将温度变化转换
成电量变化的元器件。
由于二极管制造工艺的特殊性,我们可以利用二极管的伏安特性来测
量环境的温度,它的伏安特性如下图
众所周知,将PN结用外壳封装起来,并加上电极引线就构成了半导体二极管,即所谓
的二极管。
由P区引出的电极为阳极,由N区引出的电极为阴极,如下图所示
困眼3二樓管转站耳也略图带抽号
温度对二极管的性能有较大的影响,温度升高时,二极管的正向压降将减小,每增力口
1C,正向压降减小约2mV,因此可以使用这一特性来测量环境温度。
由半导体理论可以得出,PN结所加端电压u与流过它的电流i的关系为:
其中,Is为反向饱和电流,对于硅材料来说,Is约为10pA;
q为电子的电量,q=1.6*10的-9次方库伦;
k是玻耳茨曼常数,k=1.38*10的-23次方J/K;
T为绝对温度,kT/q可以用UT来代替,常温下,即T=300K时,UT约为26mV。
对于足够大的电压,二极管方程可以近似写成
那么,二极管两端的电压可以推导出为:
因此温度的公式为:
3.器件的选择和芯片的介绍
本系统采用了ST公司和高性能微控制器一一STM32F130ZET6,该微控制器具有512K
ROM以及62KRAM足以满足该项目的需求。
本系统使用到的模块有:
ENC28J60模块,0.96'
OLED模块,SD卡模块,以及2个
无线模块和USB-TTL模块。
为了满足这些模块的供电需求另外自己用洞洞板做了AMS1117
的稳压模块,以及采用德州仪器公司的TPS7333稳压芯片制作了稳压模块为无线模块提供
稳定可靠的电源使数据的发送和接收更加稳定。
AMS1117系列稳压芯片有可调版与多种固定电压版,设计用于提供1A输出电流且工
作压差可低至1V。
在最大输出电流时,AMS1117器件的压差保证最大不超过1.3V,并随负载电流的减小而逐渐降低。
本系统采用的是输出3.3v的固定电压版本。
电路图如下:
VCC5V
VCCINOUT3.3
UND
TPS7333是由德州仪器公司研发生产的单通道线性稳压芯片,具有单输出LDO、
500mA、固定电压(3.3V)、集成SVS、低静态电流,性能十分稳定,输出电压纹波低。
应用电路比较简单,电路如下:
卞TPS7326,TPS7330,TPS7333,TPS7348.TPS73S0(fixed-voltageoptions)
ICapacitorselectionisnontnvialSeeapplicationinformationsectionfordetails
Figure2,TypicalApplicationConfiguration
4.UC/0S系统移植
uC/OS是一个微型的实时操作系统,包括了一个操作系统最基本的一些特性,如任务调度、任务通信、内存管理、中断管理、定时管理等。
而且这是一个代码完全开放的实时操作系统,简单明了的结构和严谨的代码风格,非常适合初涉嵌入式操作系统的人士学习。
很多人在学习STM32中,都想亲自移植一下uC/OS,而不是总是用别人已经移植好的。
在我学习uC/OS的过程中,查找了很多资料,也看过很多关于如何移植uC/OS到STM32处理器上的教程,但都不尽人意,主要是因为是时间比较赶,无法静下心开好房学习,在一个月时间内完成STM32的学习以及UIP、文件系统的移植
还是比较辛苦和困难的。
1.首先需要从官网上下载UC/OS的源码,并且选择STM32F103ZET6由于官方没有公布KEIL版本的工程只有IAR版本,所以需要进行一定的修改才可用于KEIL中。
UC/OS的文件结构如下图所示:
Section2ARMCortex-M3/TargetBoard
Figure1-1,Relationshipbetweenmodules.
2.
按照下图的文件结构搭建uC/OS工程文件结构
1把LED工程所在的文件夹先改名为:
STM32+UCOS
2在USER文件夹下新建includes.h头文件。
3按照之前给的uC/OS-ll文件结构图,我们在工程的根目录下建立BSP文件夹、APP文
件夹和uCOS-ll文件夹。
BSP文件夹存放外设硬件驱动程序。
APP文件夹存放应用软件任务
uCOS-II文件夹uC/OS-ll的相关代码
4把USER文件夹下的led.h和led.c文件剪切到BSP文件夹里。
在BSP文件夹里新建BSP.c和BSP.h文件。
5在APP文件夹下建立app.h、app.c和app_cfg.h文件。
拷贝uC/OS-ll源代码附件那里的Micrium\Software\EvalBoards\ST\STM32F103ZE-SK\IAR\OS-Probe-LCD\os_cfg.h到此目录。
6把uC/OS-ll源代码附件那里的\Micrium\Software\uCOS-II下的Source文件夹复制
到工程里刚才新建的uCOS-ll文件夹里。
把Micrium\Software\uCOS-ll\Ports\arm-cortex-m3\Generic'
IAR下的文件复制到工
程uCOS-ll文件夹中新建的Ports文件夹里。
复制后,选中全部文件,右键一一属性一一去掉只读属性确定。
如下图添加includepath
3.配置uC/OS-ll
a.修改os_cfg.h:
①首先禁用信号量、互斥信号量、邮箱、队列、信号量集、定时器、内存管理,关闭调试
模式:
#defineOS_MBOX_EN0//禁用邮箱
禁用互斥信号量
#defineOS_MUTEX_EN0//
#defineOS_Q_EN0//禁用队列
#defineOS_SEM_EN0//禁用信号量
#defineOS_TMR_EN0//
#defineOS_DEBUG_EN0//
禁用定时器
禁用调试
b.修改os_cpu.h
注释掉这三行
voidOS_CPU_SysTickHandler(void);
voidOS_CPU_SysTicklnit(void);
INT32UOS_CPU_SysTickClkFreq(void);
c.修改os_cpu_c.c
把OS_CPU_SysTickHandler(),OS_CPU_SysTickInit()及如下图的文件注释掉
ine
ine#define#defineAdeline
OSCPUyNVICSTCTRL((VOlatile
(*((volatileOs2cPu2CM32WICZSTlC[JRREWTf((volatileOS[CPU[C阳(*((volatileOS[CPU[C阳[nVTc[prEo_ST(*((v口latile
INT32UOXEOOOEOIO))
IHT32U*)OxEOOOE014^J
INT32U*)OxEOOOEOlS))
INT32UOxEOOOEOlC))
INT8U*^OxEOOOED23))
ine皂:
fineAdeline^define#define
OS_CPU_CM3_WIC_ST_CTRL_COUNT
PM3[NVIC[宜T[cT区hRC
OS2CPUZCH3ZHVICZSTZCTRLIINT^KOS]CP"
CN匸NVIC[ST_CTRL_ENABLEOS-CPU^CM3^NVIC_PP10MIN
0x00010000
□x00000004
0x00000002
0x00000001
OxFF
d.修改os_cpu_a.asm
由于编译器的原因要将下面的PUBIC改为EXPORT:
PUBLICOS_CPU_SR_Save;
Functionsdeclaredinthisfile
PUBLICOS_CPU_SR_Restore
PUBLICOSStartHighRdy
PUBLICOSCtxSw
PUBLICOSIntCtxSw
PUBLICOS_CPU_PendSVHandlere.修改os_dbg.c
将
#defineOS_COMPILER_OPT__root
改为
#defineOS_COMPILER_OPT//__root
修改startup_stm32f10x_hd.s
因为本次移植是使用标准外设库CMSIS中startup_stm32f10x_hd.s作为启动文件的,还
没有设置OS_CPU_SysTickHandler。
而startup_stm32f10x_hd.s文件中,PendSV中断向量名为PendSV_Handler,因此只需把所有出现PendSV_Handler的地方替换成
OS_CPU_PendSVHandler即可。
编写includes.h
#ifndef__INCLUDES_H_
#define__INCLUDES_H
#include"
stm32f10x.h"
定时器相关
#inelude"
stm32f10x_rcc.h"
//SysTick
ucos_ii.h"
//uC/O