【《基于STM32F103C6T6单片机的数字化水平仪设计》16000字】_第1页
【《基于STM32F103C6T6单片机的数字化水平仪设计》16000字】_第2页
【《基于STM32F103C6T6单片机的数字化水平仪设计》16000字】_第3页
【《基于STM32F103C6T6单片机的数字化水平仪设计》16000字】_第4页
【《基于STM32F103C6T6单片机的数字化水平仪设计》16000字】_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

绪论1.1课题研究背景和意义在现代城市中的高楼或者铁路桥梁等各类大型建筑施工设备行业,对于各种建筑物本身在各个特殊水平面上的整体倾斜受力程度需要进行精确测量和分析处理,需要一个同时可以连续工作运行几个半多月乃至一年以上的超高采样率和精度极高的大型数字特殊水平仪检测系统,这就直接决定了该检测系统必须同时要求一个具备高采样精度和高显微功耗的特殊水平检测处理功能。水平仪由过去简单的新型气泡电子水平仪技术改变而来,现在的新型电子气泡水平仪也已经陆续经历了多次的技术更新。电子小径水平测试计数器是一种极其广泛亟需的用于测量小径和角度的水平测试标准量具。随着精密电子装备机械制造企业工艺技术的逐步改进和不断发展,已有的大型数显式精密电子测量水平仪已经无法完全满足较高精度的测量要求,国内外的数显式精密电子测量水平仪的测量灵敏度,反应时间等都与国外产品相比,差距较大。研究者提出一种对于分辨率要求越高,性能越佳的自动智慧型人体电子运动水平高度检测仪器就具备重要的现实意义。为了不断改善测量水平仪科学测量的工作精度,摆脱目前传统测量水平仪的测量智能化应用程度低、数据处理反应能力弱、抗震干扰性能差等不良优势,必须充分运用各种现代科学信息技术手段来进行设计--是一种新型的测量水平仪。在MEMS数字传感器、数字信号图像处理、单片机的新型智能自动水平仪的应用上将逐渐成为今后智能水平仪技术发展的一个主导技术方向,它们将被广泛应用在城市建筑、石油、煤矿和自然地质科学考察等工业领域[2]。1.2数字水平仪的发展现状和趋势中国最早引入数字水平计算机技术是在20世纪90年代的中后两个阶段,尽管这一阶段的时间并不是非常长,但近些年来这种数字水平计算机在我国各个行业和领域各个应用范围都已经十分普遍。我国近几年在研发制造水平仪的技术水平有着显著提高。目前,电感式液位计和电容式液位计广泛应用于工业生产和日常生活中。他们的基准是基于重物的铅垂线。由于数码电容传感器的内部结构比较简单,运行后结果可信,且对输出能量要求低,输入极小的动力就是可以获得相对较大的变化量,所以该电容传感器被广泛地应用于各种数字电子水平计算机中。另外,还有一个电容式电子倾角测量仪,它的输出电压信号会根据不同的情况而变化。原理是两个差动电容式传感器的固定极板分别安装到电子倾角测量仪底座上。当一个电子倾角测量仪在水平状态下处于活动极板时,会将其放置在两个固定的极板中间。此时可动极板与固定极板间空隙相等,因此电容量也相等,电桥平衡,这时输出电压信号为零。但当底座处于非水平状态时,两块固定极板也随之发生倾斜,可动极板与固定极板间空隙发生变化,破坏了电桥的平衡状态,导致电容量不等,进而此时输出的电压信号将反应水平仪的倾斜量[1]。目前,国内的数字化水平仪研究开发技术水平已逐渐得到提高,然而,与国外的数字化水平仪在设计和制造技术上的能力相比,我国在生产技术上的能力和其他领域仍然是比较落后。就是说,数据处理技术不足、数字化程度仍然有待提高、无法进行一次性精确地测量得到待测量平面上的方位角和倾斜度等不足之处。此外,现有的电子倾角测量仪已难以满足日常生产活动和生活应用中的要求。国外的生产厂家相比于国内来说数量繁多,而且种类也比较齐全,他们所生产的产品无论在测量速度还是功耗方面都具有相当大的优势。他们生产的产品在测量速度和功耗方面具有绝对优势。国外先进的数字电子水平仪在线技术主要包括:美国联邦公司v-4683电子水平仪在线控制系统,法国eda公司,德国diatest公司以及瑞士联wyler公司等先进的电子水平仪。其中,瑞士威勒公司研制出的nt系列新型计算机电子水平计算仪最为出名。该系列在测量微小角度时具备独特优势。主要用来测量各种机械零部件的几何误差和对工件表面平面程度。这一系列其中的nt11型平面电子水平计算机已经具备了数字化的显示功能,有两种不同的读数方式分别为角度读数和mm/m读数,其最高分辨率可达0.001mm/m。在国内的其他同类产品中,能够有一些与之相当的产品也并非一无所有,例如青岛前哨的所研发的SDSIO和SDS11型水平仪,其最高精度也均可达到0.001mm/m[2-3]。在国内,能达到较高生产水平的除台湾以外,大陆的上海华虹与海尔等企业也具备较强的研发能力和生产技术。1.3本文主要内容本次的毕业设计的内容主要是设计一个能实现对水平倾角的测量和显示数字化水平仪,此水平仪主要器件有六轴加速度传感器MPU-6050、STM32F103C6T6单片机和OLED液晶显示屏。在本次设计的系统中要求完成了对单片机的主控电路、液晶显示电路、传感器的数据采集电路等硬件原理图的设计要求,以及系统软件设计,完成硬件调试和制作,最终实现水平倾角的测量和显示。本次设计的测量范围在90度以内,通过三个轴的正负加速度值完全可以判断角度的倾斜方向。因此具有三轴测量方向且为数字量输出的MPU-6050芯片成为本系统的传感器,在显示模块就选用了OLED液晶显示屏。本系统设计是利用c语言进行编程,并且下载在keil软件中进行实现,单片机通过i2c无线通信连接传感器;用一种数学方法可以推导得出的倾斜角度计算公式如下图所示:最后,通过OLED液晶显示屏来显示测量结果。2数字水平仪总体设计2.1数字水平仪设计思路本次工程设计原理框图如下表2.1所示。从图中我们可以清楚地看出,本测量系统主要包括四个重点模块:单片机主控部分、倾角传感器感应位置的变化采集数据部分、oled显示屏部分以及电源管理部分。主要设计思路是当一个水平仪稍微向外倾斜时,该传感器在其相对位置上就会产生相应变化,用传感器MPU-6050芯片感应待测面的加速度,然后通过STM32F103C6T6单片机中的程序进行的控制与运算,计算出水平面的倾斜角度,最后通过OLED液晶显示屏来显示最后的倾斜角度值。同时系统中还有两个辅助键:复位键可以重启整个系统;暂停键可以锁定当前显示的角度数据。待测角度倾角传感器显示模块单片机待测角度倾角传感器显示模块单片机电源管理系统电源管理系统图2.1水平仪总体设计系统原理框图在本次毕业设计中,在单片机方面使用了存储器容量更大一点的STM32F103C6T6单片机;数据采集传感器选用了高精度、低误差的MPU-6050倾角加速度传感器;显示屏模块部分选择了液晶OLED显示屏。三者来共同完成本次设计。2.2模块设计方案2.21数据采集模块在本系统中用来采集数据的模块用到了三轴倾角加速度传感器MPU-6050芯片。用于测量倾角的芯片很多种。通过对比,MPU-6050具备数字量输出的功能,可以计算出物体总的倾斜角度,所以精度更高(3.9mg/LSB),误差也更小,因此就选用了该芯片。2.22控制模块经过多年的对比,stm32f103c6t6单片机的算术和运算功能强大,不易被破译,超强抗干扰,不需要任何编程器,自由度大,简单易学,算法类型繁多,并且有着超低功耗,体积很小,运行速度快,可靠性好,性价比高等特征,适用范围也很广泛。因此本系统的控制模块中的主控制器就选用了STM32F103C6T6单片机。2.23显示模块本系统中的显示器选择了OLED,它可以显示总的加速度值以及倾斜角值。1602液晶数字显示器因为产品具有显示功耗超低、体积小、简单易学、超薄、重量轻、无辐射无毒危害、能够准确地测量显示在水平面上的角度和数值及稳定的显示无闪烁等六大特性,被广泛应用在袖珍式计量仪表和低功耗的工业应用显示系统上。3.适用范围硬件设计3.1芯片模块3.11芯片概述mpu-6050芯片的规格分别为3×5×1(单位mm),14引脚的小型超薄塑料密封。该芯片是ADI公司首个推出的一款身材小巧且超低功耗,且输出数字信号的三轴加速度传感器。它是移动设备的理想选择,其分辨率(3.9mg/lsb)它能够实现测量微小到0.25°的倾角和温度变化,并且其中的数字输入和补码信号是16位二进制补码,芯片的测量范围为±16g之间。在一些称为倾斜式的检测应用中,它们也可以被广泛地用来计算和测量动态或者是动态的加速度,无论是由于重力引起的还是振动或冲击引起的。该装置还同时具有多种特殊的爆震检测功能:具有爆震检测功能,即可检测任何一个方向的单振动和双重振动;自由坠体检查功能用于检测装置是否有坠落;静态和动态的感知功能,它们可以用来检测物体是否发生了移动[4];并且活动和非活动检测功能可以用来检测运动过程中有没有发生,这些检测功能都可以通过独立地映射给两个输入中断引脚之一[5]。其中一个采用32级别的fifo数据缓冲器可以作为用于数据库管理存储的一个集成型数据存储器进行管理操作系统,这样就已经能够有效地大大减少了整个管理系统在虚拟主机和内存处理器上的驱动功耗。在极低功耗的情况下可以实现阈值感知和运动加速度测量。MPU-6050芯片可通过SPI或I2C数字接口进行访问。图3.2MPU-6050芯片MPU-6050的性能指标如下:(1)在一个测量模式下输出电流范围为40μa,在一个电源等待模式下2.5v(典型值)电流仅为0.1μA,因此其功耗极低;(2)测量范围可选择2g(10位)、4g(11位)、8g(12位)、16g(13位),测量精度可达到4mg/LSB;(3)电源电压适用范围2.0V-3.6V;(4)两种通信模式:SPI模式和I2C模式;(5)与处理器通信有32级FIFO协调;(6)可用带宽为1.6KHz;(7)在使用时的温度区间可以从-40摄氏度调整到85摄氏度;(8)可以接受10000g的冲击;(9)可以应用于电源去耦、敲击检测,在医疗器械、个人导航设备等领域使用甚广[6]。下面介绍一下MPU-6050的工作原理。芯片功能框图如图3.3所示。由模拟转换器输出的信号为16位二进制补码。这一点和以前所学习到的课程中计算机系统输出的数字信号相同。首先,在MPU-6050芯片上处于前端的传感器感知待测的加速度,随后有一个可以捕捉到电信号的装置将测得的加速度转换成模拟信号,这个模拟信号也就是电信号,因为在装置中只有电信号才可以被识别[6]。接下来就有可能需要对芯片进行a/d转换了,但是mpu-6050芯片并不必再需要,因为在mpu-6050中装有一个模拟数字转换器,此转换装置可以把上述方法中采集得到的模拟信号转换成整个系统中所需要的模拟数字信号,再由转换器进行输出。数字滤波器把一个在转换器中输入的由电子信号进行转换而来的数字信号放大后立刻接入32级别的fifo缓冲器,此操作需要基于控制和中断逻辑单元的控制下,最后微控制器就可以通过SPI或I2C的串行通信方式接口读取MPU-6050中所测量并处理过的数据了[7]。要想实现对MPU-6050芯片的控制就需要单片机通过寄存器操作,然后通过SPI或I2C的串行通信方式发送串行端口读写命令。图3.3芯片功能框图mpu-6050传感器采用的是一种微机械加工的结构,它主要是把多晶硅放置在一个晶圆的顶部,这主要是为了提供抗力,可以用于测量加速度。该传感器输出信号的频率和幅值与加速度是否成正比主要原因是因为这种频率使得加速度不稳定受到影响主要因素包括两个:偏转惯性质量和不平衡的差动电容。相位敏感解调是用来确定加速度时的幅值和极化。差动电容是由两个主要部分共同组成:一个可以移动的质量连接板和一个单独的固定板,可以被广泛地用来检测结构不平衡。3.12角度测量原理将代测量的角度和x、y、z轴用数学模型符号表示了出来,如图3.4所示。x轴用da表示,y轴用db来表示,那么z轴则用dg来表示,且da与db是垂直。由下式如下图,假设α就是da与其他水平面的一个夹角,β就是db轴与其他水平面之间的一个夹角公式为,γ就是dab与其他水平面之间的一个夹角。如果,点E是垂直脚,则∠DAE=α,∠DBE=β。从数学模型来看,我们可以把它当作一条辅助线,过点d当作一条水平面上的垂直线和相交点c。∠dce就是一个平面eab与一个水平面之间的夹角,它本身就是在该系统中需要进行测量和展现出来的角度。然后,就是要求α、β和γ三者的关系。假定为DE为单位1,DE⊥AE且DE⊥BE求得:图3.4水平仪测量角度数学模型Ax=g*cos(90-α)=g*sinα(3.1)Ay=g*cos(90-β)=g*sinβ(3.2)Az=g*cos(90-δ)=g*sinδ=g*cosγ(3.3)DA=1/sinαDB=1/sinβ(3.4)因为ΔADB为直角三角形,所以:AB^2=DA^2+DB^2(3.5)将AB带入(3.5)式得:(3.6)又因为ΔDEC为直角三角形,所以:(3.7)由上述公式推导可得:(3.8)因为sinα=Ax/g,sinβ=Ay/g,所以:(3.9)由cosγ=Az/g,得:(3.10)即可得出被测面与水平面的夹角:(3.11)根据角度图3.4可知,dab与两个水平面之间的直线夹角角度是其意指在自然光学坐标系下位于z点的轴与角度传感器中位于z点的轴之间的角度夹角。由此,同理我们由此可得,可以通过公式求得在一个新的自然矢量坐标系下的点在y上点轴与一个测量传感器点在y上的轴的角度夹角而将公式定义为:(3.12)同理,自然科学坐标系系统中的称为x的两轴和电子传感器中称为x的两轴之间的一个夹角是在公式中的定义方程为:(3.13)只要把带有上述公式算法的程序烧录至单片机中,该系统就可以计算简单的反三角函数,所需的倾角可以用程序中的公式(3.11)计算出来,通过转换就可以直接显示倾斜的角度值。在本次毕业设计中,为了满足老师的要求,无论z轴的加速度是正还是负,测量值取0-90度之间。3.13寄存器映射mpu-6050传感器总共包含有30个寄存器,如表3.1所示[8]。单片机主要通过阅读寄存器实现对mpu-6050芯片的控制。如果访问到寄存器,它就会首次发送一个数据字节上的读取和地址。寄存器的位置为每个字节中的第1至5位;读写结构类型位为第6位,“0”是单个值的读写,“1”是多个值的读写;第7位是操作类型位,“0”则代表写过程,“1”则代表读过程。当进行读写过程时,MPU-6050中的30个寄存器的任何一个寄存器都可以选择用来实现mpu-6050传感器的初始化和各种功能的控制与实现。表3.1MPU-6050寄存器地址名称类型复位值描述十六进制十进制0x000x01-0x1C0x1D0x1E0x1F0x200x210x220x230x240x250x260x270x280x290x2A0x2B0x2C0x2D0x2E01-28293031323334353637383940414243444546DEVID保留THRESH_TAPOFSXOFSYOFSZDURLatentWindowTHRESH_ACTTHRESH_INACTTIME_INACTACT_INACTT_CTLTHRESH_FFTIME_FFTAP_AXESACT_TAP_STATUSBW_RATEPOWER_CTLINT_ENABLER-RR/R/R/R/R/R/R/R/R/R/R/R/R/R/R/R/R/11100101-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010000000000000000000000000器件ID保留不操作敲击阈值X轴偏移Y轴偏移Z轴偏移敲击持续时间敲击延迟敲击窗口活动阈值静止阈值静止时间轴使能控制活动自由落体阈值自由落体时间单击/双击轴控制单击/双击源数据速率及功率模式控制省电特性控制中断使能控制3.14主要寄存器介绍ofsx,ofsy,和ofsz(0x1e,0x1f,和0x20)分别是8位的寄存器,它们向用户提供的偏差系数调整以一种二进制代码的格式来进行设置,比例系数是15.6mg/lsb。在我们进行实际测量的这时候,这些8位的寄存器就可以作为一种方法,来在每一轴的偏转量被确定了之后就可以存储它们的数据。其中,存储在主要目的就是一种可以用来存放和处理输出的数据寄存器中的数据,此时这些数据会被自动地添加到一个带有相同的加速度值并被保留地存储在一个偏移的寄存器中。速率位(0x2c)可选择如下表中所示的设备输出数据的速率和带宽。默认值为100赫兹的输入数据速率,可表示为0x0A。在本次的设计中应用到该协议所需要输出的数据速率和频率分别为0x08,也就是12.5赫兹的i2c通信协议串行方式,其当该协议所需要输出的数据率太高时,通信的速度相对过低,数据的传输将有可能会发生失败,随之采样也会丢失。表3.2MPU-6050主要寄存器输出数据速率(Hz)带宽(Hz)速率代码I(uA)32001600800400200100502512.56.253.131.560.780.390.20.11600800400200100502512.56.253.131.560.780.390.20.10.0511111110110111001011101010011000011101100101010000110010000100001409014014014014090605045403423232323

输出的数据速度(hz)带宽(hz)速度代码i(uA)下面介绍寄存器的字节格式。寄存器置1,使能位进行相应功能并产生中断。当设置到0时,可以有效防止该部分的功能被切换为不同的电源。数据准备完成位、使用能位、漏出位和水印位,仅中断数据的输出,这些功能始终保持在有效的状态,从而使用户可以直接读取寄存器内部的数据。在本设计系统中,将该寄存器的电平设置为高电平,以便实现相应的功能,它会产生一个中断。如果设置为0,就可以防止使能位被中断。而且数据就绪位,水印位,溢出位会导致中断输入,这些功能会一直保持到启用的状态。在本次系统中,我们需要首先对寄存器进行中断配置,然后再次输出,最后把所有寄存器内部的数据都读出。表3.3寄存器INT_ENABLE(0x2E)字节格式D7DATA_READYD6SINGLE_TAPD5DOUBLE_TAPD4ActivityD3InactivityD2FREE_FALLD1WatermarkD0Overrun本系统的范围选择了16g,分辨率选择了13位。范围位(0x31)可以设置为G范围,如表3.4所示。表3.4范围位设置g范围D1D0001101012g4g8g16g3.15传感器通信方式本设计使用的MPU-6050可采用I2C和SPI数字通信。本次设计的加速度数据采集通过I2C方式来完成。处于SPI模式时,与I2C模式不同,CS是由总线主机控制的,最高时钟为5MHZ。在通信开始时,主单片机会自动选择一个操控开关的位置,控制一个开关进行复位并停止通信,stm32f103c6t6芯片可以为sclk提供串行时钟。要想在通讯期间同时读取和写入多个字节,MB位必须设置。sdo为一个带有串行输入数据的数字输出输入信号引脚,sdi为一个带有串行输入数据的数字输入输出信号引脚,二者采集数据均是在时钟上升沿。当处于读取在第一个寄存器中的数据的状态时,MPU-6050芯片会自动指向下一个要读取的寄存器的地址。SPI通信有两种连线模式:三线连接模式或四线连接模式,如图3.5和图3.6的连接所示。图3.5三线式SPI连接图图3.6四线式SPI连接图当选择3线路相互连接的模式时,在寄存器0x31中分别设定spi的位置,建议将SDO引脚拉至VDDI/O,除此方法外还可以使用10kΩ电阻将其拉至地平面。选择四线程的串联处理模式就一定能自动清除一个spi位。如果一个mpu-6050芯片引脚是在一个专用主处理器的一个时钟线路极性和芯片相位被进行重新配置之前才能进行二次供电的,则一个cs引脚必须满足要求它在一个时钟线的极性和芯片相位没有发生重大改变之前与两个cs引脚之间连接得更高。下面介绍I2C通信方式。简单而有效的特点是i2c总线的主要优势[9]。有两点原因。一个是因为接口主要是在零部件上,很低的空间被占用,减少对于电路板进行扩展时所需要的空间和引脚。还有一个原因是总线长度为7.6米,它支持40个零部件能够在10千位/秒发送最高传输频率的数据。i2c另外的优点是它能够支持多台主机同时操作。在这种情况下,所有的可传输装置都是主总线上,并且可以控制传输和系统时钟信号的频率。MPU-6050的I2C通信只需要简单的两线式连接。如图3.7所示,连接CS引脚至电源,此时MPU-6050芯片进入I2C串口通信。同时,I2C通信模式下还支持单或者多字节的读取和写入,还具有快速的数据传输方式。在使用该通信方式时,当ALTADDRESS(引脚12)置电源时,低7位地址是0x1D,此时,0x3B地址读取数据,0x3A地址写入数据。如果将该引脚连接地,就可以使用备用的地址0x53,此时与该引脚置于高电平的情况不同,0xA7地址读取数据,0xA6地址写入数据。在上述说明中可以看出,如果想要利用I2C通信时,ALTADDRESS引脚也一定要任意连接至电源或者接地,除此之外,一定要连接CS引脚至电源。由于网络通信频率和速度的特殊性所限制,当我们在使用i2c进行网络通信时,其最大输入和数据的速率约为400千赫兹时,也就是800赫兹,即随着i2c网络通信频率增加而逐渐变大,成正比线性地变化。由此看来,当一个输出的数据速率在运行到最大和最小范围之外时,就有可能对这些加速度数据的测量结果产生不利的影响,例如说样本的丢失或者是产生额外的噪声。图3.7I2C通信连接图(地址0x53)在上述两种情况下,MPU-6050芯片主要作为从机运行。当处于i2c的模式下,应始终将cs引脚连接到高电平,使该模式进入一个使能状态,此时外部的控制器还是可以驱动mpu-6050芯片,因为当没有完全连接到cs引脚的时候,当前的状态被默认为不存在这种模式,因此,当没有对cs引脚进行这种连接方式时,可能会直接导致mpu-6050无法进行通信。当处于spi模式下,总线主机可以控制cs引脚。在上述两种通信模式下,当MPU-6050处于写入状态时,从MPU-6050芯片发送到主机的数据应该被忽略。3.16接口设计该芯片总共有14个引脚,引脚配置如图3.8所示:图3.8MPU-6050引脚配置图在上面的论述中,已经详细介绍了MPU-6050芯片与单片机STM32F103C6T6的基本原理。根据其模式、原理和引脚的描述,可以进行MPU-6050的接口设计。如图3.9所示:图3.9MPU-6050的接口连接由于STM32F103C6T6单片机的工作电压为5V,与之不同的是,MPU-6050传感器的正常工作电压为2.0-3.6V,因此,为了使整个系统能够正常工作,此时就需要设计一个电平转换电路。在本次设计中,ME6206低压差电压稳压器用于将5V的输入电压转换为3.3V的输出电压。如图3.10所示:图3.10MPU-6050电源模块在本次设计中,为了方便起见,也是直接购买了MPU-6050模块。3.2单片机模块STM32F103C6T6单片机系列采用得是具有极高性能的ARM®Cortex™-M332位的RISC内核,其工作频率为72MHz,内置的高速存储器(可以达到128K字节的闪存和20K字节的SRAM),极大地增强了I/O端口和连接到两条APB总线的外设。全部型号的器件都包含2个12位的ADC、3个通用16位定时器和1个PWM定时器,并且包含了标准和先进的通信接口:具有2个I2C接口和SPI接口、3个USART接口、一个USB接口和一个CAN接口。STM32F103C6T6单片机中等容量增强型系的列产品供电电压都为2.0V-3.6V,包括-40°C低温至+85°C高温的温度范围和-40°C低温至+105°C高温的延展温度范围。还有一系列的省电模式可以让低功耗应用的要求得到保证。STM32F103C6T6单片机中等容量增强型的系列产品提供包括从36脚至100脚的6种不同的密封形式;根据不同的密装形式,器件中的外设配置也会有区别。下面也列出了该系列产品中全部外设的一些基本的介绍。这些比较多的外部设备和配置,让stm32f103c6t6的产品中等容量增强型一系列小规模微控制器可以广泛地应用在多种不同的应用场所:利用STM32F103C6T6单片机作为主要的模块,为了实现无线通信功能,单片机还可以使用串口连接蓝牙模块或其他模块,对设计有很大帮助,还可以利用Keil进行编程,将程序烧入单片机内,使系统可以进行部分仿真等。单片机的电路图如图3.11所示。图3.11单片机主控电路图STM32F103C6T6单片机的引脚如图3.12所示。这种器件是由atmel密度非易失性存储器生产技术制造而成,且与行业内最先进的mcs-51指令集及其输出引脚相互兼容。这种单片机本身就是一种仅需要低电压却又具有很好的高性能微处理器。它可以实现各种特殊功能,设有8k字节的快闪存储器,可编程、直接擦拭可读存储器。图3.12STM32F103C6T6单片机引脚图STM32F103C6T6单片机的主要功能如表3.13所示。表3.13STM32F103C6T6单片机主要功能主要功能兼容MCS51指令系统8K可以反复地擦写FlashROM32个I/O端口且为双向256x8bit内部RAM3个16位可编程定时器和计数器中断时钟频率0-24MHz2个串行的中断可编程UART串行通道2个外部的中断源共6个中断源2个读写的中断3级加密位低功耗的空闲和掉电模式低功率消耗睡眠空闲与大量掉电睡眠时间控制模式通过软件设置可以自动设置定时睡眠与自动唤醒等睡眠功能3.3液晶显示模块ssd1306是一款采用带有两个单片机的cmosoled/pled的激光驱动控制芯片,它们是能够直接驱动所有您需要的有机/聚合式无机发光晶体二极管的小型点阵激光图形图像显示器。它通常包括128segments,64commons。这种光电芯片主要是专门针对共阴极上的oled光电面板而设计制造。ssd1306中已经成功嵌入了一个可以具有最佳高对比度的图像控制器、一个液晶显示器的ram和一个晶振,并因此大大减少了外部控制元件和系统功耗。有256级的大灯亮度可以自动控制。数据/串口命令的信息传输与数据发送主要可以有三个数据接收串口供用户选择:6800/8000串口,i2c数据接口或是sspi2c接口。适用于多数用户个人简介的管理使用,注入智能手机上和移动通信的超大屏幕头显,mp3播放器和平板电脑上的数字计算器。oled字符体类型液晶显示屏是一种广泛应用于视频显示中。它主要由四个大部分组成:一个是字符式的液晶显示器、可以延伸驱动电路、控制驱动的主电路,还有一些散件,主要是一些少量的电阻、电容元件和结构元件。本课程系统在总体设计中所说的需要选择使用的这种直接字符显示类型的数字液晶模块主要的就是用5x7点阵式的图形显示方式输出来对其进行直接显示字符的比如oled这种液晶数字显示器,它的这种数字液晶显示器的容量及其大小就是可以直接划分到形成这么多种类型,有1行16个字符、2行的16个字符,2行的20个字符等。图3.14OLED显示屏实物图在这种设计中,OLED显示屏使用标准的8针接口,可以通过10K电位计连接第三个针来调节屏幕的对比度,该显示屏的8位数据线直接连接到单片机的PO端口,控制信号线RS、RW和e连接到单片机的P3端口。当连接到正电源时,对比度最弱,而当连接到的电源时,对比度最高。图3.15液晶显示结构方框图图3.16液晶显示器原理图ssd1306mcu接口引脚包括8个模拟数据引脚和8个数据控制引脚。引脚的选项分配通常是由不同网络接口之间的引脚选项分配来进行确定,详情请参见文件下面列表。不同的的mcu模块之间的硬件设置区别可以从aabs[2:0]中根据使用硬件配置选项卡的方式表来进行。引脚总线接口Data/Command接口控制信号D7D6D5D4D3D2D1D0ER/W#CS#D/C#RES#8-bit8080D[7:0]RD#WR#CS#D/C#RES#8-bit6800D[7:0]ER/W#CS#D/C#RES#3-wireSPITieLOWNCSDINSCLKTieLOWCS#TieLOWRES#4-wireSpiTieLOWNCSDINSCLKTieLOWCS#D/C#RES#I2CTieLOWSDAoutSDAinSClTieLOWSA0RES#SSD1306采用标准的16脚接口,其中:第1脚:VSS为的电源;第2脚:VDD:+5v电源;第3脚:v0为oled显示器的视觉对比度进行调节端。当连接到一个正电源时,其对比性就是最差了。所以当连接到相同或者接地点的电源,其对比性能是最好的。但是当其对比程度过高,"叠影"将不再能够被观察到。当实际应用时,对比程度可由10k电位自动进行调节;第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:rw是一个主要用于数据读写的数字信号传输接口,在中或高电平上的进行读写传输读写操作,在中或低电平上的进行书写读输操作。例如当我的rs和s与rw都的值是低,则我们就完全可以在整个网络上快速写一个网络指令或者在整个网络上快速显示一个网络地址,当s和rs的值是低,rw的总和值为高时,我们就完全可以在整个网络上快速读出繁忙的网络信号,当s和rs的值是高,rw的总和值为低时,可以将这些信号数据全部重新写入;第6脚:e为用户使用功能的前端。当从一个高电平模块到一个低电平模块发生温度改变时,oled两个模块将自动停止执行所述的指定命令;第7~14脚:D0~D7是8位的双向数据线;第15~16脚:空脚。mcui2c的从机通讯数据接口主要包括从机的一个地址信号是一个sa0,i2c数据总线的一个数据信号(sdaout/d2的数据输出及一个sdain/d1的数据输入)和一个i2c的数据总线的和时钟控制信号以及scl(d0)两个大部分。而且用于数据与视频时钟的两个信号电源线均可能需要另外连接一个使用带有斯特拉克斯电阻的电源线。res#它可以同时用于对所有设备文件进行自动初始化。从机地址位(SA0)ssd1306在向多个用户信息发送或者用户接受任意一个用户信息前必须先明确辨认出来的信息是从哪个机器和地址。设备将首先的是会对从机的数据地址位置进行实时响应,后面的将是同时跟随从机的数据地址位(sa0位)和从机的数据读写地址选项位(r/w#位),格式化的列表显示如下:b7 b6 b5 b4 b3 b2 b1 b00 1 1 1 1 0 SA0 R/W#SA0位对从机地址供应了一个位的扩展。0111100或0111101都可以作为ssd1306地从机地址。D/C#引脚作为SA0用于从机地址选择。R/W#则用来决定I2C总线接口的操作模式。R/W#=1为读模式。R/W#=0为写模式。I2C总线数据信号sdasda是作为信号传输发送方与接收方之间的一种通信渠道。所有的数据与应答全部由sda进行发送。值得注意的一点是当将itod的轨道稳压电阻与itsda引入管脚上的上或下拉稳压电阻将可以转换成成为一个潜在的有源电压分压器。其他的结果也就是在在sda上的使用回归式逻辑应答器的方法很有可能导致无法直接达到有效率的逻辑0。sdain与sdaout绑定并组成了一个称为sda。sdain的引脚之间必须有sda相互联系。sdaout的引脚之间可以是不相互连接的。但是当sdaout的引脚没有相互连接,应答信号将不会被i2c总线所忽略。4系统软件设计4.1程序开发环境要设计水平仪首先要进行流程内置,一系列的流程才能保证此仪器的正常工作。其中它们既包含了一个主程序的流程,中断了一个子程序的流程,又有很多其他子程序的流程。编写程序的语言有C语言和汇编语言[9]。对比两者,C语言是高级计算机语言,在实现较难的算法时比较方便。由于设计算法比较复杂,而且在Keil中用C语言来进行仿真比较常见,所以我用C语言编程。在完成了硬件电路模块的分析选型之后,为了更好地使得芯片正常工作,就需要自行编写一套相应的硬件程序以驱动整个单片机。本次课程设计中主要采用的应该是keiluvision2软件。本次设计采用c-rom编程,KeiluVision2非常强大,支持多种语言编程,其中就包括c语言。所以本次软件设计选择了软件KeiluVision2。4.2KeilC51简介来自德国慕尼黑的凯伊勒克特鲁尼克公司和美国德克萨斯州的凯伊软件公司两家联合运营的Keil公司是行业内独立微控制器软件开发工具供应商中的独角兽,它支持500多种8051变体。ansic软件编译器、宏文件汇编器、调试器、链路器、存储数据库资源管理器、固件及实时正在运行的移动操作系统软件核心等都已经是公司keil公司研究并广泛地应用于软件生产和开发销售的重要工具。有超过十万名微控制器的研究人员使用大家都认同的一种解决方案。事实上,从1988年引入市场的keilc51编译器已经成为行业内的标准。两家公司于2015年arm收购keil之后就分别重新改称美国国贸公司与德国国贸公司。keil的首席执行官赖因哈德凯尔曾经说:"我们将会不断地在uvision环境中使用8051和c16x编译器。随着32位的微控制器在中国市场上的快速增长,我们的公司也将通过此次的收购可以更好的为中国市场客户提供一个完整的解决方案。"4.3系统工作流程介绍电子水平计以单片机元件为核心。电容式传感器通过检测电路而输出的信号经过adc0809转换,由一个单片机的i/o口进行读入,根据该算法来完成被检测表面的测量,并将其结果输出给oled的显示器上。测量系统上电复位后,进行初始化,然后再看开始键是否按下,如果没有按下进行测量,依次运行的过程主要有数据采集、滤波和计算机处理、数字信号显示,这部分过程在一个终止键没有按下之前通过一个循环来执行,当一个终止键没有按下后,再次对一个单片机进行初始化,等待下个测量任务。流程如下图所示:图4.1工作流程图4.4I2C总线协议分析用于连接整体电路就是的主要工作。随着近年我国企业大规模的应用集成电路和其它相关应用技术的不断迅猛发展,现在的市场需要一种连接总线少且结构简单的一种扩展方式,在此需求下,飞利浦半导体公司在十多年前就设计出来了I2C总线协议的串行方式。众所周知,单片机及相关外围设备的连接适用范围线,串行总线两种扩展方式。本系统中单片机与MPU-6050传感器之间的通信方式就是I2C串行总线协议。I2C总线协议有很多优点,它具有以下几点特征:1.在数据传输的过程中只有两条总线,分别为串行数据线SDA和时钟线SCL[11];2.在不同的模式下进行数据传输的频率也会有所差异,在标准模式下进行数据传输的速率一般能够实现100kbit/s,快速模式下进行的数据传输频率一般会比较高,其中传输速度大约是标准模式的四倍水平,高速模式下进行的传输频率最高,传输过程中的速度能够达到3.4Mbit/s[11];3.i2c总线在对时钟信号进行转换和数据传输环节的工作过程中,其中一个时钟信号可能会因为出现明显的变化而改变,并最终转换成高电平,在一个时钟信号发生转变的工作环节中,数据传输过程中的每一个数据必须始终保持较高稳定系数,与此同时,只有当一个时钟的信号开始从一个高电平逐渐转化成低电平时,数据才可以逐渐出现变化[11]。在I2C总线中,首先围绕起始条件S与停止条件P这两种情况进行明确定义:当SCL线处于高电平状态时,通过SDA数据线产生的不同变化可以进一步判断是停止条件还是起始条件。如果数据线开始出现下降沿的情况,则说明这种情况是起始条件,反之,如果这个数据线出现上升沿的情况,那么则进一步说明这种情况是停止条件[12]。如果在总线的连接器件中已经配备了接口硬件,那么充分发挥这些硬件的功能和优势,能够有效降低检测启动和停止条件的难度系数。但是,要是没有配备这种专业的微控制器设备,每一个时钟周期的过程中就必须对SDA线进行不少于两次的采样工作,以此进一步判断线路中是否出现电瓶平切换的问题。图4.2I2C起始和停止条件信息传输的过程中必须确保线路中的字节都是八位的格式,除此之外,每次传输过程中可以发送的字节数量不受其他条件的约束。在每个字节后面必须确保有相应的响应位,其中,0代表的是确认,1代表的是不确认。第一,对msb数据实现精确的传输。如果在数据传输中有无法正常接收或向主机发送完全的数据字节信号的情况,可以通过外部条件来迫使主机保持一种低电平的状态。一旦从机启动将会对下一个数据字节开始接收,且当它们开始再次释放时钟线的同时,这些信号传输工作会继续进行。发射器将会在响应过程中释放高电平。采用把sda线路进行拉低的方法,确保此期间的低电平频率能够长期地处于稳定的状态。如果出现由于从机不能响应地址的情况,必须要确保数据线处于高电平运行状态,并通过由主机自动产生的停止条件,从而全方位停止对数据的传输工作,也可以选择通过重新启动的方式进行下一轮的全新传输。如果我们在传输过程中配备了板载接收器,该设备会充分结合时钟最后一个字节是否发生响应来发送相应的指令使数据停止传输。这一个操作过程中,从属变送器必须进一步对数据线进行释放,确保主机能够自由操作停止或启动的条件。就当前具体单片机的应用情况而言,在单片机开发中实际应用性较高的有51、96系列,这一系列单片机均具有一些短板,就是它们普遍都不能够配备i2c串行通信接口,因此也导致了这些单片机器件无法在系统中同时进行广泛的使用。通过前文研究i2c总线接口的时序展开了了一系列的研究与分析内容不难看到,可以把51系列单片机的端口模拟成为i2c总线接口,从而进一步地实现了相关元器件的功能。充分地结合本文对该总线的有关规范我们就能发现,scl线和sda线分别是所有器件在其相应的输出状态下所做成的具体结果。该设备能够充分发挥高电平对低频输出功能,使得高速设备迅快地进入等候状态,以此来进一步增加SCL状态的时长,使不同设备间时间同步的目标得以完成。从这个角度而言,尽管两种电平钟脉冲的持续时长具有差异性,但是依然能够达到高效准确的数据传输目标,除此之外,还可以在充分发挥软件强大功能的基础上,通过软件对输入和输出端口进行精准控制,从而实现I2C接口的制作目标。本设计采用单片机的通用输入和输出端口作为I2C总线接口,通过软件控制实现单片机与传感器之间的数据传输。4.5液晶显示液晶显示功能模块是一个OLED显示器,主功能可以根据指令显示相应的信息。在本系统中,OLED液晶显示屏要成功显示出数值,这就要系统中不仅要能控制四个信号,还必要合理的设定数值之间的显示位置。在设计这个液晶显示模块程质时还要严格遵循一些基本原则:在程序刚刚开始时,液晶显示模块的功能已经进行了初始化,显示的格式已由输入指令来确定,即先在程序中设置一个显示的地址,再在程序中写入一个中文字符进行编码。请注意,当OLED显示字符时,其光标不需要手动干预就会自动向右移动。在传输数据时,在每次输入指令之前首先需要读取BF位标志,BF需为“0”才可接受新指令。此做法是为了判断液晶模块是否忙。液晶显示驱动程序:voiddelay(unsignedintk);voidInitOLED();//初始化OLEDvoidWriteDataLCM(uchardataW);voidWriteCommandLCM(ucharCMD,ucharAttribc);voidDisplayOneChar(ucharX,ucharY,ucharDData);voidShow_welcome();voidShow_ERROR();voidShow_PleaseReset();voidrst_1();voidrst_2();4.6软件模块系统在运行时需要首先对mpu-6050芯片进行初始化的设置,然后才有机会获取到加速度传感器的数据。寄存器可以通过i2c通信方式在程序中进行设定。首先,需要在模式中设置寄存器0x31和寄存器0x2c,此时我们需要将寄存器的测量区域定义在±16g之间,13位模式的精度为分辨率并且传输速率控制在12.5hz。其次就是选择一个电源模型并且要使得所有功能data_ready都被中断,最后就是设置x、y、z三个轴的偏移。初始化后,stm32f103c6t6控制器将自动读取并处理传感器输出的数据。数据就绪中断信号显示数据寄存器中的三轴加速度数据正在进行更新。所以当新的数据准备好了,它将被设置为高,使用低--高转换方式来触发一个中断服务的例程。然后,stm32f103c6t6控制器分别可以从datax0、datax1、datay0、datay1、dataz0和dataz1寄存器中直接读取这些数据。由于mmmpu-6050输出16位元的二进制码是补字编码的一个数据文件格式,因此从补码寄存器中再次获取一个基于加速度的补码数据后,必须先在编译程序中再次对它进行补码编译。在13位加速模式下,1lsb可以代表3.9mg,如果16位模式代码定义为0000,则其单位加速度的一个平均值应该为0;加速度值为3.9毫克;如果代码是0001。如果代码是ffff,加速度的值应该是-3.9mg,以此类推。在这个程序中,依次将datax0和datax1寄存器中的数据进行合成并乘以3.9就可以使其表现为正确的运算加速度。在计算了三个轴的加速度后,根据公式(3.11),利用程序中的反三角函数进行反正切,弧度值γ可以转换成满足本工程设计要求的角度值。因为az分别具有一个正值和一个负值,所以必须分别设置两个信号处理函数。即,当az>=0时,其角度平均值定义为γ*180/3.14;例如,当az<0时,其角度取值为-γ*180/3.14。5系统硬件运行与调试5.1实物总体连接本次毕业设计最终实物实物上方是由STM32F103C6T6芯片通过传感器测得的加速度计算出的水平面倾斜角度值将被显示在屏幕的左上角,这样所测水平面的倾斜度就可以直接从屏幕观察到,剩余部分显示的数值是由MPU-6050传感器测得的x、y和z轴的重力加速度值,理论范围在±1g之间(有误差)。本系统中还设置了一个复位键和暂停键。当按下复位键时,整个系统将重新启动;当按下暂停键时,液晶显示屏幕将保持当前测量到的所有数值,当再次按下该键时,系统将继续运行测量,这样会使测量变得更加方便快捷。5.2结果根据设计,只要将MPU-6050传感器放置在被测水平面上,就可以正确测量出其放置的水平面的倾斜角度。只要在测试前了解清楚MPU-6050芯片的正负轴分布,就可以根据屏幕上的正负值来确定被测平面的偏转方向。一般来说,被测表面的角度低于90度,因此,角度计的测量就变得更加方便和迅速,并且可以实现对水平和倾斜角进行高精度的测量。具体总结如下:1.本设计中使用到的传感器MPU-6050是一种低误差且高精度的三轴倾角加速度传感器的非接触式传感器。2.除了设计了一个单片机的主控电路,还有一个数字显示模块的电路、按钮控制器电路、复位控制器电路。3.本文所要求设计的程序编制语言选用c++语言,程序的编写软件是keil,uVision2软件,对测量系统的软件进行了设计。6总结水平测量仪是一种通过对采集到的数据进行处理能够实时地测量被测平面的倾角和倾斜方位信息的仪器,与传统的电子数字化水平仪相比解决了一些在平面倾斜测量中的问题,是一种极具推广前景的现代测控仪器。本仪器还可以应用于各种工业领域和现场,具有良好的再开发功能。在本设计中结合了STM32F103C6T6单片机与MPU-6050传感器。首先利用传感器感应待测水平面三个轴的加速度数据并通过I2C的通信方式将测量数据传输给STM32F103C6T6单片机,然后通过烧录好程序的单片机进行的控制与运算,计算出水平面的倾斜角度,最后通过OLED液晶显示屏来显示最后的倾斜角度值。在了解了MPU-6050传感器的原理之后,本文提出了一种软硬件结合的角度自动校测量技术,使本系统变得更加稳定、精确和可靠,同时也最大限度地简化了电路。因此,角度测量变得方便和快速,并且实现了对水平倾斜角的高精度测量。具体总结如下:1.本设计中使用到的传感器MPU-6050是一种低误差且高精度的三轴倾角加速度传感器的非接触式传感器。2.设计了单片机主控电路,还设计了数码显示模块电路、按键电路、复位电路等。3.本设计的编程语言选择了C语言,程序编写软件为Keil,uVision2软件,对测量系统的软件进行了设计。参考文献[1]王锴磊,刘莎,王春喜,高秋娟.光电式电子水平仪设计与实现[J].宇航计测技术,2018,38(04):1-6+17.[2]王鹏超,刘爱东.无线差分水平仪设计[J].计算机与数字工程,2019,47(06):1512-1516+1520.[3]刘艳玲,胡海华,王洪忠,杜纪柱,赵庶娴.数显倾角仪校准方法[J].上海计量测试,2020,47(05):51-53.

