Igor Posted June 2, 2015 Posted June 2, 2015 What is the most proper way to calculate battery discharge ratio? I am trying to add this here: Load: 0.10, 0.50, 0.38 - Memory: 974Mb - Battery discharging: 30% AXP209 gives me: http://linux-sunxi.org/AXP209 - voltage - charge / discharge current Battery capacity should be the only parameter I want to set. Is there any advanced calculation script or simply, but not so accurate, direct connection between voltage and percentage?
Patcher Posted June 2, 2015 Posted June 2, 2015 Hi Igor, i´am not much of a coder, hardware is my thing. I just wanted to point out as i geuss the perfectionist u are, that there are simple hardware add-ons, i am using to measure my solar panel charge/discharge in real time. The sensor i am using comes with a 3 pin 2,54 inch connector and communicates very straight forward in mV to a/d channel. U could pop it into the strip connector of the board, if we can find a 5volt + /- and an a/d channel besides another. (did'nt check yet) I could elaborate more, if this is interesting for the community. This is the 1 i´am talking about and costs about 2-3 euro's and is very accurate.
Marv21 Posted June 3, 2015 Posted June 3, 2015 Hi Igor, i´am not much of a coder, hardware is my thing. I just wanted to point out as i geuss the perfectionist u are, that there are simple hardware add-ons, i am using to measure my solar panel charge/discharge in real time. The sensor i am using comes with a 3 pin 2,54 inch connector and communicates very straight forward in mV to a/d channel. U could pop it into the strip connector of the board, if we can find a 5volt + /- and an a/d channel besides another. (did'nt check yet) I could elaborate more, if this is interesting for the community. This is the 1 i´am talking about and costs about 2-3 euro's and is very accurate. I think he wants to implement this for everybody. (cat /sys/class/power_supply/battery/capacity) there i get the % from my battery.?
KF5YFD Posted June 3, 2015 Posted June 3, 2015 This may be of use to you http://en.wikipedia.org/wiki/Peukert%27s_law
KF5YFD Posted June 3, 2015 Posted June 3, 2015 This script was originaly for using acpi to get the values but should give you an idea on how to calculate what you need. Requires calc to be installed #!/bin/bash math() { calc -d "$@"|tr -d ~; } cd /proc/acpi/battery/BAT0; max=$(grep 'design capacity:' info|awk '{print $3}') current=$(grep 'remaining capacity:' state|awk '{print $3}') percent=$(math "($current / $max) * 100"); echo $(echo $percent|cut -d. -f1)%
Igor Posted June 16, 2015 Author Posted June 16, 2015 (edited) I came out with this: ###################################################################################### # # Battery info # i2cset -y -f 0 0x34 0x82 0xC3 # read power OPERATING MODE register @01h POWER_OP_MODE=$(i2cget -y -f 0 0x34 0x01) BAT_EXIST=$(($(($POWER_OP_MODE&0x20))/32)) # divide by 32 is like shifting rigth 5 times CHARG_IND=$(($(($POWER_OP_MODE&0x40))/64)) # divide by 64 is like shifting rigth 6 times ######################################################################################## #read battery voltage 79h, 78h 0 mV -> 000h, 1.1 mV/bit FFFh -> 4.5045 V BAT_VOLT_LSB=$(i2cget -y -f 0 0x34 0x79) BAT_VOLT_MSB=$(i2cget -y -f 0 0x34 0x78) BAT_BIN=$(( $(($BAT_VOLT_MSB << 4)) | $(($(($BAT_VOLT_LSB & 0xF0)) >> 4)) )) BAT_VOLT=$(echo "($BAT_BIN*1.1)"|bc) # store maximum battery voltage to compare to if [ -f "/etc/default/battery" ]; then source "/etc/default/battery" else echo "MAX=$BAT_VOLT" > /etc/default/battery echo "MIN=3484" >> /etc/default/battery fi # integer is enough, cut down the decimals MAX=${MAX%.*} BAT_VOLT=${BAT_VOLT%.*} # mainline kernel shows battery existence even if not exists. this is walkaround if [ "$BAT_VOLT" -ge "3200" ]; then # if we have new max value, alter defaults if [ "$BAT_VOLT" -gt "$MAX" ]; then MAX=$BAT_VOLT sed -e 's/MAX=.*/MAX='$BAT_VOLT'/g' -i /etc/default/battery fi # if we have new min value, alter defaults if [ "$BAT_VOLT" -lt "$MIN" ]; then MIN=$BAT_VOLT #sed -e 's/MIN=.*/MIN='$BAT_VOLT'/g' -i /etc/default/battery fi # calculate percentage percent=$(echo "($BAT_VOLT-$MIN)*100/($MAX-$MIN)"|bc) # colorize output under certain percentage if [ $percent -le 15 ] then color="31" fi if [ "$BAT_EXIST" == "1" ]; then BATT=" - Batt: " # dispay charging / percentage if [ "$CHARG_IND" == "1" ]; then BATT=$BATT"charging $percent%" else BATT=$BATT"\e["$color"m$percent%\x1B[0m" fi fi fi OUT="${OUT}${BATT}" echo "" echo -e ${OUT} echo "" Load: 1.64, 1.14, 1.00 - Board: 36.2°C - Ambient: 27.0°C - Drive: 43°C / 2.5Tb - Memory: 934Mb - Batt: 7% Working on both kernels. Edited June 16, 2015 by Igor update 1
micropad Posted July 13, 2015 Posted July 13, 2015 Hi, how i can use that script to monitoring battery ? is it a shell script?
Igor Posted July 13, 2015 Author Posted July 13, 2015 Yes, it's a bash shell script. It needs some extra adjustments to gain more accuracy but generally it's usable.
Igor Posted July 13, 2015 Author Posted July 13, 2015 You need to install one extra package which is by default in my install. apt-get install bc
AurelianRQ Posted December 20, 2015 Posted December 20, 2015 Any chance to have the sys/class part for the battery info ? Before i used to have all the details about the battery here when running lubuntu but now no more details about the controller. Thanks
shea Posted January 2, 2016 Posted January 2, 2016 I think that @Patcher has the right idea in that the only way to get an accurate measure of the battery charge is to integrate current in/out (+/-) of the battery over time (as confirmed by @KF5YFD's wikipedia link). Fortunately the AXP209 includes a coulomb counter which should do the trick. I'm just getting started with Armbian on an Olimex Lime A20 myself, but Igor's script is a great starting point and example of communicating with the AXP209 via I2C. At some point when I have some time I might try to sort out a technique that uses the coulomb counter to track battery charge. If I do I'll be sure to post here. In any case I think the coulomb counter is the way to go. 2
Recommended Posts