...wd...摘 要电子水平仪是一种非常普遍的测量小角度的量具用它可测量对于水平位置的倾斜度基于传感器、数字信号处理、单片机技术的数字水平仪是当前倾角测试仪器数字化开展的方向本毕业设计就是采用STC89C52单片机和ADI公司生产的三轴加速度传感器ADXL345相结合,利用ADXL345三轴加速度传感器感应水平倾角,通过单片机的控制以及运算将倾角以数值的形式直接在LCD显示屏上进展显示、处理,从而使角度测量变得方便、快捷, 实现了倾角的高精度测量通过ADXL345三轴加速度传感器原理,提出了使用软件和硬件结合的自动校正技术进展测量角度,最大限度简化了电路,提高了系统的稳定性和可靠性通过对本课题的研究,让我对水平仪有了一定的了解,在未来水平仪将在建筑方面起着重要作用,并且随着时代开展,水平仪对角度的测量将越来越精细,随着光学应用领域的不断扩展,也相应的产生了一些基于光电原理的光电式水平仪和激光式水平仪,光电原理的应用将是未来水平仪的开展方向关键词:智能水平仪;单片机;ADXL345;角度AbstractElectronic level gauge is a very common small angle measurement. Measurement for the horizontal position of the inclination to use it. Based on the digital level sensor, digital signal processing, computer technology is the current development of digital instrument tilt testing instrument in the direction of.This graduation design is the use of three axis accelerometer ADXL345 microcontroller STC89C52 and ADI company production of combination, using the ADXL345 three axis acceleration sensor level angle, processing through the MCU control and operation will dip in numerical form directly in the LCD screen display,, so that the angle measuring is convenient, quick, realize high precision measurement of angle. The principle of the ADXL345 three axis accelerometer, and proposes to use the combination of hardware and software of the automatic calibration technique for measuring the angle, the maximum simplifies the circuit, improves the stability and reliability of the system. This graduation design is the use of three axis accelerometer ADXL345 microcontroller STC89C52 and ADI company production of combination, using the ADXL345 three axis acceleration sensor level angle, processing through the MCU control and operation will dip in numerical form directly in the LCD screen display,, so that the angle measuring is convenient, quick, realize high precision measurement of angle. The principle of the ADXL345 three axis accelerometer, and proposes to use the combination of hardware and software of the automatic calibration technique for measuring the angle, the maximum simplifies the circuit, improves the stability and reliability of the system.Keywords: Intelligentlevel;MCU;ADXL345;angle目 录1 绪 论11.1 课题研究背景和意义11.2 国内外水平仪开展现状和趋势 11.3 系统设计的主要工作11.4 论文构造及安排 22 三轴加速度传感器感应原理 32.1ADXL345工作原理32.2 ADXL345存放器映射52.3 ADXL345主要存放器定义介绍62.4 测量倾斜角度原理82.4.1 加速度传感器进展倾角测量简介82.4.2ADXL345测量角度原理93 水平仪总体设计123.1 水平仪硬件设计 123.1.1 单片机模块133.1.2 LCD液晶显示模块 143.1.3 ADXL345接口设计 163.1.4ADXL345加速度传感器模块 183.2 水平仪软件设计 203.2.1 I2C总线协议分析 213.2.2 液晶显示驱动程序设计253.2.3ADXL345加速度传感器软件模块283.2.4ADXL345加速度传感器误差校准284 实验数据及总结30结 论33致谢 34附录A 英文原文 37附录 B 汉语翻译41附录 C 主程序44附录 D 电路原理图551 绪 论1.1 课题研究背景和意义在高楼桥梁等建筑行业,对建筑物自身在水平面倾斜度的测量和处理,需要一个能连续工作几个月甚至一年以上采样进度很高的数字水平仪系统,这就要求该系统必须具有高精度微功耗的功能。
水平仪从过去简单的气泡水平仪到现在的电子水平仪已经历经屡次更新电子水平仪是一种非常急需的测量小角度的量具随着精细制造技术的开展,已有的电子水平仪不能满足精度要求,国内数显式电子水平仪灵敏度,反响时间等与国外相比,差距较大研究分辨率更高,性能更好的智能电子水平仪具有重要意义为了提高水平仪的测量精度,摆脱传统水平仪智能化程度低、数据处理能力差、抗震能力差等缺点,必须利用现代科技设计一种新的水平仪基于MEMS传感器、数字信号处理、单片机的智能水平仪是今后水平仪的开展方向,可以应用于建筑、石油、煤矿和地质勘探等领域本毕业设计将STC89C52单片机和ADI公司生产的三轴加速度传感器ADXL345相结合,实现了高精度数显智能水平仪的设计1.2 国内外水平仪开展现状和趋势目前国内已有的水平仪不能很好的满足生产和应用的需求,国内电子水平仪的生产和研制能力与国外相比相对落后尤其是存在着智能化程度不高,对数据缺乏处理能力,无法一次性测量出被测面倾斜角和方位角等缺点近年来,国内在水平仪的研制开发方面取得了不少进展国外蒸蒸日上,厂家繁多,种类齐全,速度越来越快,功耗越来越低,性能越来越强,国内除台湾做的比拟好外,大陆也有几家具备研发和生产能力,如上海华虹、海尔等,只不过大陆产品占的市场份额太小了1.3 系统设计的主要工作 本毕业设计的主要目标是利用单片机和三轴加速度传感器,设计一种高精度、大角度测量范围、实时显示、便携式的智能水平仪。
该水平仪测量的角度显示在90º以内,并且能通过三个轴的加速度正负值,判断角度的倾斜方向,同时,由于本系统是基于MEMS技术,因此即使在恶劣的现场工业环境中,仍能表现出优秀可靠的性能经过文献的翻阅和芯片资料的比照,选择了一套可行的方案在硬件方面,可以用于测量倾角的芯片有三种类型,分别是ADXL345三轴加速度传感器、mma7455三轴加速度传感器、三轴陀螺仪通过比照,ADXL345具备数字输出,高精度〔3.9mg/LSB〕,误差小等优点,因此选择了ADXL345芯片作为测量倾角的传感器同时选择了集成了单片机、LCD液晶显示屏和一些 根本元件的开发板,减少设计的时间和复杂度在软件方面,采用C语言在Keil软件中编程,使用I2C通信方式实现单片机和传感器的数据传输;利用数学方法推倒出的角度计算公式计算角度大小;最后经过实际测量角度,计算出传感器的测量误差,在偏移存放器中进展校准1.4 论文构造及安排本文将围绕设计一个完整的电容式传感器信号处理系统的过程展开,包括角度转换模块和数据处理模块本文主要内容如下:第1章,绪论,阐述了选题背景和意义,分析了国内外相关技术的开展动态及研究现状,并对本论文的主要工作进展了介绍。
第2章,通过对角度转换中涉及的三轴加速度传感器以及数据处理中涉及的A/D转换、数码显示等各局部综合分析,确定本系统的总体方案,并给出系统总体构造框图,为后续设计做准备第3章,先简单介绍了智能水平仪的硬件设计、软件技术,并对其选型和性能进展分析 第4章,设计结果实现,分析数据2 三轴加速度传感器感应原理2.1ADXL345工作原理ADXL345是一款小而薄的超低功耗三轴加速度测量系统(如图2.1所示),分辨率高达13位,可选择的测量范围有±2g,±4g,±8g或±16g数字输出数据格式为16位二进制补码ADXL345非常适合应用在移动设备中,它既能测量运动或冲击导致的动态加速度,也能测量静止加速度,例如重力加速度,使得器件可作为倾斜传感器使用其高分辨率〔3.9mg/LSB〕能够测量不到1.0º的倾斜角度变化ADXL345的主要特性如下:超低功耗:Vs=2.5V时〔典型值〕,测量模式下为23μA,待机模式下为0.1μA;用户可以选择不同的量程和分辨率,±2g〔10bit〕, ±4g〔11bit〕, ±8g〔12bit〕, ±16g〔13bit〕;〔1〕电源电压范围:2.0V至3.6V;I/O电压范围:1.7V至3.5VS;〔2〕SPI模式〔3线和4线〕和I2C模式数字接口;〔3〕通过串行命令可选测量范围和带宽;〔4〕32级FIFO缓冲器;〔5〕使用温度范围:-40℃至+85℃;〔6〕抗冲击能力:10000g;〔7〕小而薄:3mm*5mm*1mm,LGA封装;〔8〕应用范围:、医疗仪器,工业仪器、仪表、个人导航设备等。
图2.1 ADXL345芯片该加速度传感器提供多种特殊检测功能活动和非活动检测功能通过比拟任意轴上的加速度与用户设置的阈值来检测有无运动发生以及在各个轴上的加速度值是否超过用户设置的阀值敲击检测功能可以检测任意方向的单振和双振动作自由落体检测功能可以检测器件是否正在掉落这些功能可以独立映射到两个中断输出引脚中的一个芯片内部集成式存储器管理系统采用一个32级先进先出(FIFO)缓冲器,可用于存储32个X、Y和Z轴的数据样本集,从而将主机处理器负荷降至最低,并降低整体系统功耗同时,低功耗模式支持基于运动的智能电源管理,从而以极低的功耗进展阀值感测和运动加速度测量ADXL345为多晶硅外表微加工构造,置于晶圆顶部由于应用加速度,多晶硅弹簧悬挂于晶圆外表的构造之上,提供力量阻力差分电容由独立固定板和活动质量连接板组成,能对构造偏转进展测量加速度使惯性质量偏转、差分电容失衡,从而传感器输出的幅度与加速度成正比相敏解调用于确定加速度的幅度和极性ADXL345的工作原理是:首先有前端感应器感测加速度大小,然后感应电信号器件将它转换成可识别的电信号,此时的信号还是模拟信号在芯片内部集成了AD转化器,因此模拟信号经过转化器变为数字信号输出。
与计算机系统数字信号输出类似,AD转换器输出的也是16位的二进制补码数字信号经过数字滤波器的滤波处理后,在控制和中断逻辑单元的控制下访问32级FIFO,单片机通过串行接口读取三个轴的加速度数据单片机通过对存放器的操作,发送对串口的读写命令实现对ADXL345的控制芯片内部的功能框图如图2.2所示图2.2 ADXL345芯片功能框图2.2 ADXL345存放器映射表2.1 存放器映射地址名称类型复位值描述十六进制十进制0x000DEVIDR11100101器件ID0x01-0x1C1-28保存--保存不操作0x1D29THRESH_TAPR/00000000敲击阈值0x1E30OFSXR/00000000X轴偏移0x1F31OFSYR/00000000Y轴偏移0x2032OFSZR/00000000Z轴偏移0x2133DURR/00000000敲击持续时间0x2234LatentR/00000000敲击延迟0x2335WindowR/00000000敲击窗口0x2436THRESH_ACTR/00000000活动阈值0x2537THRESH_INACTR/00000000静止阈值0x2638TIME_INACTR/00000000静止时间0x2739ACT_INACT_CTLR/00000000轴使能控制活动和静止检测0x2840THRESH_FFR/00000000自由落体阈值0x2941TIME_FFR/00000000自由落体时间0x2A42TAP_AXESR/00000000单击/双击轴控制0x2B43ACT_TAP_STATUSR00001010单击/双击源0x2C44BW_RATER/00000000数据速率及功率模式控制0x2D45POWER_CTLR/00000000省电特性控制0x2E46INT_ENABLER/00000000中断使能控制ADXL345共有30个存放器〔如表2.1所示〕,其中包括29个功能存放器和1个识别设备标识的只读存放器DEVID的,地址分别为0x1D至0x39和0x00。
单片机对ADXL345的控制操作主要是通过对其存放器的读写来实现的,在访问存放器之前要先发送一个字节的读写地址信息第7位是操作类型位,“1〞表示读操作,“0〞表示写操作;第6位是读写类型位,“1〞表示多值读写,“0〞表示单值读写字节第5位至第1位是存放器地址,根据需要可以选择30个存放器中的任意一个进展读写操作,实现对加速度传感器的初始化和不同功能的控制2.3 ADXL345主要存放器定义介绍存放器OFSX、OFSY、OFSZ〔0x1E、0x1F、0x20〕都是8位存放器,在二进制补码格式中提供用户设置偏移调整,比例因子为15.6mg/LSB通过实际测量,确定各个轴平均的偏移量,储存在这三个存放器中,然后偏移存放器的存储值会自动添加到加速度数据上,结果值存储在输出数据存放器中速率位〔0x2C〕能选择器件带宽和输出数据速率,如表2.2所示默认值为0x0A,转换后为100Hz的输出数据速率在本毕业设计中,选择了适合I2C通信协议和频率的输出数据速率12.5Hz,十六进制为0x08,假设选择太高的输出数据速率和过低的通信速度会导致采样的丧失,数据传输失败FIFO_CTL,设置缓存器具体的工作模式,比方Bypass、FIFO、Stream、Trigger 模式,各种模式区别如下:在Bypass 模式中,FIFO 缓存器是退化的,仅FIFO[0]存储一次采样结果,无论是否被读取,新数据到来时将旧数据覆盖;在FIFO 模式中,FIFO 缓存器不停地收集数据直到缓存器满,此时如果没有及时读数据,新到样本数据将被丢弃,而当FIFO 被读取后,它将继续收集新到数据;在Stream 模式中,FIFO 缓存器不停地收集数据,当缓存器满,自动丢弃FIFO[0],其他样本值向前移位填充,最新数据填入FIFO[31];在Trigger 模式中,FIFO 开场工作与Stream 模式类似,收集样本值直到FIFO 缓存器满,然后丢弃最旧的数据,一旦触发事件发生〔由FIFO_CTL 存放器中TRIG_SOURCE 位所定义〕,FIFO 将保存最后n 采样值〔其中n 在FIFO_CTL 存放器中指定〕,然后像FIFO 模式一样运行,即FIFO 不满时,继续收集新的样本值。
表2.2 输出数据速率输出数据速率〔Hz〕带宽〔Hz〕速率代码IDD〔μA〕320016001111140160080011109080040011011404002001100140200100101114010050101014050251001902512.510006012.56.250111506.253.130110453.131.560101401.560.780100340.780.390011230.390.20010230.20.10001230.10.05000023存放器INT_ENABLE〔0x2E〕字节格式如表2.3所示存放器设置位值为1,使能相应功能,生成中断;设置为0时,阻止这些功能产生中断DATA_READY位、水印位和溢出位仅使能中断输出;这些功能总是处于使能状态,在本毕业设计中,在其输出前进展了中断配置,然后读取存放器内部数据表2.3存放器INT_ENABLE字节格式D7D6D5D4DATA_READYSINGLE_TAPDOUBLE_TAPActivityD3D2D1D0InactivityFREE_FALLWatermarkOverrun范围位〔0x31〕可以设置g范围,如表2.4所述。
在本设计中,选择了±16g范围,全分辨率13位表2.4范围设置设置g范围D1D000±2g01±4g10±8g11±16g存放器DATAX0、DATAX1、DATAY0、DATAY1、DATAZ0和DATAZ1〔0x32至0x37〕都是8位字节,保存各个轴的输出数据存放器0x32和0x33保存x轴输出数据,存放器0x34和0x35保存y轴输出数据,存放器0x36和0x37保存z轴输出数据输出数据为二进制补码,DATAx0为最低有效字节,DATAx1为最高有效字节,其中x可代表X、Y或ZDATA_ FORMAT存放器(地址0x31)控制数据格式在本设计中所有存放器都执行多字节读取,防止相继存放器读取之间的数据变化2.4 测量倾斜角度原理2.4.1 加速度传感器进展倾角测量简介目前常用确实定平面系统倾斜的方法是对陀螺仪的输出求积分尽管这种方法简单明了但随着积分周期的增加,与零偏稳定性相关的误差也可能快速增大,即使当器件处于静止状态时也可能导致明显的旋转在某些净加速度或者重力加速度的应用中,可以利用加速度传感器来测量静态倾斜角,这样抑制了陀螺仪的缺点目前加速度传感器测量角度的方法广泛应用于数码相机水平检测,以及工业和医学应用中检测器件方向等。
利用加速度传感器进展倾斜检测的 根本假设是:加速度只与重力相关实际上,可以对信号输出进展信号处理,以消除其中的高频组分,因而可以承受一定的交流加速度倾斜角度检测是利用重力矢量及其在轴上的投影来确定倾斜角由于重力是直流加速度,因此任何额外参加的直流加速度都会破坏输出信号并且导致计算错误造成直流加速度的因素包括车辆以恒定速率加速时的时间,以及在加速度传感器上导致向心加速度的旋转器件另外,当目标轴上的重力投影发生变化时,通过重力旋转加速度会导致明显的交流加速度在计算角度之前对加速度信号进展的任何过滤都会影响输出到达新静态值的速度综上所述,在本毕业设计中,测量平面倾斜角度时,要让加速度传感器在平面上保持一段时间的静止,以保证角度测量的准确性下面来介绍下ADXL345三轴加速度传感器通过X、Y、Z轴上的重力加速度换算成倾斜角的 根本原理2.4.2ADXL345测量角度原理通过ADXL345测量出X、Y、Z轴上的重力加速度分量大小,分别能得到X轴与水平面的夹角α,Y轴与水平面的夹角β,Z轴与水平面的夹角δ设X轴的加速度分量为Ax,Y轴的加速度分量为Ay,Z轴的加速度分量为Az对重力进展力学分析可得如下公式: (2.1) (2.2) (2.3)图2.3 水平仪的测量数学模型示图水平仪测量倾角的数学模型如图2.3所示。
如以下图,DA代表X轴,DB代表Y轴,DG代表Z轴,DA⊥DB,假设X轴与水平面的夹角为α,Y轴与水平面的夹角为β,X轴与Y轴所组成的平面DAB与水平面的夹角为γ过D点做水平面的垂线,垂足为点E,那么∠DAE=α∠DBE=β过E点做AB的垂线与AB交于C点,由立体几何知识可知∠DCE就是平面EAB与水平面的夹角γ,即使水平仪要测量并显示的角度下面是推导α、β、γ之间关系的过程,假设DE=1,由DE⊥AE,DE⊥BE可知: 〔2.4〕 因为△ADB为直角三角形,所以: 〔2.5〕将AB代入式〔2〕得: 〔2.6〕又因为△DEC为一直角三角形,所以可得: 〔2.7〕将式(1)代入式〔5〕得: 〔2.8〕因为,,所以: 〔2.9〕由,推出: 〔2.10〕即可得出被测面与水平面间的夹角γ: 〔2.11〕由图2.4.1的数学模型可知,角γ就是加速度传感器Z轴与自然坐标系Z轴间夹角。
同理可得,加速度传感器X轴与自然坐标系X轴的夹角α为: 〔2.12〕加速度传感器Y轴与自然坐标系Y轴的夹角β为: 〔2.13〕综上分析,因为单片机能计算简单的反三角函数,所以在程序中利用公式〔2.10〕就能计算出需要的倾斜角度〔弧度值〕,再将其进展转化就能显示直观的角度值在该毕业设计中,为了方便读数,无论Z轴的加速度值是正还是负,都将γ的值取在0º-90º之间3 水平仪总体设计电子水平仪的测量系统主要由单片机、ADXL345三轴加速度传感器、数码显示屏以及电源四局部构成进展测量时,水平仪发生微小倾斜,传感器的相对位置发生改变,按照测量算法就可得到倾斜角,结果通过LED数码显示屏显示出来图3.1水平仪系统设计原理框图本设计在选用传感器方面,比照了三种,最终使用了误差小,精度高的ADXL345三轴加速度传感器,选择了ADXL345芯片作为测量倾角的传感器在单片机方面最后使用了STC89C52单片机,以及液晶12864LED显示屏共同完本钱设计3.1 水平仪硬件设计通过上述几章的分析,在了解了ADXL345的 根本工作原理之后,开场进展智能水平仪的硬件设计。
根据设计需要确定各局部器件的选型,购置适宜的电路板,熟悉原理图之后进展连线测试工作硬件是一套系统的“躯体〞,是系统能够成功运行的根基,没有一个稳定而且可靠的硬件系统,就无法保证系统的稳定运行硬件设计的主要任务是根据总体设计所确定方案的要求,选择符合设计指标所要求功能、精度、处理速度并且价格合理的器件,并在所选用元器件的根基之上确定系统硬件扩展所需用到的I/O 接口电路以及外围设备电路,然后设计系统的原理图,根据原理图设计 PCB电路图,完成元器件的焊接和电气特性测试在该毕业设计中,我选择了购置已经设计好的模块来实现需要的功能但是无论是硬件的设计还是选购都要遵循如下原则: 〔1〕尽可能选择典型电路,并符合单片机的常规用法[9],为硬件系统的常规化和模块化打下良好的根基同时硬件系统的设计应充分满足系统的功能要求,并留有适当余地,以便进展二次开发〔2〕硬件设计应结合软件方案一并考虑在进展总体设计时,系统的整套方案应了如指掌,充分考虑软硬件的相互配合和相互影响在不影响系统实时性的情况下,能够由软件实现的功能尽量由软件实现,这样可以简化硬件构造、节约硬件本钱 〔3〕系统中的相关器件要尽可能做到性能匹配。
如选用芯片,单片机构成低功耗系统时,系统中所有芯片都应尽可能选择低功耗产品;选用处理速度较快的处理器时,系统中相关芯片都应尽量选择处理能力相近的芯片 〔4〕单片机外围电路较多时,必须考虑其驱动能力驱动能力缺乏时,系统工作不可靠,可通过增设线驱动器增强驱动能力或减少芯片功耗来降低总线负载根据设计的需要,将智能水平仪的硬件局局部为3个模块:显示模块、单片机模块、ADXL345加速度传感器模块整个系统的硬件框图如图3.2所示图3.2 系统硬件框图3.1.1 单片机模块单片机是本系统的核心局部,在这个模块中包括了单片机芯片、电源电路、复位电路、继电器电路、串行口通信电平转换电路、键盘电路、数码管电路和液晶显示电路,如图3.3所示电源电路为整个系统提供稳定的5V直流电,保证系统正常工作串行口通信电平转换电路既能实现单片机与计算机间的全双工通信,又能用于与其它单片机通信,同时方便计算机中的程序烧写进单片机单片机的串行口具有两条独立的数据线:发送端TXD和接收端RXD,它允许数据同时往两个相反的方向传输一般通信时发送数据由TXD端输出,接收数据由RXD端输入图3.3 单片机硬件模块3.1.2 LCD液晶显示模块为了使显示效果更好,本毕业设计选择了带中文字库的点阵液晶显示屏FYD12864-0402B。
该液晶屏支持4位/8位并行、2线或3线串行多种接口方式,内置8192个16*16点汉字和128个16*8点ASCII字符集,显示分辨率为128*64灵活的接口方式和简单、方便的操作指令是12864显示屏的优点,其 根本特征如下: (1)低电源电压(VDD为3.0V至5.5V); (2)显示分辨率:128*64; (3)2MHz时钟频率; (4)驱动方式:1/32DUTY、1/5BIAS; (5)内置DC—CD转换电路,无需外加负压 (6)工作温度:0℃—+55℃,存储温度:-20℃—+60℃; (7)背光方式:侧部高亮白色LED,功率仅为普通LED的1/5—1/1012864液晶显示屏总共有20个管脚,根据表3.1的管脚功能描述,选择并行接口模式,设计液晶屏与单片机连接的电路图,如图3.4所示DB0—DB7管脚连接到单片机的P0.0—P0.7I/O接口,传输数据RS管脚连接到单片机的P1.0端口,R/W管脚接到P1.1,EN管脚接到P1.2端口,改变三者的上下电平状态实现读写不同的功能表3.1 并行接口管脚信号管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC3.0-5V电源正3V0-比照度调整4RS(CS)H/LRS=1,表示DB7—DB0为显示数据;RS=0,表示DB7—DB0为显示指令数据;5R/W(SID)H/LR/W=1,E=1,数据被读到DB7—DB0;R/W=0,E=1→0,DB7—DB0的数据被写到IR或DR6E(SCLK)H/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线9DB2H/L三态数据线10DB3H/L三态数据线11DB4H/L三态数据线12DB5H/L三态数据线13DB6H/L三态数据线14DB7H/L三态数据线15PSBH/L1:8位或4位并口方式,0:串口方式16NC-空脚17/RESETH/L复位端,低电平有效18VOUT-LCD驱动电压输出端19AVDD背光源正端20KVSS背光源负端图3.4 12864液晶屏模块电路图3.1.3 ADXL345接口设计DXL345为用户提供SPI和I2C两种与单片机通信的方式。
在这两种方式下ADXL345都是作为从机运行在该毕业设计中,采集三个轴的加速度数据和对其进展控制操作都是通过I2C方式来完成的下面分别介绍下这两种通信方式〔1〕 SPI通信接口设计SPI〔Serial Peripheral Interface〕即串行外围设备接口,是Motorola首先在其处理器上推出的同步接口技术每个SPI系统由一个主机,一个或者多个从机构成主机是微控制器,提供SPI时钟信号;从机是承受SPI信号的集成电路,如ADXL345传感器SPI模式可配置成3线或4线方式,4条线分别为SDI〔数据输入〕、SDO〔数据输出〕、SCLK〔时钟〕和CS〔片选〕连线方式如图3.5和图3.6所示图3.5 ADXL345的SPI通信4线连接方式图3.6 ADXL345的SPI通信3线连接方式在执行不同不连续存放器的读取或写入时,传输之间必须失效,新存放器进展另行处理〔2〕I2C通信接口设计简单性和有效性是I2C总线最主要的优点[11]一方面,由于接口直接再组件之上,因此它占用的空间很小,减少了电路板的空间和芯片管脚数量另一方面,总线的长度最长可以到达7.6米,能够支持40个组件并以10KBPS的最大传输速率传输数据。
I2C另一个优点是支持多主控,其中任何能够进展发送和承受的设备都可以成为主总线,并控制信号的传输和系统时钟频率ADXL345的I2C通信过程:将引脚拉高至VDDI/O,通过简单的2线式连接,ADXL345便处于I2C模式连线方式如图3.6所示如果满足I2C总线协议规定和用户手册,便能支持标准100kHz和快速400kHz数据传输模式同时它还支持单个或者多个字节的读取/写入当ALT ADDRESS引脚处于高电平时,ADXL345的7位I2C地址是0x1D,读写地址分别为0x3B和0x3A当ALT ADDRESS接地时,可以选择备用的I2C地址0x53,读写地址分别为0xA7和0xA6使用该方式时,引脚必须连接至VDDI/O,ALT ADDRESS引脚必须连接至任一VDDI/O或接地,否则任何状态或默认状态将不存在图3.7 ADXL345的I2C通信连接方式3.1.4ADXL345加速度传感器模块DXL345芯片共有14个管脚,管脚描述如表3.2所示在前面已经详细表达了I2C通信的 根本原理,以及ADXL345与单片机I2C通信的连线方式,按照图3.7和引脚说明,就能进展ADXL345的接口设计,如图3.8所示。
VDDI/O和VS接3.3V电压,3脚和11脚的RESERVED悬空,8脚和9脚接单片机的中断源,10脚NC悬空12脚接地,其余3个引脚都接地I2C通信需要上拉电阻,因此11脚SCL、13脚SDA、7脚CS都接上10K的电阻另外,需要在电源上接两个电容,大小分别为10uF和0.1uF最后,利用跳线将SDA和SCL脚与单片机I/O连接即可引脚编号引脚名称描述1VDDI/O数字接口电源电压2GND该引脚必须接地3RESERVED保存,该引脚必须连接到VS或保持断开4GND该引脚必须接地5GND该引脚必须接地6VS电源电压7片选8INT1中断1输出9INT2中断2输出10NC内部不连接11RESERVED保存,该引脚必须接地或保持断开12SDO/ALT ADDRESS串行数据输出(SPI 4线)/备用I2C地址选择13SDA/SDI/SDIOI2C数据/ SPI 4线数据输入/SPI 3线数据输入和输出14SCL/SCLK串行通信时钟SCL为I2C时钟,SCLK为SPI时钟表3.2 ADXL345引脚描述图3.8 ADXL345电路模块由于ADXL345的正常工作电压是2.0V—3.6V,而89C52单片机的工作电压是5V,为了使ADXL345连接到系统电路中能正常工作,必须设计一个电平转换电路。
在本毕业设计中,利用芯片RT9161将5V输入电压转换成3.3V输出电压,电路图如图3.9所示图3.9 电平转换电路图3.10 ADXL345模块3.2 水平仪软件设计如果说硬件是系统的“躯体〞,那么软件就是系统的“灵魂〞一套系统的智能化在很大程度上是通过软件表现出来的在具有稳定可靠硬件根基的条件下,软件对硬件系统各部件进展统一调度,对从加速度传感器局部采集到的数据信息进展综合计算处理,最终实现设计的各种功能 对于本毕业设计而言,从硬件模块的角度来讲,软件局部可以分为液晶显示驱动程序、单片机模块初始化、ADXL345加速度传感器模块模块化的程序设计提高了程序的可读性和可移植性,便于程序的调试,程序流程图如图3.11所示单片机编程是使用Keil C51软件,它是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,提供了丰富的库函数和功能强大的集成开发调试工具同时,程序烧录软件是STC官方烧录工作单片机是整个系统的“心脏〞,全部的软件设计都要在单片机上运行但是在单片机模块程序设计中,主函数设计的较为简单,主要内容是单片机、LCD屏幕和ADXL345加速度传感器的初始化,以及利用I/O端口模拟I2C读写数据,下面详细介绍I2C通信协议和另外两个模块的程序设计。
图3.11软件设计流程图3.2.1 I2C总线协议分析I2C总线类型是由飞利浦半导体公司在八十年代初设计出来的,主要用来连接整体电路随着大规模集成电路技术的开展,单片机和外围设备需要进展扩展,扩展方式一种是并行总线,另一种是串行总线由于串行总线连线少,构造简单,因此飞利浦公司在十几年前就推出I2C串行总线I2C协议是单片机与ADXL345加速度传感器通信的协议〔1〕I2C总线时序分析I2C总线具有以下几点特征:<1> 只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL;<2> 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器;<3> 它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;<4> 串行的8位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s;<5> 连接到一样总线的IC数量只受到总线的最大电容400pF 限制数据位的有效性I2C总线进展数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
图3.12 I2C总线的位传输启示和停顿条件在I2C总线中,定义了起始条件S和停顿条件P两种情况,如图3.13所示当SCL线是高电平时,SDA线从高电平向低电平切换产生下降沿,这个情况表示起始条件当SCL线是高电平时,SDA线由低电平向高电平切换产生上升沿,这个情况表示停顿条件起始条件和停顿条件一般是由主机产生,总线在起始条件后被认为处于忙的状态,在停顿条件的时间里总线被认为处于空闲状态如果产生重复起始条件而不产生停顿条件,总线会一直处于忙的状态,此时的起始条件〔S〕和重复起始条件〔Sr〕 在功能上是一样的图3.13 起始和停顿条件如果连接到总线的器件合并了必要的接口硬件,那么用它们检测起始和停顿条件是十分简便的,但是如果没有这种接口的微控制器在每个时钟周期至少要采样SDA线两次来判别是否有电平切换发生字节格式通信过程中发送到SDA线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制每个字节后必须跟一个响应位〔0是应答,1是非应答〕首先传输的是数据的最高位〔MSB〕,如果从机要完成一些其他功能后才能接收或发送下一个完整的数据字节,可以使时钟线SCL保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL后数据传输继续。
应答响应数据传输必须带响应,相关的响应时钟脉冲由主机产生在响应的时钟脉冲期间发送器释放SDA线〔高〕在响应的时钟脉冲期间,接收器必须将SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平通常被寻址的接收器在接收到的每个字节后,除了用CBUS 地址开头的数据,必须产生一个响应当从机不能响应从机地址时,从机必须使数据线保持高电平,然后主机产生一个停顿条件终止传输或者产生重复起始条件开场新的传输如果从机接收器响应了从机地址,但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输这个情况用从机在第一个字节后没有产生响应来表示从机使数据线保持高电平,主机产生一个停顿或重复起始条件如果传输中有主机接收器,它必须通过在从机不产生时钟的最后一个字节不产生一个响应,向从机发送器通知数据完毕从机发送器必须释放数据线,允许主机产生一个停顿或重复起始条件读写数据过程单片机进展写操作时,首先发送该器件的7位地址码和写方向位“0〞〔共8位,即一个字节〕,发送完后释放SDA线并在SCL线上产生第9个时钟信号被选中的存储器在确认是自己的地址后,在SDA线上产生一个应答信号,单片机在收到应答信号后开场传送数据。
单片机进展读数据时,首先发送该器件的7位地址码和写方向位“0〞〔伪写〕,发送完后释放SDA线并在SCL线上产生第9个时钟信号被选中的存储器在确认是自己的地址后,在SDA线上产生一个应答信号然后,再发送一个字节要读出存储区的首地址,收到应答后,单片机要重复一次起始信号并发出器件地址和读方向位〔“1〞〕,收到器件应答后就可以读出数据字节,每读出一个字节,单片机都要回复应答信号当最后一个字节数据读完后,单片机应返回“非应答〞信号〔高电平〕,并发出终止信号完毕读操作〔2〕单片机I/O端口作为I2C总线接口目前,51、96系列的单片机在开发中应用非常广泛,但是由于它们都不具备I2C总线接口,因此限制了具有I2C总线接口的器件在这些系统中使用通过上面对I2C总线时序的分析,可以用51单片机的两个I/O端口来模拟I2C总线接口[13],实现I2C总线的功能按照I2C总线的规定:SCL线和SDA线是各设备对应输出状态相“与〞的结果,设备可以用输出低电平的方法来延长SCL的低电平时间,以迫使高速设备进入等待状态,从而实现不同速度设备间的时钟同步因此,即使时钟脉冲的高、低电平时间长短不一,也能实现数据的可靠传送,可以用软件控制I/O口做I2C接口。
该毕业设计就是利用单片机的通用I/O口作为I2C总线接口,并由软件控制实现单片机与传感器之间的数据传送在该单片机系统中,时钟线是由单片机驱动的,因此用89C52的一根I/O线P2.4作为SCL的信号线,将其设置为输出方式,并由软件控制产生串行时钟信号另一根I/O线P2.3作为I2C总线的串行数据线,可在软件控制下在时钟的低电平期间读取或输出数据系统传输数据的过程如下:先由单片机发出一个起始数据信号,接着送出要访问器件的7位地址数据,并等待传感器的应答信号在收到应答信号之后,根据访问要求进展相应的操作如果是读入数据,则SDA线可一直设为输入方式,中间不需要改变SDA线的工作方式,每读入一个字节均要依次检测应答信号;如果是输出数据,则首先要将SDA设置为输出方式,当发送完一个字节后,需要改变SDA线为输入方式,此时读入传感器的应答信号就完成了一个字节的传送当所有数据传输完毕后,应向SDA发出一个停顿信号,以完毕该次数据传输3.2.2 液晶显示驱动程序设计单片机通过对RS、R/W、使能端E和数据总线DB信号的控制,实现将单片机处理后的数据显示在屏幕上的功能在本毕业设计中,LCD显示四行数据,这就要求不仅要成功控制四个信号,还需要设定合理的显示位置。
表3.3是RS、R/W的配合选择决定控制界面的4种模式,表3.4是改变E引脚信号配合读写指令的执行 表3.3 RS、R/W状态改变4种模式RSR/W功能说明LL单片机写指令到指令暂存器〔IR〕LH读出忙标志〔BF〕及地址计数器〔AC〕的状态HL单片机写入数据到数据暂存器〔DR〕HHMCU从数据存放器中读出数据表3.4 E信号状态改变功能E状态执行动作结果高→低I/O缓冲→DR配合/W进展写数据或指令高DR→I/O缓冲配合R进展读数据或指令低/低→高无动作12864液晶显示屏总共有11条 根本指令,在驱动程序初始化中只要实现六条指令就能成功显示符号[14]这六条指令主要包括功能设置、清屏、显示开关控制、输入方式位置、DDRAM地址设置、写数据,它们的指令码描述如表3.5所示表3.5 根本指令表指令指令码RSR/WD7D6D5D4D3D2D1D0去除显示0000000001功能设置00001DL-RE--显示状态开关0000001DCB进入点设定00000001I/DS设定DDRAM地址0010AC5AC4AC3AC2AC1AC0写数据到RAM10数据在这些指令中,去除显示的功能是将DDRAM填满“20H〞,并且设定DDRAM的地址计数器到“00H〞。
功能设置指令中DL=0时,选择4位数据,DL=1时,选择4位数据,RE=1时,选择扩大指令操作,而RE=0时,选择 根本指令操作显示状态开关中,D=1、C=1、B=1分别表示整体显示开关翻开、游标翻开和游标位置反白允许进入点设定表示指令在数据读出与写入时,设定游标的移动方向及指令显示位置设定DDRAM地址的第一行是80H-87H,第二行是90H-97H写数据到RAM则代表将数据D7-D0的数据写入到内部的RAM中在熟悉了LCD显示屏的指令和引脚状态之后,设计该显示模块程序的时候还要遵循以下几点原则:(1) 欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码2) 显示ASCII字符过程与显示中文字符过程一样不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置3) 当字符编码为2字节时,应先写入高位字节,在写入低位字节4) 模块在承受指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时,BF需为“0〞才可承受新指令如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。
指令执行的时间要参考指令表中的指令执行时间说明液晶显示驱动程序:#ifndef __LCD12864_H__#define __LCD12864_H__#include#include #include #define lcd_data P0 //数据口sbit RS = P1^0; //选择存放器(并行) 0:指令存放器 1:数据存放器;sbit RW = P1^1; //读写控制脚(并行) 0:写入 1:读出sbit E = P1^2; //读写数据启始脚(并行)sbit PSB = P2^5; //串并方式选择引脚,0 为串行模式,1 为8/4 位数据口模式sbit RST = P2^3; //复位引脚/***************************延时1ms函数***************************/void delay_ms(unsigned int k) //延时0.994us,晶振12M{ unsigned int x,y; for(x=k;x>0;x--) for(y=121;y>0;y--);}/**************************查"忙"函数*************************/void checkBusy(void){ RS=0; RW=1; E=1; lcd_data=0xff; while(lcd_data & 0x80);3.2.3ADXL345加速度传感器软件模块要得到加速度传感器的数据,必须先对ADXL345进展初始化设置。
在上面已经详细描述了加速。