毕业论文基于STC12C5410AD单片机的倾角测试系统设计

更新时间:2024-05-30 12:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学士学位论文

题目:基于STC12C5410AD单片机的

倾角测试系统设计

2009年 月 日

山东大学学士学位论文

目 录

目 录..................................................................................................................... i 摘 要.................................................................................................................... I Abstract ................................................................................................................. II 第一章 绪论...................................................................................................... 1

1.1课题背景及意义...................................................................................... 1 1.2 本文主要工作及章节安排..................................................................... 1 第二章 角度测量系统硬件设计........................................................................ 2

2.1 硬件功能及总体结构............................................................................. 2 2.2 信号采集模块......................................................................................... 2

2.2.1 加速度传感器MMA7260Q简介 ............................................... 2 2.2.2结构与原理................................................................................... 3 2.2.3 倾角测试模块电路设计.............................................................. 5 2.3 LED显示模块 ......................................................................................... 6

2.3.1 SPI简介 ........................................................................................ 6 2.3.2显示功能设计............................................................................... 7 2.4单片机编程下载及串口通讯设计.......................................................... 8 2.5 DS1302简介 ........................................................................................... 9 2.6 微控制器模块....................................................................................... 10

2.6.1 STC12系列单片机简介 ............................................................ 10 2.6.2 单片机系统电路设计................................................................ 11 2.7 其他电路设计....................................................................................... 12

2.7.1.键盘电路设计.......................................................................... 12 2.7.2.声光报警电路设计.................................................................. 12

第三章 软件设计.............................................................................................. 14

3.1数据处理................................................................................................ 14

3.1.1 角度数据采集设计.................................................................. 14

i

山东大学学士学位论文

3.1.2 数字滤波及工程变换部分...................................................... 15 3.2数据存储部分........................................................................................ 16 3.3 DS1302软件设计 ................................................................................. 19 3.4键盘功能设置........................................................................................ 22 3.5 通信部分............................................................................................... 25 3.6 其他部分软件设计............................................................................... 27

3.6.1 报警部分软件设计:................................................................ 27 3.6.2 LED显示程序设计 .................................................................... 28

第四章 实验测试结果及倾角测试原理............................................................ 30

4.1实验测试结果........................................................................................ 30 4.2 倾角测试原理及角度计算方法........................................................... 30 总 结.................................................................................................................. 32 致 谢.................................................................................................................. 33 参考文献.............................................................................................................. 34 附录 部分程序代码............................................................................................ 35

ii

山东大学学士学位论文

摘 要

本文设计并实现一种基于STC12单片机为主控制器的倾角数据采集系统,采用三轴加速度传感器MMA7260Q进行倾角测量。论文介绍了总体方案设计、各个模块的硬件组成和软件设计。硬件方面主要介绍了MMA7260Q加速度传感器的原理,微控制器的选型,串行通信模块。 系统采用DS1302时钟芯片为角度采集时间标签,有键盘,显示人机接口部分,可以设置角度报警值和实时显示当前角度数据,并可以实现声光报警。软件设计部分主要介绍了DS1302的使用、角度数据的采集、存储及数据与上位机的通信,并给出了部分重要子程序。角度数据通过虚拟串口上传到上位机进行分析处理。最后给出了实际角度测试的方法与测试结果。

关键词:STC12单片机; 加速度传感器; 角度测量

I

山东大学学士学位论文

Abstract

An angle data acquisition system is designed and realized in this thesis, which based on single-chip of STC12 as the MCU. Use three axle acceleration instrument MMA7260Q to carry on the measurement of dip angle. The paper introduces the overall concept design, each module hardware composition and the software design。Introduces the hardware acceleration sensor MMA7260Q principle, the selection of micro-controller, serial communication module. The system uses the DS1302 clock chip for the angle acquisition time label, there is the keyboard, showing part of man-machine interface the system can set the alarm value perspective and the perspective of real-time, display the current data and achieve sound and light alarm. Software design introduces some of the major use of the DS1302, the perspective of data collection, storage and data communication with the host computer, and gives some important subroutine. Finally, the paper has given the actual method of angle test and result of the test.

Key words: STC12 MCU; Acceleration Sensor; Measurement of angle

II

山东大学学士学位论文

第一章 绪论

1.1课题背景及意义

在很多情况下,人们想确定物体相对于重力场是出于垂直位置还是水平位置.在很多国家,对起重机是有规定的,要求对其进行某种形式的倾斜监控,特别是对于运输人的设备.离轨车辆需要倾斜度信息以避免发生事故,或使某些重要部件保持一定的角度.一些车辆,如自倾斜火车,利用倾斜来补偿离心加速度.在这里,倾角仪用来帮助使用重力垂直于地面.光学仪器,如平面激光仪,经常需要

处于水平或垂直位置.在学多情况下,需要测量两个相互垂直方向的倾斜度 [1-5] 。

在国内在生产生活的各个领域,倾角的测量已普遍存在。一般的测量方法是:以单片机为中心,系统在单片机的控制下进行数据采集、数据处理、温度补偿、控制和显示,并完成与上位机的通信等[1-7]。

1.2 本文主要工作及章节安排

本文以单片机STC12C5410AD单片机为核心搭建硬件平台,使用加速度传感器MMA7260Q测量物体倾斜角度,并利用串口实现数据的传输。并进行了实际实验。

本文分五章对研究课题进行阐述:

第一章:绪论。阐述课题的背景及意义,研究现状,最后给出了全文的主要工作和章节安排。

第二章:倾角测量系统硬件设计。详细介绍了以STCSTC12C5410AD为核心的硬件电路设计,包括倾角采集模块、串行通信模块、微处理器外围电路。重点介绍了基于加速度传感器MMA7260Q的数据采集模块、微处理器模块的电路设计。

第三章:倾角测量系统软件设计。重点介绍了下位机程序,包括数据采集程序和数据存储通信程序,并对各个子程序进行了详细介绍。

第四章:给出了实验的方法及测试结果,对倾角测试的原理及倾角的计算做出了详细介绍。

1

山东大学学士学位论文

第二章 角度测量系统硬件设计

2.1 硬件功能及总体结构

系统由单片机、倾角传感器、键盘编码器、键盘、数码管驱动器和数码管等组成。

系统的功能是通过倾角传感器采集角度信息,传送给单片机。通过LED数码管显示时间角度信息。配备有声光报警电路,并通过键盘修改相应参数,通过串口完成与上位机的通信[8,9]。系统结构如图2.1所示。

图2.1系统结构图

2.2 信号采集模块

2.2.1 加速度传感器MMA7260Q简介

MMA7260Q是一种低成本单芯片三轴向高灵敏度加速度传感器,基于表面微机械结构,集成信号调理电路、单极点低通滤波器和温度补偿部分,并且具有4种不同的灵敏度选择模式。同时它包含一种睡眠模式,MMA7260Q能在XYZ 三个轴向上以极高的灵敏度读取低重力水平的坠落、倾斜、移动、放置、震动和摇摆[10]。

2

山东大学学士学位论文

主要具有以下特点: 三轴向加速度测量;

测量范围可选:?1.5g、?2g、?4g、?6g; 低功耗,工作电压:2.2V~3.6V,工作电流500?A; 休眠模式:3?A;

封装:16引脚6mm?6mm?1.45mmQFN封装; 高灵敏度:800mV/g(量程为?1.5g); 启动时间短:1ms;

低噪音:达到更高的分辨率、更高的精确度。 2.2.2结构与原理

1.结构

MMA7260Q功能框图如图2.2所示。在IC内部主要由双芯片构成,即重力检测单元(负责加速度的侦测)与IC控制单元(负责信号处理) 。重力检测单元将检测到的加速度变化量信号送到C - V转换电路,而后进行取样、保持及信号放大处理,最后用低通滤波器滤除高频噪音,在温度补偿处理后即可输出加速度信息。

VDDg-select1g-select2振荡器 时钟发生器X-温度 补偿X-温度 补偿XOUTSleep ModeG-Cell传感器 容压变换器增益滤波YOUT 控制逻辑EEPROM调整电路X-温度 补偿ZOUTVSS图2.2 MMA7260Q功能框图

3

山东大学学士学位论文

2.原理

重力感测单元(G - CELL)由基于半导体材料的微机械结构构造而成。物理模型可以构造成一对固定的面板,中间包含一块可移动的面板,如图2.3所示。当系统被给定一加速度时,中间板就会漂移。中间板移动时,它到一边(固定的面板)的距离增加,而到另一边的距离相应地减少,这种距离的变化可用来表征加速度。G - CELL 的面板构成了两个背对背的电容,当中间面板随着加速度移动时,两个面板之间的距离就会改变,因此电容值也随之改变, C =Aε/D。这里A是指面板面积,ε是介电常数, D是面板间距。在ASIC (专用集成电路)(Application Specific Integrated Circuit)中使用开关电容测量出G-CELL 的电容值,并从他们的差值中解析出加速度数据。ASIC再进行信号调理和信号滤波(使用开关电容) ,最后输出正比于加速度的电压。

13d0d02

图2.3 简化的换能物理模型

灵敏度选择( g - Select) :根据g - Select1、g - Select2两脚输入电平的不同,MMA7260Q具有4种灵敏度选择模式,如表2.1所示。根据不同的产品应用可以选择不同的灵敏度,而且在应用时可以任意改变。睡眠模式( Sleep Mode) :当要提供MMA7260Q 12引脚(Sleep Mode)低电平时,传感器在低功耗模式下运行,此时运行电流仅为3μA。当提供其高电平时,传感器就会保持正常的运行模式。

表2.1 MMA7260Q灵敏度选择模式 g-Select1 0 0 1 1

g-Select2 0 1 0 1 g值 1.5g 2g 4g 6g 灵敏度 800mV/g 600mV/g 300mV/g 200mV/g 4

山东大学学士学位论文

可按照下面规则选择g值:1.5g适合自由落体或精确的倾斜补偿应用;2g适合手持式运动检测或游戏控制;4g适合与低震动监控、运输和处理;6g适合高震动监控与较高的震动读取。 2.2.3 倾角测试模块电路设计

MMA7260Q的供电电压在2. 2~3. 6V之间,输出信号在0~3V以内,电源本采用3.3伏电压供电 ,而且输出的信号可直接输入STC12的A/D通道而不必对信号电压进行变换。MMA7260Q与STC12单片机的接口电路如图2.4所示。

C110.UFC120.UFG-selsect1G-selsect2C130.UFXOUTYOUTZOUTNCNCNCNCNCR221KR231KR241KXYZP2.7SleepModeVDDMMA7260C140.1UFVSSNCNCNCVCCC17100UFC160.1NFOUTINREG1117-3.3OUTGNDC1910UFC200.01NF

图2.4接口电路图

本文应用中选择g值为1.5g,加速度传感器灵敏度选择引脚g-select1、g-select2全部接为低电平。计算公式如公式2-1所示。

Voff=1.65 (2-1)

?V?G=800mv/g,Vout=0.85~2.45之间变化

给MMA7260Q的12引脚(SleepMode)提供高电平,即不是工作在睡眠模式。

5

山东大学学士学位论文

MMA7260Q内部使用开关电容作为滤波器,为降低时钟带来的噪声,在输出通道上采用简单的RC滤波,在输出通道上使用1kΩ的电阻和0. 1μF的电容构成RC滤波器即可(如图5, XOUT、YOUT、ZOUT ) 。另外,A / D采样率的选择不能干扰加速度计采样频率(11kHz) ,以防混叠误差。

2.3 LED显示模块

2.3.1 SPI简介

1.SPI简介

串行外设接口(Serial Peripheral Interface,简称SPI)实际上是一种串行总线接口标准,SPI方式可允许同时同步接收和传送8位数据,是一种全双工串行总线。其速度比UART串行接口要快。SPI支持在同一总线上将多个从机连接到一个主机。同一总线上也可以有多个主机,当两个或多个主机试图同时进行数据传输时,需要进行碰撞检测[11]。

STC12C5410AD单片机集成了SPI接口,它是一个全双工高速同步通信接口,既可以和其他微处理器通信,也可以与具有SPI兼容接口的器件,如存储器、A/D转换器、D/A转换器、LED或LCD驱动器等进行同步通信。SPI也可以在一个多主机系统中负责内部处理器之间的通信。SPI接口有两种操作模式:主模式和从模式。在主模式中支持高达3Mbit/s的速率(工作频率为12MHz时,如果CPU主频采用20MHz到36MHz,则可更高);从模式时速度无法太快,速度在fosc/8以内较好。此外,SPI接口还具有传输完成标志和写冲突标志保护功能。

SPI接口由MISO(与P1.6共用)、MOSI(与P1.5共用)、SCLK(与P1.7)和/SS(与P1.4共用)4根信号线构成。

2.SPI接口的数据通信过程

在SPI中,传输总是由主机启动的。作为主机时,如果SPI使能(SPEN=1)并选择作为主机,主机对SPI 数据寄存器的写操作将启动SPI时钟发生器和数据的传输。在数据写入SPDAT之后的半个到一个SPI位时间后,数据将出现在MOSI引脚。

需要注意的是,主机可以通过将对应器件的/SS引脚驱动为低电平实现与之

6

山东大学学士学位论文

通信。写入主机SPDAT寄存器的数据从MOSI引脚移出发送到从机的MOSI引脚。同时从机SPDAT寄存器的数据从MISO引脚移出发送到主机的MISO引脚。

传输完一个字节后,SPI 时钟发生器停止,传输完成标志(SPIF)置位并产生一个中断(如果SPI中断使能)。主机和从机CPU的两个移位寄存器可以看作是一个16位循环移位寄存器。当数据从主机移位传送到从机的同时,数据也以相反的方向移入。这意味着在一个移位周期中,主机和从机的数据相互交换。 2.3.2显示功能设计

系统当前角度,角度下限值和时间都采用LED数码管来显示。显示当前角度用到4位数码管,显示上下限报警值时要同时显示,用到4位数码管,时间显示当前的分秒。所以系统用8个数码管就可以完成显示功能。采用该单片机的SPI串行接口进行控制,需要把串行数据转换在并行数据来控制数码管显示。

系统选74HC595有8位串行输入/输出或者并行输出功能的芯片。74HC595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线,输出寄存器可以直接清除100MHz的移位频率。

/G(13脚): 高电平时禁止输出(高阻态)。用一个引脚控制它,可以方便地产生闪烁和熄灭效果。

74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。

系统首先由SPI分别向两片74HC595先发送段码再发送位码,两片74HC595实现数码管段码和位码的控制,显示方式采用动态扫描方式。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

显示模块电路如图2.5,2.6所示

7

山东大学学士学位论文

U4P20P21VCCSCLKMOSI/GRCK/SRCLRSCLKSERR39 5.1KQAQBQCQDQEQFQGQHQH1R40 5.1KR41 5.1KR42 5.1KR43 5.1KR44 5.1KR45 5.1KR46 5.1KDIG0DIG1DIG2DIG3DIG4DIG5DIG6DIG7P22P23VCCSCLKMOSIU3/GRCK/SRCLRSCLKSERR31 470QAQBQCQDQEQFQGQHQH1R32 470R33 470R34 470R35 470R36 470R37 470R38 470D0D1D2D3D4D5D6D7SN74HC595SPISN74HC595图2.5 单片机与74HC595连接图

C0C1C2C3C4C5C6C78X470VCC274071436589101112132143C100.1UF

图2.6 LED驱动电路

2.4单片机编程下载及串口通讯设计

该系列单片机是采用串口下载用户程序,有在系统编程功能。目前采用RS232接口与计算机通信,但随着计算机技术的发展,支持热插拔的USB标准接口将取代RS232接口,因此计算机将越来越少配置甚至不配置RS232接口。RS232接口与USB接口虽然都属于串行接口,但它们的数据格式、通信协议、信号电平以及机械连接方式则不同。这样单片机不能编程下载和和上位机通讯,这样给开发带来了麻烦。解决这一问题就得把现有的单片机异步通讯接口转换成USB接口。方案是采用USB/RS232桥接器件如CP2102,CP2103进行设计,计算机通过USB接口虚拟一个RS232接口,与传统设备器件连接,设备对计算机接口的形式为USB接口。设计现在CP2102来实现RS232~USB之间的转换。Silicon Laboratories公司推出的USB接口与RS232接口转换器CP2102/CP2103是一款高度集成的USB-UART桥接器,提供一个使用最小化元件和PCB空间来

