




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上海R通信技术有限公司学习文档总结文档标题 : MTK平台ADC概述Rev. : 0作者 :Darren e-mail:完成日期 :2010-06-28Page 14 of 14目录1.基本概念22.MT6225 ADC简介33.MT6253 ADC简介34.两种操作模式35.用于电池电量显示的ADC检测35.1.主要流程图35.2.流程说明55.3.创建步聚56.充电时ADC的检测66.1充电时ADC的调度流程67.工程模式查看电池电压ADC78.MT6225平台区分USB和CHARGER的ADC通道79.ADC校准910.ADC检测的主要API1011.ADC调度器的成员变量121.基本概念ADC ,即analog to digital converter,模拟信号至数字信号的转换器。主要的ADC转换算法有逐次逼近法,双积分法。它们一般由芯片内部的硬件电路实现,但外部的电路接法会有所不同。MTK平台ADC采样的可使用外部电路: y=(a*x+b)/100)*factor(如adc_adc2vol()中的算式)x为ADC采样值,y为测量点的实际电压如图2所示,(a*x+b)为A点的电压值,(a*x+b)/100)*factor才是我们要测量的Ui的电压值。由于ADC的量程有限,故需要进行分压才能测量比较大的电压,之后再根据分压电阻的比值转换成要测量点的电压。a为每单位表示的电压。MTK的ADC量程为2.8V,ADC为10位的,故a=2800000/210=2734(uV)。通常为了扩大测量范围,需要把a扩大约一倍(记为a1),之后再通过factor校正。比如变成5524,是原来的2.02倍b是偏移量,需要测量确定。每一个ADC都有一组a,b值,在chr_parameter.c bmt_custom_chr_def结构体中的数组ADC_CALIDATA adc_cali_param给定factor满足以下等式:factor*(R2+R1)/R1=100*a1/aa1为adc_cali_param中的值,a为2734,R1,R2分压的两个电2.MT6225 ADC简介MT6225有7个ADC通道,主要有四个用途:1.周期性地检测电池状态,vbat2.充电时不断测量vbat,visense,vtmp,vcharger这四个ADC通道的值3.usb-charger插入时检测usb的ADC以区分是USB还是charger4.进入工程模式下的ADC菜单时不断读取电池电压ADC和电流有两种操作模式:定时触发模式(上述的1,2)和即时触发模式(3,4)3.MT6253 ADC简介MT6253有6个ADC通道,02通道用于内部:0-电池电压,1电池电流,2充电电压;35通道可用于外部电压检测主要有三个用途(区分usb还是charger不需要ADC):1.周期性地检测电池状态(即电池电量显示)vbat2.充电时不断测量vbat,visense,vtmp,vcharger这四个ADC通道的值3.进入工程模式下的ADC菜单时不断读取电池电压ADC和电流1和2属于定时触发模式;3为即时触发4.两种操作模式定时触发检测和即时触发检测(或称事件触发检测)。定时触发检测:由AUXADC_CON0(0x8205_0000)寄存器设置,当对应位置为1时,对应的通道即为定时触发检测模式。如AUXADC_CON0 设为0x3f,则6个通道均为定时触发检测。定时的时间量在寄存器TDMA_AUXEV1中设置即时触发检测:由AUXADC_CON1(0x8205_0008)寄存器设置,当对应位置为1时,对应的通道即为定时检测模式。如AUXADC_CON1 设为0x3f,则6个通道均为即时触发检测。通道05采样好的ADC值存储在寄存器AUXADC_DAT0(0x8205_0010)AUXADC_DAT5(0x8205_0024)中5.用于电池电量显示的ADC检测5.1.主要流程图UEM创建ADC通道uem_init_hardware_data()BMT添加ADC到调度列表bmt_adc_sche_add_item()MSG_ID_BMT_ADC_ADD_ITEM_REQ修改ADC读取周期:ADC_TALKING_EVAL_COUNTADC_TALKING_EVAL_PERIODl4cuem_call_status_req_ind()MSG_ID_BMT_ADC_MEASURE_DONE_CONFUEM显示电量,并修改ADC周期ADC_IDLE_EVAL_COUNTADC_IDLE_EVAL_PERIODuembmt_adc_measure_done_cnf_hdlr()MSG_ID_BMT_ADC_MODIFY_PARAMETERS_REQbmt_adc_sche_modify_parameters()adc_sche_modify_parameters()调度器测量ADC:adc_sche_measure(),adc_sche_readback() ADC测量完成,回调函数 adc_sche_task_complete_callback( ) UEM显示电量uembmt_adc_measure_done_cnf_hdlr()uemdrv_pmic_ind(PMIC_VBAT_STATUS)ADC调度器测量ADC:adc_sche_measure(),adc_sche_readback()ADC测量完成adc_sche_task_complete_callback( )MSG_ID_BMT_ADC_MEASURE_DONE_CONFMSG_ID_BMT_ADC_MODIFY_PARAMETERS_REQbmt_adc_sche_modify_parameters()adc_sche_modify_parameters()调度器测量ADC:adc_sche_measure(),adc_sche_readback()ADC测量完成adc_sche_task_complete_callback( )MSG_ID_BMT_ADC_MEASURE_DONE_CONFUEM显示电池电量uembmt_adc_measure_done_cnf_hdlr()uemdrv_pmic_ind(PMIC_VBAT_STATUS)通话结束?来电?修改ADC读取周期:ADC_IDLE_EVAL_COUNTADC_IDLE_EVAL_PERIODl4cuem_call_status_req_ind()否是是否5.2.流程说明在开机进行到一定阶段后,UEM接收到消息ID(MSG_ID_MED_STARTUP_CNF),接着调度uemaud_startup_cnf_hdlr( ),最终通过函数uem_init_hardware_data( ),创建用于检测电池电压ADC的通道。此时的检测时间间隔和次数分别为ADC_BOOTUP_EVAL_PERIOD和ADC_BOOTUP_EVAL_COUNT。第一次检测完成后,通过函数uembmt_adc_measure_done_cnf_hdlr( )更新一次电池电量,并将检测时间间隔和次数改为:ADC_IDLE_EVAL_COUNT,ADC_IDLE_EVAL_PERIOD。之后保持ADC_IDLE_EVAL_COUNT* ADC_IDLE_EVAL_PERIOD的时间周期完成一次电池电压ADC的检测并更新电池图标。如果有来电,则在函数l4cuem_call_status_req_ind( )中将检测周期和次数更改为:ADC_TALKING_EVAL_COUNT,ADC_TALKING_EVAL_PERIOD;在通话期间保持这样的周期检测电池电压ADC和更新电池图标。通话结束结束后再把检测周期和次数更改为ADC_IDLE_EVAL_COUNT,ADC_IDLE_EVAL_PERIOD。5.3.创建步聚5.3.1.创建ADC通道:adc_sche_id = adc_sche_create_object( MOD_UEM, /创建该ADC所属模块ADC_VBAT,/该ADC通道的物理IDADC_BOOTUP_EVAL_PERIOD, /检测时间间隔(kal_uint8) ADC_BOOTUP_EVAL_COUNT, /检测次数KAL_TRUE);/是否通过发送消息形式uem_send_msg_to_bmt(MSG_ID_BMT_ADC_ADD_ITEM_REQ, /消息IDg_uem_cntx_p-adc_sche_id); /逻辑ID5.3.2.添加该ADC对应的完成回调函数和检测函数到ADC调度列表中:adc_sche_add_item(ptr-adc_sche_id,/逻辑idadc_sche_task_complete_callback,/完成的回调函数 adc_sche_measure);/检测函数5.3.3.如果需要,则修改ADC的检测时间间隔和次数:adc_sche_modify_parameters(ptr-adc_sche_id, ptr-period, ptr-evaluate_count);5.3.4.从uemdrv_pmic_ind()到显示电池电量图标的过程:uem_get_bat_status()获取电池状态 custom_cfg_vbat_level_regulator()将电池电压转换成相应的电池图标的格数等级 l4cuem_battery_status_ind(status_type, vbat_level) BatteryStatusRsp() case PMIC_VBAT_STATUS BatteryStatusIndication()电池等级格数对应的电压定义在nvram_user_config.c NVRAM_EF_CUST_HW_LEVEL_TBL_DEFAULT 数组6.充电时ADC的检测在系统启动的初始阶段,bmt_task_main()中调用bmt_adc_init(),完成充电时四个ADC通道的创建工作。主要有:设置检测时间间隔和次数,建立与物理通道ID对应的逻辑ID,检测完成后的回调函数。充电器插入后,进入到bmt_charge_start(),之后进行BMT_CHRPRE_OFF()阶段的充电。检测Vbat,Visense,Vtemp,Vcharger这四个ADC值,都完成后通过bmt_measure_done()调度下一阶段的充电。6.1充电时ADC的调度流程bmt_task_main()创建Vbat,Visense,Vtemp,Vcharger的ADC通道bmt_adc_init()bmt_charge_start()BMT_CHRPRE_OFF( )bmt_timer_config( )bmt_adc_sche_measure()bmt_adc_sche_readback()四个都完成?bmt_measure_done()BMT_CHRFUNCBMT.bat_stateBMT.pmictrl_state();检测Vbat,Visense,Vtemp,Vcharger adc_sche_modify_parameters() adc_sche_add_item()bmt_measure_complete_vxxx() bmt_complete_status|=(1adc_cali_param指向的内存单元中。如果是USB模式启动(因插入USB而启动的系统),而在bmt_main( )中通过调度bmt_read_calibration_data()将NVRAM中的值写入bmt_charing_para-adc_cali_param。校准时,同样是将NVRAM中的值重新写入bmt_charing_para-adc_cali_param流程图如下:10.ADC检测的主要APIkal_uint8 adc_sche_create_object(module_type ownerid, kal_uint8 adc_channel,kal_uint32 period, kal_uint8 evaluate_count,kal_bool send_primitive )函数功能:创建一个ADC通道,用于读取ADC值。输入参数:ownerid创建该ADC通道所属模块的ID号;adc_channel该ADC通道的物理通道;period读取ADC值的时间间隔;evaluate_coun读取次数(读取这么多次数后再取平均值);send_primitive是否使用旗语(即是否使用消息传递)。故其调度周期为period* evaluate_coun返回参数:adc_id该ADC通道的逻辑ID值。逻辑id值根据ADC创建的先后顺序而增加,即最开始创建的ADC通道逻辑值为0,最后创建的ADC通道逻辑值为最大。一个物理id可以有两个不同的逻辑id,但逻辑id必须是唯一的。void adc_sche_add_item(kal_uint8 adc_sche_id, void (*mea_complete)(kal_uint8 adc_sche_id),kal_timer_func_ptr mea_Callback)函数功能:添加读取ADC值的测量函数和完成后的回调函数到ADC调度队列中输入参数:adc_sche_id要添加ADC的逻辑id; (*mea_complete)(kal_uint8 adc_sche_id)ADC读取完成后的要调用的函数;mea_Callback读取ADC值的函数输出:无void adc_sche_modify_parameters(kal_uint8 adc_sche_id, kal_uint32 period, kal_uint8 evaluate_count)函数功能:修改一个ADC的读取时间间隔和次数输入参数:adc_sche_id要改变的ADC逻辑id; period修改后的读取时间间隔;evaluate_count修改后的读取次数返回:无void adc_sche_remove_item(kal_uint8 adc_sche_id)函数功能:从ADC调度队列中删除一个ADC通道输入参数:要删除的ADC逻辑id输出:无显示电池电量和工程模式中查看电池电压所用ADC测量函数:void adc_sche_measure(void* msg_ptr)void adc_sche_readback(void* msg_ptr)充电时检查四个ADC值(vbat, visense, vtemp, vcharger)的测量函数:void bmt_adc_sche_measure(void* msg_ptr)void bmt_adc_sche_readback(void* msg_ptr)最底层的读取函数为:data=DRV_Reg(AUXADC_DAT(sel)Sel要读取的通道值,AUXADC_DAT(sel)转换成存放该通道ADC值对应的寄存器地址,DRV_Reg()读出寄存器里面的值。kal_uint16 ADC_GetData(kal_uint8 sel)传入参数:sel读取的通道返回值:该通道的ADC值专门给META用的两个读取ADC值函数:kal_uint32 ADC_GetMeaData(kal_uint8 sel, kal_uint16 meacount)输入参数:sel要读取的ADC通道;meacount要读取的次数返回值: 该通道的ADC平均值注:此函数只能在其他任务执行前调用kal_uint32 ADC_GetData2Meta(kal_uint
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肺炎治疗与康复
- 2025年中国女式牛仔裤行业市场全景分析及前景机遇研判报告
- 采石场经营权转让附带矿山安全责任合同
- 参加公司培训心得体会
- 支架植入术后的护理查房
- 唯美辣妈培训课件
- 2024年家具制造机械项目资金需求报告代可行性研究报告
- 美术培训校长致辞
- 2022年大学英语考试模拟卷270测
- 2022年大连交通大学自考英语(二)练习题(附答案解析)
- 叙事护理(课件)
- 天津大学年《物理化学》期末试题及答案
- 2022年脱硝试题库
- 《幼儿园中班第一学期家长会》 PPT课件
- 杜邦安全理念课件
- 《房屋面积测算技术规程》DGJ32TJ131-2011
- 管道无损检测施工专项方案
- 酒店工程部考核表
- 槽钢桩支护施工方案
- 土石坝剖面图绘制12.28
- 水利水电工程防渗墙工程质量检测
评论
0/150
提交评论