自己写的内置DS2782K电池曲线校准python小程序

from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
from tkinter.font import BOLD
from tkinter.ttk import Separator
'''
    DS2782K 6000mAh电池ACR校准计算公式:
    (1)ACR校准:ACR=((CurrACR/6600)-0.02)*6600  #CurrACR为第一次校准值;6600为最大ACR值;0.02是减小2个百分点;
    (2)电量百分比计算:求1%的电压 即:(maxVol- currVol) / (maxVol-minVol)
    (3)ACR直接计算:MaxACR * 电量百分比
    Note:
        MaxVoltage: 4320
        MinVoltage: 3377
        MaxACR: 6600
        CurrentVoltage/CurrentACR: DS2782K工具读取
    调试注意事项:
    (1)手持机放电不到0关机,即7%或30%关机则ACR往下调
    (2)手持机充电充不满则ACR网上调
    (3)ACR偏小则电池容易过放、偏大则放电不充分电池用的时间短
    校准方法:
    ---------------------------------------
    =>计算出当前电量的百分比
    (1)整机充电到充电截止测出:MaxVoltage
    (2)整机放电到自动关机测出:MinVoltage(可以适当增加100mV)
    (3)DS2782K软件查看电池CurrentVoltage
    (4)填入如上参数“计算”出当前电量百分比
    ---------------------------------------
    =>使用上一步计算出的电量百分比计算出对应ACR
    (1)MaxACR:6600(6500mAh就默认是6600mAh)
    (2)Precentage填入上一步计算出的电量百分比
    (3)计算出当前电量对应ACR
    ---------------------------------------
    =>充满电放电测试后,根据实际放电情况上下调整ACR
    (1)填入DS2782K读取的当前ACR值到CurrACR
    (2)MaxACR默认6600
    (3)Precentage填入想上调或下调百分之多少
    (4)校准出在当前ACR之上上调或下调的ACR值
    ---------------------------------------
'''
win = Tk()
win.title('电池ACR校准')
win.geometry('210x300-200-100')

defaultMaxVol = StringVar(value ='4320') #6000mAh 默认充电最大电压值
defaultMinVol = StringVar(value ='3377') #6000mA 手持机测试默认最小电压
defaultMaxACR = StringVar(value='6600') #6000mAh电池默认最大ACR 6600mAh

#计算百分比对应电压
def calculationVoltagePercentage():
    maxVol = MaxVol.get()
    minVol = MinVol.get()
    currVol = currentVol.get()
    currentPercentage = (int(currVol) - int(minVol)) / (int(maxVol) - int(minVol)) 
    percentageOut.insert(0, currentPercentage)

#校准ACR
def calibrationACR():
    if((len(lbl_CurrACR.get()) == 0) | (len(lbl_MaxACR.get()) == 0) | (len(lbl_Per.get()) == 0)):
        messagebox.showwarning('Message title','CurrACR/MaxACR/Percentage不能为空')
        return
    CurrACR = lbl_CurrACR.get() #第一次校准得到的ACR值
    maxACR = lbl_MaxACR.get()       #最大ACR值
    percentage = lbl_Per.get()     #减小的百分比
    print('CurrACR:{} maxACR:{} percentage:{}'.format(CurrACR,maxACR,percentage))
    if(direction_var.get() == 1):
        Tout = ((float(CurrACR)/float(maxACR)) - (int(percentage)/100))*(float(maxACR)) #下调ACR(放掉不到0%即关机下调)
    else:
        Tout = ((float(CurrACR)/float(maxACR)) + (int(percentage)/100))*(float(maxACR)) #上调ACR(充不满的上调)
    lbl_Tout.insert(0,Tout)

#直接根据最大ACR和输入百分比计算ACR
def calculationACR():
    MaxACR = maxACR.get()
    perValue = percentageACR.get()
    outACR = int(MaxACR) * ((int)(perValue)/100)
    calOutACR.insert(0, outACR)

lbl_MaxVol = Label(win,text='MaxVoltage:',width=10)
lbl_MaxVol.grid(column=0,row=0)
MaxVol = Entry(win,textvariable=defaultMaxVol, width=10)
MaxVol.grid(column=1,row=0)
lbl_UnitmV1 = Label(win,text='mV',width=5)
lbl_UnitmV1.grid(column=2,row=0)

lbl_MinVol = Label(win,text='MinVoltage:',width=10)
lbl_MinVol.grid(column=0,row=1)
MinVol = Entry(win,textvariable=defaultMinVol, width=10)
MinVol.grid(column=1,row=1)
lbl_UnitmV2 = Label(win,text='mV',width=5)
lbl_UnitmV2.grid(column=2,row=1)

lbl_CurVol = Label(win, text='CurrentVol:', width=10)
lbl_CurVol.grid(column=0,row=2)
currentVol = Entry(win,width=10)
currentVol.grid(column=1,row=2)
lbl_PercentSign = Label(win,text='mV',width=5)
lbl_PercentSign.grid(column=2,row=2)

btn_calculation = Button(win, text='计算:', width=8, command=calculationVoltagePercentage, bg='#FF0000',font=BOLD)
btn_calculation.grid(column=0,row=3)
percentageOut = Entry(win,width=10)
percentageOut.grid(column=1,row=3)
lbl_UnitPercentage = Label(win,text='%',width=5)
lbl_UnitPercentage.grid(column=2,row=3)

#插入分割线
separ = Separator(win, orient=HORIZONTAL,style='red.TSeparator')
separ.grid(column=0,row=4,rowspan=1, columnspan=3, sticky='EW', pady=5, padx=5)

lbl_Pre = Label(win, text='CurrACR:',width=10)
lbl_Pre.grid(column=0, row=5)
lbl_CurrACR = Entry(win, width=10)
lbl_CurrACR.grid(column=1, row=5)
direction_var = IntVar()
direction_var.set(1)
checkBut_direction = Checkbutton(win, text='下调',bg='#0000FF', variable=direction_var)
checkBut_direction.grid(column=2, row=5)

lbl_load = Label(win, text='MaxACR:', width=10)
lbl_load.grid(column=0,row=6)
lbl_MaxACR = Entry(win,textvariable=defaultMaxACR, width=10)
lbl_MaxACR.grid(column=1,row=6)
lbl_UnitmV3 = Label(win,text='mAh',width=5)
lbl_UnitmV3.grid(column=2,row=6)

lbl_Tclk = Label(win, text='Percentage:', width=10)
lbl_Tclk.grid(column=0,row=7)
lbl_Per = Entry(win,width=10)
lbl_Per.grid(column=1,row=7)

lbl_Percent = Label(win,text='%',width=5)
lbl_Percent.grid(column=2,row=7)

btn_calculation = Button(win, text='校准:', width=8, command=calibrationACR, bg='#FF0000',font=BOLD)
btn_calculation.grid(column=0,row=8)
lbl_Tout = Entry(win,width=10)
lbl_Tout.grid(column=1,row=8)
lbl_UnitUs = Label(win,text='mAh',width=5)
lbl_UnitUs.grid(column=2,row=8)

#插入分割线
separ2 = Separator(win, orient=HORIZONTAL)
separ2.grid(column=0,row=9,rowspan=1, columnspan=3, sticky='EW', pady=5, padx=5)

lbl_maxACR = Label(win, text="MaxACR:",width=10)
lbl_maxACR.grid(column=0,row=10)
maxACR = Entry(win,textvariable=defaultMaxACR, width=10)
maxACR.grid(column=1, row=10)
lbl_UnitmV4 = Label(win,text='mAh',width=5)
lbl_UnitmV4.grid(column=2,row=10)

lbl_Percentage3 = Label(win, text='Percentage:', width=10)
lbl_Percentage3.grid(column=0,row=11)
percentageACR = Entry(win,width=10)
percentageACR.grid(column=1,row=11)
lbl_Percent3 = Label(win,text='%',width=5)
lbl_Percent3.grid(column=2,row=11)

btn_calculation3 = Button(win, text='计算:', width=8, command=calculationACR, bg='#FF0000',font=BOLD)
btn_calculation3.grid(column=0,row=12)
calOutACR = Entry(win,width=10)
calOutACR.grid(column=1,row=12)
lbl_UnitACR = Label(win,text='mAh',width=5)
lbl_UnitACR.grid(column=2,row=12)

win.mainloop()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值