8

山东大学学士学位论文

实现RS232转换USB的简便解决方案。CP2102/CP2103包含了一个USB功能控制器、USB收发器、振荡器和带有全部调制解调器控制信号的异步串行数据总线(UART)。CP2102/CP2103作为USB/RS232双向转换器,一方面可以从主机接收USB数据并将其转换为RS232信息流格式发送给外设;另一方面可从RS232外设接收数据转换为USB数据格式传送至主机,其中包括控制和握手信号。

图2.7是CP2102与USB接口图,该芯片可以从USB接口处获取电源。R,T分别接单片机的TXD(发射端)和RXD(接收端)。

图2.7 CP2102与USB接口

2.5 DS1302简介

DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图2.8所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系

9

山东大学学士学位论文

统中[12]。

图2.8 DS1302电路连接图

2.6 微控制器模块

2.6.1 STC12系列单片机简介

宏晶STC12C5410AD单片机是新一代单片机,它主要特点是高速,高可靠,宽电压,低功耗,超强抗干扰,无法解密[11]。

该单片机有以下性能:

1) 高速:1个时钟周期/机器时间,增强8051内核,速度比普通51单片快8~12倍。

2) 宽电压:5.5V~3.5V,2.2V~3.8V(STC12LE5410AD系列)。 3) 低功耗设计:空闲模式,掉电模式(可由外部中断唤醒)。 4) 工作频率:0~35MHz,相当于普通8051:0~420MHz。

5) 12K/10K/8K/6K/4K/2K字节片内的程序Flash存储器,可以擦写10万次以上 6) 512字节片内数据存储器 ,内部集成了2K字节的数据Flash存储器(EEPROM)。

7) ISP/IAP,在系统可编程/在应用可编程,无需编程器和仿真器。

8) 10位ADC,8通道STC12C2052AD为8位ADC,4路PWM可选,4通道

捕获/比较功能(PWM/PCA/CCU)---可用来再实现4个定时器或四个外部中断(支持上升沿/下降沿中断)

9) 6个16位定时器,包括T0、T1,PCA也是4个定时器。

10

山东大学学士学位论文

10) 硬件看门狗(WTD),高速SPI通讯接口,全双工异步串行口通讯(UART)

兼容普通8051串口。

11) 通用I/O口,可以设置为4种工作模式,有准双向口/弱上拉,仅为输入/高

阻,开漏,推挽/强上拉。每个I/O口驱动能力均可达20mA,但整个芯片最大不得超过55mA.

选择STC12C5410AD单片机为主控器件,单片机的片上资源能满足系统的功能要求,减少了外围器件,加强了系统的抗干扰能力,提高系统稳定性,降低了开发成本和开发难度。 2.6.2 单片机系统电路设计

1) MMA7260Q与单片机的接口。

单片机STC12C5410AD的P1为通用数字I/O与12位AD转换器模拟输入通道复用端口。本文中使用MSP430F1612的P1.0/ADC0、P1.1/ADC1、P1.2/ADC2作为模拟输入通道,分别与加速度传感器MMA7260Q三轴向模拟信号输出XOUT、YOUT、ZOUT连接,实现加速度信号的采集;。MMA7260Q与STC12C5410AD接口电路如图2.9所示。

/SleepModeMMA7260XOUTYOUTZOUTP2.7STC12C5410ADP1.0/ADC0P1.1/ADC1P1.2/ADC2 图2.9 MMA7260Q与MSP430接口示意图

2) 74HC595与单片机接口

单片机的 SPI由MISO(与P1.6共用)、MOSI(与P1.5共用)、SCLK(与P1.7)和/SS(与P1.4共用)4根信号线构成。

由于只是选择主机模式故/SS信号线不用。74HC595与单片机接口电路如图2.10所示

11

山东大学学士学位论文

/GRCKU274HC595SERSRCKP1.5P1.6P20P21U1P22P23/GRCKU374HC595P1.5P1.6SERSRCKSTC12C5410ADP1.5/MOSIP1.6/SCLK 图2.10 74HC595与单片机接口

