嵌入式课程设计课程设计报告高志付解读Word下载.docx
《嵌入式课程设计课程设计报告高志付解读Word下载.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计课程设计报告高志付解读Word下载.docx(26页珍藏版)》请在冰豆网上搜索。
3.3.1定时器配置13
3.3.2中断服务15
3.4无线数据收发模块15
3.4.1NRF905介绍15
3.4.2NRF905SPI总线接口协议16
3.4.3NRF905发送数据16
3.4.4NRF905接收数据17
四、结束语18
五、附件(产品实物图)20
一、前言
随着时代发展,社会对能源特别是电能的需求越来越大,如何节能成为了研究的重点之一。
蓄电池作为电能的存储介质,广泛应用于各种场合,因此有效的对蓄电池进行监控不仅可以节约能源,还能延长电池使用寿命。
目前设计便携式设备,为了满足移动性和轻便性的要求,通常采用电池供电。
在使用电池供电时,电池的当前状态是用户所关心的,如MP3播放器、手机、笔记本电脑等都实时显示电池的当前状态。
为此在设计本产品时,智能电池监测系统被充分考虑。
本设计的电池监测系统由DS2438智能电池监测片、51单片机、液晶显示模块组成,其中核心功能是由DS2438智能电池监测芯片完成的。
二、产品设计功能要求和结构原理图
2.1产品设计功能要求
产品由DS2438智能电池监测芯片、51单片机、液晶显示模块、NRF905无线收发信息模块组成。
DS243芯片完成对电池当前各种状态的监测,包括当前电池的充/放电状态、电压、电流、温度、剩余电量、消逝时间等参数的监测。
DS2438芯片能够自动采集这些参数,并将其放在SRAM/EEPROM中。
51单片机根据需要发出命令读取这些参数,然后处理这些参数,显示电池状态。
由于存放这些参数的EEPROM具有非易失性,所以本系统具有掉电保护的功能。
51单片机按照用户需要对电池状态的相应参数读取和处理,经由NRF905发射模块发送,再由用户端的NFR905接收模块接收并处理,然后送往液晶显示模块显示。
单片机是整个系统的控制、处理中心。
由于大量工作由单片机的软件完成,明显地降低了系统硬件复杂度。
液晶显示模块显示用户需要了解的电池当前状态信息,仅仅接受单片机的控制和访问。
2.2产品总设计流程图
为了满足监测的实时性,本系统单片机采用定时中断的方式访问DS2438,进行电池参数采集。
首先设置单片机的计数器为定时方式,开启计数器,定时长短可随需要灵活设定。
然后单片机运行其它程序,等待定时中断的到来。
定时中断发生之后进入中断服务程序,调用DS2438的控制操作程序,进行数据采集,并将采集来的数据进行处理和显示,最后重新初始化定时中断,返回。
图1是系统总体流程图图2是中断服务程序流程图
DS2438与单片机进行数据通讯时仅用一根数据线,因此必须严格按照芯片的读写时序要求来编写程序,这样才能保证数据的正确读写。
三、子模块程序设计
3.1电池参数采集模块
3.1.1DS2438芯片功能介绍
DS2438芯片是DALLAS公司推出的新一代智能电池监测芯片,具有功能强大、体积小、硬件接线简单等优点。
3.1.1.1DS2438芯片特性
(1)仅有一根双向数据线,故单片机仅需一个端口与之连接。
(2)内含数字温度传感器(免去在电池块内设装热敏电阻)。
(3)片内模数转换器可进行电池电压监测,从而可判定充电和放电的结束。
(4)片内的积分电流累加器可实时记录电池流入、流出电流的总量,便于统计电量。
(5)内含二进制格式的消逝时间表。
(6)内含40字节可用于存放电池特殊参数的掉电保护的用户访问存储器。
3.1.1.2芯片外围电路
图3DS2438外围电路
3.1.1.3DS2438芯片存储空间
DS2438的存储空间有8页,每页8个字节,共64个字节,每一页都有对应的高速暂存页,因此存储器包括RAM高速暂存器和SRAM/EEPROM(掉电保护)两部分,这两部分是镜像关系。
高速暂存器可确保在用一线通讯时数据能够保持一致性(数据写入DS2438时先写入高速暂存器,仅当数据被确认后,才能用暂存器复制命令将暂存页的数据写入相应的掉电保护空间中),单片机对DS2438进行数据读/写时只能对高速暂存器进行操作。
存储空间内包括一些特殊功能寄存器和用户可使用的存储单元。
下面仅对存储空间中与我们设计的实际系统有关的特殊寄存器做一下说明。
(1)状态/标志寄存器
状态/标志寄存器决定了DS2438的工作状态,单片机通过对特殊功能寄存器进行读/写操作,可实现DS2438的各种功能,因此在对其进行操作之前,必须对这一寄存器进行初始化,即对相应的控制位进行写操作。
如图
图4状态/标志寄存器
(2)电流寄存器
DS2438内含一个可有效测量流入、流出电池块电流的模数转换器,电流的测量是通过测量外部传感电阻两端的电压来实现的。
测量的结果存放于电流寄存器中。
如图5
图5电流寄存器
实际上电流寄存器存的是电压值,要得到流入、流出电池的电流可用公式
(1)行计算。
(1)
(3)电流积分累加寄存器
DS2438对电池剩余电量的测量是借助其内部的电流积分累加器(ICA)实现的。
ICA存放的是流入、流出电池总电流的净累加值,因此,存储在这个寄存器内的值可用于计算电池的剩余电量。
如图6
图6电流积分累加寄存器
(4)电压寄存器
存放采集的电压值。
DS2438的电压输入范围是0~10V,且电压ADC的输入,可通过状态/结构寄存器的AD位来选择由VDD输入或由VAD输入。
电压A/D转换的结果放在2字节电压寄存器中,单位为mV。
如图7
图7电压寄存器
(5)温度寄存器
存放采集的电池温度值。
DS2438可在-55~+125℃范围内以0.03125℃的分辨率测量温度值,温度值以2的码形式通过2字节温度寄存器输出。
其中符号位S指示温度值为正或负:
S=0,温度值为正;
S=1,温度值为负。
如图8
图8温度寄存器
(6)消逝时间记录寄存器
消逝时间记录寄存器记录相对于内部基准时间的电池充电完毕、其脱离系统的精确时刻,便于用户了解电池的使用情况,正确地使用和维护电池。
如图9
图9消逝时间记录寄存器
3.1.1.4DS2438单总线协议
DS2438是Dallas公司基于单总线的器件。
该器件的操作完全遵循单总线协议,其ROM命令有4个。
(1)读ROM[33H];
(2)匹配ROM[55H];
(3)跳过ROM[CCH];
(4)搜索ROM[F0H]。
主机在操作DS2438之前,必须先发送上述4个ROM命令中的一个。
在DS2438成功执行上述命令之后,主机可使用下面的内存命令操作DS2438。
由于DS2438的内存分为7页,故其内存操作命令和其它的单总线器件略有不同。
DS2438的内存操作命令如下:
(1)写高速暂存存储器[4EHXXH];
(2)读高速暂存存储器[BEHXXH];
(3)复制高速暂存存储器[48HXX];
(4)恢复存储器[B8HXXH];
(5)温度转换命令[44H];
(6)电压转换命令[B4H]。
上述内存命令中的XXH为高速暂存存储器的页地址,有效的页码地址为00~07H。
DS2438对高速暂存存储器的操作中,除了基本的命令外,还必须将待操作的高速暂存存储器的页地址送出去。
DS2438允许1次读/写1页内的全部8个字节,且读写字节操作可使用复位命令在任何瞬间终止。
3.1.2DS2438初始化配置
当主设备将数据线从高电平拉到低电平时(一个下降沿),写时间槽被初始化了。
有两种形式的写时间槽:
写0时间槽和写1时间槽。
所有的写时间槽必须持续至少60us,在此期间独立的写周期间必须有至少1us的恢复时间。
DS2438将在I/O电平下降后的15us到60us这个时间窗内采样I/O口线。
如果总线为高,则写1,如果总线为低,则写0。
为主设备产生一个写1时间槽,数据线必须被拉成低电平,然后释放数据总线,在写时间槽开始15us内,允许数据总线拉成高电平。
为主设备产生一个写0的时间槽,数据总线必须被拉成低电平,并且在写时间槽期间保持低电平。
/********************************************************************
*功能:
配置函数
*返回值:
无
********************************************************************/
voidds2438_init(void)
{
reset();
//初始化DS2438,使其准备好
WriteByte(0xcc);
//跳过ROM匹配命令
WriteByte(0x4e);
//写高速暂存命令
WriteByte(0x00);
//写高速暂存地址
WriteByte(0x07);
//写高速暂存数据
//初始化DS2438,使其准备好
WriteByte(0x48);
//复制高速暂存存储器
//将高速暂存存储器数据复制到SRAMPage0页
while(!
DQ);
//等待数据发送完成
}//ds2438_init
3.1.3温度参数的采集
DS2438通过片上温度测量技术测量温度。
能读取13位二进制补码格式的温度数据,分辨率为0.03125°
C。
表1描述了温度测量输出数据的确切关系。
数据在单总线接口上串行传输。
DS2438可以测量温度的范围从-55°
C到+125°
C,以0.03125°
C的增量。
/******************************************************************
温度采样控制函数
******************************************************************/
voidConvertT(void)
//初始化芯片
WriteByte(0x44);
//温度转换命令
}//ConvertT
3.1.4电压参数的采集
DS2438的模数转换器(ADC)有10位的分辨率,当DS2438收到指示它转换电压的命令时,执行转换。
这个测量的结果放在2字节电压寄存器中。
DS2438的模数转换范围是0V到10V。
这个范围对于六节镍镉电池或镍氢电池组或两节锂电池组来说是合适的。
模数转换的满量程值是10.23V,分辨率为10mV。
电压采样控制函数
voidConvertV(void)
WriteByte(0xb4);
//电压转换命令
}//ConvertV
3.1.5电流参数的采集
DS2438模数转换器以通过测量外部检测电阻两端的电压,来有效地检测流入和流出电池组的电流为特点。
模数转换器将在后台以每秒36.41次的频率采样,因此不需要命令启动电流测量。
然而,DS2438只会在状态配置寄存器中IAD位置1的时候才启动电流模数转换。
3.2电池信息显示模块
3.2.1液晶12864介绍
带中文字库的12864是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;
其显示分辨率为12864,内置8192个16*16点汉字,和128个16*8点ASCII字符集。
3.2.2液晶12864协议
3.2.3液晶12864初始化
*函数名:
LCD12864_Init
*描述:
初始化LCD12864.
*输入:
无.
*返回:
voidLCD12864_Init()
{
LCD_PSB=1;
//并口模式DelayMs(10);
LCD_RST=0;
//复位液晶
DelayMs(20);
LCD_RST=1;
DelayMs(40);
LCD12864_WriteCommand(0x30);
//功能设定:
8位模式DelayMs(5);
LCD12864_WriteCommand(0x01);
//清屏
DelayMs(5);
LCD12864_WriteCommand(0x06);
//位址计数器自加
LCD12864_WriteCommand(0x0C);
//开显示
}
3.2.4液晶12864写操作
8位并行写时序图
LCD12864_WriteCommand。
向LCD12864写入命令。
*RS=0,RW=0,EN下降沿将P0端口命令
*写入LCD12864。
UINT8Cmd
*要写入的命令码。
无。
voidLCD12864_WriteCommand(UINT8Cmd)
LCD12864_CheckBusy();
//检查LCD12864是否忙
LCD_RS=0;
LCD_RW=0;
LCD_EN=1;
DATA_PORT=Cmd;
DelayUs();
//等待命令写完
LCD_EN=0;
LCD12864_WriteData
向LCD12864写入数据.
*RS=1,RW=0,EN下降沿将P0端口命令写入LCD12864。
UINT8WrData
*要写入的数据。
voidLCD12864_WriteData(UINT8WrData)
LCD_RS=1;
DATA_PORT=WrData;
//等待数据写完
3.3定时中断模块
3.3.1定时器配置
52定时器主要是利用单片机内部硬件资源来实现定时器和/或计数器功能。
具体应用可以用于定时、计数、测频率、测脉宽及用于串行通讯中的波特率发生器等。
定时器的工作模式和定时、计数设定由软件实现,具体工作模式是由方式寄存器TMOD的M0、M1决定,控制寄存器TCON是用于定时器启动及定时计数溢出判断。
TCON:
定时控制寄存器
寄存器地址88H,位寻址8FH~88H。
位地址
8F
8E
8D
8C
8B
8A
89
88
位符号
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TF0(TF1)——计数溢出标志位,当计数器计数溢出时,该位置1。
TR0(TR1)——定时器运行控制位
当TR0(TR1)=0
停止定时器/计数器工作
当TR0(TR1)=1
启动定时器/计数器工作
IE0(IE1)——外中断请求标志位
当CPU采样到P3.2(P3.3)出现有效中断请求时,此位由硬件置1。
在中断响应完成后转向中断服务时,再由硬件自动清0。
IT0(IT1)——外中断请求信号方式控制位
当IT0(IT1)=1
脉冲方式(后沿负跳有效)
当IT0(IT1)=0
电平方式(低电平有效)此位由软件置1或清0。
TF0(TF1)——计数溢出标志位
当计数器产生计数溢出时,此位由硬件置1。
当转向中断服务时,再有硬件自动清0。
计数溢出的标志位的使用有两种情况:
采用中断方式时,作中断请求标志位来使用;
采用查询方式时,作查询状态位来使用。
TMOD寄存器定时器/计数器T0¦T1的方式寄存器
GATE
C/T
M1
M0
其中低四位定义定时器/计数器T0,高四位定义定时器/计数器T1,各位的说明:
(1)GATE——门控制。
GATE=1时,由外部中断引脚INT0、INT1和控制寄存器的TR0,TR1来启动定时器。
GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。
(2)C/T——功能选择位。
置位时选择计数功能,清零时选择定时功能。
(3)M0、M1——方式选择功能。
由于有2位,因此有4种工作方式
M1M0工作方式计数器模式TMOD(设置定时器模式)
00方式013位计数器TMOD=0x00
01方式116位计数器TMOD=0x01
10方式2自动重装8位计数器TMOD=0x02
11方式3T0分为2个8位计数器,T1为波特率发生器TMOD=0x03
INIT_TIMER1
初始化定时器T1.
voidINIT_TIMER1(void)
TMOD|=0x10;
//模式1,16位定时器
TH1=(65536-45872)/256;
//50ms
TL1=(65536–45872)%256;
ET1=1;
//定时器中断打开
EA=1;
//总中断打开
TR1=1;
//定时器开关打开
3.3.2中断服务
TIMER1
中断程序,定时时间到后重新赋值开始定时,同时将LED的状态取反。
无。
voidTIMER1()interrupt1
TH1=(65536-45872)/256;
//50ms,定时器重新赋初值
TL1=(65536-45872)%256;
if(T1Count==10)ConvFlag=1;
//查询方式,每0.5s,采样一次
if(++T1Count==20)
{
T1Count=0;
//查询方式,每1s,读取一次数据
ReadFlag=1;
}
3.4无线数据收发模块
3.4.1NRF905介绍
NRF905单片无线收发器工作在433/868/915MHZ的ISM频段。
有一个完全集成的频率调制器,一个带解调器的接收器,一个功率放大器,一个晶体振荡器和一个调节器组成。
ShockBurst工作模式的特点是自动产生前导码和CRC。
可以很容易通过SPI接口进行编程配置。
电流消耗很低,在发射功率为-10dBm时,发射电流为11mA,接收电流为12.5mA。
进入POWERDOWN模式可以很容易实现省电。
3.4.2NRF905SPI总线接口协议
3.4.3NRF905发送数据
TX时序图:
/