发布时间:2024-04-18 09:14:11
电池电量计,库仑计,用max17040这颗电量IC去计量电池电量,这种形式较量合理。思起较量遥远的年代,做samsungs5pc110/sp5v210的时期,计量电量用一个AD口加两个分压电阻就做了,低电量的时期体例从来鉴定不精确,“低电合机”提示一会有,一会没有,客户谁人烦闷呀,“结果是有电依然没电?”。
电量计MAX17040,他通过芯片去丈量电池电量,芯片自身集成的电道较量繁复,同时能够通过软件上的极少算法去完成极少解决,是丈量出的电量尤其精确。尚有一个好处,便是他之接输出数字量,通过IIC直接读取,咱们正在电道安排、步调解决上尤其的联合化。
如下图所示,MAX17040和电池盒主控的相合,一个AD脚接到电池VBAT+,检测到的电量音信,通过IIC传到主控。
下面是电道图,电道接口较量方便,VBAT+,接到max17040的CELL,IIC接到主控的IIC2接口,这个咱们正在步调中要摆设。看这个器件较量方便吧。
看下max17040的内部组织,原本这也是一个AD转换的进程,单唯一颗芯片去完成,如许看起来较量专业些。CELL接口,原本便是一个ADC转换的引脚,咱们能够看到芯片内部有自身的时钟(timebase),IIC限度器之类的,通过CELL采撷到的模仿量,转换成数字量,传输给主控。
通过上面的先容Max17040的硬件、道理咱们根基上都清楚了,较量方便,下面咱们就重心去明白下驱动步调。
电量计的处事流程较量方便,max17040通过CELLADC转换引脚,把电池的干系音信,及时读取,存入max17040相应的寄存器,驱动申请一个依时器,记时完毕,通过IIC去读取电池状况音信,和老的电池音信比较,即使用转变上报,然后从头计时;如许轮回操作,流程如下所示:
5、max17040测到电量后若何上传到体例(这个电池体例中有扼要的明白);
IIC这个总线,正在处事顶用的较量多,TP、CAMERA、电量计、充电IC、音频芯片、电源打点芯片、根基全数的传感器,以是这多人要提神看下,后面有时分的话零丁列一片先容下IIC,从单片机时间都用的较量多,看来条总线的人命力很强,像C言语相通,很难被同类的东西替换到,起码现正在应当是如许的。
依时器,便是定一个时分,譬喻:申请一个10秒依时器,linux体例着手计时,到10秒,讨教器清零从头计时并发出信号见知体例计时完工,体例接到这个信号,做相应的解决;
INIT_DELAYED_WORK_DEFERRABLE(work,func);
使命组织体的初始化完工后,接下来要将使命计划进处事队伍。可采用多种形式来完工这一操作。开始,操纵
queue_work方便地将使命计划进处事队伍(这将使命绑定到暂时的CPU)。或者,能够通过
queue_work_on来指定解决步调正在哪个CPU上运转。两个附加的函数为延迟使命供给无另表功效(其组织体装入组织体
4中的依时器记时完工,就能够更动队伍,chip-work履行:max17040_work函数,把改读取的音信上传,咱们看下max17040_work函数的完成:
这个是因为咱们的体例耗电较量大,用USB充电时,电流过幼,以是闪现越充越少的景象,以是这个功效给去掉了。
电池弧线,便是电池的冲放电音信,便是用专业的筑立,对电池贯串充放电几天,测出一个较量均匀的值。然后转换成针对电量IC(如咱们用的max17040)的数字量,填入一个数组中,如下图所示:
上面咱们方便清楚驱动顶用到的合键学问点,后面咱们把这些点串起来,驱动依然从probe说起;
如:把电池电量音信上报:咱们正在max17040_work队伍更动函数中,即使有电池音信、状况转变,则上用power_supply_changed上报。