基于STM32的温湿度检测和传输
湖北工业大学毕业设计(论文)
题目:基于Cortex-M3的数据采集系统研究
学院:电气工程与电子工程
专业:自动化
学生姓名:孙军
指导教师:权轶
日期: 2014 年 4 月
基于STM32的数据采集系统研究
摘要
随着嵌入式技术的发展,单片机技术进入了一个新的台阶,目前除最早的51单片机现在有了STM32系列单片机以ARM的各系列单片机,而本次毕业设计我采用STM32单片机来完成,目的是实现温湿度的采集和传输,温湿度的采集是作为自动化学科中一个必须掌握的检测的技术,也是一项比较实用的技术。
数据采集是获取信号对象信息的过程。本文设计了一个基于ARM Cortex-M3处理器的数据采集系统,利用内置的丰富的外设资源,实现多路模拟输入电压信号的连续采集和顺序转换,通过RS232串行通信将转换结果在PC接收端显示,并产生PWM方波信号,实现对现场温度信号的实时监测。本次设计目的是提供方法进行可行性研究。
关键词:嵌入式技术;电路设计;STM32;sht10温湿度采集;程序设计
abstract
引言
我的毕业设计做的是温湿度数据的采集和传输。温湿度的采集的用途是非常的广泛的,比如说化工业中做酶的发酵,必须时刻了解所发酵酶的温湿度才可以得到所需酶。文物的保护同样也离不开温、湿度的采集,在博物馆和档案馆中,空气湿度和和空气质量条件的优劣,是藏品保存关键,所以温湿度的检测对其也是具有重要意义的。最后就是大型机房的温湿度的采集,国家对此有严格标准规定温湿度的范围,超出此范围会影响服务器或系统的正常工作等等。所以温湿度的检测是目前被广泛运用。
此次设计的芯片采用的是STM32,由于STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核,增强型系列时钟频率达到
72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品。同时在编程方面STM32也具有和其他单片机的优势之处,如51单片机必须从最底层开始编程,而STM32所有的初始化和一些驱动的程序都是以模板的形式提供给开发者,在此开发者只需要了些其他的模块功能和工作方式和少量的语法知识便可以进行编程,此优势不但节约了时间,也为STM32的发展做出了强有力的铺垫,而且STM32目前是刚刚被作为主流开发的单片机,所以其前景是无可估量的,这次毕业设计也是看好了其优越的发展趋势来选择的。
LCD1602的使用,这里使用1602的目的是为了可以得到实时的温湿度的数据,即为了在温湿度模块程序编写完成后烧入芯片可知其工作状态也可以作为一个读书
的路径来使用。
之后是上下位机之间的数据接收,由于自动化本来就是为了实现自动控制,虽然此次设计只做了单方面的数据采集,但是这里连接上位机的目的就是使将来对此数据进行一个可控的操作返回至下位机对现场温湿度进行控制,在这里只是作为一种设想,在此次设计中未得实现。
1芯片模块
1.1 STM32介绍
1.1.1 ARM公司的高性能”Cortex-M3”内核
1.25DMips/MHz,而ARM7TDMI只有0.95DMips/MHz
1.1.2 一流的外设
1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI,18MHz的I/O翻转速度
1.1.3低功耗
在72MHz时消耗36mA(所有外设处于工作状态),待机时下降到2μA
1.1.4最大的集成度
复位电路、低电压检测、调压器、精确的RC振荡器等
1.1.5简单的结构和易用的工具
1.1.6 STM32F10x重要参数:
2V-3.6V供电
容忍5V的I/O管脚
优异的安全时钟模式
带唤醒功能的低功耗模式
内部RC振荡器
内嵌复位电路
工作温度范围:
-40至+85或105
1.1.7 STM32F101性能特点
36MHz CPU多达16K字节SRAM1x12位ADC温度传感器
1.1.8 STM32F103性能特点
72MHz CPU多达20K字节SRAM 2x12位ADC温度传感PWM定时器CAN USB
1.2 STM32芯片选型
1.2.1选型原则
首先STM32芯片拥有很多种型号不同的型号的管脚数量或管脚功能分布是不同,我们在选择的时候必须本着节约够用的原则(设计不必用好),管脚的分配容易适应所需模块。
1.2.2 所选型号
STM32C8t6或STM32C8t7这两块芯片功能相同且均为48脚芯片出去两对供电口和两对板内供电和地剩余40脚这里分配的是温湿度采集模块占用个2脚,CC1020模块占用7个脚,1602占用13脚,按钮电路占用4脚、JATG电路占用5个脚、MAX232电路占用4个脚芯片管脚如下图所示。
1.2.3选用转接板
由于在本次设计是第一次设计PCB板,可能会存在无法避免的错误,为了节约时间和减少开销则选用一块核心板来直插功能板,此转接板型为清风板资料如下:
一、功能列表(V0.9)
采用 STM32F101C8,但封装采用 LQFP48,根据需要可以焊接 STM32F103
1、芯片资源:
1) 64KFLASH
2) 10k ram
3) 通用定时器3个
4) 2路 SPI
5) 2路 I2C
6) 3路 USART
7) 12位同步 ADC10通道
8) GPIO37
9) CPU频率 36MHz
10)工作电压 2.0--3.6V
11)封装 LQFP48
2、板子功能
1)流水灯,两路,分别使用 PA0和 PA1
2)电源指示灯
3)上电复位电路
4) 按键复位电路
5)BOOT0和 BOOT1跳线设置
6)VDDA/VSSA和 VDD/VSS分离,可跳线短接
7)外接 8M晶振和 32768晶振
8)所有 IO通过排针外连,方便扩展和使用
9)内置 10Kram,我想跑个小型的 OS应该没有问题,这里定时器应该会用到。10)核心板可直接用于目标板。
二、QFHXB原理图和 PCB图
1.3 SHT1X/7X温湿度模块
1.3.1 SHT1X/7X介绍
SHT1x/7x系列单片集成传感器是Sensirion公司最近推出的一种可以同时测量湿度、温度和露点的传感器,不需外围元件直接输出经过标定了的相对湿度、温度及露点的数字信号,可以有效解决传统温、湿度传感器的不足。SHT1x/7x系列单片集成传感器是利用CMOSensTM技术制造的,如图1所示。
1.3.2 SHT1X基本工作原理和数据处理算法
内部集成了湿度敏感元件和温度敏感元件、放大器、一个14 位的A/D转换器、标定数据存储器以及数字总线接口以及稳压电路。由于温度传感器和湿度传感器在硅片上是紧靠在一起,可以精确地测定露点,不会因为两者之间的温度差而引入误差;直接通过A/D 据是存放在芯片上OTP存储器中的标定系数,输出是经过标定的数字信号,可以确保传感器的性能指标一致性、稳定性好、成本低、使用方便。
SHT1x/7x系列电源电压适用范围宽:2.4~5.5 V。测量精度高:湿度的精度为±3.5%,温度的精度为±0.5℃(在20℃时)。待机时电流低于3μA。传感器的数字输出是通过
两线数字接口直接连到微处理器上去,便于进行系统设计。管脚描述如表1所示。
SHT1x/7x送出的温度、湿度数据必须经过转换,才能表示实际的温度和湿度,其公式如下[1]:
其中:T
C 表示摄氏温度;RH
True
表示相对湿度。
d 1,d
2
和温度分辨率有关,C
1
,C
2
,C
3
,t
1
,t
2
和湿度的分辨率有关,其对应关系如表2
和表3所示。
1.3.3 温湿度模块的选型
这里选用的是SHT10,应为此型号精度在同类产品中是最低的同时价钱也是最便宜的,作为开发和设计用是最合适的,模块如右图所示
1.5 显示模块
1.5.1 1602介绍
工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)实图如下所示
1.5.2 1602各管脚功能
1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:
寄存器选择控制表
注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0. busyflag(DB7):在此位为被清除为0时,LCD将无法再处理其他的指令要求。
2硬件设计
2.1运用软件
2.1.2 DXP 2004
软件图标如右图所示,软件界面如下图所示。
2.2原理图设计
2.2.1原理图元件库的建立
1)建立原理图元件库
选择如上图选项便可建立新的原理图元件库
2)库建好后在底板空白处按P键选择如图选项,然后拖一个随意的矩形出来作为元件(最好可以放得下芯片上所有的管脚)之后再空白处按P键选择Pin,放下模块所具有的管脚数(在放下管脚之前可以先按TAB键对管脚的名称和标号已近类型进行编辑)
3)所作图应重命名保存并保存在易找到的地方
下图为重命名这里最好改为自己所画芯片名称,保存方法(略)
4)所画原理图库展
2.2.2 原理图建立
1)点击如下图选项(得到空白图纸)
2)调用原理图
按照如下步骤
2.2.2 电路设计
所有元件插入完毕后,根据模块所给资料将其内部电路连接,这里分别介绍个别模块的电路分析。
1)首先是LCD1602的电路设计如上图
这里要说明的是5V的电位上拉,由于STM32芯片标准电压为3.3V,1602的工作电压为5V,当工作时GPIO口输出的电压为3.3V,但1602识别电压为5V,这时3~17脚没有电位上拉则1602的工作将不正常。而加入10K的上拉电阻是为了防止5V的电压直接供入芯片使芯片烧毁。图中的变阻器是用来控制字体的对比度的,TLP521-1
光耦是用来控制1602背光的开关的,这里我一直给光耦的1,2管脚一直供电3.3V,而回路PB2当保持在3.3V电压时光耦不工作,当使PB2口处于低电平时1,2脚导通光耦工作使3,4脚导通,1602中BLA口上原本供有5V电压,这时管偶导通使BLK
口接地形成回路背光点亮。
2)SHT1X电路设计
这里还是这个3.3V的上拉电阻比较重要,由于此模块直接供电3.3V当数据采集返回后电平明显不足3.3V如果不上拉而返回数据,则误差会非常大,100nF的电容即用于消除干扰。
3)电源设计
电源模块用了1个5V模块然后接3.3V模块这样2个点位的电压都可以供人了,固态电容和普通电容都是用来抗燥的,不多做解释,这里的发光二极管做电源指示灯。
4)JTAG电路设计
同样是做了一个电位上拉
5)MAX232电路
6)开关电路
10K电阻接地作为复位电路使用,开关接通对GPIO供电置于高电平断开后等于接地返回低电平
7)CPU 电路
管脚分布参照清风板管脚说明原则是对照各模块管脚功能依依分配
2.2.3 原理图完成
绘制原理图时注意事项:
1)电路连线要用WIRE,不能用LINE
2)在允许不确定元件编号的原件名称上使用U?,J?等标注,如果在已知元件标号时必须第一时间改为所需编号并锁定,这样可以避免不必要的麻烦。
3)在管脚对应连接时必须应用NET命令,而不是TEXT只有用NET命令连接才能生效(其字为红)。
4)每个模块的供电和地的连接参数必须一致。
2.3 PCB板设计
2.2.1封装库
1)要制作封装库首先必须对所需封装资料进行了解其长、宽、焊盘大小模块资料上都会有提供,另外还包括管脚信息,管脚标号都要明确了解。
2)创建封装库
3)封装库编辑界面
4)成图封装展示0805封装
IDC-6封装
SHT1X封装
IDC14封装
SW-PB封装
SOT-23封装SOT233封装
S1封装
SIP-22封装
SIP-2封装
LCD1602封装SO-16封装
2.2.2 PCB板图设计
1)建立PCB工程和PCB文件
2)打开所设计电路,同时建立PCB文件并在工作区找到
3)将电路设计和PCB文件同时拖入PCB工程中
4)生成PCB图
9
点击EXECUTE CHANGES生成PCB元器件
这时便可以拖动图中各元件进行电路排版,图中细线为管脚连接线,在排版完成后根据此线进行布线。(排版图展示)
这里要说明应该注意的是JTAG口的IDC20封装和DB9/M封装,在画图前应该确认IDC 20封装是否有足够的位置摆放和DB9/M封装的正反,否则可能出现无法安装问题。
排版还是就着就近的原则这样可以使线路布线看起来简单明了
下面进行布线环节,这里可以手工进行布线(前面布线规则已经定义过这里不必重复定义)也可以进行自动布线。
这里点击AUTO ROUTE选择ALL,进入如下图界面
这里选择双层板规则,然后ROUTE ALL计算机自动开始寻找布线路径之后可以得到布线初图,然后再用手工进行修改,这样可以尽量消除电路图中的缺陷
如下图为第一次制版布线所用软件是protel 99se,采用手工布线完成,下板用于