kirdy/pykirdy/asyncio_exmaple.py

149 lines
5.1 KiB
Python

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