[4]马浩慧,邢敏剑.水平仪的发展及应用[J].计量技术,2018(07):18-21.[5]卢运.电子水平仪系统的设计[J].电子世界,2018(03):203.[6]王德利,卫建东,汪冲,范百兴,苏雪龙.电子水平仪精度分析与测试[J].测绘工程,2018,27(01):68-72.[7]王存堂,阳恩会,张建国,等.全方位电子水平仪的结构及测量原理分析[J].仪器仪表学报,2006,027(002):183-185.[8]钱帅杰,王存堂,唐立平,等.新型全方位电子水平仪的设计及误差分析[J].传感技术学报,2006(02):87-89+94.[9]张玉华,王安敏,王成江.差动电容式传感器在智能电子水平仪中的应用[J].传感器与微系统,2002,021(012):52-55.[10]封维忠,杨丽,吕开亮,等.基于差动电容传感器和89C51单片机的电子水平仪[J].物理实验,2009(12):21-23+26.[11]胡现辉,尤相骏,潘国荣.电子水平仪应用程序开发[J].测绘信息与工程,2007,032(005):36-37.[12]安林艳.电子水平仪的设计[J].黑龙江科技信息,2014,000(024):94-94.[13]LuY,HeQ,ZengT,etal.Highprecisionelectroniclevelmeterbasedplanemirrorhorizontaladjustmentmethod[J].ChineseJournalofentificInstrument,2016.[14]NardecchiaM,RomaninoA,ZieglerR.Treelevelgaugemediation[J].JournalofHighEnergyPhysics,2009,2009(11):112-112.[15]NardecchiaM,RomaninoA,ZieglerR.Treelevelgaugemediation[J].JournalofHighEnergyPhysics,2009,2009(11):112-112.[16]FukutaMitsuhiro,SotaniTakeru,MotozawaMasaaki.Leakageandfrictioncharacteristicsatslidingsurfaceoftipsealinscrollcompressors[J].InternationalJournalofRefrigeration,2021,125(prepublish).[17]SunT,LiuZ,LiuY,etal.All-FiberLiquid-LevelSensorBasedonIn-LineMSMFiberStructure[J].PhotonicSensors,2020(4).[18]RoldánVaronaPablo,PérezHerreraRosaAna,RodríguezCoboLuis,ReyesGonzálezLuis,LópezAmoManuel,LópezHigueraJoséMiguel.LiquidlevelsensorbasedondynamicFabry-Perotinterferometersinprocessedcapillaryfiber[J].ScientificReports,2021,11(1).[19]GerdingM,MuschT.Levelmeteremployingtheradarprinciple[J].US,2011.[20]NardecchiaM,RomaninoA,ZieglerR.GeneralAspectsofTreeLevelGaugeMediation[J].JournalofHighEnergyPhysics,2010,2010(3):1-40.附录A原理图附录BPCB图附录C实物图附录D主程序/voidRCC_Configuration(void){SystemInit();//72m RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3,ENABLE); //SPI2只能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB

温馨提示

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

评论

0/150

提交评论