Update Example Code for Driver Code

This commit is contained in:
linuswck 2024-08-02 17:46:25 +08:00
parent 47bf166ecb
commit 28f8c3c497
1 changed files with 59 additions and 59 deletions

View File

@ -1,22 +1,21 @@
from pprint import pp from pprint import pp
from driver.kirdy_async import Kirdy, FilterConfig from driver.kirdy import Kirdy, FilterConfig
import asyncio
import signal import signal
import time
""" """
Enter Device Firmware Upgrade(Dfu) mode Enter Device Firmware Upgrade(Dfu) mode
Please see README.md for flash instructions. Please see README.md for flash instructions.
""" """
async def enter_dfu_mode(kirdy: Kirdy): def enter_dfu_mode(kirdy: Kirdy):
print(await kirdy.device.dfu()) kirdy.device.dfu()
await kirdy.end_session() kirdy.end_session()
exit()
""" """
Configure Kirdy to actively report status Configure Kirdy to actively report status
Press Ctrl + C to exit active report mode Press Ctrl + C to exit active report mode
""" """
async def active_report(kirdy: Kirdy): def active_report(kirdy: Kirdy):
class SignalHandler: class SignalHandler:
def __init__(self): def __init__(self):
signal.signal(signal.SIGINT, self.exit_gracefully) signal.signal(signal.SIGINT, self.exit_gracefully)
@ -26,123 +25,124 @@ async def active_report(kirdy: Kirdy):
signal_handler = SignalHandler() signal_handler = SignalHandler()
async for data in kirdy.report_mode(): for data in kirdy.get_report_stream():
pp(data) pp(data)
""" """
Configure Kirdy network and board specific transconductance settings. Configure Kirdy network and board specific transconductance settings.
These configs are saved to flash immediately after command is processed. These configs are saved to flash immediately after command is processed.
""" """
async def device_cfg(kirdy: Kirdy): def device_cfg(kirdy: Kirdy):
# Kirdy rev0_3's gain and transconductance varies between boards to maximize the # Kirdy rev0_3's gain and transconductance varies between boards to maximize the
# PD current range resolution. # PD current range resolution.
await kirdy.device.set_pd_mon_fin_gain(1.0) kirdy.device.set_pd_mon_fin_gain(1.0)
await kirdy.device.set_pd_mon_transconductance(1/1000.0) kirdy.device.set_pd_mon_transconductance(1/1000.0)
# Network Settings will be updated on next reboot. # Network Settings will be updated on next reboot.
await kirdy.device.set_ip_settings( kirdy.device.set_ip_settings(
addr="192.168.1.128", addr="192.168.1.128",
port=1337, port=1337,
prefix_len=24, prefix_len=24,
gateway="192.168.1.1" gateway="192.168.1.1"
) )
# Hard reset Kirdy. # Hard reset Kirdy.
await kirdy.device.hard_reset() kirdy.device.hard_reset()
await kirdy.end_session()
exit()
""" """
Control and config laser diode and thermostat parameters. Control and config laser diode and thermostat parameters.
""" """
async def ld_thermostat_cfg(kirdy: Kirdy): def ld_thermostat_cfg(kirdy: Kirdy):
# Load the laser diode and thermostat settings from flash # Load the laser diode and thermostat settings from flash
await kirdy.device.restore_settings_from_flash() kirdy.device.restore_settings_from_flash()
# Power off the laser diode and thermostat and clear alarm (if any) # Power off the laser diode and thermostat and clear alarm (if any)
await kirdy.laser.set_power_on(False) kirdy.laser.set_power_on(False)
await kirdy.laser.clear_alarm() kirdy.laser.clear_alarm()
await kirdy.thermostat.set_power_on(False) kirdy.thermostat.set_power_on(False)
await kirdy.thermostat.clear_alarm() kirdy.thermostat.clear_alarm()
# Set the laser diode terminals not to be shorted # Set the laser diode terminals not to be shorted
await kirdy.laser.set_ld_terms_short(False) kirdy.laser.set_ld_terms_short(False)
# Do not power up the laser & thermostat during initial startup # Do not power up the laser & thermostat during initial startup
await kirdy.laser.set_default_pwr_on(False) kirdy.laser.set_default_pwr_on(False)
await kirdy.thermostat.set_default_pwr_on(False) kirdy.thermostat.set_default_pwr_on(False)
await kirdy.laser.set_i(0) kirdy.laser.set_i(0)
# Configure the laser diode output power limit and photodiode parameters # Configure the laser diode output power limit and photodiode parameters
# Exceeding the measured power limit triggers overpower protection alarm. # Exceeding the measured power limit triggers overpower protection alarm.
# The laser diode power will be turned off while the thermostat power remains unchanged. # The laser diode power will be turned off while the thermostat power remains unchanged.
await kirdy.laser.set_ld_pwr_limit(0.0) kirdy.laser.set_ld_pwr_limit(0.0)
await kirdy.laser.set_pd_mon_dark_current(0.0) kirdy.laser.set_pd_mon_dark_current(0.0)
await kirdy.laser.set_pd_mon_responsitivity(0.0) kirdy.laser.set_pd_mon_responsitivity(0.0)
# Configure the thermostat NTC thermistor parameters. # Configure the thermostat NTC thermistor parameters.
await kirdy.thermostat.set_sh_r0(10.0 * 1000) kirdy.thermostat.set_sh_r0(10.0 * 1000)
await kirdy.thermostat.set_sh_t0(25) kirdy.thermostat.set_sh_t0(25)
await kirdy.thermostat.set_sh_beta(3900) kirdy.thermostat.set_sh_beta(3900)
# Configure the thermostat output limits. # Configure the thermostat output limits.
# The actual output current is limited by the hardware limit set below. # The actual output current is limited by the hardware limit set below.
await kirdy.thermostat.set_tec_max_cooling_i(1.0) kirdy.thermostat.set_tec_max_cooling_i(1.0)
await kirdy.thermostat.set_tec_max_heating_i(1.0) kirdy.thermostat.set_tec_max_heating_i(1.0)
await kirdy.thermostat.set_tec_max_v(4.0) kirdy.thermostat.set_tec_max_v(4.0)
# Configure the thermostat temperature monitor limit. # Configure the thermostat temperature monitor limit.
# Exceeding the limit will trigger over temperature protection alarm. # Exceeding the limit will trigger over temperature protection alarm.
# The laser diode and thermostat power will be turned off. # The laser diode and thermostat power will be turned off.
await kirdy.thermostat.set_temp_mon_upper_limit(70) kirdy.thermostat.set_temp_mon_upper_limit(70)
await kirdy.thermostat.set_temp_mon_lower_limit(0) kirdy.thermostat.set_temp_mon_lower_limit(0)
# Configure the thermostat PID related parameter. # Configure the thermostat PID related parameter.
# You can configure the PID parameter with the autotune tool. # You can configure the PID parameter with the autotune tool.
# Here provides an example if it is configured manually. # Here provides an example if it is configured manually.
await kirdy.thermostat.set_temperature_setpoint(25) kirdy.thermostat.set_temperature_setpoint(25)
await kirdy.thermostat.set_pid_kp(0.15668282198105507) kirdy.thermostat.set_pid_kp(0.15668282198105507)
await kirdy.thermostat.set_pid_ki(0.002135962407793784) kirdy.thermostat.set_pid_ki(0.002135962407793784)
await kirdy.thermostat.set_pid_kd(0.829254515277143) kirdy.thermostat.set_pid_kd(0.829254515277143)
await kirdy.thermostat.set_pid_output_max(1.0) kirdy.thermostat.set_pid_output_max(1.0)
await kirdy.thermostat.set_pid_output_min(-1.0) kirdy.thermostat.set_pid_output_min(-1.0)
# Configure the thermostat ADC Filter Setting / PID Update Rate / Report Rate. # Configure the thermostat ADC Filter Setting / PID Update Rate / Report Rate.
# The ADC sampling rate determines the report and pid update rate. # The ADC sampling rate determines the report and pid update rate.
# The chosen filter and sampling rate affects the noise of the readings. # The chosen filter and sampling rate affects the noise of the readings.
# For details, please refer to the AD7172 datasheet. # For details, please refer to the AD7172 da`tas`heet.
await kirdy.thermostat.config_temp_adc_filter(FilterConfig.Sinc5Sinc1With50hz60HzRejection.f16sps) kirdy.thermostat.config_temp_adc_filter(FilterConfig.Sinc5Sinc1With50hz60HzRejection.f16sps)
# Configure thermostat to run in PID control mode # Configure thermostat to run in PID control mode
await kirdy.thermostat.set_pid_control_mode() kirdy.thermostat.set_pid_control_mode()
# When control mode is switched from PID to constant current(CC) control mode, # When control mode is switched from PID to constant current(CC) control mode,
# the thermostat keeps its instantaneous output current unchanged. # the thermostat keeps its instantaneous output current unchanged.
# Thermostat output current should only be set if it is in CC control mode # Thermostat output current should only be set if it is in CC control mode
# or the value set will not be overwritten by PID output. # or the value set will not be overwritten by PID output.
await kirdy.thermostat.set_constant_current_control_mode() kirdy.thermostat.set_constant_current_control_mode()
await kirdy.thermostat.set_tec_i_out(0.0) kirdy.thermostat.set_tec_i_out(0.0)
# Save the above settings configured into the flash # Save the above settings configured into the flash
await kirdy.device.save_current_settings_to_flash() kirdy.device.save_current_settings_to_flash()
# Power on the laser diode and thermostat # Power on the laser diode and thermostat
await kirdy.laser.set_power_on(True) kirdy.laser.set_power_on(True)
await kirdy.thermostat.set_power_on(True) kirdy.thermostat.set_power_on(True)
pp(await kirdy.device.get_settings_summary()) pp(kirdy.device.get_settings_summary())
pp(await kirdy.device.get_status_report()) pp(kirdy.device.get_status_report())
async def main(): def main():
kirdy = Kirdy() kirdy = Kirdy()
await kirdy.start_session(host='192.168.1.128', port=1337, timeout=0.25) kirdy.start_session(host='192.168.1.128', port=1337)
# await ld_thermostat_cfg(kirdy) while not(kirdy.connected()):
# await active_report(kirdy) pass
ld_thermostat_cfg(kirdy)
# active_report(kirdy)
# await device_cfg(kirdy) # await device_cfg(kirdy)
await enter_dfu_mode(kirdy) # enter_dfu_mode(kirdy)
await kirdy.end_session() kirdy.end_session(block=True)
if __name__ == "__main__": if __name__ == "__main__":
asyncio.run(main()) main()