2.7 其他电路设计

2.7.1.键盘电路设计

系统涉及到压力的上下限报警值的设定,时间的设定,由于没有过多的键,考虑到单片机的I/O口,所以用独立式键盘来实现,如图2.11所示。

接收按键信号的时候,会出现前沿和后沿抖动, 采用用软件延时的办法消除抖动[13]。

图2.11 键盘电路设计

2.7.2.声光报警电路设计

报警功能主要是角度超过设定的上线报警值或低于设定的下线报警值时候会发出报警信号,系统采用较为常用的方案设计——声光报警。声音报警用蜂鸣

12

山东大学学士学位论文

器来实现,光报警采用高亮度红光LED来实现。报警声音可以有高低报警,LED

闪烁报警[14]。原理图如图2.12所示。

13

2.12声光报警电路设计

图山东大学学士学位论文

第三章 软件设计

软件采用Keil uVision3作为下位机系统的开发平台。

3.1数据处理

3.1.1 角度数据采集设计

MMA7260Q输出为模拟信号,采集过程需进行AD转换。 STC12C5410AD单片机集成有8路高速模数转换器(ADC)。,它是一种逐次比较型模数转换器,速度可达到100KHz(10万次/秒),10位的转换精度,ADC输入通道与P1口复用,上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D 使用的口可继续作为I/O口使用。

A/D采样率的选择不能干扰加速度计采样频率(11kHz) ,以防混叠误差。 AD转换频率: 11.0592MHZ/210=52khz 52khz/2=26khz A/D转换结果计算公式如下:

(ADC_DATA[7:0],ADC_LOW2[1:0])= 1024×Vin/Vcc

其中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。

数据采集子程序流程图如图3.1所示。

14

山东大学学士学位论文

开始AD初始化N10ms到?YAD采样n++Nn>=N?Y数字滤波工程变换结束

图3.1数据采集子程序流程图

3.1.2 数字滤波及工程变换部分

采样结束后进行数字滤波,数字滤波有多种方式,由于角度变化,可慢可快,所以为了适应快速变化的角度的测量,相比之下,采用了均值滤波,由于它实现简单,占用单片机的资源较少,是一种比较好的选择。其滤波效果与所选择的采样次数有关,次数越大,效果越好,但花费时间越长[15]。

--------------------滤波程序--------------------------- float filter(void)//AD滤波 平均值滤波 { float sum=0; float ad_data;

char count;

for(count=0;count

sum+=Get_data();

15

山东大学学士学位论文

部分程序:

//----------------Ds1302-------------------------

void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数) { unsigned char i; ACC = d; for(i=8; i>0; i--)

{ DS1302_IO = ACC0; DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; } }

unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数) { unsigned char i; for(i=8; i>0; i--)

{ ACC = ACC >>1; ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; }

return(ACC); }

void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据 { DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1;

DS1302InputByte(ucAddr); // 地址,命令 DS1302InputByte(ucDa); DS1302_CLK = 1;

21

// 写1Byte数据

山东大学学士学位论文

DS1302_RST = 0; }

unsigned char Read1302(unsigned char ucAddr) 据

{ unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1;

DS1302InputByte(ucAddr); // 地址,命令 ucData = DS1302OutputByte(); // 读1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData); }

//读取DS1302某地址的数

3.4键盘功能设置

在软件的编写上,可以采用软件查询方式对按键进行识别[16]。读键子程序如图3.4所示。

键值功能设计:

系统默认显示的是当前时间和当前角度值,当第一次按下S1时,显示切换到角度上下限的显示,第二次按下调节角度下限的小数位,第三次按下调节角度下限的个位,依次按下,依次调节各位。

S2作为调节角度上下限时的加一及角度正负号的切换用。 S3作为调节角度上下限时的减一及角度正负号的切换用。 S4作为调节完毕后返回当前时间和当前角度值显示之用。 键盘功能程序代码请见附录。 键盘识别程序代码如下。

22

山东大学学士学位论文

开始 定时扫描 有键按下? 延时4ms 有键按下? 延时 4ms 读取键值 图3.4读键子程序

//---------------------获取键值------------------------- void getkey(void)

{

if(P00==0&&key_last0==1)

{ delay_flag=0; //delay_flag在定时器中4ms到置1

while(delay_flag==0); //延时4ms,去抖动 if(P00==0&&key_last0==1)

{ key_num=0;

key_last0=0;

delay_flag=0; //去抖动

while(delay_flag==0); //延时4ms,去抖动 }

else if(P00==1) key_last0=1;

23

山东大学学士学位论文

}

else if(P00==1) key_last0=1; if(P01==0&&key_last1==1) { delay_flag=0;

while(delay_flag==0); //去抖动

if(P01==0&&key_last1==1)

{

key_num=1; key_last1=0;

delay_flag=0;

while(delay_flag==0); //延时4ms,去抖动

else if(P01==1) key_last1=1;

}

else if(P01==1) key_last1=1; if(P02==0&&key_last2==1) { delay_flag=0;

while(delay_flag==0); //延时4ms,去抖动 if(P02==0&&key_last2==1) {

key_num=2; key_last2=0;

delay_flag=0; //去抖动

while(delay_flag==0); //延时4ms,去抖动 }

else if(P02==1) key_last2=1;

}

else if(P02==1) key_last2=1; if(P03==0&&key_last3==1) {

delay_flag=0;

while(delay_flag==0); //延时4ms,去抖动 if(P03==0&&key_last3==1)

24

山东大学学士学位论文

{

key_num=3; key_last3=0;

delay_flag=0;

while(delay_flag==0); //延时4ms,去抖动 } //去抖动

else if(P03==1) key_last3=1;

} }

else if(P03==1) key_last3=1;

3.5 通信部分

上位机与单片机通信按应答方式经行。由上位机给单片机发送一组命令数据,单片机受到命令经过分析后认为正常,则按照命令执行操作。将操作结果返回给上位机。若经过分析认为不正常,则返回给上位机出错信息。

单片机向上位机发送的数据的方式考虑了两种,第一种是等数据存储器容量存满了后在一块发,这种方式实时性不够,为了使角度数据的变化能够及时的传到上位机,采用定时发送,定时时间和上传的次数由上位机来定,这样一来就解决了实时性问题。

由于是定时发送,通过对数据的分析知道上位机收到的数据可能有重复的,或者是有FF字样。这可由时间标签,加以区分,而FF为数据存储器中尚未写进的字节单元,通过上位机软件可以滤除。

上位机用串口调试助手来进行数据发送,为了使数据直观,命令码全部使用BCD码,由单片机传来的数据也使用BCD码存储。 上位机给单片机的指令为:

报文开始 识别字(STX) 内容 字节数 0XEE 1 命令码 报文结束(ETX) (CMD) CC 视命令定 0XFF 1 25

山东大学学士学位论文

1) 0x10:上传数据存储器中角度数据 命令格式:

0xEE 0x10 0x01/00 0xXX 0xYY/00 0xFF 第二字节 01 表示允许上传数据 00 表示不允许上传数据 第三字节 XX表示隔多少时间上传一次

第四字节 表示上传多少次数据。00表示不受限制,YY表示实际次数(不能为00)。

2) 0x11:上传报警次数 命令格式:

0xEE 0x11 0xff 3) 0x12:上传角度上下限 命令格式:

0xEE 0x12 0xff 4) 0x13:接收设定上下限角度 命令格式:

0xEE 0x13 0xXX 0xYY 0xZZ 0xQQ 0xWW 0xRR 0xff XX:表示上限正负号,为1为正,非1为负 YY:表示上限的整数部分 ZZ:表示上限的小数部分

QQ:表示下限正负号,为1为正,非1为负 WW:表示下限的整数部分 RR:表示下限的小数部分 5) 0x14:接收设定时间 命令格式:

0xEE 0x14 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0xFF 从左到右依次为 秒、分、 时、 日、 月 、星期 、年 6) 其他 :命令错误 返回给上位机的值为:

0xEE 33 30 30 0xFF 26

山东大学学士学位论文

3.6 其他部分软件设计

3.6.1 报警部分软件设计:

报警采用输出不同占空比的PWM波形,通过音调高低的变化来实现高于上限获低于下限的报警。同时加有LED灯的闪烁。并对上限和下限报警分别计数,方便向上位机传送数据。

