forked from M-Labs/kirdy
Update Kirdy Driver Example Code
This commit is contained in:
parent
6f87cba9a6
commit
db2f76771a
@ -1,45 +1,148 @@
|
|||||||
from driver.kirdy_async import Kirdy
|
from pprint import pp
|
||||||
|
from driver.kirdy_async import Kirdy, FilterConfig
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import signal
|
||||||
|
|
||||||
async def main():
|
"""
|
||||||
kirdy = Kirdy()
|
Enter Device Firmware Upgrade(Dfu) mode
|
||||||
await kirdy.start_session(host='192.168.1.128', port=1337, timeout=0.25)
|
Please see README.md for flash instructions.
|
||||||
await kirdy.device.set_active_report_mode(False)
|
"""
|
||||||
|
async def enter_dfu_mode(kirdy: Kirdy):
|
||||||
|
print(await kirdy.device.dfu())
|
||||||
|
await kirdy.end_session()
|
||||||
|
exit()
|
||||||
|
|
||||||
|
"""
|
||||||
|
Configure Kirdy to actively report status
|
||||||
|
Press Ctrl + C to exit active report mode
|
||||||
|
"""
|
||||||
|
async 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()
|
||||||
|
|
||||||
|
async for data in kirdy.report_mode():
|
||||||
|
pp(data)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Configure Kirdy network and board specific transconductance settings.
|
||||||
|
These configs are saved to flash immediately after command is processed.
|
||||||
|
"""
|
||||||
|
async def device_cfg(kirdy: Kirdy):
|
||||||
|
# Kirdy rev0_3's gain and transconductance varies between boards to maximize the
|
||||||
|
# PD current range resolution.
|
||||||
|
await kirdy.device.set_pd_mon_fin_gain(1.0)
|
||||||
|
await kirdy.device.set_pd_mon_transconductance(1/1000.0)
|
||||||
|
|
||||||
|
# Network Settings will be updated on next reboot.
|
||||||
|
await kirdy.device.set_ip_settings(
|
||||||
|
addr="192.168.1.128",
|
||||||
|
port=1337,
|
||||||
|
prefix_len=24,
|
||||||
|
gateway="192.168.1.1"
|
||||||
|
)
|
||||||
|
# Hard reset Kirdy.
|
||||||
|
await kirdy.device.hard_reset()
|
||||||
|
await kirdy.end_session()
|
||||||
|
exit()
|
||||||
|
|
||||||
|
"""
|
||||||
|
Control and config laser diode and thermostat parameters.
|
||||||
|
"""
|
||||||
|
async def ld_thermostat_cfg(kirdy: Kirdy):
|
||||||
|
# Load the laser diode and thermostat settings from flash
|
||||||
|
await kirdy.device.restore_settings_from_flash()
|
||||||
|
|
||||||
|
# Power off the laser diode and thermostat and clear alarm (if any)
|
||||||
await kirdy.laser.set_power_on(False)
|
await kirdy.laser.set_power_on(False)
|
||||||
await kirdy.laser.clear_alarm()
|
await kirdy.laser.clear_alarm()
|
||||||
await kirdy.laser.set_i(0)
|
|
||||||
await kirdy.laser.set_i_soft_limit(0.25)
|
|
||||||
await kirdy.laser.set_power_on(True)
|
|
||||||
|
|
||||||
await kirdy.thermostat.set_power_on(False)
|
await kirdy.thermostat.set_power_on(False)
|
||||||
await kirdy.thermostat.clear_alarm()
|
await kirdy.thermostat.clear_alarm()
|
||||||
|
|
||||||
|
# Set the laser diode terminals not to be shorted
|
||||||
|
await kirdy.laser.set_ld_terms_short(False)
|
||||||
|
|
||||||
|
# Do not power up the laser & thermostat during initial startup
|
||||||
|
await kirdy.laser.set_default_pwr_on(False)
|
||||||
|
await kirdy.thermostat.set_default_pwr_on(False)
|
||||||
|
|
||||||
|
# The laser diode output current range is bounded by this software limit setting
|
||||||
|
await kirdy.laser.set_i(0)
|
||||||
|
await kirdy.laser.set_i_soft_limit(30.0 / 1000)
|
||||||
|
|
||||||
|
# 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.
|
||||||
|
await kirdy.laser.set_ld_pwr_limit(0.0)
|
||||||
|
await kirdy.laser.set_pd_mon_dark_current(0.0)
|
||||||
|
await kirdy.laser.set_pd_mon_responsitivity(0.0)
|
||||||
|
|
||||||
|
# Configure the thermostat NTC thermistor parameters.
|
||||||
await kirdy.thermostat.set_sh_r0(10.0 * 1000)
|
await kirdy.thermostat.set_sh_r0(10.0 * 1000)
|
||||||
await kirdy.thermostat.set_sh_t0(25)
|
await kirdy.thermostat.set_sh_t0(25)
|
||||||
await kirdy.thermostat.set_sh_beta(3900)
|
await kirdy.thermostat.set_sh_beta(3900)
|
||||||
|
|
||||||
await kirdy.thermostat.set_temperature_setpoint(25)
|
# Configure the thermostat output limits.
|
||||||
await kirdy.thermostat.set_temp_mon_upper_limit(40)
|
# The actual output current is limited by the hardware limit set below.
|
||||||
await kirdy.thermostat.set_temp_mon_lower_limit(10)
|
await kirdy.thermostat.set_tec_max_cooling_i(1.0)
|
||||||
|
await kirdy.thermostat.set_tec_max_heating_i(1.0)
|
||||||
|
await 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.
|
||||||
|
await kirdy.thermostat.set_temp_mon_upper_limit(70)
|
||||||
|
await 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.
|
||||||
|
await kirdy.thermostat.set_temperature_setpoint(25)
|
||||||
await kirdy.thermostat.set_pid_kp(0.15668282198105507)
|
await kirdy.thermostat.set_pid_kp(0.15668282198105507)
|
||||||
await kirdy.thermostat.set_pid_ki(0.002135962407793784)
|
await kirdy.thermostat.set_pid_ki(0.002135962407793784)
|
||||||
await kirdy.thermostat.set_pid_kd(0.829254515277143)
|
await kirdy.thermostat.set_pid_kd(0.829254515277143)
|
||||||
|
|
||||||
await kirdy.thermostat.set_pid_output_max(1.0)
|
await kirdy.thermostat.set_pid_output_max(1.0)
|
||||||
await kirdy.thermostat.set_pid_output_min(-1.0)
|
await kirdy.thermostat.set_pid_output_min(-1.0)
|
||||||
|
|
||||||
await kirdy.thermostat.config_temp_adc_filter("Sinc5Sinc1With50hz60HzRejection", "F16SPS")
|
# Configure the thermostat ADC Filter Setting / PID Update Rate / Report Rate.
|
||||||
await kirdy.thermostat.set_power_on(True)
|
# 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 datasheet.
|
||||||
|
await kirdy.thermostat.config_temp_adc_filter(FilterConfig.Sinc5Sinc1With50hz60HzRejection.f16sps)
|
||||||
|
|
||||||
|
# Configure thermostat to run in PID control mode
|
||||||
await kirdy.thermostat.set_pid_control_mode()
|
await kirdy.thermostat.set_pid_control_mode()
|
||||||
|
|
||||||
await kirdy.laser.set_default_pwr_on(False)
|
# When control mode is switched from PID to constant current(CC) control mode,
|
||||||
await kirdy.thermostat.set_default_pwr_on(True)
|
# 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.
|
||||||
|
await kirdy.thermostat.set_constant_current_control_mode()
|
||||||
|
await kirdy.thermostat.set_tec_i_out(0.0)
|
||||||
|
|
||||||
|
# Save the above settings configured into the flash
|
||||||
await kirdy.device.save_current_settings_to_flash()
|
await kirdy.device.save_current_settings_to_flash()
|
||||||
|
|
||||||
async for data in kirdy.report_mode():
|
# Power on the laser diode and thermostat
|
||||||
print(data)
|
await kirdy.laser.set_power_on(True)
|
||||||
|
await kirdy.thermostat.set_power_on(True)
|
||||||
|
|
||||||
|
pp(await kirdy.device.get_settings_summary())
|
||||||
|
pp(await kirdy.device.get_status_report())
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
kirdy = Kirdy()
|
||||||
|
await kirdy.start_session(host='192.168.1.128', port=1337, timeout=0.25)
|
||||||
|
|
||||||
|
# await ld_thermostat_cfg(kirdy)
|
||||||
|
# await active_report(kirdy)
|
||||||
|
# await device_cfg(kirdy)
|
||||||
|
await enter_dfu_mode(kirdy)
|
||||||
|
|
||||||
await kirdy.end_session()
|
await kirdy.end_session()
|
||||||
|
|
||||||
|
@ -129,16 +129,11 @@ class FilterConfig:
|
|||||||
def _filter_type(self):
|
def _filter_type(self):
|
||||||
return "Sinc3"
|
return "Sinc3"
|
||||||
|
|
||||||
############## Rewrite
|
|
||||||
class Sinc3WithFineODR():
|
class Sinc3WithFineODR():
|
||||||
def __init__(self, rate):
|
def __init__(self, rate):
|
||||||
assert rate >= 1.907465 and rate <= 31250
|
assert rate >= 1.907465 and rate <= 31250
|
||||||
self.rate = float(rate)
|
self.rate = float(rate)
|
||||||
|
|
||||||
# def rate(self, rate):
|
|
||||||
# assert rate >= 1.907465 and rate <= 31250
|
|
||||||
# return float(rate)
|
|
||||||
|
|
||||||
def _odr_type(self):
|
def _odr_type(self):
|
||||||
return "sinc3fineodr"
|
return "sinc3fineodr"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user