智能倾角测量系统的C51编程实现
2017-07-05王子卿
王子卿
摘 要科学探测呈现出向深度智能化和三维方向发展的趋势,智能倾角测量系统成为发展的关键。本文采用模块化设计思想,以HMC1022传感器、CS5550模数转换器、AT89S52单片机以及显示模块等为基础,设计实现了智能倾角测量系统,并基于uVision开发环境,采用C51语言编程实现了智能倾角测量系统的单片机软件程序设计。
【关键词】C51语言 智能倾角 电子罗盘 科学探测
随着社会经济的高速发展,数字式电子罗盘在现代科学探测,以及工、农业生产和日常生活中应用越来越广泛,并呈现出向深度智能化和三维方向发展的趋势。这就需要大量高精度的方位及倾角的测量及处理,而要保证方向测量的高精度,需研制高精度电子罗盘。同时,随着电子罗盘应用的广泛性,其系统本身的要求体现在抗干扰性好、设计灵活、方便、成本低,适合于比较恶劣的环境等方面。本文给出了智能倾角测量系统的设计方案,并给出了C51语言的实现方法。
1 智能倾角测量系统设计
本文智能倾角测量系统采用模块化设计思想,为确保倾角数据采集的稳定性和准确性,采用HMC1022传感器集成芯片,并通过模数转换后,由单片机进行控制和分析,实现倾角数据采集,倾角数据数字化的显示等功能。整个数据采集模块采用集成了测量倾角传感器的HMC1022芯片,它是霍尼维尔公司的新产品之一,是一款高精度低成本型的磁通传感器。模数转换采用高精度低成本低功耗的CS5550芯片,它是一个包含两个Δ-Σ模数转换器(ADC)和一个串行接口的高度集成的Δ-Σ双通道低成本模数转换器。CS5550具有方便的片上AC/DC 偏移和增益校准功能,包含一个可与控制器双向通讯的串行接口、一个可用于增益补偿的片上温度传感器。而控制处理的单片机采用的是AT89S52单片机,是一种低功耗、高性价比的8位微控制器,具有8K在系统可编程Flash存储器,具有成本低、稳定性好的优点。
整个系统的硬件部分由HMC1022传感器、CS5550模数转换器、AT89S52单片机以及显示模块构成。系统整体结构图如图1所示。
HMC1022處于工作状态之下的时候,当其检测到外部有倾角信号的时候,便进行数据采集工作,并存储在寄存器之中。HMC1022采集的信号是模拟信号,须经过模数转换后才能进入单片机进行处理及数字化显示,CS5550是一款高精度低成本的模数转换芯片,配合CS5550的软件编程,对HMC1022所采集的模拟信号进行模数转换后,模拟信号变成了数字信号。数字信号送入AT89S52单片机,利用软件编程进行分析处理,让这些数字信号通过串口连接通信至计算机,可以在计算机或是液晶显示屏上把HMC1022所测得的倾角信号以数字化的形式显示出来,给科学探测提供准确有效的数据。
2 C51语言编程实现
本文给出了主程序方案,进一步使用软件编程C51语言在uVision编辑器中实现了主程序设计。
2.1 主程序方案
主程序先初始化各IO端口及各分立器件,如AT89S52单片机的管脚选用及定义,开外部中断等。主程序主要调用了3个主要子程序,分别是HMC1022工作驱动程序,CS5550模数转换程序、数据分析处理及显示程序。
主程序流程如图2所示。
2.2 主要程序设计
2.2.1 初始化定义程序
#include
#include
#include
#include
sbit AT P42=P1^0;//管脚端口位定义
sbit AT P41=P1^1;
sbit AT P40=P1^2;
sbit AT P43=P1^3;
sbit AT P44=P1^4;
sbit AT P1=P1^5;
sbit AT P2=P1^6;
sbit AT P5=P3^0;
sbit AT P7=P3^1;
#define clrclk AT P42=0
#define setclk AT P42=1
#define clrout AT P41=0
#define setout AT P41=1
#define setcs AT P40=1
#define clrcs AT P40=0
#define setled1 AT P44=1
#define clrled1 AT P44=0
#define setled2 AT P5=1
#define clrled2 AT P5=0
#define setAcgnd AT P7=1
#define clrAcgnd AT P7=0
#define uchar unsigned char
#define uint unsigned int
#define ulint unsigned long int
#define TR 1
unchar idata buf[16];
unchar pf;
uint min=11;
uint max=22;
uint dat1,dat2;
void cttx();
2.2.2 写命令函数
void spiwrite_com(uchar Input) //写命令函数
{
uchar i,j;
setcs;
clrclk;
shortdelay();
clrcs;
for (i=0;i<8;i++)
{
clrclk;
if (0x80 == (Input & 0x80)){setout;}
else clrout;
for(j=0;j<10;j++);
setclk;
for(j=0;j<8;j++);
Input = Input<<1 ;
}
clrclk;
for(j=0;j<5;j++);
setcs;
clrout;
clrcs;
}
2.2.3 CS5550转换部分程序
void cs5550initial() //初始化
{
uchar i,data0=0;
spiwrite_com(0x80);
for(i=0;i<50;i++);
for(i=0;i<15;i++){spiwrite_com(0x0ff);}
spiwrite_com(0xfe);
spiwrite_com(0x80);
}
void cs5550adjust(void) //校准函数
{ uchar i,j,k;
setAcgnd;
spiwrite_com(0x0dd); //AIN1,AIN2通道AC偏移校準
spiwrite_dat(0xffffff);
spiwrite_com(0x0CD);
for(i=0;i<200;i++)
{for(k=0;k<200;k++)
{for(j=0;j<100;j++);}
}
spiwrite_dat(0xffffff);
spiwrite_com(0x0d9); //DC偏移校准
for(i=0;i<200;i++)
{for(k=0;k<200;k++)
{for(j=0;j<50;j++);}
}
clrAcgnd;
}
void cs5550start(void)
{
spiwrite_com(0x40); //写配置寄存器,增益10,下降沿有效采样率1KHz;
spiwrite_dat(0x1074);
spiwrite_com(0x5e); //写状态寄存器
spiwrite_dat(0xffffff);
spiwrite_com(0x74);
spiwrite_dat(0x836019); //写中断屏蔽寄存器
spiwrite_com(0x4A); //写转换次数计数器,更新频率100hz;
spiwrite_dat(0x10);
spiwrite_com(0xE8); //开启转换
3 结论
本文采用模块化设计思想设计了智能倾角测量系统,整个系统的硬件部分由HMC1022传感器、CS5550模数转换器、AT89S52单片机以及显示模块构成。本文给出了主程序方案,进一步使用软件编程C51语言实现了包含HMC1022工作驱动程序,CS5550模数转换程序、数据分析处理及显示程序3个子程序的设计。本文为科学探测工程中对方位倾角数据采集模块的实现提供了一种可以应用的解决方案。
参考文献
[1]Honeywell HMC1022 Data Book.2000.
[2]CirrusLogic,Inc.CS5550 Datasheet [EB/OL].2008.http://www.cirrus.com/en/pubs/proDatasheet/CS5550_F1.pdf.
[3]ATMEL公司.AT89S52芯片资料[S].http://www.atmel.com,2007.
[4]Keil uVision2入门教程(英文版)[DB/OL].2001.
作者单位
华北电力大学国际教育学院 北京市 102206