make PPK2 power supply monitor work in supply-mode

This commit is contained in:
Kevin Hester
2024-07-06 16:41:33 -07:00
parent fb191092fb
commit ecbda74bd6
3 changed files with 19 additions and 7 deletions

2
.vscode/launch.json vendored
View File

@@ -204,7 +204,7 @@
"request": "launch", "request": "launch",
"module": "meshtastic", "module": "meshtastic",
"justMyCode": false, "justMyCode": false,
"args": ["--slog", "--power-ppk2-meter", "--power-stress", "--power-voltage", "3.3", "--seriallog", "--ble"] "args": ["--slog", "--power-ppk2-supply", "--power-stress", "--power-voltage", "3.3", "--seriallog", "--ble"]
}, },
{ {
"name": "meshtastic test", "name": "meshtastic test",

View File

@@ -1009,24 +1009,34 @@ def create_power_meter():
global meter # pylint: disable=global-statement global meter # pylint: disable=global-statement
args = mt_config.args args = mt_config.args
# If the user specified a voltage, make sure it is valid
v = 0.0
if args.power_voltage:
v = float(args.power_voltage)
if v < 0.8 or v > 5.0:
meshtastic.util.our_exit("Voltage must be between 0.8 and 5.0")
if args.power_riden: if args.power_riden:
meter = RidenPowerSupply(args.power_riden) meter = RidenPowerSupply(args.power_riden)
elif args.power_ppk2_supply or args.power_ppk2_meter: elif args.power_ppk2_supply or args.power_ppk2_meter:
meter = PPK2PowerSupply() meter = PPK2PowerSupply()
assert v > 0, "Voltage must be specified for PPK2"
meter.v = v # PPK2 requires setting voltage before selecting supply mode
meter.setIsSupply(args.power_ppk2_supply) meter.setIsSupply(args.power_ppk2_supply)
elif args.power_sim: elif args.power_sim:
meter = SimPowerSupply() meter = SimPowerSupply()
if meter and args.power_voltage: if meter and v:
v = float(args.power_voltage)
if v < 0.5 or v >5.0:
meshtastic.util.our_exit("Voltage must be between 1.0 and 5.0")
logging.info(f"Setting power supply to {v} volts") logging.info(f"Setting power supply to {v} volts")
meter.v = v meter.v = v
meter.powerOn() meter.powerOn()
if args.power_wait: if args.power_wait:
input("Powered on, press enter to continue...") input("Powered on, press enter to continue...")
else:
logging.info("Powered-on, waiting for device to boot")
time.sleep(5)
def common(): def common():
"""Shared code for all of our command line wrappers.""" """Shared code for all of our command line wrappers."""

View File

@@ -118,9 +118,11 @@ class PPK2PowerSupply(PowerSupply):
self.measurement_thread.join() # wait for our thread to finish self.measurement_thread.join() # wait for our thread to finish
super().close() super().close()
def setIsSupply(self, s: bool): def setIsSupply(self, is_supply: bool):
"""If in supply mode we will provide power ourself, otherwise we are just an amp meter.""" """If in supply mode we will provide power ourself, otherwise we are just an amp meter."""
assert self.v > 0.8 # We must set a valid voltage before calling this method
self.r.set_source_voltage( self.r.set_source_voltage(
int(self.v * 1000) int(self.v * 1000)
) # set source voltage in mV BEFORE setting source mode ) # set source voltage in mV BEFORE setting source mode
@@ -130,7 +132,7 @@ class PPK2PowerSupply(PowerSupply):
self.r.start_measuring() # send command to ppk2 self.r.start_measuring() # send command to ppk2
if ( if (
not s not is_supply
): # min power outpuf of PPK2. If less than this assume we want just meter mode. ): # min power outpuf of PPK2. If less than this assume we want just meter mode.
self.r.use_ampere_meter() self.r.use_ampere_meter()
else: else: