注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

男儿当自强的博客

每天进步一点

 
 
 

日志

 
 
 
 

WINCE6.0+S3C2443下ADC在电池驱动应用  

2011-02-26 17:23:54|  分类: windows CE 驱动 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

********************************LoongEmbedded************************

作者:LoongEmbedded(kandi)

时间:2011.02.25

类别:WINCE 驱动开发

********************************LoongEmbedded************************

 

1.       ADC在电池驱动中的应用

1.1    电池检测端口和CPU的硬件接口

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图1

 

1.2    电池驱动中需要使用ADC来转换电池的电压值

下面是电池驱动battif.c中Battery_sampleADC的函数体,这个函数用于对输出的电池电压这个模拟值转换为数字值

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图2

下面就来学习这个函数对这些寄存器的设置

⑴ACDMUX

ACDMUX用于选择模拟输入通道,根据图1选择的是AIN0通道,见下图对ACDMUX寄存器的描述

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图3

⑵ADCCON

ADCCON是ADC的控制寄存器

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图4

我的系统中FCLK=533MHZ,PCLK=FCLK/8,根据下面的公式

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图5

根据图2和5,可以算出A/D转换频率=PCLK/(49+1)=FCLK/(8*(49+1))=533/(8*50)=1.3325MHZ,从而计算出一次的A/D转换时间=5*(1/1.3325MHZ)=3.725us。

 

⑶ ADCDAT0

ADCDAT0是ADC转换数据寄存器,ADCDAT0[9:0]保存着电池电压值经过ADC转换之后的数字值,这里ADCDAT0要和0x3FF进行与运算就是为了取出ADCDAT0[9:0]的值

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图6

 

 

1.3    KSPS

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图7

KSPS(kilo samples per second)表示每秒采样千次,是转换速率的单位,而转换速率(conversion rate)是指完成一次从模拟量到数字量的AD转换所需要时间的倒数。我们知道S3C2443的ADC最大的A/D转换时钟频率是2.5MHZ,所以可以计算出一次A/D转换的时间=5*(1/2.5MHZ)=2us,所以1s中的采样次数=1s/2us=500KSPS,这就是500KSPS的由来。

 

 

2.       获取电池状态的函数BatteryPDDGetStatus

电池驱动mdd层的battapi.c下面的函数BatteryAPIGetSystemPowerStatusEx2会定时调用BatteryPDDGetStatus来获取电池的状态,包括是否在充电,电量的百分比等,这些信息就是功过pdd的BatteryPDDGetStatus函数来填充结构体SYSTEM_POWER_STATUS_EX2的成员来告诉mdd层的,这个结构体\WINCE600\PUBLIC\COMMON\SDK\INC\winbase.h中定义,如下:

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图8

下面来学习这个结构体的主要的常用的成员的含义

ACLineStatus

用于指示AC电源状态,也就是电池是否在充电

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图9

BatteryFlag

表示电池是否在充电以及充电的情况

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图10

BatteryLifePercent

表示电池电量所剩的百分比,这个值可以是从0到100,也可以是BATTERY_PERCENTAGE_UNKNOWN的状态,我们的电池的驱动中就有这方面的应用,在充电的时候,如果计算出电池电量小于50%的时候,就不显示电池具体的电量显示,这时候只需要对BatteryLifePercent赋值为BATTERY_PERCENTAGE_UNKNOWN就可以了

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图11

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图12

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图13

WINCE6.0+S3C2443下ADC在电池驱动应用 - 男儿当自强 - 男儿当自强的博客

图14

 

 

 

S3C2440A的ADC和触摸屏接口

http://blog.sina.com.cn/s/blog_63f980240100kxjx.html

 

KSPS

http://www.baidu.com/s?wd=KSPS

 

 

  评论这张
 
阅读(1003)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017