报警计数需要注意的是:怎样区别相邻两次的不同报警及不论一次报警时间的长短,都属于一次报警。通过设置标志位,很好的解决了这个问题。

程序代码如下:

//--------------------报警程序-------------------------------- void Alarm(int temp) { int temp0;

temp0=temp;

if((temp0<=HIlimit)&&(temp0>=LOWlimit))

{ Stop_alarm(); stop=0; }

//若在正常范围内,则停止报警

else if(temp0>=HIlimit)

{

Start_HIalarm(); Is_HIalarm=1; Is_LOWalarm=0; H_is_add=1; stop=1; L_is_add=0;

} //超过上限时,进行上限报警

else if (temp0<=LOWlimit)

{

Start_LOWalarm(); Is_HIalarm=0; Is_LOWalarm=1;

27

山东大学学士学位论文

L_is_add=1; stop=1; H_is_add=0;

//低于下限时,进行下限报警

}

if((Is_HIalarm==1)&&(stop==0)&&(Is_LOWalarm==0)&&(H_is_add==1))

{

if(h_Alarm_Time==255){h_Alarm_Time=0;} h_Alarm_Time++;

H_is_add=0; }

if((Is_LOWalarm==1)&&(stop==0)&&(Is_HIalarm==0)&&(L_is_add==1)) }

3.6.2 LED显示程序设计

显示采用动态扫描的方法,即轮流点亮各数码管。显示的位码和段码分别通过单片机SPI口的MOSI输出到两个74HC595来控制。

要显示的数据有:当前时间,当前角度值,角度的上限值和角度的下限值。由键盘控制显示内容。

角度值的范围是-90.0--+90.0之间 最高位有零消隐功能,当调节角度上下限时,可实现位闪烁。

SPI发送位码和段码程序如下所示:

void sendspi(unsigned char spidata,unsigned char isBit) { unsigned char t,spi1_status=0;

SPDAT=spidata;

while(spi1_status==0) //等传输完毕 { spi1_status=SPSTAT;

{ if(l_Alarm_Time==255){l_Alarm_Time=0;} l_Alarm_Time++; L_is_add=0; }

spi1_status=spi1_status&0x80;

28

山东大学学士学位论文

}

if (isBit==1) { P21=1;

for(t=0;t<15;t++);

P21=0; //位锁存信号输出 } else { P11=1;

for(t=0;t<15;t++);

P11=0; // }

SPSTAT=0xC0; // EA=1;

}

29

段锁存信号输出 写1清SPIF标志位 山东大学学士学位论文

第四章 实验测试结果及倾角测试原理

4.1实验测试结果

由于测试条件有限,及板子的焊接也存在误差。直接测量倾角存在困难。于是采用了测试角度差值△U的办法。

AD转化的参考电压是单片机的供电电压,但每次上电后,单片机的电压不是恒定不变的值,根据多次测量在4.33伏的概率较大,下表是单片机电压在4.33伏的数据。

表4.1 Y轴倾角测量结果 真实角度差值△U1 10 30 45 60 -10 -30 -45 -60 测得实际角度差△U2 11.8 31.5 44.8 59.6 -11.5 -30.6 -45.8 -61.6 误差 (△U2-△U1)/△U1 18% 5% 0.4% 0.6% 15% 2% 1.7% 2.6% 4.2 倾角测试原理及角度计算方法

1) .倾角测量原理

MMA7260Q用于倾角测量是最典型的应用之一,它以重力( F =mgn )为输入矢量来决定物体在空间的姿态。把加速度传感器固定在物体的水平面上,当物体姿态改变时,加速度传感器的敏感轴随之转动一定角度,由于重力的作用,传感器敏感轴上的加速度会发生改变,因此可通过测量加速度的变化来反映物体姿态的变化。 2) .倾角的计算

加速度传感器在静止时,可用来测量倾斜角,倾斜角在-90?~+90?之间变化时,加速传感器输出会在-1.0g~+1.0g之间变化。输出电压对应倾斜角的公式如下所示:

30

本文来源:https://www.bwwdw.com/article/wj96.html

Top