基于STM32的温湿度检测和传输_第1页
基于STM32的温湿度检测和传输_第2页
基于STM32的温湿度检测和传输_第3页
基于STM32的温湿度检测和传输_第4页
基于STM32的温湿度检测和传输_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计(论文)专用纸湖 北 工 业 大 学毕 业 设 计(论文) 题 目:基于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 一流的外设 1s的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI,18MHz的I/O翻转速度 1.1.3低功耗 在72MHz时消耗36mA(所有外设处于工作状态),待机时下降到2A1.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字节SRAM 1x12位ADC温度传感器 1.1.8 STM32F103性能特点 72MHz CPU多达20K字节SRAM 2x12位ADC 温度传感 PWM定时器 CAN USB1.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 ram3) 通用定时器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介绍 SHT1x7x系列单片集成传感器是Sensirion公司最近推出的一种可以同时测量湿度、温度和露点的传感器,不需外围元件直接输出经过标定了的相对湿度、温度及露点的数字信号,可以有效解决传统温、湿度传感器的不足。SHT1x7x系列单片集成传感器是利用CMOSensTM技术制造的,如图1所示。1.3.2 SHT1X基本工作原理和数据处理算法内部集成了湿度敏感元件和温度敏感元件、放大器、一个14 位的AD转换器、标定数据存储器以及数字总线接口以及稳压电路。由于温度传感器和湿度传感器在硅片上是紧靠在一起,可以精确地测定露点,不会因为两者之间的温度差而引入误差;直接通过AD据是存放在芯片上OTP存储器中的标定系数,输出是经过标定的数字信号,可以确保传感器的性能指标一致性、稳定性好、成本低、使用方便。SHT1x7x系列电源电压适用范围宽:2455 V。测量精度高:湿度的精度为35,温度的精度为05(在20时)。待机时电流低于3A。传感器的数字输出是通过两线数字接口直接连到微处理器上去,便于进行系统设计。管脚描述如表1所示。SHT1x7x送出的温度、湿度数据必须经过转换,才能表示实际的温度和湿度,其公式如下1: 其中:TC表示摄氏温度;RHTrue表示相对湿度。d1,d2和温度分辨率有关,C1,C2,C3,t1,t2和湿度的分辨率有关,其对应关系如表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完全一样,其中: 引脚符号功能说明1VSS一般接地2VDD接电源(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/WR/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。6EE(或EN)端为使能(enable)端,下降沿使能。7DB0底4位三态、 双向数据总线 0位(最低位)8DB1底4位三态、 双向数据总线 1位9DB2底4位三态、 双向数据总线 2位10DB3底4位三态、 双向数据总线 3位11DB4高4位三态、 双向数据总线 4位12DB5高4位三态、 双向数据总线 5位13DB6高4位三态、 双向数据总线 6位14DB7高4位三态、 双向数据总线 7位(最高位)(也是busy flag)15BLA背光电源正极16BLK背光电源负极寄存器选择控制表 RSR/W操作说明00写入指令寄存器(清除屏等)01读busy flag(DB7),以及读取位址计数器(DB0DB6)值10写入数据寄存器(显示各字型等)11从数据寄存器读取数据注:关于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,这时317脚没有电位上拉则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,不能用LINE2) 在允许不确定元件编号的原件名称上使用U?,J?等标注,如果在已知元件标号时必须第一时间改为所需编号并锁定,这样可以避免不必要的麻烦。3) 在管脚对应连接时必须应用NET命令,而不是TEXT只有用NET命令连接才能生效(其字为红)。4) 每个模块的供电和地的连接参数必须一致。2.3 PCB板设计2.2.1封装库1)要制作封装库首先必须对所需封装资料进行了解其长、宽、焊盘大小模块资料上都会有提供,另外还包括管脚信息,管脚标号都要明确了解。2)创建封装库3)封装库编辑界面第 31 页 共 31 页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,采用手工布线完成,下板用于开发编程使用。此图为第二次进行布局排线,考虑到所有元器件的布局,而且在布线上也能略显美观至此PCB板设计完成3 硬件制作3.1 PCB板的制作流程3.1.1由电路图生成加工文件(运行环境Protel99SE)3.1.2线路板光绘文件Gerber Output1的生成(1)选中需要加工的PCB文件,在文件(File)菜单中选择CAM管理器(CAM Manager),弹出如下对话框:(2)单击下一步(Next),提示输出加工文件类型,如图所示,首先选择Gerber文件格式。 (3)连续单击下一步(Next),到数字格式设置界面。选择图示的Millimeter(毫米)和4:4格式(即保留4位整数和4位小数),单击下一步(Next)到图层选择对话框。(1) 选择布线中使用的图层,双面板一定要选择顶层(TopLayer)、底层(BottomLayer)、禁止布线层(Keep Out Layer),单面板一定要选择底层(BottomLayer)、禁止布线层(Keep Out Layer)。(2) 单击完成(Finish)即生成线路板光绘文件Gerber Output1。3.1.3 钻孔加工文件NC Drill Output1的生成(1)在CAM Outputs文件栏的空白处,单击鼠标右键,选择CAM Wizard,出现同下图的加工文件类型选择界面,选择钻孔文件NC Drill。(2)单击下一步,在后续数字格式设置界面中,同样设置单位为毫米,整数和小数位数为4:4,(3)单击Finish(完成),生成钻孔文件NC Drill Output1。3.1.3 光绘文件和钻孔文件的坐标统一右击Gerber output1文件,选择属性(Properties),在高级(Advanced)选项卡中,选中Reference to relative origin,这是钻孔文件默认的坐标系。3.1.4加工文件的导出最后在CAM Outputs文件栏中,单击鼠标右键,选择生成CAM文件(Generate CAM Files),或直接按F9,生成所有加工文件,这时,左面栏目中会出现一个CAM文件夹。右键点击左面栏目中的CAM文件夹,选择输出(Export),将该文件夹存放到指定位置。3.1.5 感光板加工文件的打印在Browse菜单中选择所需要打印的电路图,然后在File菜单下,选择print即可打印。3.1.6 覆膜板加工文件的打印选择Design菜单下的Rules,将Length改为0.0001。选择顶层或底层,然后点击左边工具栏中的“ ”符号,等鼠标变为“”号后,沿电路图边框画一圈。最后,右击将红色或蓝色阴影部分拖出。在Tools中选择打印预览,在File菜单下选择print打印。成品如下图:这里所展示的是同样功能的两块板子,只是布局有所不同。由于第一次做PCB板,所以板子中也存在一些问题后面会解释。3.2 封装的焊接这里最好用可调温的焊台,这样不容易损坏焊盘,焊接的时候也比较顺手。分立元件一般不用粘,管脚有引线可以固定。然后用焊锡丝焊接,焊接时间应该小于3秒,如果没焊好,等一会再焊。要不然,件没焊上,PCB的焊盘下来了!贴片元件和器件手工焊接提前应该做一些准备:贴片电阻等小件的焊接前,将焊盘搪少量的焊锡(尽量少,并均匀)。电烙铁温度以1秒左右能融化焊锡为最佳。然后用尖的镊子夹元件并摆好位置,烙铁头上有焊锡,不用特意保留, 3.3硬件电路的检测和检修 3.3.1电源 首先给板子通上5V9V的直流电,看板子上,和核心板上的电源是否可以点亮,否则对照电路图检查电源,或用万用表检测各检点间的电压,找出错误所在并改正,改正的方法一般用飞线的办法。 3.3.2 芯片的测试用STM32所提供的模板编写一段小程序点亮,板子上的某个灯,并使其可以闪烁,则可证明板子的良好性这里首先在KEIL中添加程序模板此模板,把所有的端口的配置和驱动都已经完成,我们只需要加入所需要指令和终端、时钟等便可以实现所需功能右图列举了一部分此模板所具有的驱动,我们都可以直接调用,这里便可以打开此模板的MAIN函数进行编程了,非常的方便。一下程序是为了点亮清风核心板上的PA0和板子上的通过PB2控制的LED灯#include stm32f10x.h#include #include stm32f10x_conf.h#define PUTCHAR_PROTOTYPE int _io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif /* _GNUC_ */void Delay(vu32 nCount) for(; nCount != 0; nCount-);void GPIO_Configuration(void); void RCC_Configuration(void);int main(void)RCC_Configuration(); GPIO_Configuration(); while(1)/初始信号是高电平 GPIO_SetBits(GPIOA, GPIO_Pin_1);GPIO_ResetBits(GPIOB, GPIO_Pin_2);Delay(0xAFFFF);GPIO_ResetBits(GPIOA, GPIO_Pin_0);GPIO_SetBits(GPIOB, GPIO_Pin_2);Delay(0xAFFFF);/*/ void RCC_Configuration(void) /* GPIOA clock enable */ / 这里是用来打开GPIOA和GPIOB的时钟功能的RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);/GPIO 配置void GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; /这里对所对应的管脚进行进一步配置、管脚号、频率、输入输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure); #ifdef USE_FULL_ASSERT#endif配置完毕要烧程序还必须具备仿真器,本次毕业设计我采用的仿真器有2种和,以下是的仿真器。仿真器连接好后需要调节上的烧录设置步骤如下)首先点击)选择ebug并选择所选用的仿真器类型2) 点击SETTING设置,点击FLASH DOWNLOAD,点击ADD添加3) 选择芯片型号配置完成,点击确定4) 编译,下载5)程序烧入后重启芯片,PA0口和PB2口的小灯会依次闪灭6)至此硬件测试完毕4.软件编程 4.1点击“project - New uVision Project”新建一个工程:4.2弹出一个框,在CPU类型下我们找到并选中“Atmel”下的AT89S51或52:4.2以上工程创建完毕,接下来开始建立一个源程序文本:者:月夜 来源:本站原创()七、在下面空白区别写入或复制一个完整的C程序:八、输入源程序文件名名称,在这里笔者示例输入“test”,这个名称,同样大家可以随便命名。注意:如果您想用汇编语言,要带后缀名一定是“test . asm”,如果是C语言,则是“test . c”,然后保存:作者:月夜 来源:本站原创(十、最后还要有设置一下,按下图设置晶振,建议初学者修改成12M,因12MHZ方便计算指令时间:十一、在Output栏选中Create HEX File,使编译器输出单片机需要的HEX文件:作者:月夜 来源:本站原创(十三

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论