forked from ArduPilot/ardupilot
-
Notifications
You must be signed in to change notification settings - Fork 25
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
AP_Scripting: added get_cell_voltage() API and arming check example
this allows for cell imbalance to be checked as an arming check using a lua script
- Loading branch information
Showing
3 changed files
with
55 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
--[[ | ||
script implementing pre-arm check that batteries are well balanced | ||
--]] | ||
|
||
local MAX_CELL_DEVIATION = 0.2 | ||
|
||
local auth_id = arming:get_aux_auth_id() | ||
|
||
local NCELLS_MAX = 16 | ||
|
||
function check_cell_balance(bnum) | ||
local min_volt = -1 | ||
local max_volt = -1 | ||
for c=0,NCELLS_MAX do | ||
local voltage = battery:get_cell_voltage(bnum, c) | ||
if not voltage then | ||
break | ||
end | ||
if min_volt == -1 or min_volt > voltage then | ||
min_volt = voltage | ||
end | ||
if max_volt == -1 or max_volt < voltage then | ||
max_volt = voltage | ||
end | ||
end | ||
local vdiff = max_volt - min_volt | ||
if vdiff > MAX_CELL_DEVIATION then | ||
arming:set_aux_auth_failed(auth_id, string.format("Batt[%u] imbalance %.1fV", bnum+1, vdiff)) | ||
return false | ||
end | ||
return true | ||
end | ||
|
||
function update() | ||
local num_batts = battery:num_instances() | ||
local ok = true | ||
for i=0,num_batts do | ||
if not check_cell_balance(i) then | ||
ok = false | ||
end | ||
end | ||
if ok then | ||
arming:set_aux_auth_passed(auth_id) | ||
end | ||
return update, 500 | ||
end | ||
|
||
return update() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters