C超低功耗倾角测量仪论文.docx
《C超低功耗倾角测量仪论文.docx》由会员分享,可在线阅读,更多相关《C超低功耗倾角测量仪论文.docx(18页珍藏版)》请在冰豆网上搜索。
C超低功耗倾角测量仪论文
超低功耗倾角测量仪
摘要2
一设计要求3
二系统方案3
2.1总体方案设计3
2.2系统理论分析4
2.3各模块设计比较4
2.3.1角度传感器模块的方案论证与选择4
2.3.2键盘方案选择4
2.3.3液晶模块方案选择4
2.3.4供电模块方案选择5
三电路与程序设计5
3.1硬件电路设计5.
3.1.1主控芯片5
3.1.2倾角传感器5
3.1.3按键部分5
3.1.4供电部分5
3.1.5液晶显示部分5
3.2软件设计6
四测试结果与分析6
4.1测试方案6
4.2测试结果分析6
五结论8
参考文献8
附录一9
附录二13
摘要:
为实现倾角的快速、准确测量,且超低功耗运行,在结构上,系统由供电模块,角度传感器模块,键盘控制模块,以及液晶显示模块构成。
在控制方案中,本系统以MSP430G2553单片机作为主控芯片,由大容量电解电容供电。
系统采用RT9266B为电容充电,随后通过LM26001降压芯片为单片机供电。
在采集倾角信息时,采用MMA8451倾角传感器传递倾斜角度数字信号,经单片机处理
后,通过液晶显示当前角度及三向重力加速度。
经测试,该系统运行稳定,倾角测量误差小,功耗低,多次测试均达到达到了设计要求,实现了指定功能。
关键词:
MSP430超低功耗MMA8451液晶显示
Abstract:
Inordertomeasuretheanglefastandaccurately,andruninthelowpowermode,inthestructure,thesystemconsistsofpowersupplymodule,anglesensormodule,keycontrolmodule,andliquidcrystaldisplaymodule.ThesystemusesMSP430G2553asthemaincontrolchip,andsuppliedbyalargecapacityelectrolyticcapacitor.ThesystemusesRT9266BforchargingthecapacitorandLM26001chipsupplypowerforMCU.Whilecollectingangleinformation,MMA8451sendsbackdigitalsignalofangle,whichisprocessedbytheMCUandshowedbyliquidcrystaldisplaycurrentangleandaccelerationofgravity.Aftertesting,thesystemrunssteadily,.Anglemeasurementerrorissmall.Atthesametime,thesystemachievestheaimoflowpower.Severaltestsaretomeetthedesignrequirements,achievingthespecifiedfunction.
Keywords:
MSP430lowpowerMMA8451LCDdisplay
、设计要求
电K电容C1
图1超低功耗倾角测量仪示意图
(1)倾角测量仪的测角范围为0〜90度,要求每按一下测试按键进行一次测量,显示分辨率为0.1度,精度为凸度。
(2)电容Ci的容量为2200^F,充电到25V后接入测量仪系统。
当以每5
秒一次的频率进行测量时,测量仪至少可以正常工作60秒。
(3)增加可以测量并显示沿X、丫、Z方向重力加速度分量的功能,要求测量精度为凸%,单位为m/s2。
(4)进一步提高倾角测量仪的测量精度,使精度达到±度。
(5)电容Ci的容量改为100"电容,充电到25V后接入系统。
并尽可能地延长使用时间。
(6)自制为电容C1充电的充电装置(充电电压为25V),该充电装置要求使用1.5V干电池(电池可方便拆装)供电。
(充电装置中使用的电容容量不限)。
二、系统总体方案
2.1总体方案设计
超低功耗倾角测量仪是由储有电能的电解电容供电,以MSP430G2553单片
机作为系统的控制核心,整个系统分为角度传感器模块、键盘控制模块、液晶屏
显示模块。
高精度的MMA8451倾角传感器实时测量角度,并通过键盘控制单片机开始测量角度,12864液晶屏实时显示倾角及三向重力加速度的数值。
系统功能框图如图一所示。
传感器
(MMA8451)
MSP430G2553
单片机
液晶显示
(FGC12864-
SPID)
充电电路
p.
电容1
rTILM26001降
(50V/2200uF)I
材
压电路
独立按键
图一系统功能框图
2.2系统理论分析・
2.2.1角度测量原理
MMA8451倾角传感器被固定于斜坡上,内部的加速度感应器将倾角转换成数字信号,并实时传递给单片机,经单片机处理后然后通过液晶屏显示出来。
加速度传感器输出信号和角度之间的关系可以由下面公式给出:
Ax=g*sin(a);
Ay=g*sin(B);
Ax、Ay表示重力加速度,a、B表示倾角角度。
当倾斜角大于60度时,误差较大。
利用线性模拟加速度传感器的灵敏度转化成倾角的灵敏度。
2.2.2单片机供电
利用干电池给大电容Ci充电,电容容量为2200^F,充电到25V后接入LM26001芯片,经LM26001整压降为3.3V后给单片机供电。
充电电路原理图与PCB图见附录图1与图2。
2.3各模块设计比较
2.3.1、角度传感器模块方案论证与选择
方案一、利用MMA8451倾角传感器传递倾斜的角度,该传感器可以不通过A/D转换直接实现角度的液晶显示,测量方便。
使程序更加简洁。
方案二、利用MMA7361倾角传感器传递倾角的角度。
MMA7361倾角传感器返回电压量,要液晶屏上显示需要进行A/D转换,增加了操作的步骤,但是
使程序更加复杂。
故选择方案一。
2.3.2键盘控制模块方案论证与选择
方案一、利用矩阵键盘一次性设置对单片机进行中断唤醒次数,这种方式可
以节约大量管脚资源,但驱动电路相对复杂,适用于大规模键盘控制系统。
方案二、使用单个独立按键,此方案中单片机的操作简单、方便,反应速度快,实现了电路简化。
故选择第二种方案。
2.3.3、液晶显示方案选择
方案一、使用普通类型的12864液晶,但其较耗能高,管脚多且连接复杂,占用资源较多,不适用于超低功耗系统。
方案二、使用FGC12864SPIDA液晶,显示界面更加方便、人性化。
该液晶
模块更低功耗,体积小,显示信息量大,字迹美观,易于被单片机控制。
故选择
2.3.4、供电模块方案选择
方案一、采用直流电源为单片机供电,方式简单易控,但电压会有波动,且效率低,达不到低功耗的要求。
方案二、采用RT9266B芯片先给电容Ci充电到25V,然后通过LM26001降压得到精确的3.3V电压接入单片机为其供电,LM26001工作在开关模式下,效率高,功耗低,调节电压速度快且精准。
故选用方案二进行设计。
三、电路与程序设计
3.1硬件电路设计
3.1.1、主控芯片
MSP430G2553原理图(见附录一图3),工作在低电源电压范围,超低功耗,配置有两个16位Timer_A,三个捕获/比较寄存路器。
并且运算速度快,精度高,完全可以实现要求。
3.1.2倾角传感器
MMA8451是一款具有14位分辨率的智能低功耗、三轴、电容式微机械加速度传感器。
这款加速度传感器具有丰富嵌入式功能,带有灵活的用户可编程选项,可以配置多达两个中断引脚。
嵌入式中断功能可以节省整体功耗,解除主处理器不断轮询数据的负担。
MMA8451具有坐g/±g/±g的用户可选量程,可以实时
输出高通滤波数据和非滤波数据。
该器件可被配置成利用任意组合可配置嵌入式的功能生成惯性唤醒中断信号,这就使MMA8451在监控事件同时,在静止状态保持低功耗模式。
倾角传感器应用原理图(见附录一图4)。
3.1.3按键部分
利用单个独立键盘接入MSP430G2553单片机I/O口,进行中断唤醒,实现对倾角的测量。
3.1.4供电部分
LM26001是一款高效率睡眠1.5A开关稳压器。
该器件具有低电流睡眠模式,以维持在轻载条件下的效率和电流模式控制在宽输入电压范围内精确调节。
同时
具有电源良好,可调软启动,输入欠压保护,内部自举二极管,减少元件数量等优良特点。
系统采用LM26001把电容4V-28V电压降压为3.3V为单片机供电;采用单片机为液晶显示屏供电,提供5V的电压。
3.1.5液晶显示部分
FGC12867SPIDA液晶显示使用ST7567控制器,5V电压驱动,没背光,是一种128*64点阵式液晶模块的低功率COMS技术,与外部CPU接口采用并行或串行两种控制方式。
设计中使用串行控制方式来实现液晶显示功能,显示实
验项目中倾角的角度及三向的重力加速度分量的数值。
(见附录一图5)
3.2软件设计
在该系统中,倾角测量器将倾斜角度以数字量形式传递给单片机,按键实现
中断唤醒,以启动单片机的工作模式,单片机将信号进行运算处理后再将数据转换显示数据传递给液晶显示器。
流程图如图3
初始化
YES
唤醒中断
采样处理
液晶显示
图2、程序流程图
322程序设计部分源程序见附录二
四、测设结果及分析
4.1测试方案
测试仪器:
精密量角器,直尺。
测试方法:
采用三次测量,求平均值,以减小实验误差4.2测试结果及分析
数据测试结果如表一表二所示。
表一:
补偿后所得倾角
真实角度
测量一
测量二
测量三]
平均值
0
0.1
0.2
0
0.100000:
6
5.8
6.1
5.9
5.933333
16
15.8
16.2
16.4
16.333333
35
34.9
35.1
35.2
35.066666
45
44.8
45.3
45.6
45.233333
55
54.7
55.1
55.6
55.133333
65
65.1
65.2
64.9
65.066666「
75
74.6
75.2
75.3
75.033333
85
84.7
85.2
85.5
85.133333
87
86.4
86.9
86.8
87.100000
90
89.9
90.1
90.2
90.066666
表二:
角度及沿X、Y、Z三方向加速度值
实际倾角
Z加速度
X加速度
丫加速度
0
9.88
0.86
0.04
10
9.75
0.30
1.45
25
8.29
0.88
4.87
35
7.43
1.00
6.24
55
5.45
1.06
8.00
65
3.40
0.75
9.00
75
2.22
1.00
9.43
80
1.49
1.03
9.68
85
0.93
0.89
9.79
90
0.10
0.72
9.79
经测试,所有参数与功能均达到了要求值,系统运行稳定
五、总结
本次设计按照题目要求,通过模块化的硬件和软件设计方法,成功地实现了规定的功能。
系统利用MSP430G2553单片机作为控制核心,采用低功耗模式利用倾角传感器测量倾角及沿X、丫、Z轴方向的重力加速度大小,并用低功耗液晶显示其角度值。
系统结构紧凑,硬件配置合理,程序思路清晰而高效。
经过测试,各个模块运行良好,功能均正常精确完成。
当然,由于水平有限,其中的错误和疏漏不可避免,望各位老师予以指正。
最后,感谢大赛组委会给予我们的宝贵参赛机会。
六、参考文献
(1)谭浩强.C语言程序设计[M].北京.清华大学出版社
(2)黄智伟.全国大学生电子设计竞赛训练教程[M].电子工业出版社
(3)王划一.自动控制原理M].国防工业出版社
(4)华成英童诗白.模拟电子技术基础[M].第四版.高等教育出版社,2006
(5)张伟霞廖清.微型机与应用[J].2011年23期
七、附录
附录
C3
1uF
5V
J2
OUT
GND
GND
MC34063
D21N5819
C4220uF/35v“
100UH
1
2
3
4
8
7
6
5
LX
QR
GND
IPK
CT
VIN
GND
CMP
R3
180R
R40.2R
GND
GND
C5
10P
R5
R6
200K
10K
R7
510R
GND
图1充电电路
图2、充电电路的PCB图
li
71
6
UVDD|
图3LM26001原理图
图4LM26001PCB图
EN
□NDAGNDVDD三
GND
\/
AGND
MN
VBIAS
\TN
sw
PGOOD
sw
EN
BOOT
STM:
FB
ss
COMP
EREQ
VDD
FEW
GND
Ul
J5X51
■3
GND
\7
AGND
图5捕获电路原理图
J6
1
ExtPWR
图6MSP430G2553原理图
SDAO
16V-16V、InterfaceVoltage'■;
1.95V-3L6V
QVDD
VDDIO
C
VDDIO
Q
-t-'VDDI
.2JBYP
□z
11
o
1
NCJ3.
GNDR苕
"3■NC
■■“■
NT1;H_
4SCL
gnd'IV
5_GND
o
5
uz
INT2!
_g"
1-1
1-1
]"1
16iii
■7-
11
>8iIli
SCLO
OII4T1
CIMT2
QSAO
Figure4.ApplicationDiagram
图7倾角传感器应用图解
附录二
部分源程序:
/**************************************************************
程序功能:
用并行数据传输方式在液晶上综合显示字符、文字和图形注意事项:
根据液晶的供电电压的不同正确选择液晶的供电电压跳线将开发板上PCB插针和LCD插针用短路帽短接测试说明:
观察液晶显示
*************************************************************
#include
#include"chuan.h"
#include"public.h"
#include"lcd.h"
#include"stdio.h"
#include"math.h"
#include"LcdDisplay.h"
inttime=O;
voidmain(){
//关闭看门狗
WDTCTL=WDTPW+WDTHOLD;
//BCSCTL1&=~XT2OFF;//打开XT2振荡器
IO_Set();
LCD_Init();
MMA845x_init();
Ext1」nit();
Timer」nit();
InterFace();
while
(1)
//CPU关闭
{
_BIS_SR(CPUOFF);
}
#pragmavector=TIMERO_AO_VECTOR//中断入口(由中断源决定)
__interruptvoidta_isr(void)//中断名(可自行定义)
{
floattemp;
time++;
if(time>=3)
{time=0;
Get_Acceleration();
//AngleShow(2,2);
temp=sqrt((Ax*Ax+Ay*Ay)/fabs(Az));
AngleShow(2,2,temp);
AccessShow(12,2,Z_Acceleration);
temp=sqrt((Az*Az+Ay*Ay)/fabs(Ax));
AngleShow(2,4,temp);
AccessShow(12,4,X_Acceleration);
temp=sqrt((Ax*Ax+Az*Az)/fabs(Ay));
AngleShow(2,6,temp);
AccessShow(12,6,Y_Acceleration);
}
#pragmavector=PORT1_VECTOR//中断入口(由中断源决定)__interruptvoidP1_interrupt(void)//中断名(可自行定义)
厂_
inti=0;
floattemp;
for(;i<4000;i++);
if(P1IN&0X08);
{
Get_Acceleration();
//AngleShow(2,2);
〃temp=Get_Degree(Z_Acceleration);
〃temp=Get_Degree(Z_Acceleration);temp=sqrt((Ax*Ax+Ay*Ay)/fabs(Az));
AngleShow(2,2,temp);
AccessShow(12,2,Z_Acceleration);
temp=sqrt((Az*Az+Ay*Ay)/fabs(Ax));
AngleShow(2,4,temp);
AccessShow(12,4,X_Acceleration);
temp=sqrt((Ax*Ax+Az*Az)/fabs(Ay));
AngleShow(2,6,temp);
AccessShow(12,6,Y_Acceleration);
}P1IFG=0x00;
}
〃#include"support_common.h"
〃#include"mma8451.h"
#include
#inelude"chuan.h"
#include"stdio.h"
#inelude"math.h"
#include"lcd.h"
//externvoidsci_dis(signedintch0,signedintchi,signedintch2);
#defineSDAP1_2〃IIC数据线定义
#defineSCLP1_4//IIC时钟线定义
#defineSDAI(P1IN&0X04)
#defineSDAINP1DIR&=~0x04
#defineSDAOUTP1DIR|=0x04
//SA0必须接地
//内部数据定义
unsignedcharIIC_ad_main;//器件从地址
unsignedcharIIC_ad_sub;//器件子地址
unsignedchar*IIC_buf;//发送|接收数据缓冲区
unsignedcharIIC_num;//发送|接收数据个数
doubleAx,Ay,Az;
signedintX_Acceleration,Y_Acceleration,Z_Acceleration;//xyz轴加速
度一一一
signedintX_Acceleration_Last=0,Y_Acceleration_Last=0,Z_Acceleration_Last=0;//xyz轴加速度(上次)
signedintZ_Acc_After_Filter=0;
signedintZ_Acceleration_N[10]={0};
doubleDegree_Z,Degree_X,Degree_Y;
floattable3[20]={0.0};
#defineack1//主应答
#defineno_ack0//从应答
//nop指令个数定义
voidNO_OPERATION(void)
{
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
}
//•
voidIIC_start(void){
SCL=0;
SDA=1;
asm(”nop");
SCL=1;
NO_OPERATION();
SDA=0;
NO_OPERATION();
SCL=0;
}
//************************************************
〃送停止位SDA=0->1
voidIIC_stop(void){
SCL=0;
asm("nop");
SDA=0;
asm("nop");
SCL=1;
NO_OPERATION();
SDA=1;
NO_OPERATION();
SCL=0;
}
//************************************************
//主应答(包含ack:
SDA=0和no_ack:
SDA=0)voidIIC_ack_main(byteack_main){
SCL=0;
if(ack_main)SDA=0;//ack主应答elseSDA=1;//no_ack无需应答NO_OPERATION();
SCL=1;
NO_OPERATION();
SCL=0;
}
//*************************************************
〃字节发送程序
//发送C(可以是数据也可是地址),送完后接收从应答//不考虑从应答位
voidsend_byte(unsignedcharc){
unsignedchari;
for(i=0;i<8;i++){
SCL=O;
if((c<
asm(”nop");
SCL=1;
NO_OPERATION();
SCL=0;
}
NO_OPERATION();
SDA=1;//发送完8bit,释放总线准备接收应答位asm("nop");
SCL=1;
NO_OPERATION();〃sda上数据即是从应答位
SCL=0;〃不考虑从应答位|但要控制好时序
}