From 41ac8289dfe07446107fd4f2aeb4f84ba86e7680 Mon Sep 17 00:00:00 2001 From: Nathan Petersen Date: Mon, 5 Jun 2023 17:00:00 -0500 Subject: [PATCH 1/7] Add initial template of new docs control content per #77 --- .../current-control/continuous-time/cvcr/index.md | 1 + .../current-control/continuous-time/index.md | 12 ++++++++++++ .../current-control/continuous-time/sfpi/index.md | 3 +++ .../continuous-time/single-phase/index.md | 3 +++ .../continuous-time/three-phase/index.md | 3 +++ .../current-control/discrete-time/c2d/index.md | 3 +++ .../discrete-time/direct-digital-cvcr/index.md | 3 +++ .../current-control/discrete-time/index.md | 8 ++++++++ source/applications/current-control/index.md | 11 +++++++++++ .../load-modeling/dq-machine/index.md | 3 +++ .../current-control/load-modeling/index.md | 9 +++++++++ .../load-modeling/mp-winding/index.md | 3 +++ .../current-control/load-modeling/rl-load/index.md | 1 + source/applications/maglev-control/index.md | 3 +++ source/applications/speed-control/index.md | 3 +++ .../control-with-amdc/current-sensor-cal/index.md | 4 ++++ .../control-with-amdc/encoder-fb/index.md | 13 +++++++++++++ source/getting-started/control-with-amdc/index.md | 14 ++++++++++++++ .../integrator-anti-windup/index.md | 9 +++++++++ .../control-with-amdc/inv-pwm-dt-comp/index.md | 6 ++++++ .../control-with-amdc/simulink-code-gen/index.md | 3 +++ source/index.rst | 9 +++++++++ 22 files changed, 127 insertions(+) create mode 100644 source/applications/current-control/continuous-time/cvcr/index.md create mode 100644 source/applications/current-control/continuous-time/index.md create mode 100644 source/applications/current-control/continuous-time/sfpi/index.md create mode 100644 source/applications/current-control/continuous-time/single-phase/index.md create mode 100644 source/applications/current-control/continuous-time/three-phase/index.md create mode 100644 source/applications/current-control/discrete-time/c2d/index.md create mode 100644 source/applications/current-control/discrete-time/direct-digital-cvcr/index.md create mode 100644 source/applications/current-control/discrete-time/index.md create mode 100644 source/applications/current-control/index.md create mode 100644 source/applications/current-control/load-modeling/dq-machine/index.md create mode 100644 source/applications/current-control/load-modeling/index.md create mode 100644 source/applications/current-control/load-modeling/mp-winding/index.md create mode 100644 source/applications/current-control/load-modeling/rl-load/index.md create mode 100644 source/applications/maglev-control/index.md create mode 100644 source/applications/speed-control/index.md create mode 100644 source/getting-started/control-with-amdc/current-sensor-cal/index.md create mode 100644 source/getting-started/control-with-amdc/encoder-fb/index.md create mode 100644 source/getting-started/control-with-amdc/index.md create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/index.md create mode 100644 source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md create mode 100644 source/getting-started/control-with-amdc/simulink-code-gen/index.md diff --git a/source/applications/current-control/continuous-time/cvcr/index.md b/source/applications/current-control/continuous-time/cvcr/index.md new file mode 100644 index 00000000..86a85b8d --- /dev/null +++ b/source/applications/current-control/continuous-time/cvcr/index.md @@ -0,0 +1 @@ +# Complex Vector Current Regulator (CVCR) \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/index.md b/source/applications/current-control/continuous-time/index.md new file mode 100644 index 00000000..e8e3cc94 --- /dev/null +++ b/source/applications/current-control/continuous-time/index.md @@ -0,0 +1,12 @@ +# Continuous-Time Control + +Foo bar + +```{toctree} +:hidden: + +Single-Phase +Three-Phase +sfpi/index +cvcr/index +``` \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/sfpi/index.md b/source/applications/current-control/continuous-time/sfpi/index.md new file mode 100644 index 00000000..819571e8 --- /dev/null +++ b/source/applications/current-control/continuous-time/sfpi/index.md @@ -0,0 +1,3 @@ +# Synchronous Frame PI (SFPI) Current Regulation + +Foo bar \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/single-phase/index.md b/source/applications/current-control/continuous-time/single-phase/index.md new file mode 100644 index 00000000..0e095f17 --- /dev/null +++ b/source/applications/current-control/continuous-time/single-phase/index.md @@ -0,0 +1,3 @@ +# Single-Phase Current Regulation + +Foo bar \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/three-phase/index.md b/source/applications/current-control/continuous-time/three-phase/index.md new file mode 100644 index 00000000..c4447fac --- /dev/null +++ b/source/applications/current-control/continuous-time/three-phase/index.md @@ -0,0 +1,3 @@ +# Three-Phase Current Regulation + +Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/c2d/index.md b/source/applications/current-control/discrete-time/c2d/index.md new file mode 100644 index 00000000..be440135 --- /dev/null +++ b/source/applications/current-control/discrete-time/c2d/index.md @@ -0,0 +1,3 @@ +# Continuous-to-Discrete Approximations + +Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md b/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md new file mode 100644 index 00000000..b934e87e --- /dev/null +++ b/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md @@ -0,0 +1,3 @@ +# Direct Digital CVCR + +Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/index.md b/source/applications/current-control/discrete-time/index.md new file mode 100644 index 00000000..111d7f0c --- /dev/null +++ b/source/applications/current-control/discrete-time/index.md @@ -0,0 +1,8 @@ +# Discrete-Time Control + +```{toctree} +:hidden: + +c2d/index +direct-digital-cvcr/index +``` \ No newline at end of file diff --git a/source/applications/current-control/index.md b/source/applications/current-control/index.md new file mode 100644 index 00000000..23251a1c --- /dev/null +++ b/source/applications/current-control/index.md @@ -0,0 +1,11 @@ +# Current Control + +Foo bar + +```{toctree} +:hidden: + +load-modeling/index +continuous-time/index +discrete-time/index +``` \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/dq-machine/index.md b/source/applications/current-control/load-modeling/dq-machine/index.md new file mode 100644 index 00000000..8c7c14a9 --- /dev/null +++ b/source/applications/current-control/load-modeling/dq-machine/index.md @@ -0,0 +1,3 @@ +# DQ Machine Model + +Foo bar diff --git a/source/applications/current-control/load-modeling/index.md b/source/applications/current-control/load-modeling/index.md new file mode 100644 index 00000000..441b005b --- /dev/null +++ b/source/applications/current-control/load-modeling/index.md @@ -0,0 +1,9 @@ +# Load Modeling + +```{toctree} +:hidden: + +rl-load/index +dq-machine/index +mp-winding/index +``` \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/mp-winding/index.md b/source/applications/current-control/load-modeling/mp-winding/index.md new file mode 100644 index 00000000..8e31b609 --- /dev/null +++ b/source/applications/current-control/load-modeling/mp-winding/index.md @@ -0,0 +1,3 @@ +# Multi-Phase Winding + +Introduce generalized Clarke transform and how to apply it to $m$ phase windings, decoupled subspaces, etc. \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/rl-load/index.md b/source/applications/current-control/load-modeling/rl-load/index.md new file mode 100644 index 00000000..4ec7bcbd --- /dev/null +++ b/source/applications/current-control/load-modeling/rl-load/index.md @@ -0,0 +1 @@ +# RL Load Model \ No newline at end of file diff --git a/source/applications/maglev-control/index.md b/source/applications/maglev-control/index.md new file mode 100644 index 00000000..f4adc1b0 --- /dev/null +++ b/source/applications/maglev-control/index.md @@ -0,0 +1,3 @@ +# Maglev Displacement Control + +Basics of levitation systems, mechanical system stability via PID control. \ No newline at end of file diff --git a/source/applications/speed-control/index.md b/source/applications/speed-control/index.md new file mode 100644 index 00000000..7f684070 --- /dev/null +++ b/source/applications/speed-control/index.md @@ -0,0 +1,3 @@ +# Speed Control + +How to get a motor to spin at a desired speed using FOC? \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/current-sensor-cal/index.md b/source/getting-started/control-with-amdc/current-sensor-cal/index.md new file mode 100644 index 00000000..2bfe373d --- /dev/null +++ b/source/getting-started/control-with-amdc/current-sensor-cal/index.md @@ -0,0 +1,4 @@ +# Current Sensor Calibration + +How to calibrate current sensor feedback + diff --git a/source/getting-started/control-with-amdc/encoder-fb/index.md b/source/getting-started/control-with-amdc/encoder-fb/index.md new file mode 100644 index 00000000..842e3c27 --- /dev/null +++ b/source/getting-started/control-with-amdc/encoder-fb/index.md @@ -0,0 +1,13 @@ +# Encoder Feedback + +## Calibration + +- Converting from raw counts to "theta" +- Direction: +/- depending on phase connections +- Sync machines: dq offset + +## Computing Speed from Position + +- LPF +- State Filter +- Observer \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/index.md b/source/getting-started/control-with-amdc/index.md new file mode 100644 index 00000000..284fb6d8 --- /dev/null +++ b/source/getting-started/control-with-amdc/index.md @@ -0,0 +1,14 @@ +# Control with AMDC + +Foo bar + + +```{toctree} +:hidden: + +current-sensor-cal/index +inv-pwm-dt-comp/index +encoder-fb/index +integrator-anti-windup/index +simulink-code-gen/index +``` \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md new file mode 100644 index 00000000..f35afa77 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -0,0 +1,9 @@ +# Integrator Anti-Windup + +- How to think about performance of anti-windup +- Different methods + - clamping + - back tracking +- Implementation (continuous/discrete-time) + - Simulink + - Handwritten C code \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md b/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md new file mode 100644 index 00000000..32787da4 --- /dev/null +++ b/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md @@ -0,0 +1,6 @@ +# Inverter PWM Dead-Time Compensation + +- Sources of non-linearity + - Dead-time +- How to do +- Example results \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/simulink-code-gen/index.md b/source/getting-started/control-with-amdc/simulink-code-gen/index.md new file mode 100644 index 00000000..5500ece9 --- /dev/null +++ b/source/getting-started/control-with-amdc/simulink-code-gen/index.md @@ -0,0 +1,3 @@ +# Simulink Control Code Generation + +This should basically be a port of the AMDC-Examples autogen docs, examples, etc \ No newline at end of file diff --git a/source/index.rst b/source/index.rst index d203ae6c..f16c1a45 100644 --- a/source/index.rst +++ b/source/index.rst @@ -21,6 +21,15 @@ AMDC Platform Documentation getting-started/onboarding getting-started/tutorials/index getting-started/user-guide/index + getting-started/control-with-amdc/index + +.. toctree:: + :hidden: + :caption: Applications + + applications/current-control/index + applications/speed-control/index + applications/maglev-control/index .. toctree:: :hidden: From ddbc2b9a75cf041d97805ff5ca775bb655671e46 Mon Sep 17 00:00:00 2001 From: Eric Severson Date: Mon, 25 Mar 2024 11:30:52 -0500 Subject: [PATCH 2/7] Update index.md --- .../current-control/load-modeling/rl-load/index.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/applications/current-control/load-modeling/rl-load/index.md b/source/applications/current-control/load-modeling/rl-load/index.md index 4ec7bcbd..5881c553 100644 --- a/source/applications/current-control/load-modeling/rl-load/index.md +++ b/source/applications/current-control/load-modeling/rl-load/index.md @@ -1 +1,9 @@ -# RL Load Model \ No newline at end of file +# RL Load Model + +Single phase RL load. Content from the lecture series on RL load. This will be a short note. +- Circuit diagram +- Governing differential equation relating V and I +- Transfer function in Laplace domain relating V and I +- Summarize as plant that a controller could use. + + From 40243038701ae9a70cac7df13d31a061ceea29d3 Mon Sep 17 00:00:00 2001 From: Anirudh Upadhyaya <90214161+anirudhupadhyaya@users.noreply.github.com> Date: Mon, 1 Jul 2024 11:03:34 -0500 Subject: [PATCH 3/7] Add current sensor calibration documentation (#95) * Initial commit * Update readme * Update readme * Update readme * Add files * Update files * Changes * Changes * Update files * Get rif of scope image * Minor updates * Address review comments * Remove resources * Add back resources * Address review comments * Address review comments * Update index.md * Edit current sensor calibration method section * Edit calibration method section * Add section on Recalcilating current sensor offset * Clarify that we measure a voltage. * Edit conclusion * Update index.md * Update index.md * Address review comments * Update index.md * Update index.md * Update index.md * Apply suggestions from code review Co-authored-by: Eric Severson * Update source/getting-started/control-with-amdc/current-sensor-cal/index.md * Update source/getting-started/control-with-amdc/current-sensor-cal/index.md --------- Co-authored-by: Nathan Petersen Co-authored-by: Eric Severson --- .../current-sensor-cal/index.md | 56 +- ...urrent_sensor_calibration-checkpoint.ipynb | 243 ++++ .../current_sensor_calibration.ipynb | 243 ++++ .../resources/current_sensor_drawing.svg | 1145 +++++++++++++++++ .../current-sensor-cal/resources/exp_data.csv | 8 + .../current-sensor-cal/resources/fit.svg | 1117 ++++++++++++++++ 6 files changed, 2811 insertions(+), 1 deletion(-) create mode 100644 source/getting-started/control-with-amdc/current-sensor-cal/resources/.ipynb_checkpoints/current_sensor_calibration-checkpoint.ipynb create mode 100644 source/getting-started/control-with-amdc/current-sensor-cal/resources/current_sensor_calibration.ipynb create mode 100644 source/getting-started/control-with-amdc/current-sensor-cal/resources/current_sensor_drawing.svg create mode 100644 source/getting-started/control-with-amdc/current-sensor-cal/resources/exp_data.csv create mode 100644 source/getting-started/control-with-amdc/current-sensor-cal/resources/fit.svg diff --git a/source/getting-started/control-with-amdc/current-sensor-cal/index.md b/source/getting-started/control-with-amdc/current-sensor-cal/index.md index 2bfe373d..a835f55f 100644 --- a/source/getting-started/control-with-amdc/current-sensor-cal/index.md +++ b/source/getting-started/control-with-amdc/current-sensor-cal/index.md @@ -1,4 +1,58 @@ # Current Sensor Calibration -How to calibrate current sensor feedback +## Background +Motor drives typically require current sensors to provide feedback to the control system. This document describes a method to calibrate the current sensors to a linear model during commissioning of a motor drive. The calibration is characterized by two parameters, a gain and an offset, that describe how the sensed current appears as a voltage to the AMDC. + +Current sensors are transducers which produce an output signal (either current or voltage) proportional to the primary current flowing through the sensor. There are different types of current sensors relying on different physical phenomenons such as shunt resistors and hall-effect. For the purpose of this document, the specific type of sensor does not matter---just that the output signal is linear with the primary current, and that it is measured as a voltage by the control system. The current sensor needs to be calibrated against an appropriate reference before it can be used in the control system. This reference is a known, trusted current sensor, such as a precision digital multimeter (preferred), hall-effect current clamp, or the setpoint of a DC power supply. While the manufacturer datasheet provides nominal parameters, calibration of the current sensor is necessary to get accurate measurements to account for any deviation due to process variation. + +## Calibration Method + +A method is now provided to calibrate the current sensors in a motor drive. An example of the assumed system for a three phase motor is shown in the figure below. + + + +Typically, each phase has a current sensor associated with it that needs to be calibrated. This method assumes that the signal measured by the AMDC for each sensor is a voltage that must be converted into a current value. + +1. Connect the reference curent sensor (i.e. precision digital multimeter) to the phase U cable of the motor. +1. Set up your AMDC system to enable you to log the raw reading of the drive's current sensor attached to phase U (presumably, by sampling an ADC channel). It is recommended to use the AMDC's logging functionality so that data can be collected over a period of time (e.g. 100 ms) and post-processed to find the average value. +1. Record the drive's sensor reading when there is no current flowing through phase U. _Hint:_ remember to calculate this value as the average over a period of time. +1. Cause a "small" curent to flow through phase U (i.e., apply a voltage across phase U). The value of current is left to the discretion of the user based on the system nominal ratings. +1. Record the drive's sensor reading as well as the reference sensor's reading of the current flowing through the phase U cable. +1. Progressively increase the phase U current and record the readings. Do this over the full range of rated current, both positive and negative. +1. Tabulate the measurements as shown in this example [`exp_data.csv` file](./resources/exp_data.csv). +1. Fit a linear expression of the form $\text{Reading [V]} = \text{Gain [V/A]} \times \text{Current [A]} + \text{Offset [V]}$ to the obtained measurements. This [example Jupyter notebook](./resources/current_sensor_calibration.ipynb) is provided to illustrate the process. +1. Repeat the exercise for the remaining phases of the system. + +An example of the results are shown in the plot below. The obtained gain and offset can be used directly in the control code to convert the sensor reading into the actual current measurement. + + + + +```{tip} +Be sure to conduct the calibration process over the full range of current data (both positive and negative current) to account for any variation in the current sensor reading due to directionality of current. +``` +## Use of Calibration Data + +The below codeblock can be utilized by the user to convert between raw measurements from the sensor and the actual currents. + +```C +#define INV_GAIN (1.0/0.621) // Inverse of gain obtained from curve fit (1/0.621) +double offset = 4.739; // [V], offset from curve fit. This is a variable so that the drive can remeasure and adjust the offset at startup + +double current_measurement; // Actual current measurement, to be used in control algorithm + +current_measurement = (sensor_reading - offset)*INV_GAIN; // sensor_reading is the raw measurement and needs to be obtained by the user + +``` + +## Recalculate Offset At Startup +The offset value of the current sensors can drift over time. It is recommended that drive developers include code in their control logic to automatically re-zero the current sensor at startup, as follows: + +1. Prior to enabling the PWM, when it is known that there is no current flowing in the motor, record approximately 100 ms of sensor data on each phase. +2. For each phase, calculate the average of this data and use it as the new `offset` value in the code block above. +3. Proceed with starting-up the drive. + +## Conclusion + +The current sensor calibration method presented in this article should be viewed as a best-practice for motor drive development. Readers are welcome to directly use the provided code and Jupyter notebook in their motor drives. diff --git a/source/getting-started/control-with-amdc/current-sensor-cal/resources/.ipynb_checkpoints/current_sensor_calibration-checkpoint.ipynb b/source/getting-started/control-with-amdc/current-sensor-cal/resources/.ipynb_checkpoints/current_sensor_calibration-checkpoint.ipynb new file mode 100644 index 00000000..9fbd8ad8 --- /dev/null +++ b/source/getting-started/control-with-amdc/current-sensor-cal/resources/.ipynb_checkpoints/current_sensor_calibration-checkpoint.ipynb @@ -0,0 +1,243 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "125fae80", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "df = pd.read_csv('exp_data.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "1ba56894", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Reference Current [A]Sensor Reading [V]
0-10.11-1.55
1-6.930.44
2-2.153.42
30.004.70
42.956.60
56.068.53
69.4410.58
\n", + "
" + ], + "text/plain": [ + " Reference Current [A] Sensor Reading [V]\n", + "0 -10.11 -1.55\n", + "1 -6.93 0.44\n", + "2 -2.15 3.42\n", + "3 0.00 4.70\n", + "4 2.95 6.60\n", + "5 6.06 8.53\n", + "6 9.44 10.58" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Lets look at the imported experimental data file\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "aab59367", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Sensor Reading [V]')" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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cywPHDigq6++WgMGDNCIESPKHBssxxK/Gj16tDZv3lzmXBZJ6tmzp3r27Ole7tWrl1q3bq0ZM2boqaeeCnSZ5dKvXz/3f7dv317du3dXkyZNNG/ePA0fPrwKKwucmTNnql+/foqNjS21Tygey2BC2JH04IMPlpmoJalp06ZebSsmJqbYTPGzd+bExMSUOub3k63OnDmjI0eOlDrGH8qz37Nnz9a5556rG264wef36969u6RfzyZU5gdkRY5v9+7ddebMGe3evVutWrUqtj4mJkaFhYU6evSox9mdQ4cOBfTY/Z6v+/j999/r8ssvV69evfTKK6/4/H5VdSxL0qBBA4WFhRW7A66sYxATE+NT/2By7733um9i8PX/6GvWrKlOnTpp586dAarO/+rXr6+WLVuWWnMoH0tJ2rNnj7744gufz5KG2rE8ezwOHTqkxo0bu9sPHTqkjh07ljimPL/bpfJphg/c/miC8qFDh9xtM2bMMJGRkeaXX34pcVtnJyh/99137rbFixcH3QRll8tlEhISzIMPPliu8UuXLjWSzIYNG/xcWeC8+eabxm63myNHjpS4/uwE5fnz57vbtm/fHtQTlPfv329atGhhBg4caM6cOVOubQTbsezWrZu599573ctFRUXmvPPOK3OC8nXXXefR1rNnz6Ce1Opyuczo0aNNbGysyczMLNc2zpw5Y1q1amUeeOABP1cXOMeOHTPnnHOOeeGFF0pcH4rH8rcmTJhgYmJizOnTp30aF+zHUqVMUH722WfdbXl5eV5NUPbld7vUenzqDbNnzx6zbt068+STT5p69eqZdevWmXXr1pljx44ZY379C9iuXTtz1VVXmfXr15vPPvvMNGzY0IwbN869jZUrV5pWrVqZ/fv3u9uuvvpq06lTJ7Ny5UqzdOlS06JFCzNo0KBK37+yfPHFF0aS2bZtW7F1+/fvN61atTIrV640xhizc+dOM3HiRPPdd9+ZnJwc8+GHH5qmTZuayy67rLLL9try5cvNtGnTzPr16012drZ58803TcOGDc3//M//uPv8fj+NMeaee+4xF1xwgfnPf/5jvvvuO9OzZ0/Ts2fPqtiFP7R//37TvHlzk5iYaPbv328OHjzofv22T6gdy7fffts4HA4zZ84cs3XrVnP33Xeb+vXru++KvOOOO8yjjz7q7r9s2TJTo0YN8+yzz5pt27aZCRMmmJo1a5pNmzZV1S78oVGjRhmn02m++uorj+N28uRJd5/f7+eTTz5pFi9ebLKzs82aNWvMwIEDTa1atcyWLVuqYhe88uCDD5qvvvrK5OTkmGXLlpmkpCTToEEDc/jwYWOMNY7lWUVFReaCCy4wY8eOLbYuFI/lsWPH3J+JkszUqVPNunXrzJ49e4wxxkyePNnUr1/ffPjhh2bjxo3mxhtvNAkJCebUqVPubVxxxRXmxRdfdC//0e+2twg7PhoyZIiRVOz15Zdfuvvs3r3b9OvXz9SuXds0aNDAPPjggx6p/csvvzSSTE5Ojrvtp59+MoMGDTL16tUzkZGRZtiwYe4AFSwGDRpkevXqVeK6nJwcj5/D3r17zWWXXWaioqKMw+EwzZs3Nw8//LDJy8urxIp9s2bNGtO9e3fjdDpNrVq1TOvWrc0//vEPjzNyv99PY4w5deqU+etf/2rOOeccU6dOHXPTTTd5hIdgMnv27BL//v72JG+oHssXX3zRXHDBBSY8PNx069bNfPvtt+51vXv3NkOGDPHoP2/ePNOyZUsTHh5u2rZtaz755JNKrtg3pR232bNnu/v8fj/HjBnj/plER0eba665xqxdu7byi/fBrbfeaho3bmzCw8PNeeedZ2699Vazc+dO93orHMuzFi9ebCSZHTt2FFsXisfy7Gfb719n98PlcpnHH3/cREdHG4fDYRITE4vte5MmTcyECRM82sr63faWzRhjfLvwBQAAEDp4zg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg5QTSxbtkwXXXSRatasqf79+1d1OSiH+Ph42Ww22Ww2HT161Kexffr0cY9dv359QOoDghVhBwhyQ4cOdX9I1axZUwkJCXrkkUf0yy+/+LSdlJQUdezYUTk5OZozZ05giq1ihYWFmjJlijp06KA6deqoQYMGuuSSSzR79mydPn26qssrVZ8+fTRmzBiv+k6cOFEHDx6U0+kstu7CCy+Uw+FQbm5usXXvv/++Vq1aVdFSgZBE2AFCwNVXX62DBw9q165dmjZtmmbMmKEJEyb4tI3s7GxdccUVOv/881W/fv1y1VFYWFiucZWhsLBQffv21eTJk3X33Xdr+fLlWrVqlUaPHq0XX3xRW7ZsKfe2SwpKVfWziIiIUExMjGw2m0f70qVLderUKf35z3/W66+/XmxcVFSUGjZsWFllAkGFsAOEAIfDoZiYGMXFxal///5KSkpSenq6e73L5VJqaqoSEhJUu3ZtdejQQfPnz5ck7d69WzabTT/99JPuvPNO2Ww295mdzZs3q1+/fqpXr56io6N1xx136Mcff3Rvt0+fPrr33ns1ZswYNWjQQH379vV6XHJysh555BFFRUUpJiZGTzzxhMc+HT16VCNHjlR0dLRq1aqldu3aaeHChe71S5cu1aWXXqratWsrLi5OycnJOnHiRKk/o+eff15ff/21MjIyNHr0aHXs2FFNmzbV4MGDtXLlSrVo0ULSr5eCnn/+eY+xHTt29KjPZrPp5Zdf1g033KC6detq0qRJeuKJJ9SxY0e99tprSkhIUK1atdz7cdddd6lhw4aKjIzUFVdcoQ0bNri3dXbcG2+8ofj4eDmdTg0cOFDHjh2T9OuZuyVLluiFF15wn8HbvXt3qftZmpkzZ2rw4MG64447NGvWLJ/HA1ZG2AFCzObNm7V8+XKFh4e721JTUzV37lxNnz5dW7Zs0QMPPKDbb79dS5YsUVxcnA4ePKjIyEg9//zzOnjwoG699VYdPXpUV1xxhTp16qTvvvtOn332mQ4dOqS//OUvHu/3+uuvKzw8XMuWLdP06dN9Gle3bl2tXLlSU6ZM0cSJE90BzeVyqV+/flq2bJnefPNNbd26VZMnT1ZYWJikX89CXX311brlllu0ceNGvfPOO1q6dKnuvffeUn8ub731lpKSktSpU6di62rWrKm6dev69HN+4okndNNNN2nTpk268847JUk7d+7Ue++9p/fff98972XAgAE6fPiwFi1apDVr1qhz585KTEzUkSNH3NvKzs7WggULtHDhQi1cuFBLlizR5MmTJUkvvPCCevbsqREjRujgwYM6ePCg4uLifKr12LFjevfdd3X77bfryiuvVF5enr755huftgFYWvm+yB1AZRkyZIgJCwszdevWNQ6Hw0gydrvdzJ8/3xhjzC+//GLq1Kljli9f7jFu+PDhZtCgQe5lp9NpZs+e7V5+6qmnzFVXXeUxZt++fUaS2bFjhzHGmN69e5tOnTp59PF23J/+9CePPl27djVjx441xhizePFiY7fb3f1/b/jw4ebuu+/2aPvmm2+M3W43p06dKnFM7dq1TXJyconrfqtJkyZm2rRpHm0dOnQwEyZMcC9LMmPGjPHoM2HCBFOzZk1z+PBhj5oiIyPNL7/84tG3WbNmZsaMGe5xderUMfn5+e71Dz/8sOnevbt7uXfv3ub+++8vV+3GGPPKK6+Yjh07upfvv/9+M2TIkGL9cnJyjCSzbt26P3wvwEpqVGnSAuCVyy+/XC+//LJOnDihadOmqUaNGrrlllsk/Xq24eTJk7ryyis9xhQWFpZ4luOsDRs26Msvv1S9evWKrcvOzlbLli0lSRdffHG5xrVv395jXePGjXX48GFJ0vr163X++ee7+5ZU28aNG/XWW2+524wxcrlcysnJUevWrYuNMcaUuq/l0aVLl2JtTZo08Zj3smHDBh0/flznnnuuR79Tp04pOzvbvRwfH6+IiAj38m9/Fv4wa9Ys3X777e7l22+/Xb1799aLL77o8b5AdUXYAUJA3bp11bx5c0m/frB16NBBM2fO1PDhw3X8+HFJ0ieffKLzzjvPY5zD4Sh1m8ePH9f111+vp59+uti6xo0be7x3ecbVrFnTY53NZpPL5ZIk1a5du9S6zr7HyJEjlZycXGzdBRdcUOKYli1bavv27WVuV5LsdnuxYFTSBOSSLnuV9LNo3Lixvvrqq2J9fzsJvKyfRUVt3bpV3377rVatWqWxY8e624uKivT2229rxIgRfnkfIJQRdoAQY7fb9dhjjyklJUWDBw9WmzZt5HA4tHfvXvXu3dvr7XTu3Fnvvfee4uPjVaOG9/8UlHfcb7Vv31779+9XZmZmiWd3OnfurK1bt7oDnjcGDx6sxx57TOvWrSt2Ruv06dMqLCxU3bp11bBhQx08eNC9Lj8/Xzk5OeXaj86dOys3N1c1atRQfHx8ubYhSeHh4SoqKirX2JkzZ+qyyy7TSy+95NE+e/ZszZw5k7ADiAnKQEgaMGCAwsLC9NJLLykiIkIPPfSQHnjgAb3++uvKzs7W2rVr9eKLL5Z4C/JZo0eP1pEjRzRo0CCtXr1a2dnZWrx4sYYNG1bmB295x/1W7969ddlll+mWW25Renq6cnJytGjRIn322WeSpLFjx2r58uW69957tX79emVlZenDDz8sc4LymDFjdMkllygxMVEvvfSSNmzYoF27dmnevHnq0aOHsrKyJElXXHGF3njjDX3zzTfatGmThgwZ4p4Y7aukpCT17NlT/fv31+eff67du3dr+fLl+t///V999913Xm8nPj5eK1eu1O7du/Xjjz96fdbn9OnTeuONNzRo0CC1a9fO43XXXXdp5cqVFbrlHrAKwg4QgmrUqKF7771XU6ZM0YkTJ/TUU0/p8ccfV2pqqlq3bq2rr75an3zyiRISEkrdRmxsrJYtW6aioiJdddVVuuiiizRmzBjVr19fdnvp/zSUd9zvvffee+ratasGDRqkNm3a6JFHHnGHpfbt22vJkiXKzMzUpZdeqk6dOmn8+PGKjY0tdXsOh0Pp6el65JFHNGPGDPXo0UNdu3ZVWlqakpOT1a5dO0nSuHHj1Lt3b1133XW69tpr1b9/fzVr1szrun/LZrPp008/1WWXXaZhw4apZcuWGjhwoPbs2aPo6Givt/PQQw8pLCxMbdq0UcOGDbV3716vxn300Uf66aefdNNNNxVb17p1a7Vu3VozZ870ug7AqmzG37P6AAABER8frzFjxnj9tOXf2717txISErRu3Tp17NjRr7UBwYwzOwAQQsaOHat69eopLy/Pp3H9+vVT27ZtA1QVENw4swMAIWLPnj3uO8eaNm3q02XDAwcO6NSpU5J+vaPttw+lBKyOsAMAACyNy1gAAMDSCDsAAMDSCDsAAMDSCDsAAMDSCDsAAMDSCDsAAMDSCDsAAMDSCDsAAMDS/h9hu0j6vK+iGAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(df['Reference Current [A]'], df['Sensor Reading [V]'], 'x')\n", + "plt.xlabel('Reference Current [A]')\n", + "plt.ylabel('Sensor Reading [V]')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1a6b2d9f", + "metadata": {}, + "outputs": [], + "source": [ + "# Lets fit a first order function to our experimental data\n", + "\n", + "x= np.polyfit(df['Reference Current [A]'],df['Sensor Reading [V]'],1 );" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "b9be90e3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gain: 0.6213316322731629\n", + "Offset: 4.739969343983164\n" + ] + } + ], + "source": [ + "# Lets print out the gain and the offset\n", + "\n", + "print(\"Gain: \", x[0])\n", + "print(\"Offset: \", x[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "7d6aa0c3", + "metadata": {}, + "outputs": [], + "source": [ + "# Lets get an expression using the obtained gain and offset\n", + "\n", + "fit = df['Reference Current [A]']*x[0] + x[1];" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c8253993", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGwCAYAAABPSaTdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABboUlEQVR4nO3dd3gU9cLF8e+mk5AEQ0kIBggdpEtHKRKpKv0qlheQpoKIWAAVERCpAqJeQaXYroWqooCBKyC9IyAYSuiETkIJKbvz/rGX1UgC2ZBkspvzeZ489/5mZyZnMyZ7mGoxDMNARERExE15mB1AREREJCep7IiIiIhbU9kRERERt6ayIyIiIm5NZUdERETcmsqOiIiIuDWVHREREXFrXmYHyE02m42TJ08SGBiIxWIxO46IiIhkgmEYXL58mfDwcDw8nN9Pk6/KzsmTJ4mIiDA7hoiIiGTBsWPHuPvuu51eLl+VncDAQMD+wwoKCjI5jYiIiGRGQkICERERjs9xZ+WrsnPj0FVQUJDKjoiIiIvJ6ikoOkFZRERE3JrKjoiIiLg1lR0RERFxa/nqnJ3MsNlsJCcnmx1Dssjb2xtPT0+zY4iISB6isvM3ycnJxMbGYrPZzI4id6BQoUKEhYXpXkoiIgKo7DgYhsGpU6fw9PQkIiIiSzctEnMZhsG1a9c4c+YMAMWLFzc5kYiI5AUqO/+TmprKtWvXCA8Px9/f3+w4kkUFChQA4MyZMxQrVkyHtERERCco32C1WgHw8fExOYncqRtlNSUlxeQkIiKSF6js/IPO83B92oYiIvJ3KjsiIiLi1lR2RERExK2p7EiOsVgsLFq0yOwYIiKSQ6ZExzBtxf50X5u2Yj9TomNyOVH6VHayiVkbvEePHlgsFiwWC97e3kRGRvLqq69y/fr1HPl+Oemtt96iZs2aZscQEZFM8vSwMPnG51/iJTi8FrB/7k2OjsHTI2+cQ6lLz7PJjQ0OMLBFecf0Gxt88IMVcux7t27dmtmzZ5OSksLWrVvp3r07FouF8ePH59j3FBERufF5t3z5Erpvnk6wLZ7Pqn/O5DXXGfxghTSfh2bSnp1sMrBFeQY/WOGvhkvaopOTG9zX15ewsDAiIiLo0KEDUVFRREdHO14/f/483bp1o0SJEvj7+1OtWjW+/vprx+uLFy+mUKFCjsvvd+zYgcViYejQoY55evfuzZNPPplhhv3799OkSRP8/PyoUqVKmu9/w5AhQ6hQoQL+/v6UKVOG4cOHOy4PnzNnDiNHjmTnzp2OPVVz5swBYPLkyVSrVo2AgAAiIiJ47rnnuHLlyh39zEREJBsYBgP9o1noN5Lg6yc4llSA79buy1NFB7RnJ1vd2LCTo2P44L8HSLbacn2D7969m3Xr1lGqVCnHtOvXr3PvvfcyZMgQgoKC+Omnn3jqqacoW7Ys9erV4/777+fy5cts376dOnXqsGrVKooUKcLKlSsd61i1ahVDhgxJ93vabDY6depEaGgoGzduJD4+nkGDBt00X2BgIHPmzCE8PJxdu3bRp08fAgMDefXVV3n00UfZvXs3S5cuZfny5QAEBwcD4OHhwbRp04iMjOTQoUM899xzvPrqq/z73//Ovh+ciIg459oF+L4//PkznsAyWz1eSe7Ddc9AfspDRQcAIx+Jj483ACM+Pv6m1xITE40//vjDSExMvOPvU/61n41SQxYb5V/7+Y7XdTvdu3c3PD09jYCAAMPX19cADA8PD2PevHm3XK5du3bGSy+95BjXrl3bmDhxomEYhtGhQwdjzJgxho+Pj3H58mXj+PHjBmDExMSku65ly5YZXl5exokTJxzTlixZYgDGwoULM8wwceJE495773WMR4wYYdSoUeO273nu3LlG4cKFM3w9O7eliIik48gGw3i3imGMCDKMUUWMXz9/2yg15EfH5997y9P/vMiqW31+Z4YOY2WzaSv2k2y14ePpQbLVluFJy9mpefPm7Nixg40bN9K9e3d69uxJ586dHa9brVZGjx5NtWrVCAkJoWDBgixbtoyjR4865mnatCkrV67EMAx+++03OnXqROXKlVmzZg2rVq0iPDyc8uXTb+p79+4lIiKC8PBwx7SGDRveNN+3335L48aNCQsLo2DBgrzxxhtpMmRk+fLltGjRghIlShAYGMhTTz3F+fPnuXbtmjM/JhERuVM2G6yZCrPbQMJxCCnD19Vn0WNPTQY/WJGYMW1uOqUjL1DZyUZ/P0cnNzd4QEAA5cqVo0aNGsyaNYuNGzcyc+ZMx+sTJ07kvffeY8iQIfz666/s2LGDVq1akZyc7JinWbNmrFmzhp07d+Lt7U2lSpVo1qwZK1euZNWqVTRt2vSOMq5fv54nnniCtm3bsnjxYrZv387rr7+eJkN6Dh8+zEMPPUT16tWZP38+W7du5cMPPwS47bIiIpKNrp6D//wLlo8AwwpVOzO94iyGrfdIc8pGeuewmk3n7GST9E5G/vs5PH8f5yQPDw9ee+01Bg8ezOOPP06BAgVYu3Yt7du3d5xgbLPZiImJoUqVKo7lbpy3M2XKFEexadasGePGjePixYu89NJLGX7PypUrc+zYMU6dOuV40viGDRvSzHPjPKLXX3/dMe3IkSNp5vHx8XGcJH3D1q1bsdlsvPvuu44n0X/33XfO/lhEROROHF4L83vB5VPg5Qetx8G9PUhcvj/dc1NvjK02w4y0N9GenWxitRkZbvDBD1bI1Q3etWtXPD09HXtAypcvT3R0NOvWrWPv3r3069eP06dPp1nmrrvuonr16nz11Vc0a9YMgCZNmrBt2zZiYmJuuWcnKiqKChUq0L17d3bu3Mlvv/2WptTcyHD06FG++eYbDh48yLRp01i4cGGaeUqXLk1sbCw7duzg3LlzJCUlUa5cOVJSUnj//fc5dOgQX3zxBdOnT8+Gn5KIiNyWzQqrJsJnD9mLTuHy0HsF1OkJFgsv3uIinIEtyvNiDt52xRkqO9kkL21wLy8vBgwYwIQJE7h69SpvvPEGtWvXplWrVjRr1oywsDA6dOhw03JNmzbFarU6yk5ISAhVqlQhLCyMihUrZvj9PDw8WLhwIYmJidSrV4/evXszZsyYNPM88sgjvPjiiwwYMICaNWuybt06hg8fnmaezp0707p1a5o3b07RokX5+uuvqVGjBpMnT2b8+PFUrVqVr776irFjx97xz0hERG7jyhn4shP8+jYYNqj+GPRdCWFVzU7mNIthGHljH1MuSEhIIDg4mPj4eIKCgtK8dv36dWJjY4mMjMTPz8+khJIdtC1FRO7QoVUwvzdcPQPe/tB2EtR6wrQ4t/r8zgydsyMiIiJ2NiusGg+rJgAGFK0MXedAsUpmJ7sjKjsiIiICCadgQR84/Jt9XOspaDMBfPzNzZUNVHZERETyuwPLYUE/uHYOvAPg4alQ/V9mp8o2KjsiIiL5lTXVfgLymin2cWg1+2GrIuVMjZXd8szVWKtXr+bhhx8mPDwci8XCokWL0rxuGAZvvvkmxYsXp0CBAkRFRbF/f964WZGIiIjLiT8Oc9r9VXTq9ILey92u6EAeKjtXr16lRo0ajnvD/NOECROYNm0a06dPZ+PGjQQEBNCqVSuuX7+ey0lFRERcXMwymH4fHNsAPoHQZTY8NBm83fMK1jxzGKtNmza0adMm3dcMw2Dq1Km88cYbtG/fHoDPP/+c0NBQFi1axGOPPZabUUVERFxTajKsGAnrP7CPi9eErrMhpIypsXJantmzcyuxsbHExcURFRXlmBYcHEz9+vVZv359hsslJSWRkJCQ5ktERCRfunjE/gDPG0Wn/jPQ6xe3LzrgImUnLi4OgNDQ0DTTQ0NDHa+lZ+zYsQQHBzu+IiIicjRnXtKsWTMGDRpkdgwREckL9v4IM+6HE1vALxge/QrajAcvX7OT5QqXKDtZNWzYMOLj4x1fx44dMztStuvRowcWi+WmrwkTJjB69GjHfKVLl2bq1KnmBRURkdyXmgQ/vwrfPgnX46FEHej3G1R+yOxkuSrPnLNzK2FhYQCcPn3a8VTtG+OaNWtmuJyvry++vu7fWlu3bs3s2bPTTCtatCienp4mJRIREdNdOARze8KpHfZxwwHQYgR4+ZgaywwusWcnMjKSsLAwVqxY4ZiWkJDAxo0badiwoYnJ8gZfX1/CwsLSfLVo0cJxGKtZs2YcOXKEF1980bHnR0RE3NjuBTC9ib3oFLgLun0Lrcbky6IDeWjPzpUrVzhw4IBjHBsby44dOwgJCaFkyZIMGjSIt99+m/LlyxMZGcnw4cMJDw9P9+nd2cIwIOVazqz7drz9IRsLyYIFC6hRowZ9+/alT58+2bZeERHJY1ISYdlrsGWWfRzRALrMhOC7zc1lsjxTdrZs2ULz5s0d48GDBwPQvXt35syZw6uvvsrVq1fp27cvly5d4r777mPp0qU591TrlGvwTnjOrPt2XjsJPgGZnn3x4sUULFjQMf7nJfwhISF4enoSGBjoOCQoIiJu5tx+mNsDTu+2j+8bDM1fB88881FvmjzzE2jWrBmGYWT4usViYdSoUYwaNSoXU7mG5s2b89FHHznGAQEBdOvWzcREIiKSq37/Dn4cBClXwb8IdJoB5aJuu1h+kWfKTp7j7W/fw2LW93ZCQEAA5cq53+29RUTkNpKvwZJXYfsX9nHp+6HTJxBU/NbL5TMqOxmxWJw6lJTX+fj4YLVazY4hIiLZ5cw++2Grs3sBCzR9FZoOAQ9diftPLnE1lty50qVLs3r1ak6cOMG5c+fMjiMiIlllGLD9S/i4mb3oFAyF//semr+mopMBlZ18YtSoURw+fJiyZctStGhRs+OIiEhWJF2Bhc/A9/0hNRHKNINn1kCZpmYny9N0GMvFzZkzJ93pK1euTDNu0KABO3fuzPlAIiKSM+J2w7yecC4GLB72PTn3vQQe2m9xOyo7IiIieZlhwNY5sHQopF6HwOLQeSaUbmx2MpehsiMiIpJXXU+AxYNg93z7uNyD0HE6BBQxNZarUdkRERHJi07usB+2unAILJ4QNQIaPq/DVlmgsiMiIpKXGAZs+gR+eR2syRAcAV1mQUQ9s5O5LJWdf7jVXZzFNWgbiojLSrwEPzwPe3+wjyu2hfYfgn+IqbFcncrO/3h62u9NkJycTIECBUxOI3fi2jX7A1y9vb1NTiIi4oTjW2FeD7h0FDy84cFR0ODZbH0wdH6lsvM/Xl5e+Pv7c/bsWby9vfHQMVGXYxgG165d48yZMxQqVMhRYEVE8jTDgA3/hugRYEuBQqWg62woca/ZydyGys7/WCwWihcvTmxsLEeOHDE7jtyBQoUK6enuIuIarl2ARc9BzBL7uPIj8Mj7UKCQqbHcjcrO3/j4+FC+fHmSk5PNjiJZ5O3trT06IuIajm6EeU9DwnHw9IFW70Dd3jpslQNUdv7Bw8MDPz8/s2OIiIi7stlg3TRYMQoMK4SUga5zoHgNs5O5LZUdERGR3HL1nP3ZVgei7eOqneGhqeAXZGosd6eyIyIikhsOr4X5veDyKfDygzbjoXZ3HbbKBSo7IiIiOclmhd8mw8p3wLBBkQr2w1ah95idLN9Q2REREckpV87A/N4Qu8o+rtEN2k4C34Lm5spnVHZERERywqGVML8PXD0D3v72klPrCbNT5UsqOyIiItnJZoVV42HVBMCAopXth62KVTI7Wb6lsiMiIpJdEk7ZD1sdWWMf1/4/aD0efPzNzZXPqeyIiIhkh/3LYWFfuHYefAraLymv3tXsVILKjoiIyJ2xpsKvb8OaKfZxaDX7Yasi5UyNJX9R2REREcmq+OMwrxcc22Af1+llf+yDt+7En5eo7IiIiGTFn0th0TOQeBF8g+Dh96BqJ7NTSTpUdkRERJyRmgwrRsL6D+zj4jWh62z7M64kT1LZERERyayLh+1PKj+x1T6u/yw8OBK8fE2NJbemsiMiIpIZe3+ERf0hKR78gqH9v6HyQ2ankkxQ2RERkXxvSnQMnh4WBrYof9NrH0bvodGh96h16lv7hBJ17IetCpXM5ZSSVSo7IiKS73l6WJgcHQOQpvB8tvi/NNn0ItU8DtsnNHoeWowAT28TUkpWqeyIiEi+d6Pg/L3wLPnm33TaO4pAj0QoEAIdp0OFVmbGlCxS2REREeGvwvNh9G6KrhxKN8/lYAFKNoTOMyG4hLkBJctUdkRERP5nYA14cPUIKluOYDMseDQZDM1eA099XLoyD7MDiIiI5Ak7vyX53/dT2XKE80YQ3VOGMI1uKjpuQFtQRETyt+RrsOQV2P4lPsDx4Hu5u9dX1N18Jd2TlsX1qOyIiEj+dWYvzO0BZ/dhMyxsLtWb+j3Gg4cnA1vYZ1HhcX0qOyIikv8YBuz4Cn56GVITuepdmGWV3qZT58fTzHaj4FhthhkpJZuo7IiISP6SdAV+egl+/8Y+LtOcgE4f06lgsXRn1x4d16eyIyIi+Ufcbvthq/P7weIBzV+D+14CD12v485UdkRExP0ZBmydDUuGgjUJAsOhy0wo1cjsZJILVHZERMS9XU+AH1+APQvs43IPQscZEFDY3FySa1R2RETEfZ3cYT9sdTEWPLygxZvQ8HkdtspnVHZERMT9GAZs+gR+eR2syRAcAV1mQUQ9s5OJCVym2lqtVoYPH05kZCQFChSgbNmyjB49GsPQ5YAiIvI3iZfgu6fsNwq0JkPFttBvtYpOPuYye3bGjx/PRx99xGeffcY999zDli1b6NmzJ8HBwQwcONDseCIikhcc3wrzesClo+DhDS1HQ/1nwGIxO5mYyGXKzrp162jfvj3t2rUDoHTp0nz99dds2rTJ5GQiImI6w4D1H8LyEWBLhUKloOtsKHGv2ckkD3CZw1iNGjVixYoVxMTYb9u9c+dO1qxZQ5s2bTJcJikpiYSEhDRfIiLiZq5dgK+72c/PsaVClfbwzG8qOuLgMnt2hg4dSkJCApUqVcLT0xOr1cqYMWN44oknMlxm7NixjBw5MhdTiohIrjq6EeY9DQnHwdMHWr0DdXvrsJWk4TJ7dr777ju++uor/vOf/7Bt2zY+++wzJk2axGeffZbhMsOGDSM+Pt7xdezYsVxMLCIiOcZmgzVTYHYbe9EJKQO9l0O9Pio6chOL4SKXM0VERDB06FD69+/vmPb222/z5Zdfsm/fvkytIyEhgeDgYOLj4wkKCsqpqCIikpOunoOF/eDAcvu4ahd4eCr4BpoaS3LOnX5+u8xhrGvXruHxj5tAeXp6YrPZTEokIiK57vBamN8LLp8CLz9oMwFq/5/25sgtuUzZefjhhxkzZgwlS5bknnvuYfv27UyePJmnn37a7GgiIpLTbFb4bTKsfAcMGxSpAF3nQOg9ZicTF+Ayh7EuX77M8OHDWbhwIWfOnCE8PJxu3brx5ptv4uPjk6l16DCWiIgLunwaFvSB2FX2cY1u0HYS+BY0N5fkmjv9/HaZspMdVHZERFzMoZUwvw9cPQPe/tDuXaj5uNmpJJflm3N2REQkH7GmwqrxsHoiYECxKtBlNhSrZHYycUEqOyIikrcknLKfhHxkrX1c+/+g9Xjw8Tc3l7gslR0REck79i+HhX3h2nnwKQgPTYXqXc1OJS5OZUdERMxnTYFfx9hvFAgQWs1+tVWRcqbGEvegsiMiIuaKP25/5MOxjfZx3d7Qcgx4+5mbS9yGyo6IiJjnzyWw6FlIvAi+QfDINLino9mpxM2o7IiISO5LTYYVI2H9B/ZxeC371VYhkebmEreksiMiIrnr4mH7YasTW+3j+s/CgyPBy9fUWOK+VHZERCT3/PEDfD8AkuLBLxja/xsqP2R2KnFzKjsiIpLzUpPglzdg08f28d11ocssKFTS3FySL6jsiIhIzjp/EOb1hFM77eNGA6HFm+DpbW4uyTdUdkREJOfsXgA/DITky1AgBDpOhwqtzE4l+YzKjoiIZL+URFg6DLbOto9LNoTOMyG4hLm5JF9S2RERkex1bj/M7QGndwMWuH8wNHsNPPWRI+bQf3kiIpJ9dn4Li1+ElKvgXwQ6fQzlWpidSvI5lR0REblzydfg51dgx5f2cen7ofOnEBhmbi4RVHZEROROndlrP2x1dh9ggaZDoOmr4OFpdjIRQGVHRESyyjBgx1fw08uQmggFQ6HTJ1CmqdnJRNJQ2REREeclXYGfBsPv39rHZZrbz88pWMzcXCLpUNkRERHnxO2yH7Y6fwAsHtD8dbhvMHh4mJ1MJF0qOyIikjmGYb9vzpKhYE2CwHDoMhNKNTI7mcgtqeyIiMjtXU+AH1+APQvs4/ItocN0CChsbi6RTFDZERGRWzu5w37Y6mIseHjZn2vV8HkdthKXobIjIiLpMwz7U8p/eQOsyRAcYX9SeUQ9s5OJOEVlR0REbpZ4CX4YAHt/tI8rtoP2H4B/iKmxRLIiU2UnJMS5/7gtFgvbtm2jVKlSWQolIiImOr4V5vWAS0fBwxtajob6z4DFYnYykSzJVNm5dOkSU6dOJTg4+LbzGobBc889h9VqveNwIiKSiwwD1n8Iy0eALRUKlYKus6HEvWYnE7kjmT6M9dhjj1GsWOZuFvX8889nOZCIiJjg2gVY9CzELLWPq7SHR94Hv9v/I1ckr8tU2bHZbE6t9PLly1kKIyIiOWNKdAyeHhYGtih/02tzF8yl1b7XCUo+DZ6+0PodqNNLh63EbWT6usHFixc7XXpERCRv8PSwMDk6hmkr9v810WZj7ZzX6bizr73ohJSF3suhbm8VHXErmT6M1aFDB0JDQ+nRowc9e/akXLlyOZlLRESy0Y09OpOjY+zjBndx+NOnaHxxHViAql3g4angG2heSJEckuk9O7GxsfTr149vvvmGihUr0rRpU7744gsSExNzMp+IiGSTgS3KM/jBCqxd/j2nJ9Sh9MV1pHr4wsPToPOnKjritiyGYRjOLvTrr78yZ84c5s+fj5eXF4899hi9evWibt26OZEx2yQkJBAcHEx8fDxBQUFmxxERyV02K/z2Ltb/voOnxeCgEU7Z5+ZB6D1mJxO5pTv9/M7Svb6bN2/OZ599xqlTp5g4cSK7du2iQYMG1KhRIyurExGRnHb5NHzREX4dg6fFYIGtCQ8nvc203T5mJxPJcXd0B+XAwEBatGjBkSNH2LdvH3/88Ud25RIRkexyaCXM7wNXz3DN8GVNxWF0evxFjq/Y/9c5POlcpSXiLrJUdhITE5k7dy6zZs3it99+IzIyksGDB9OjR49sjiciIllmTYVV42H1RMBgny2CzXUn89TDLYF0TlpW4RE35VTZ2bBhA7NmzeK7774jOTmZTp06sXz5cpo3b55T+UREJCsSTsL83nBkLQC7QtvzW9lXeK5ltTSz3Sg4VpvTp2+KuIxMn6BcpUoV/vzzT2rVqkWvXr14/PHHM/X4iLxEJyiLSL6wfzks7AvXzoNPQXhoKlTvanYqkSy708/vTO/ZiYqK4uuvv9ZJyCIieZU1Bf77Nqydah+HVYMuc6CI7osm+Vumy860adNyMoeIiNyJ+OMw72k4ttE+rtsbWo4Bbz9zc4nkAZm69Lx27dpcvHgx0yu97777OHHiRJZDiYiIE/5cAtPvsxcd3yDoOgfavauiI/I/mdqzs2PHDnbu3ElISEimVrpjxw6SkpLuKJiIiNxGajKsGAnrP7CPw2tBl9kQEmluLpE8JtOHsVq0aEFmb7Zs0QPkRERy1sXD9sNWJ7baxw2eg6i3wMvXzFQieVKmyk5sbKzTK7777rudXkZERDLhjx/g+wGQFA9+wdDhI6jUzuxUInlWpspOqVKlcjqHiIjcTmoS/PIGbPrYPr67LnSZBYVKmptLJI/L0rOxzHLixAmefPJJChcuTIECBahWrRpbtmwxO5aISM47fxBmPvhX0Wk0EHouUdERyYQ7ejZWbrp48SKNGzemefPmLFmyhKJFi7J//37uuusus6OJiOSs3fPhhxcg+TIUCIGO06FCK7NTibgMlyk748ePJyIigtmzZzumRUbe+oqDpKSkNFeFJSQk5Fg+EZFsl5IIS4fB1v/93SvZEDrPhOAS5uYScTEucxjrhx9+oE6dOnTt2pVixYpRq1YtPvnkk1suM3bsWIKDgx1fERERuZRWROQOndsPn0b9r+hY4P6XoftiFR2RLMj0s7HM5udnvznW4MGD6dq1K5s3b+aFF15g+vTpdO/ePd1l0tuzExERoWdjiUjetvNbWPwipFwF/yLQ+RMo+4DZqURMc6fPxnK67Nx1113p3kfHYrHg5+dHuXLl6NGjBz179nQ6zK34+PhQp04d1q1b55g2cOBANm/ezPr16zO1Dj0IVETytOSr8POrsONL+7j0/dD5UwgMMzeXiMly7UGgN7z55puMGTOGNm3aUK9ePQA2bdrE0qVL6d+/P7GxsTz77LOkpqbSp08fpwNlpHjx4lSpUiXNtMqVKzN//vxs+x4iIqY5sxfm9oCz+wALNBsKTV4BD0+zk4m4PKfLzpo1a3j77bd55pln0kyfMWMGv/zyC/Pnz6d69epMmzYtW8tO48aN+fPPP9NMi4mJ0T2ARMS1GQbs+Ap+ehlSE6FgqH1vTmQTs5OJuA2nT1BetmwZUVFRN01v0aIFy5YtA6Bt27YcOnToztP9zYsvvsiGDRt45513OHDgAP/5z3/4+OOP6d+/f7Z+HxGRXJN0BRb2g+/724tOmebwzFoVHZFs5nTZCQkJ4ccff7xp+o8//uh4UOjVq1cJDAy883R/U7duXRYuXMjXX39N1apVGT16NFOnTuWJJ57I1u8jIpIr4nbBx03h92/B4gEPDIcnF0DBomYnE3E7Th/GGj58OM8++yy//vqr45ydzZs38/PPPzN9+nQAoqOjadq0afYmBR566CEeeuihbF+viEiuMQz75eRLhoI1CQLDoctMKNXI7GQibitLl56vXbuWDz74wHEOTcWKFXn++edp1Chv/7LqaiwRMdX1BPjxBdizwD4u3xI6TIeAwubmEsnjcv3Sc1emsiMipjm5w3611cVY8PCCFiOg4QDwcJl7u4qYJtcvPQew2WwcOHCAM2fOYLPZ0rzWpIlOrBMRcTAM+8M7f3kDrMkQHAFdZkNEXbOTieQbTpedDRs28Pjjj3PkyBH+uVPIYrFgtVqzLZyIiEtLvAQ/DIC9/7uoo2I7aP8B+IeYGkskv3G67DzzzDPUqVOHn376ieLFi6d7N2URkXzv+FaY1wMuHQUPb2g5Guo/A/qbKZLrnC47+/fvZ968eZQrVy4n8oiIuDbDgPUfwvIRYEuFu0rbD1uVqG12MpF8y+myU79+fQ4cOKCyIyLyT9cuwKJnIWapfVylPTzyPvgFm5tLJJ9zuuw8//zzvPTSS8TFxVGtWjW8vb3TvF69evVsCyci4jKOboR5T0PCcfD0hdbvQJ1eOmwlkgc4fem5RzqXSVosFgzDyPMnKOvScxHJdjYbrHsPVowGwwohZaHrHCiuf/iJZJdcv/Q8NjbW6W8iIuKWrp6zP9vqwHL7uFpXeGgK+Gbv43JE5M44XXb0lHEREeDwGpjfGy6fAi8/aDsRaj2lw1YieVCmys4PP/xAmzZt8Pb25ocffrjlvI888ki2BBMRyZNsVvjtXVg5FgwbFKloP2wVWsXsZCKSgUyds+Ph4UFcXBzFihVL95wdx8p0zo6IuLPLp2FBH4hdZR/XeBzaTQKfAHNzibi5XDln5++PhPjn4yFERPKFQythfh+4ega8/aHdu1DzcbNTiUgmZOnZWCIi+YY1FVaNh9UTAQOKVbEftipa0exkIpJJmSo706ZNy/QKBw4cmOUwIiJ5SsJJ+0nIR9bax7W7Q5vx4F3A3Fwi4pRMnbMTGRmZZnz27FmuXbtGoUKFALh06RL+/v4UK1aMQ4cO5UjQ7KBzdkQk0/Yvh4V94dp58CkID78H1bqYnUokX7rTz++Mzzb+m9jYWMfXmDFjqFmzJnv37uXChQtcuHCBvXv3Urt2bUaPHu10ABGRPMWaAsvfgq8624tOWDXou0pFR8SFOX0H5bJlyzJv3jxq1aqVZvrWrVvp0qVLnr7poPbsiMgtxR+3P/Lh2Eb7uG5vaDkGvP3MzSWSz+X6HZRPnTpFamrqTdOtViunT592OoCISJ7w5xL7QzwTL4JvkP0Bnvd0MDuViGSDTB3G+rsWLVrQr18/tm3b5pi2detWnn32WaKiorI1nIhIjktNhmWvw9eP2YtOeC3ot1pFR8SNOF12Zs2aRVhYGHXq1MHX1xdfX1/q1atHaGgon376aU5kFBHJGRcPw+zWsP4D+7jBc/D0LxASecvFRMS1OH0Yq2jRovz888/ExMSwb98+ACpVqkSFChWyPZyISI754wf4fgAkxYNfMHT4CCq1MzuViOSALN9UsEKFCio4IuJ6UpPglzdg08f28d11ocssKFTS3FwikmOyVHaOHz/ODz/8wNGjR0lOTk7z2uTJk7MlmIjInZgSHYOnh4WBLcr/NfH8QZjXE07ttI8bvwAPDAdPb3NCikiucLrsrFixgkceeYQyZcqwb98+qlatyuHDhzEMg9q1a+dERhERp3l6WJgcHQNgLzy758MPL0DyZS4YBfmt6tu0f7CnySlFJDc4XXaGDRvGyy+/zMiRIwkMDGT+/PkUK1aMJ554gtatW+dERhERp93Yo/Nh9G6a73+HanELANhkq8juBpN5uu19ZsYTkVzk9NVYe/fu5f/+7/8A8PLyIjExkYIFCzJq1CjGjx+f7QFFRLJqYA1YU3gM1eIWYDMsfJDano1NPlPREclnnN6zExAQ4DhPp3jx4hw8eJB77rkHgHPnzmVvOhGRrNr5LSx+kaIpVzlnBDMo5Tk2WWoQE1XZ7GQiksucLjsNGjRgzZo1VK5cmbZt2/LSSy+xa9cuFixYQIMGDXIio4hI5iVfg59fgR1fAnAsuA6dTvck3rMwyVYb01bsT3vSsoi4PafLzuTJk7ly5QoAI0eO5MqVK3z77beUL19eV2KJiLnO7IW5PeDsPsDChpJ9eDymCYMerMTAFuWZtmJ/2pOWRSRfcLrslClTxvH/AwICmD59erYGEhFxmmHAjq/gp5chNREKhrIgciSDNwcx+MEKjmJz439VeETylyzdZ+fSpUvMmzePgwcP8sorrxASEsK2bdsIDQ2lRIkS2Z1RRCRjSVfgp8Hw+7f2cdkHoOPHHFl/kcEPWm4qNDfGVpuR20lFxCQWwzCc+o3//fffiYqKIjg4mMOHD/Pnn39SpkwZ3njjDY4ePcrnn3+eU1nv2J0+Il5E8pi4XfbDVucPgMUTHngdGr8IHk5faCoiedidfn47/Rdh8ODB9OjRg/379+Pn5+eY3rZtW1avXu10ABERpxkGbJkFn7SwF53AcOjxE9z/koqOiNzE6cNYmzdvZsaMGTdNL1GiBHFxcdkSSkQkQ9cT4McXYI/9JoGUbwkdpkNAYXNziUie5XTZ8fX1JSEh4abpMTExFC1aNFtCiYik6+QO+2Gri7Hg4QUtRkDDAdqbIyK35PRfiEceeYRRo0aRkpICgMVi4ejRowwZMoTOnTtne0AREQwDNs6AmQ/ai05wSei5FBoPVNERkdty+q/Eu+++y5UrVyhWrBiJiYk0bdqUcuXKUbBgQcaMGZMTGUUkP0u8CN8+CUteBWsyVHoInlkNEXXNTiYiLsLpw1jBwcFER0ezZs0afv/9d65cuULt2rWJiorKiXwikp8d3wrzesClo+DhDS3fhvr9wGIxO5mIuBCnLz3PyLZt23jzzTdZvHhxdqwuR+jScxEXYRiw/kNYPgJsqXBXaegyG0rUNjuZiJggVy89X7ZsGS+//DKvvfYahw4dAmDfvn106NCBunXrYrPZnA4gIpLGtQvw9WPwy+v2olOlPfRbraIjIlmW6cNYM2fOpE+fPoSEhHDx4kU+/fRTJk+ezPPPP8+jjz7K7t27qVxZTxMWkTtwdAPM6wUJx8HTF1q/A3V66bCViNyRTO/Zee+99xg/fjznzp3ju+++49y5c/z73/9m165dTJ8+XUVHRLLOZoPfJsPstvaiE1IWei+Hur1VdETkjmW67Bw8eJCuXbsC0KlTJ7y8vJg4cSJ33313joW7lXHjxmGxWBg0aJAp319EssnVc/CfrrBiJBhWqNYV+q2C4tXNTiYibiLTh7ESExPx9/cH7PfW8fX1pXjx4jkW7FZu3MW5enX9MRRxaYfXwPzecPkUePlB24lQ6yntzRGRbOXUpeeffvopBQsWBCA1NZU5c+ZQpEiRNPMMHDgw+9Kl48qVKzzxxBN88sknvP322zn6vUQkh9is8Nu7sHIsGDYoUhG6zoHQKmYnExE3lOlLz0uXLo3lNv/aslgsjqu0ckr37t0JCQlhypQpNGvWjJo1azJ16tR0501KSiIpKckxTkhIICIiQpeei5jp8mlY0AdiV9nHNZ+w79HxCTA3l4jkWXd66Xmm9+wcPnzY6ZVnt2+++YZt27axefPmTM0/duxYRo4cmcOpRCTTDv4KC/rC1TPg7Q/tJkPNbmanEhE35zIPlTl27BgvvPACX331FX5+fplaZtiwYcTHxzu+jh07lsMpRSRd1lT479vwRUd70SlWBfquVNERkVyRbXdQzmmLFi2iY8eOeHp6OqZZrVYsFgseHh4kJSWleS09uoOyiAkSTtpPQj6y1j6u3R3ajAfvAubmEhGXkWuHsczWokULdu3alWZaz549qVSpEkOGDLlt0RERE+xfDgv7wrXz4FMQHn4PqnUxO5WI5DMuU3YCAwOpWrVqmmkBAQEULlz4pukiYjJriv2w1dqp9nFYNej6GRQua2osEcmfnDpnJzU1lc8//5zTp0/nVB4RcXWXjsGcdn8Vnbq9oddyFR0RMY3T5+z4+/uzd+9eSpUqlVOZcozO2RHJYX8ugYXPwPVL4BsEj7wP93QwO5WIuLhcfeo5QL169dixY4fT30hE3FhqMix73f608uuXILyW/UnlKjoikgc4fc7Oc889x+DBgzl27Bj33nsvAQFpbwSmRziI5DMXD8O8p+HEVvu4wXMQNRK8fEyNJSJyg9OHsTw8bt4ZZLFYMAwDi8WC1WrNtnDZTYexRLLZHz/A9wMgKR78gqHDR1CpndmpRMTN5Pql57GxsU5/ExFxMynXIXo4bPrYPr67LnSZBYVKmptLRCQdTpcdVzwxWUSy0fmDMLcHxP1uHzd+AR4YDp7epsYSEclIlu6zc/DgQaZOncrevXsBqFKlCi+88AJly+rSUhF3MCU6Bk8PCwNblE/7wu75JC98Hh/rVSgQAh1nQIWW5oQUEckkp6/GWrZsGVWqVGHTpk1Ur16d6tWrs3HjRu655x6io6NzIqOI5DJPDwuTo2OYtmK/fUJKIvz4Asx7Gh/rVU4E1YRn1qjoiIhLcPoE5Vq1atGqVSvGjRuXZvrQoUP55Zdf2LZtW7YGzE46QVkk86at2M/k6BhGN/bhqWMj4MwebIaFLSV7Uq/HRPB0mRuwi4iLu9PPb6fLjp+fH7t27aJ8+bS7t2NiYqhevTrXr193OkRuUdkRcc4v/5lK4z/fIcCSxFkjiDXV3qFjl6fMjiUi+Uyu31SwaNGi6d5UcMeOHRQrVszpACKSByVfhUX9aRkzggBLEuusVeiQOl5FR0RcktP7ofv06UPfvn05dOgQjRo1AmDt2rWMHz+ewYMHZ3tAEcllZ/bar7Y6uw8DC1NTOjGDzly32g9t3XTSsohIHud02Rk+fDiBgYG8++67DBs2DIDw8HDeeustBg4cmO0BRSSXGAZs/xJ+fgVSE7nqXZjeV5+hYYuO7GtR3nEOD6DCIyIuxelzdv7u8uXLAAQGBmZboJykc3ZEMpB0GRYPhl3fAXCkUAM6xXWn+4N10xSbG4Vn8IMVVHhEJNfk+h2UExMTMQwDf39/AgMDOXLkCDNnzqRKlSq0bKnLUEVcTtwu+2Gr8wfA4gkPvM6CxHZ0r+Z5U6G5MbbasvxvJBGRXOf0np2WLVvSqVMnnnnmGS5dukTFihXx8fHh3LlzTJ48mWeffTanst4x7dkR+RvDgK2zYclQsCZBYLj9kQ+lGpqdTEQkjVy/Gmvbtm3cf//9AMybN4+wsDCOHDnC559/zrRp05wOICImuJ4A83rC4hftRad8K/tNAlV0RMQNOX0Y69q1a45zdH755Rc6deqEh4cHDRo04MiRI9keUESy2cntMLcnXIwFDy9oMQIaDgAPp//tIyLiEpz+61auXDkWLVrEsWPHWLZsmeM8nTNnzujQkEheZhiwcQbMbGkvOsEloedSaDxQRUdE3JrTf+HefPNNXn75ZUqXLk39+vVp2NC+2/uXX36hVq1a2R5QRLJB4kX49klY8ipYk6HSQ/DMaoioa3YyEZEcl6VLz+Pi4jh16hQ1atTA43//Ity0aRNBQUFUqlQp20NmF52gLPnS8S3283MuHQUPb2j5NtTvBxaL2clERDIl1y89BwgLCyMsLCzNtHr16mVlVSKSUwwD1n8Ay98CWyrcVRq6zIYStc1OJiKSq5wuO1evXmXcuHGsWLGCM2fOYLPZ0rx+6NChbAsnIll07QIsehZiltrHVdrDI++DX7C5uURETOB02enduzerVq3iqaeeonjx4li0K1wkbzm6AeY9DQknwNMXWr8DdXrpsJWI5FtOl50lS5bw008/0bhx45zIIyJZZbPB2qnw37fBsEJIWeg6B4pXNzuZiIipnC47d911FyEhITmRRUSy6spZWNgPDq6wj6t1hYemgK9rPLdORCQnOX3p+ejRo3nzzTe5du1aTuQREWcdXgPT77MXHS8/+7k5nT5R0RER+R+n9+y8++67HDx4kNDQUEqXLo23t3ea17dt25Zt4UTkFmxWWD0JVo0DwwZFKtoPW4VWMTuZiEie4nTZ6dChQw7EEBGnXD4NC3pD7Gr7uOYT0HYi+ASYm0tEJA/K0k0FXZVuKihu4eCvsKAvXD0D3v7QbjLU7GZ2KhGRHJPrTz0HuHTpEp9++inDhg3jwoULgP3w1YkTJ7KyOhHJDGuq/UqrLzrai06xe6DvKhUdEZHbcPow1u+//05UVBTBwcEcPnyYPn36EBISwoIFCzh69Ciff/55TuQUyd8STsL83nBkrX1cuzu0GQ/eBczNJSLiApzeszN48GB69OjB/v378fPzc0xv27Ytq1evztZwIgLsX26/2urIWvApCJ1nwiPTVHRERDLJ6T07mzdvZsaMGTdNL1GiBHFxcdkSSkQAa4r9sNXaqfZxWDXo+hkULmtqLBERV+N02fH19SUhIeGm6TExMRQtWjRbQonke5eOwfxecGyjfVy3j/1p5d5+t15ORERu4vRhrEceeYRRo0aRkpICgMVi4ejRowwZMoTOnTtne0CRfGffz/bDVsc2gm8w/OtzaDdJRUdEJIucLjvvvvsuV65coVixYiQmJtK0aVPKlStHYGAgY8aMyYmMIvlDajIsfQ2+6QbXL0F4bei3yv7EchERyTKnD2MFBwcTHR3N2rVr2blzJ1euXKF27dpERUXlRD6R/OHiYfuTyk9stY8bPAdRI8HLx9RYIiLuQDcVFDHbHz/A9wMgKR78CkGHj6BSW7NTiYjkGbl2U8H169ezePHiNNM+//xzIiMjKVasGH379iUpKcnpACL5Vsp1+PkV+O4pe9G5ux4885uKjohINst02Rk1ahR79uxxjHft2kWvXr2Iiopi6NCh/Pjjj4wdOzZHQoq4nfMHYeaDsOlj+7jxC9DzZyhU0txcIiJuKNPn7OzYsYPRo0c7xt988w3169fnk08+ASAiIoIRI0bw1ltvZXtIEbeyax78OAiSL0OBEOg4Ayq0NDuViIjbynTZuXjxIqGhoY7xqlWraNOmjWNct25djh07lr3pRNxJSiIsHQpb59jHJRtB508huISpsURE3F2mD2OFhoYSGxsLQHJyMtu2baNBgwaO1y9fvoy3t3f2JxRxB2dj4JMW/ys6FmjyCnT/UUVHRCQXZHrPTtu2bRk6dCjjx49n0aJF+Pv7c//99zte//333ylbVrexF7nJzm9g8WBIuQoBRaHTx1D2AbNTiYjkG5neszN69Gi8vLxo2rQpn3zyCZ988gk+Pn/dA2TWrFm0bJlz5x2MHTuWunXrEhgYSLFixejQoQN//vlnjn0/kTuWfBUW9YeF/exFJ7IJPLNGRUdEJJc5fZ+d+Ph4ChYsiKenZ5rpFy5coGDBgmkKUHZq3bo1jz32GHXr1iU1NZXXXnuN3bt388cffxAQEJCpdeg+O5JrzuyFuT3g7D6weEDTodDkZfDwvO2iIiKS1p1+frvsTQXPnj1LsWLFWLVqFU2aNMnUMio7kuMMA7Z/ab9/TmoiFAyzn4Qcef/tlxURkXTd6ee304+LyCvi4+MBCAkJyXCepKSkNDc6TO9p7SLZJumy/dycXd/Zx2UfgI4fQ8Gi5uYSEcnnnH4QaF5gs9kYNGgQjRs3pmrVqhnON3bsWIKDgx1fERERuZhS8pW4XfBxM3vRsXhCixHwxHwVHRGRPMAlD2M9++yzLFmyhDVr1nD33XdnOF96e3YiIiJ0GEuyj2HAllmwdBhYkyCoBHSeCaUamp1MRMRt5LvDWAMGDGDx4sWsXr36lkUHwNfXF19f31xKJvnO9QT4cSDsWWgfV2htf4inf8aHVkVEJPe5TNkxDIPnn3+ehQsXsnLlSiIjI82OJPnZye0wtydcjAUPL4h6CxoOAIvF7GQiIvIPLlN2+vfvz3/+8x++//57AgMDiYuLAyA4OJgCBQqYnE7yDcOwP7zzlzfAmgzBJaHLLIioa3YyERHJgMucs2PJ4F/Ms2fPpkePHplahy49lzuSeBG+HwD7FtvHlR6C9h9AgbvMzSUi4ubyzTk7LtLJxF0d3wLzesKlo+DpAy3fhnp9ddhKRMQFuEzZETGFYcD6D2D5W2BLhbtKQ9c5EF7L5GAiIpJZKjsiGbl2ARY9CzFL7eN7OsLD74FfsLm5RETEKSo7Iuk5ugHmPQ0JJ8DTF1qPhTpP67CViIgLUtkR+TubDdZOhf++DYYVCpezH7YKq2Z2MhERySKVHZEbrpyFhf3g4Ar7uNq/4KHJ4Btobi4REbkjKjsiAIfXwLxecCUOvApA24lQ60kdthIRcQMqO5K/2aywehKsGgeGDYpUhH99BsUqm51MRESyicqO5F+XT8OC3hC72j6u+SS0nQA+AebmEhGRbKWyI/nTwV9hQV+4ega8A+zn5tR4zOxUIiKSA1R2JH+xptoPWa2eBBhQ7B771VZFK5idTEREcojKjuQfCSdhfm84stY+vren/f453nqQrIiIO1PZkfxh/3JY2BeunQefQHh4KlTrYnYqERHJBSo74t6sKfYbBK6dah+HVbcftipc1sxUIiKSi1R2xH1dOgbze8GxjfZxvb7w4Gjw9jM3l4iI5CqVHXFP+362P8Tz+iXwDYb270OV9manEhERE6jsiHtJTYblb8GGD+3j8NrQdTbcVdrMVCIiYiKVHXEfFw/D3J5wcpt93KA/RL0FXj5mphIREZOp7Ih7+OMH+H4AJMWDXyHo8BFUamt2KhERyQNUdsS1pVyH6OGw6WP7+O560GUWFIowN5eIiOQZKjvius4fhLk9IO53+7jxIHjgDfD0NjOViIjkMSo74pp2zYMfB0HyZfAvDB0/hvJRZqcSEZE8SGVHXEtKIiwdClvn2MelGkPnTyEo3NRYIiKSd6nsiOs4G2M/bHVmD2CBJi9D06Hgqf+MRUQkY/qUENew8xtYPBhSrkJAMej0MZRtbnYqERFxASo7krclX4WfX4EdX9nHkU2g06cQGGpuLhERcRkqO5J3ndlrP2x1dh9YPKDZMLj/JfDwNDuZiIi4EJUdyXsMA7Z/ad+jk5oIBcOgy0wofZ/ZyURExAWp7EjeknTZfm7Oru/s47ItoOMMKFjU3FwiIuKyVHYk74jbZT9sdf4AWDztNwhsPAg8PMxOJiIiLkxlR8xnGLBlFiwdBtYkCCphf+RDyQZmJxMRETegsiPmup4APw6EPQvt4wqt7Q/x9A8xN5eIiLgNlR0xz8ntMLcnXIwFDy+IGgkN+4PFYnYyERFxIyo7kqOmRMfg6WFhYIvyf000DNj0Mdalr+NppEBwSeg6G+6uY15QERFxWyo7kqM8PSxMjo4BsBeexIvw/QDYtxhP4EDh5pTrPRsK3GVuUBERcVsqO5KjbuzRmRwdQ2jCbh498iZcOkqS4cX6ci/S7MnXddhKRERylMqO5LiBD5Sj1vEvabDjfbBYOWwLZX3tSXTr8IjZ0UREJB9Q2ZGcde0CLHqW+2OXggUWWxsw3NaX7So6IiKSS3S3Nsk5RzfA9PsgZimpFh9eS+nFYNsLXLT6MW3FfrPTiYhIPqE9O5L9bDZYOxX++zYYVi4WKMnjl56lTdSDxLQoz7QV+9OetCwiIpKDVHYke105Cwv7wcEVAOwr1oZOR7vyzIPVHcXm7yct/30sIiKSE1R2JPscXgPzesGVOPAqAO0mseRsXZ6p6HFTobkxttoMM5KKiEg+orIjd85mhdWTYNU4MGxQtBJ0nQPFKvPiLRbTHh0REckNKjtyZy6fhgW9IXa1fVzzSWg7AXwCzM0lIiLyPyo7knUHf4UFfeDqWfAOgIcmQ43HzE4lIiKShstdev7hhx9SunRp/Pz8qF+/Pps2bTI7Uv5jTbVfafVFR3vRCa0KfVeq6IiISJ7kUmXn22+/ZfDgwYwYMYJt27ZRo0YNWrVqxZkzZ8yOln8knITPH4HVEwED7u0JvZdD0QpmJxMREUmXxTAMl7kcpn79+tStW5cPPvgAAJvNRkREBM8//zxDhw697fIJCQkEBwcTHx9PUFBQTsd1P/uj7ZeVXzsPPoHw8FSo1sXsVCIi4ubu9PPbZc7ZSU5OZuvWrQwbNswxzcPDg6ioKNavX5/uMklJSSQlJTnGCQkJOZ7TLVlT4L+jYe179nHxGtBlNhQua24uERGRTHCZw1jnzp3DarUSGhqaZnpoaChxcXHpLjN27FiCg4MdXxEREbkR1b1cOgZz2v1VdOr1g17RKjoiIuIyXKbsZMWwYcOIj493fB07dszsSK5l38/2Z1sd2wi+wfCvL+yXlXv5mp1MREQk01zmMFaRIkXw9PTk9OnTaaafPn2asLCwdJfx9fXF11cfzE5LTYblb8GGD+3j8NrQdTbcVdrMVCIiIlniMnt2fHx8uPfee1mxYoVjms1mY8WKFTRs2NDEZG7m4mGY1eqvotNwADy9TEVHRERclsvs2QEYPHgw3bt3p06dOtSrV4+pU6dy9epVevbsaXY09/DHD/D9AEiKB79C0HE6VGxjdioREZE74lJl59FHH+Xs2bO8+eabxMXFUbNmTZYuXXrTScvipJTrED0cNn1sH0fUh84zoZBO6BYREdfnUvfZuVO6z046zh+EuT0g7nf7uPEgeOAN8PQ2M5WIiIhDvrnPjuSAXfPgx0GQfBn8C0PHj6F8lNmpREREspXKTn6UkghLh8LWOfZxqcbQ+VMICjc1loiISE5Q2clvzsbYD1ud2QNYoMkr0HQIeOo/BRERcU/6hMtPdn4DiwdDylUIKAadPoayzc1OJSIikqNUdvKD5Kvw8yuw4yv7OLIpdPoEAnUVm4iIuD+VHXd3Zq/9sNXZfWDxgGbD4P6XwMPT7GQiIiK5QmXHXRkGbP8Cfn4VUhMhsLj9JOTS95mdTEREJFep7LijpMv2c3N2fWcfl4uCjjMgoIi5uUREREygsuNu4nbZD1udPwAWT2gxHBq9AB4u8xg0ERGRbKWy4y4MA7bMgqXDwJoEQSWgyywo2cDsZCIiIqZS2XEH1+Phxxdgz0L7uEJr6PAR+IeYm0tERCQPUNlxdSe32w9bXTwMHl4QNRIa9geLxexkIiIieYLKjqsyDPtTyn95A6zJUKgkdJkDd99rdjIREZE8RWXHFSVehO8HwL7F9nGlh6D9h1CgkKmxRERE8iKVHVdzfAvM7QnxR8HTB1qOgXp9dNhKREQkAyo7rsIwYP0HsPwtsKXCXZHQdTaE1zI7mYiISJ6msuMKrl2ARc9CzFL7+J5O8PB74Bdkbi4REREXoLKT1x3dAPOehoQT4OkLbcbDvT102EpERCSTVHbyKpsN1k6B/44BwwqFy0HXzyCsqtnJREREXIrKTl505Sws7AsH/2sfV38U2k0G34Lm5hIREXFBKjt5TexvML83XIkDrwLQbhLUfEKHrURERLJIZSevsFlh9SRYNQ4MGxStBF3nQLHKZicTERFxaSo7ecHl07CgN8Suto9rPQltJoKPv7m5RERE3IDKjtkO/goL+sDVs+AdAA9NgRqPmp1KRETEbajsmMWaCivHwm/vAgaEVoUus6FoBbOTiYiIuBWVHTMknLSfhHxkrX18b09oPRa8C5ibS0RExA2p7OS2/dGwsB9cOw8+gfDIe1C1s9mpRERE3JbKTm6xpsB/R8Pa9+zj4jXsh60KlzU3l4iIiJtT2ckNl47ZH/lwfJN9XK8ftBwNXr7m5hIREckHVHZy2r6f7Q/xvH4JfIOh/QdQ5RGzU4mIiOQbKjs5JTUZlr8FGz60j0vcC11mwV2lzUwlIiKS76js5ISLh2FuTzi5zT5uOABajAAvH1NjiYiI5EcqO1k0JToGTw8LA1uUT/vCH9+TNP85fK1XoMBd0OEjqNjGnJAiIiKispNVnh4WJkfHANgLT8p1+OUN2PwJvsDJoOqEP/0fKBRhblAREZF8TmUni27s0ZkcHUNw4lG6H38L4n4HYMvdPajTcxJ4epuYUEREREBl544MbFEe35R4Oqx/GCzXOG8EsqbqGNp37W52NBEREfkfD7MDuLp+revwua0NG22V6JA6XkVHREQkj1HZuUPTVuxnSkpHeliHc8xaiGkr9psdSURERP5Gh7HuwLQV+5kcHcPgBysxsEV5xxi4+SotERERMYXKThb9VXQqOIrN309a/vtYREREzKOyk0VWm5Gm6NxwY2y1GWbEEhERkX+wGIaRbz6VExISCA4OJj4+nqCgILPjiIiISCbc6ee3TlAWERERt6ayIyIiIm5NZUdERETcmkuUncOHD9OrVy8iIyMpUKAAZcuWZcSIESQnJ5sdTURERPI4l7gaa9++fdhsNmbMmEG5cuXYvXs3ffr04erVq0yaNMnseCIiIpKHuezVWBMnTuSjjz7i0KFDGc6TlJREUlKSY5yQkEBERISuxhIREXEh+fZqrPj4eEJCQm45z9ixYwkODnZ8RURE5FI6ERERyStcsuwcOHCA999/n379+t1yvmHDhhEfH+/4OnbsWC4lFBERkbzC1LIzdOhQLBbLLb/27duXZpkTJ07QunVrunbtSp8+fW65fl9fX4KCgtJ8iYiISP5i6jk7Z8+e5fz587ecp0yZMvj4+ABw8uRJmjVrRoMGDZgzZw4eHs51Nd1BWURExPXc6ee3qVdjFS1alKJFi2Zq3hMnTtC8eXPuvfdeZs+e7XTRAbjR6xISEpxeVkRERMxx43M7q/tnXOLS8xMnTtCsWTNKlSrFpEmTOHv2rOO1sLCwTK/n8uXLADpRWURExAVdvnyZ4OBgp5dzibITHR3NgQMHOHDgAHfffXea15xpeeHh4Rw7dozAwEAsFkt2xwT+urz92LFjbnuoLD+8R9D7dCf54T2C3qc7yQ/vETL/Pg3D4PLly4SHh2fp+7hE2enRowc9evS44/V4eHjcVJZySn44ITo/vEfQ+3Qn+eE9gt6nO8kP7xEy9z6zskfnBpe89FxEREQks1R2RERExK2p7GQzX19fRowYga+vr9lRckx+eI+g9+lO8sN7BL1Pd5If3iPk3vt02WdjiYiIiGSG9uyIiIiIW1PZEREREbemsiMiIiJuTWVHRERE3JrKjpPGjBlDo0aN8Pf3p1ChQunOc/ToUdq1a4e/vz/FihXjlVdeITU19ZbrvXDhAk888QRBQUEUKlSIXr16ceXKlRx4B85buXJlhk+l37x5c4bLNWvW7Kb5n3nmmVxM7rzSpUvflHncuHG3XOb69ev079+fwoULU7BgQTp37szp06dzKbFzDh8+TK9evYiMjKRAgQKULVuWESNGkJycfMvlXGFbfvjhh5QuXRo/Pz/q16/Ppk2bbjn/3LlzqVSpEn5+flSrVo2ff/45l5JmzdixY6lbty6BgYEUK1aMDh068Oeff95ymTlz5ty03fz8/HIpcda89dZbN2WuVKnSLZdxtW0J6f+tsVgs9O/fP935XWFbrl69mocffpjw8HAsFguLFi1K87phGLz55psUL16cAgUKEBUVxf79+2+7Xmd/t9OjsuOk5ORkunbtyrPPPpvu61arlXbt2pGcnMy6dev47LPPmDNnDm+++eYt1/vEE0+wZ88eoqOjWbx4MatXr6Zv37458Rac1qhRI06dOpXmq3fv3kRGRlKnTp1bLtunT580y02YMCGXUmfdqFGj0mR+/vnnbzn/iy++yI8//sjcuXNZtWoVJ0+epFOnTrmU1jn79u3DZrMxY8YM9uzZw5QpU5g+fTqvvfbabZfNy9vy22+/ZfDgwYwYMYJt27ZRo0YNWrVqxZkzZ9Kdf926dXTr1o1evXqxfft2OnToQIcOHdi9e3cuJ8+8VatW0b9/fzZs2EB0dDQpKSm0bNmSq1ev3nK5oKCgNNvtyJEjuZQ46+655540mdesWZPhvK64LQE2b96c5j1GR0cD0LVr1wyXyevb8urVq9SoUYMPP/ww3dcnTJjAtGnTmD59Ohs3biQgIIBWrVpx/fr1DNfp7O92hgzJktmzZxvBwcE3Tf/5558NDw8PIy4uzjHto48+MoKCgoykpKR01/XHH38YgLF582bHtCVLlhgWi8U4ceJEtme/U8nJyUbRokWNUaNG3XK+pk2bGi+88ELuhMompUqVMqZMmZLp+S9dumR4e3sbc+fOdUzbu3evARjr16/PgYTZb8KECUZkZOQt58nr27JevXpG//79HWOr1WqEh4cbY8eOTXf+f/3rX0a7du3STKtfv77Rr1+/HM2Znc6cOWMAxqpVqzKcJ6O/U3nZiBEjjBo1amR6fnfYloZhGC+88IJRtmxZw2azpfu6q21LwFi4cKFjbLPZjLCwMGPixImOaZcuXTJ8fX2Nr7/+OsP1OPu7nRHt2clm69evp1q1aoSGhjqmtWrVioSEBPbs2ZPhMoUKFUqzlyQqKgoPDw82btyY45md9cMPP3D+/Hl69ux523m/+uorihQpQtWqVRk2bBjXrl3LhYR3Zty4cRQuXJhatWoxceLEWx6C3Lp1KykpKURFRTmmVapUiZIlS7J+/frciHvH4uPjCQkJue18eXVbJicns3Xr1jTbwMPDg6ioqAy3wfr169PMD/bfU1fZZmDfbsBtt92VK1coVaoUERERtG/fPsO/Q3nJ/v37CQ8Pp0yZMjzxxBMcPXo0w3ndYVsmJyfz5Zdf8vTTT9/yIdWuuC1viI2NJS4uLs22Cg4Opn79+hluq6z8bmfEJR4E6kri4uLSFB3AMY6Li8twmWLFiqWZ5uXlRUhISIbLmGnmzJm0atXqtg9VffzxxylVqhTh4eH8/vvvDBkyhD///JMFCxbkUlLnDRw4kNq1axMSEsK6desYNmwYp06dYvLkyenOHxcXh4+Pz03nb4WGhubJbfdPBw4c4P3332fSpEm3nC8vb8tz585htVrT/b3bt29fustk9HvqCtsMwGazMWjQIBo3bkzVqlUznK9ixYrMmjWL6tWrEx8fz6RJk2jUqBF79uzJtYciO6t+/frMmTOHihUrcurUKUaOHMn999/P7t27CQwMvGl+V9+WAIsWLeLSpUu3fOC1K27Lv7uxPZzZVln53c6Iyg4wdOhQxo8ff8t59u7de9uT5FxNVt738ePHWbZsGd99991t1//3c46qVatG8eLFadGiBQcPHqRs2bJZD+4kZ97n4MGDHdOqV6+Oj48P/fr1Y+zYsXn6tu1Z2ZYnTpygdevWdO3alT59+txy2byyLcWuf//+7N69+5bnsgA0bNiQhg0bOsaNGjWicuXKzJgxg9GjR+d0zCxp06aN4/9Xr16d+vXrU6pUKb777jt69eplYrKcM3PmTNq0aUN4eHiG87jitsxLVHaAl1566ZaNGqBMmTKZWldYWNhNZ4rfuDInLCwsw2X+ebJVamoqFy5cyHCZ7JCV9z179mwKFy7MI4884vT3q1+/PmDfm5CbH5B3sn3r169Pamoqhw8fpmLFije9HhYWRnJyMpcuXUqzd+f06dM5uu3+ydn3ePLkSZo3b06jRo34+OOPnf5+Zm3L9BQpUgRPT8+broC71TYICwtzav68ZMCAAY6LGJz9F723tze1atXiwIEDOZQu+xUqVIgKFSpkmNmVtyXAkSNHWL58udN7SV1tW97YHqdPn6Z48eKO6adPn6ZmzZrpLpOV3+0MOXWGjzjc7gTl06dPO6bNmDHDCAoKMq5fv57uum6coLxlyxbHtGXLluW5E5RtNpsRGRlpvPTSS1lafs2aNQZg7Ny5M5uT5Zwvv/zS8PDwMC5cuJDu6zdOUJ43b55j2r59+/L0CcrHjx83ypcvbzz22GNGampqltaR17ZlvXr1jAEDBjjGVqvVKFGixC1PUH7ooYfSTGvYsGGePqnVZrMZ/fv3N8LDw42YmJgsrSM1NdWoWLGi8eKLL2Zzupxz+fJl46677jLee++9dF93xW35dyNGjDDCwsKMlJQUp5bL69uSDE5QnjRpkmNafHx8pk5QduZ3O8M8Ts0txpEjR4zt27cbI0eONAoWLGhs377d2L59u3H58mXDMOz/AVatWtVo2bKlsWPHDmPp0qVG0aJFjWHDhjnWsXHjRqNixYrG8ePHHdNat25t1KpVy9i4caOxZs0ao3z58ka3bt1y/f3dyvLlyw3A2Lt3702vHT9+3KhYsaKxceNGwzAM48CBA8aoUaOMLVu2GLGxscb3339vlClTxmjSpElux860devWGVOmTDF27NhhHDx40Pjyyy+NokWLGv/3f//nmOef79MwDOOZZ54xSpYsafz3v/81tmzZYjRs2NBo2LChGW/hto4fP26UK1fOaNGihXH8+HHj1KlTjq+/z+Nq2/Kbb74xfH19jTlz5hh//PGH0bdvX6NQoUKOqyKfeuopY+jQoY75165da3h5eRmTJk0y9u7da4wYMcLw9vY2du3aZdZbuK1nn33WCA4ONlauXJlmu127ds0xzz/f58iRI41ly5YZBw8eNLZu3Wo89thjhp+fn7Fnzx4z3kKmvPTSS8bKlSuN2NhYY+3atUZUVJRRpEgR48yZM4ZhuMe2vMFqtRolS5Y0hgwZctNrrrgtL1++7PhMBIzJkycb27dvN44cOWIYhmGMGzfOKFSokPH9998bv//+u9G+fXsjMjLSSExMdKzjgQceMN5//33H+Ha/25mlsuOk7t27G8BNX7/++qtjnsOHDxtt2rQxChQoYBQpUsR46aWX0rT2X3/91QCM2NhYx7Tz588b3bp1MwoWLGgEBQUZPXv2dBSovKJbt25Go0aN0n0tNjY2zc/h6NGjRpMmTYyQkBDD19fXKFeunPHKK68Y8fHxuZjYOVu3bjXq169vBAcHG35+fkblypWNd955J80euX++T8MwjMTEROO5554z7rrrLsPf39/o2LFjmvKQl8yePTvd/37/vpPXVbfl+++/b5QsWdLw8fEx6tWrZ2zYsMHxWtOmTY3u3bunmf+7774zKlSoYPj4+Bj33HOP8dNPP+VyYudktN1mz57tmOef73PQoEGOn0loaKjRtm1bY9u2bbkf3gmPPvqoUbx4ccPHx8coUaKE8eijjxoHDhxwvO4O2/KGZcuWGYDx559/3vSaK27LG59t//y68T5sNpsxfPhwIzQ01PD19TVatGhx03svVaqUMWLEiDTTbvW7nVkWwzAM5w58iYiIiLgO3WdHRERE3JrKjoiIiLg1lR0RERFxayo7IiIi4tZUdkRERMStqeyIiIiIW1PZEREREbemsiMiIiJuTWVHJJ9Yu3Yt1apVw9vbmw4dOpgdR7KgdOnSWCwWLBYLly5dcmrZZs2aOZbdsWNHjuQTyatUdkTyuB49ejg+pLy9vYmMjOTVV1/l+vXrTq1n8ODB1KxZk9jYWObMmZMzYU2WnJzMhAkTqFGjBv7+/hQpUoTGjRsze/ZsUlJSzI6XoWbNmjFo0KBMzTtq1ChOnTpFcHDwTa9VqlQJX19f4uLibnptwYIFbNq06U6jirgklR0RF9C6dWtOnTrFoUOHmDJlCjNmzGDEiBFOrePgwYM88MAD3H333RQqVChLOZKTk7O0XG5ITk6mVatWjBs3jr59+7Ju3To2bdpE//79ef/999mzZ0+W151eUTLrZxEYGEhYWBgWiyXN9DVr1pCYmEiXLl347LPPblouJCSEokWL5lZMkTxFZUfEBfj6+hIWFkZERAQdOnQgKiqK6Ohox+s2m42xY8cSGRlJgQIFqFGjBvPmzQPg8OHDWCwWzp8/z9NPP43FYnHs2dm9ezdt2rShYMGChIaG8tRTT3Hu3DnHeps1a8aAAQMYNGgQRYoUoVWrVplebuDAgbz66quEhIQQFhbGW2+9leY9Xbp0iX79+hEaGoqfnx9Vq1Zl8eLFjtfXrFnD/fffT4ECBYiIiGDgwIFcvXo1w5/R1KlTWb16NStWrKB///7UrFmTMmXK8Pjjj7Nx40bKly8P2A8FTZ06Nc2yNWvWTJPPYrHw0Ucf8cgjjxAQEMCYMWN46623qFmzJp9++imRkZH4+fk53kfv3r0pWrQoQUFBPPDAA+zcudOxrhvLffHFF5QuXZrg4GAee+wxLl++DNj33K1atYr33nvPsQfv8OHDGb7PjMycOZPHH3+cp556ilmzZjm9vIg7U9kRcTG7d+9m3bp1+Pj4OKaNHTuWzz//nOnTp7Nnzx5efPFFnnzySVatWkVERASnTp0iKCiIqVOncurUKR599FEuXbrEAw88QK1atdiyZQtLly7l9OnT/Otf/0rz/T777DN8fHxYu3Yt06dPd2q5gIAANm7cyIQJExg1apSjoNlsNtq0acPatWv58ssv+eOPPxg3bhyenp6AfS9U69at6dy5M7///jvffvsta9asYcCAARn+XL766iuioqKoVavWTa95e3sTEBDg1M/5rbfeomPHjuzatYunn34agAMHDjB//nwWLFjgOO+la9eunDlzhiVLlrB161Zq165NixYtuHDhgmNdBw8eZNGiRSxevJjFixezatUqxo0bB8B7771Hw4YN6dOnD6dOneLUqVNEREQ4lfXy5cvMnTuXJ598kgcffJD4+Hh+++03p9Yh4tay9iB3Eckt3bt3Nzw9PY2AgADD19fXAAwPDw9j3rx5hmEYxvXr1w1/f39j3bp1aZbr1auX0a1bN8c4ODjYmD17tmM8evRoo2XLlmmWOXbsmAEYf/75p2EYhtG0aVOjVq1aaebJ7HL33Xdfmnnq1q1rDBkyxDAMw1i2bJnh4eHhmP+fevXqZfTt2zfNtN9++83w8PAwEhMT012mQIECxsCBA9N97e9KlSplTJkyJc20GjVqGCNGjHCMAWPQoEFp5hkxYoTh7e1tnDlzJk2moKAg4/r162nmLVu2rDFjxgzHcv7+/kZCQoLj9VdeecWoX7++Y9y0aVPjhRdeyFJ2wzCMjz/+2KhZs6Zj/MILLxjdu3e/ab7Y2FgDMLZv337b7yXiTrxMbVoikinNmzfno48+4urVq0yZMgUvLy86d+4M2Pc2XLt2jQcffDDNMsnJyenu5bhh586d/PrrrxQsWPCm1w4ePEiFChUAuPfee7O0XPXq1dO8Vrx4cc6cOQPAjh07uPvuux3zppft999/56uvvnJMMwwDm81GbGwslStXvmkZwzAyfK9ZUadOnZumlSpVKs15Lzt37uTKlSsULlw4zXyJiYkcPHjQMS5dujSBgYGO8d9/Ftlh1qxZPPnkk47xk08+SdOmTXn//ffTfF+R/EplR8QFBAQEUK5cOcD+wVajRg1mzpxJr169uHLlCgA//fQTJUqUSLOcr69vhuu8cuUKDz/8MOPHj7/pteLFi6f53llZztvbO81rFosFm80GQIECBTLMdeN79OvXj4EDB970WsmSJdNdpkKFCuzbt++W6wXw8PC4qRildwJyeoe90vtZFC9enJUrV940799PAr/Vz+JO/fHHH2zYsIFNmzYxZMgQx3Sr1co333xDnz59suX7iLgylR0RF+Ph4cFrr73G4MGDefzxx6lSpQq+vr4cPXqUpk2bZno9tWvXZv78+ZQuXRovr8z/Kcjqcn9XvXp1jh8/TkxMTLp7d2rXrs0ff/zhKHiZ8fjjj/Paa6+xffv2m/ZopaSkkJycTEBAAEWLFuXUqVOO1xISEoiNjc3S+6hduzZxcXF4eXlRunTpLK0DwMfHB6vVmqVlZ86cSZMmTfjwww/TTJ89ezYzZ85U2RFBJyiLuKSuXbvi6enJhx9+SGBgIC+//DIvvvgin332GQcPHmTbtm28//776V6CfEP//v25cOEC3bp1Y/PmzRw8eJBly5bRs2fPW37wZnW5v2vatClNmjShc+fOREdHExsby5IlS1i6dCkAQ4YMYd26dQwYMIAdO3awf/9+vv/++1ueoDxo0CAaN25MixYt+PDDD9m5cyeHDh3iu+++o0GDBuzfvx+ABx54gC+++ILffvuNXbt20b17d8eJ0c6KioqiYcOGdOjQgV9++YXDhw+zbt06Xn/9dbZs2ZLp9ZQuXZqNGzdy+PBhzp07l+m9PikpKXzxxRd069aNqlWrpvnq3bs3GzduvKNL7kXchcqOiAvy8vJiwIABTJgwgatXrzJ69GiGDx/O2LFjqVy5Mq1bt+ann34iMjIyw3WEh4ezdu1arFYrLVu2pFq1agwaNIhChQrh4ZHxn4asLvdP8+fPp27dunTr1o0qVarw6quvOspS9erVWbVqFTExMdx///3UqlWLN998k/Dw8AzX5+vrS3R0NK+++iozZsygQYMG1K1bl2nTpjFw4ECqVq0KwLBhw2jatCkPPfQQ7dq1o0OHDpQtWzbTuf/OYrHw888/06RJE3r27EmFChV47LHHOHLkCKGhoZlez8svv4ynpydVqlShaNGiHD16NFPL/fDDD5w/f56OHTve9FrlypWpXLkyM2fOzHQOEXdlMbL7rD4REckRpUuXZtCgQZm+2/I/HT58mMjISLZv307NmjWzNZtIXqY9OyIiLmTIkCEULFiQ+Ph4p5Zr06YN99xzTw6lEsnbtGdHRMRFHDlyxHHlWJkyZZw6bHjixAkSExMB+xVtf78ppYi7U9kRERERt6bDWCIiIuLWVHZERETEransiIiIiFtT2RERERG3prIjIiIibk1lR0RERNyayo6IiIi4NZUdERERcWv/DyzREppTxy9xAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(df['Reference Current [A]'], df['Sensor Reading [V]'], 'x')\n", + "plt.plot(df['Reference Current [A]'], fit)\n", + "plt.xlabel('Reference Current [A]')\n", + "plt.ylabel('Sensor Reading [V]')\n", + "plt.legend(['Raw data', 'Fit'])\n", + "plt.savefig('Fit.svg')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "03acc820", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/getting-started/control-with-amdc/current-sensor-cal/resources/current_sensor_calibration.ipynb b/source/getting-started/control-with-amdc/current-sensor-cal/resources/current_sensor_calibration.ipynb new file mode 100644 index 00000000..9fbd8ad8 --- /dev/null +++ b/source/getting-started/control-with-amdc/current-sensor-cal/resources/current_sensor_calibration.ipynb @@ -0,0 +1,243 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "125fae80", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "df = pd.read_csv('exp_data.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "1ba56894", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Reference Current [A]Sensor Reading [V]
0-10.11-1.55
1-6.930.44
2-2.153.42
30.004.70
42.956.60
56.068.53
69.4410.58
\n", + "
" + ], + "text/plain": [ + " Reference Current [A] Sensor Reading [V]\n", + "0 -10.11 -1.55\n", + "1 -6.93 0.44\n", + "2 -2.15 3.42\n", + "3 0.00 4.70\n", + "4 2.95 6.60\n", + "5 6.06 8.53\n", + "6 9.44 10.58" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Lets look at the imported experimental data file\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "aab59367", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Sensor Reading [V]')" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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cywPHDigq6++WgMGDNCIESPKHBssxxK/Gj16tDZv3lzmXBZJ6tmzp3r27Ole7tWrl1q3bq0ZM2boqaeeCnSZ5dKvXz/3f7dv317du3dXkyZNNG/ePA0fPrwKKwucmTNnql+/foqNjS21Tygey2BC2JH04IMPlpmoJalp06ZebSsmJqbYTPGzd+bExMSUOub3k63OnDmjI0eOlDrGH8qz37Nnz9a5556rG264wef36969u6RfzyZU5gdkRY5v9+7ddebMGe3evVutWrUqtj4mJkaFhYU6evSox9mdQ4cOBfTY/Z6v+/j999/r8ssvV69evfTKK6/4/H5VdSxL0qBBA4WFhRW7A66sYxATE+NT/2By7733um9i8PX/6GvWrKlOnTpp586dAarO/+rXr6+WLVuWWnMoH0tJ2rNnj7744gufz5KG2rE8ezwOHTqkxo0bu9sPHTqkjh07ljimPL/bpfJphg/c/miC8qFDh9xtM2bMMJGRkeaXX34pcVtnJyh/99137rbFixcH3QRll8tlEhISzIMPPliu8UuXLjWSzIYNG/xcWeC8+eabxm63myNHjpS4/uwE5fnz57vbtm/fHtQTlPfv329atGhhBg4caM6cOVOubQTbsezWrZu599573ctFRUXmvPPOK3OC8nXXXefR1rNnz6Ce1Opyuczo0aNNbGysyczMLNc2zpw5Y1q1amUeeOABP1cXOMeOHTPnnHOOeeGFF0pcH4rH8rcmTJhgYmJizOnTp30aF+zHUqVMUH722WfdbXl5eV5NUPbld7vUenzqDbNnzx6zbt068+STT5p69eqZdevWmXXr1pljx44ZY379C9iuXTtz1VVXmfXr15vPPvvMNGzY0IwbN869jZUrV5pWrVqZ/fv3u9uuvvpq06lTJ7Ny5UqzdOlS06JFCzNo0KBK37+yfPHFF0aS2bZtW7F1+/fvN61atTIrV640xhizc+dOM3HiRPPdd9+ZnJwc8+GHH5qmTZuayy67rLLL9try5cvNtGnTzPr16012drZ58803TcOGDc3//M//uPv8fj+NMeaee+4xF1xwgfnPf/5jvvvuO9OzZ0/Ts2fPqtiFP7R//37TvHlzk5iYaPbv328OHjzofv22T6gdy7fffts4HA4zZ84cs3XrVnP33Xeb+vXru++KvOOOO8yjjz7q7r9s2TJTo0YN8+yzz5pt27aZCRMmmJo1a5pNmzZV1S78oVGjRhmn02m++uorj+N28uRJd5/f7+eTTz5pFi9ebLKzs82aNWvMwIEDTa1atcyWLVuqYhe88uCDD5qvvvrK5OTkmGXLlpmkpCTToEEDc/jwYWOMNY7lWUVFReaCCy4wY8eOLbYuFI/lsWPH3J+JkszUqVPNunXrzJ49e4wxxkyePNnUr1/ffPjhh2bjxo3mxhtvNAkJCebUqVPubVxxxRXmxRdfdC//0e+2twg7PhoyZIiRVOz15Zdfuvvs3r3b9OvXz9SuXds0aNDAPPjggx6p/csvvzSSTE5Ojrvtp59+MoMGDTL16tUzkZGRZtiwYe4AFSwGDRpkevXqVeK6nJwcj5/D3r17zWWXXWaioqKMw+EwzZs3Nw8//LDJy8urxIp9s2bNGtO9e3fjdDpNrVq1TOvWrc0//vEPjzNyv99PY4w5deqU+etf/2rOOeccU6dOHXPTTTd5hIdgMnv27BL//v72JG+oHssXX3zRXHDBBSY8PNx069bNfPvtt+51vXv3NkOGDPHoP2/ePNOyZUsTHh5u2rZtaz755JNKrtg3pR232bNnu/v8fj/HjBnj/plER0eba665xqxdu7byi/fBrbfeaho3bmzCw8PNeeedZ2699Vazc+dO93orHMuzFi9ebCSZHTt2FFsXisfy7Gfb719n98PlcpnHH3/cREdHG4fDYRITE4vte5MmTcyECRM82sr63faWzRhjfLvwBQAAEDp4zg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg5QTSxbtkwXXXSRatasqf79+1d1OSiH+Ph42Ww22Ww2HT161Kexffr0cY9dv359QOoDghVhBwhyQ4cOdX9I1axZUwkJCXrkkUf0yy+/+LSdlJQUdezYUTk5OZozZ05giq1ihYWFmjJlijp06KA6deqoQYMGuuSSSzR79mydPn26qssrVZ8+fTRmzBiv+k6cOFEHDx6U0+kstu7CCy+Uw+FQbm5usXXvv/++Vq1aVdFSgZBE2AFCwNVXX62DBw9q165dmjZtmmbMmKEJEyb4tI3s7GxdccUVOv/881W/fv1y1VFYWFiucZWhsLBQffv21eTJk3X33Xdr+fLlWrVqlUaPHq0XX3xRW7ZsKfe2SwpKVfWziIiIUExMjGw2m0f70qVLderUKf35z3/W66+/XmxcVFSUGjZsWFllAkGFsAOEAIfDoZiYGMXFxal///5KSkpSenq6e73L5VJqaqoSEhJUu3ZtdejQQfPnz5ck7d69WzabTT/99JPuvPNO2Ww295mdzZs3q1+/fqpXr56io6N1xx136Mcff3Rvt0+fPrr33ns1ZswYNWjQQH379vV6XHJysh555BFFRUUpJiZGTzzxhMc+HT16VCNHjlR0dLRq1aqldu3aaeHChe71S5cu1aWXXqratWsrLi5OycnJOnHiRKk/o+eff15ff/21MjIyNHr0aHXs2FFNmzbV4MGDtXLlSrVo0ULSr5eCnn/+eY+xHTt29KjPZrPp5Zdf1g033KC6detq0qRJeuKJJ9SxY0e99tprSkhIUK1atdz7cdddd6lhw4aKjIzUFVdcoQ0bNri3dXbcG2+8ofj4eDmdTg0cOFDHjh2T9OuZuyVLluiFF15wn8HbvXt3qftZmpkzZ2rw4MG64447NGvWLJ/HA1ZG2AFCzObNm7V8+XKFh4e721JTUzV37lxNnz5dW7Zs0QMPPKDbb79dS5YsUVxcnA4ePKjIyEg9//zzOnjwoG699VYdPXpUV1xxhTp16qTvvvtOn332mQ4dOqS//OUvHu/3+uuvKzw8XMuWLdP06dN9Gle3bl2tXLlSU6ZM0cSJE90BzeVyqV+/flq2bJnefPNNbd26VZMnT1ZYWJikX89CXX311brlllu0ceNGvfPOO1q6dKnuvffeUn8ub731lpKSktSpU6di62rWrKm6dev69HN+4okndNNNN2nTpk268847JUk7d+7Ue++9p/fff98972XAgAE6fPiwFi1apDVr1qhz585KTEzUkSNH3NvKzs7WggULtHDhQi1cuFBLlizR5MmTJUkvvPCCevbsqREjRujgwYM6ePCg4uLifKr12LFjevfdd3X77bfryiuvVF5enr755huftgFYWvm+yB1AZRkyZIgJCwszdevWNQ6Hw0gydrvdzJ8/3xhjzC+//GLq1Kljli9f7jFu+PDhZtCgQe5lp9NpZs+e7V5+6qmnzFVXXeUxZt++fUaS2bFjhzHGmN69e5tOnTp59PF23J/+9CePPl27djVjx441xhizePFiY7fb3f1/b/jw4ebuu+/2aPvmm2+M3W43p06dKnFM7dq1TXJyconrfqtJkyZm2rRpHm0dOnQwEyZMcC9LMmPGjPHoM2HCBFOzZk1z+PBhj5oiIyPNL7/84tG3WbNmZsaMGe5xderUMfn5+e71Dz/8sOnevbt7uXfv3ub+++8vV+3GGPPKK6+Yjh07upfvv/9+M2TIkGL9cnJyjCSzbt26P3wvwEpqVGnSAuCVyy+/XC+//LJOnDihadOmqUaNGrrlllsk/Xq24eTJk7ryyis9xhQWFpZ4luOsDRs26Msvv1S9evWKrcvOzlbLli0lSRdffHG5xrVv395jXePGjXX48GFJ0vr163X++ee7+5ZU28aNG/XWW2+524wxcrlcysnJUevWrYuNMcaUuq/l0aVLl2JtTZo08Zj3smHDBh0/flznnnuuR79Tp04pOzvbvRwfH6+IiAj38m9/Fv4wa9Ys3X777e7l22+/Xb1799aLL77o8b5AdUXYAUJA3bp11bx5c0m/frB16NBBM2fO1PDhw3X8+HFJ0ieffKLzzjvPY5zD4Sh1m8ePH9f111+vp59+uti6xo0be7x3ecbVrFnTY53NZpPL5ZIk1a5du9S6zr7HyJEjlZycXGzdBRdcUOKYli1bavv27WVuV5LsdnuxYFTSBOSSLnuV9LNo3Lixvvrqq2J9fzsJvKyfRUVt3bpV3377rVatWqWxY8e624uKivT2229rxIgRfnkfIJQRdoAQY7fb9dhjjyklJUWDBw9WmzZt5HA4tHfvXvXu3dvr7XTu3Fnvvfee4uPjVaOG9/8UlHfcb7Vv31779+9XZmZmiWd3OnfurK1bt7oDnjcGDx6sxx57TOvWrSt2Ruv06dMqLCxU3bp11bBhQx08eNC9Lj8/Xzk5OeXaj86dOys3N1c1atRQfHx8ubYhSeHh4SoqKirX2JkzZ+qyyy7TSy+95NE+e/ZszZw5k7ADiAnKQEgaMGCAwsLC9NJLLykiIkIPPfSQHnjgAb3++uvKzs7W2rVr9eKLL5Z4C/JZo0eP1pEjRzRo0CCtXr1a2dnZWrx4sYYNG1bmB295x/1W7969ddlll+mWW25Renq6cnJytGjRIn322WeSpLFjx2r58uW69957tX79emVlZenDDz8sc4LymDFjdMkllygxMVEvvfSSNmzYoF27dmnevHnq0aOHsrKyJElXXHGF3njjDX3zzTfatGmThgwZ4p4Y7aukpCT17NlT/fv31+eff67du3dr+fLl+t///V999913Xm8nPj5eK1eu1O7du/Xjjz96fdbn9OnTeuONNzRo0CC1a9fO43XXXXdp5cqVFbrlHrAKwg4QgmrUqKF7771XU6ZM0YkTJ/TUU0/p8ccfV2pqqlq3bq2rr75an3zyiRISEkrdRmxsrJYtW6aioiJdddVVuuiiizRmzBjVr19fdnvp/zSUd9zvvffee+ratasGDRqkNm3a6JFHHnGHpfbt22vJkiXKzMzUpZdeqk6dOmn8+PGKjY0tdXsOh0Pp6el65JFHNGPGDPXo0UNdu3ZVWlqakpOT1a5dO0nSuHHj1Lt3b1133XW69tpr1b9/fzVr1szrun/LZrPp008/1WWXXaZhw4apZcuWGjhwoPbs2aPo6Givt/PQQw8pLCxMbdq0UcOGDbV3716vxn300Uf66aefdNNNNxVb17p1a7Vu3VozZ870ug7AqmzG37P6AAABER8frzFjxnj9tOXf2717txISErRu3Tp17NjRr7UBwYwzOwAQQsaOHat69eopLy/Pp3H9+vVT27ZtA1QVENw4swMAIWLPnj3uO8eaNm3q02XDAwcO6NSpU5J+vaPttw+lBKyOsAMAACyNy1gAAMDSCDsAAMDSCDsAAMDSCDsAAMDSCDsAAMDSCDsAAMDSCDsAAMDSCDsAAMDS/h9hu0j6vK+iGAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(df['Reference Current [A]'], df['Sensor Reading [V]'], 'x')\n", + "plt.xlabel('Reference Current [A]')\n", + "plt.ylabel('Sensor Reading [V]')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1a6b2d9f", + "metadata": {}, + "outputs": [], + "source": [ + "# Lets fit a first order function to our experimental data\n", + "\n", + "x= np.polyfit(df['Reference Current [A]'],df['Sensor Reading [V]'],1 );" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "b9be90e3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Gain: 0.6213316322731629\n", + "Offset: 4.739969343983164\n" + ] + } + ], + "source": [ + "# Lets print out the gain and the offset\n", + "\n", + "print(\"Gain: \", x[0])\n", + "print(\"Offset: \", x[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "7d6aa0c3", + "metadata": {}, + "outputs": [], + "source": [ + "# Lets get an expression using the obtained gain and offset\n", + "\n", + "fit = df['Reference Current [A]']*x[0] + x[1];" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c8253993", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(df['Reference Current [A]'], df['Sensor Reading [V]'], 'x')\n", + "plt.plot(df['Reference Current [A]'], fit)\n", + "plt.xlabel('Reference Current [A]')\n", + "plt.ylabel('Sensor Reading [V]')\n", + "plt.legend(['Raw data', 'Fit'])\n", + "plt.savefig('Fit.svg')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "03acc820", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/getting-started/control-with-amdc/current-sensor-cal/resources/current_sensor_drawing.svg b/source/getting-started/control-with-amdc/current-sensor-cal/resources/current_sensor_drawing.svg new file mode 100644 index 00000000..4c549c3b --- /dev/null +++ b/source/getting-started/control-with-amdc/current-sensor-cal/resources/current_sensor_drawing.svg @@ -0,0 +1,1145 @@ + + + +InductorInductorInductorInductorInductorInductorPhase UPhase VPhase WThree phase motorCurrent sensorMotor DriveVDCIu Iv Iw diff --git a/source/getting-started/control-with-amdc/current-sensor-cal/resources/exp_data.csv b/source/getting-started/control-with-amdc/current-sensor-cal/resources/exp_data.csv new file mode 100644 index 00000000..6564cb49 --- /dev/null +++ b/source/getting-started/control-with-amdc/current-sensor-cal/resources/exp_data.csv @@ -0,0 +1,8 @@ +Reference Current [A],Sensor Reading [V] +-10.11,-1.55 +-6.93,0.44 +-2.15,3.42 +0,4.7 +2.95,6.6 +6.06,8.53 +9.44,10.58 diff --git a/source/getting-started/control-with-amdc/current-sensor-cal/resources/fit.svg b/source/getting-started/control-with-amdc/current-sensor-cal/resources/fit.svg new file mode 100644 index 00000000..e690e36c --- /dev/null +++ b/source/getting-started/control-with-amdc/current-sensor-cal/resources/fit.svg @@ -0,0 +1,1117 @@ + + + + + + + + 2024-06-05T23:19:51.533373 + image/svg+xml + + + Matplotlib v3.5.3, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 3bb86ef381b028cae5a165bfbb352be7da96d944 Mon Sep 17 00:00:00 2001 From: Eric Severson Date: Sat, 7 Dec 2024 21:27:21 -0600 Subject: [PATCH 4/7] Fix current calibration images (#116) --- .../control-with-amdc/current-sensor-cal/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/getting-started/control-with-amdc/current-sensor-cal/index.md b/source/getting-started/control-with-amdc/current-sensor-cal/index.md index a835f55f..783b7cfb 100644 --- a/source/getting-started/control-with-amdc/current-sensor-cal/index.md +++ b/source/getting-started/control-with-amdc/current-sensor-cal/index.md @@ -10,7 +10,7 @@ Current sensors are transducers which produce an output signal (either current o A method is now provided to calibrate the current sensors in a motor drive. An example of the assumed system for a three phase motor is shown in the figure below. - +![Current Sensor Configuration](resources/current_sensor_drawing.svg) Typically, each phase has a current sensor associated with it that needs to be calibrated. This method assumes that the signal measured by the AMDC for each sensor is a voltage that must be converted into a current value. @@ -26,8 +26,7 @@ Typically, each phase has a current sensor associated with it that needs to be c An example of the results are shown in the plot below. The obtained gain and offset can be used directly in the control code to convert the sensor reading into the actual current measurement. - - +![Example Results](resources/fit.svg) ```{tip} Be sure to conduct the calibration process over the full range of current data (both positive and negative current) to account for any variation in the current sensor reading due to directionality of current. From 29de32c93ff185f8ed902e421cba9c0e79590793 Mon Sep 17 00:00:00 2001 From: Eric Severson Date: Sat, 7 Dec 2024 21:40:24 -0600 Subject: [PATCH 5/7] Add control topic TOC --- source/getting-started/control-with-amdc/index.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/source/getting-started/control-with-amdc/index.md b/source/getting-started/control-with-amdc/index.md index 284fb6d8..c7b5d929 100644 --- a/source/getting-started/control-with-amdc/index.md +++ b/source/getting-started/control-with-amdc/index.md @@ -1,14 +1,13 @@ # Control with AMDC -Foo bar +The AMDC Platform provides a versatile and open foundation for establishing high performance motor controls. This section of the documentation explains how to use the AMDC's capabilties to implement standard motor control functionality. +| Control Topic | Aim / Goal / Outcome | +|---|---| +| [Current Sensor Calibration](current-sensor-cal/index.md) | Approach and tools to calibrate current sensor gain and offset. | ```{toctree} :hidden: -current-sensor-cal/index -inv-pwm-dt-comp/index -encoder-fb/index -integrator-anti-windup/index -simulink-code-gen/index -``` \ No newline at end of file +Current Sensor Calibration +``` From f4f3ca7f9402ca5121bdb7f16e54b021c58ea10a Mon Sep 17 00:00:00 2001 From: Eric Severson Date: Sat, 7 Dec 2024 21:41:36 -0600 Subject: [PATCH 6/7] Remove placeholder articles --- .../current-control/continuous-time/cvcr/index.md | 1 - .../current-control/continuous-time/index.md | 12 ------------ .../current-control/continuous-time/sfpi/index.md | 3 --- .../continuous-time/single-phase/index.md | 3 --- .../continuous-time/three-phase/index.md | 3 --- .../current-control/discrete-time/c2d/index.md | 3 --- .../discrete-time/direct-digital-cvcr/index.md | 3 --- .../current-control/discrete-time/index.md | 8 -------- source/applications/current-control/index.md | 11 ----------- .../load-modeling/dq-machine/index.md | 3 --- .../current-control/load-modeling/index.md | 9 --------- .../load-modeling/mp-winding/index.md | 3 --- .../current-control/load-modeling/rl-load/index.md | 9 --------- source/applications/maglev-control/index.md | 3 --- source/applications/speed-control/index.md | 3 --- .../control-with-amdc/encoder-fb/index.md | 13 ------------- .../integrator-anti-windup/index.md | 9 --------- .../control-with-amdc/inv-pwm-dt-comp/index.md | 6 ------ .../control-with-amdc/simulink-code-gen/index.md | 3 --- 19 files changed, 108 deletions(-) delete mode 100644 source/applications/current-control/continuous-time/cvcr/index.md delete mode 100644 source/applications/current-control/continuous-time/index.md delete mode 100644 source/applications/current-control/continuous-time/sfpi/index.md delete mode 100644 source/applications/current-control/continuous-time/single-phase/index.md delete mode 100644 source/applications/current-control/continuous-time/three-phase/index.md delete mode 100644 source/applications/current-control/discrete-time/c2d/index.md delete mode 100644 source/applications/current-control/discrete-time/direct-digital-cvcr/index.md delete mode 100644 source/applications/current-control/discrete-time/index.md delete mode 100644 source/applications/current-control/index.md delete mode 100644 source/applications/current-control/load-modeling/dq-machine/index.md delete mode 100644 source/applications/current-control/load-modeling/index.md delete mode 100644 source/applications/current-control/load-modeling/mp-winding/index.md delete mode 100644 source/applications/current-control/load-modeling/rl-load/index.md delete mode 100644 source/applications/maglev-control/index.md delete mode 100644 source/applications/speed-control/index.md delete mode 100644 source/getting-started/control-with-amdc/encoder-fb/index.md delete mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/index.md delete mode 100644 source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md delete mode 100644 source/getting-started/control-with-amdc/simulink-code-gen/index.md diff --git a/source/applications/current-control/continuous-time/cvcr/index.md b/source/applications/current-control/continuous-time/cvcr/index.md deleted file mode 100644 index 86a85b8d..00000000 --- a/source/applications/current-control/continuous-time/cvcr/index.md +++ /dev/null @@ -1 +0,0 @@ -# Complex Vector Current Regulator (CVCR) \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/index.md b/source/applications/current-control/continuous-time/index.md deleted file mode 100644 index e8e3cc94..00000000 --- a/source/applications/current-control/continuous-time/index.md +++ /dev/null @@ -1,12 +0,0 @@ -# Continuous-Time Control - -Foo bar - -```{toctree} -:hidden: - -Single-Phase -Three-Phase -sfpi/index -cvcr/index -``` \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/sfpi/index.md b/source/applications/current-control/continuous-time/sfpi/index.md deleted file mode 100644 index 819571e8..00000000 --- a/source/applications/current-control/continuous-time/sfpi/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Synchronous Frame PI (SFPI) Current Regulation - -Foo bar \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/single-phase/index.md b/source/applications/current-control/continuous-time/single-phase/index.md deleted file mode 100644 index 0e095f17..00000000 --- a/source/applications/current-control/continuous-time/single-phase/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Single-Phase Current Regulation - -Foo bar \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/three-phase/index.md b/source/applications/current-control/continuous-time/three-phase/index.md deleted file mode 100644 index c4447fac..00000000 --- a/source/applications/current-control/continuous-time/three-phase/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Three-Phase Current Regulation - -Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/c2d/index.md b/source/applications/current-control/discrete-time/c2d/index.md deleted file mode 100644 index be440135..00000000 --- a/source/applications/current-control/discrete-time/c2d/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Continuous-to-Discrete Approximations - -Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md b/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md deleted file mode 100644 index b934e87e..00000000 --- a/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Direct Digital CVCR - -Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/index.md b/source/applications/current-control/discrete-time/index.md deleted file mode 100644 index 111d7f0c..00000000 --- a/source/applications/current-control/discrete-time/index.md +++ /dev/null @@ -1,8 +0,0 @@ -# Discrete-Time Control - -```{toctree} -:hidden: - -c2d/index -direct-digital-cvcr/index -``` \ No newline at end of file diff --git a/source/applications/current-control/index.md b/source/applications/current-control/index.md deleted file mode 100644 index 23251a1c..00000000 --- a/source/applications/current-control/index.md +++ /dev/null @@ -1,11 +0,0 @@ -# Current Control - -Foo bar - -```{toctree} -:hidden: - -load-modeling/index -continuous-time/index -discrete-time/index -``` \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/dq-machine/index.md b/source/applications/current-control/load-modeling/dq-machine/index.md deleted file mode 100644 index 8c7c14a9..00000000 --- a/source/applications/current-control/load-modeling/dq-machine/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# DQ Machine Model - -Foo bar diff --git a/source/applications/current-control/load-modeling/index.md b/source/applications/current-control/load-modeling/index.md deleted file mode 100644 index 441b005b..00000000 --- a/source/applications/current-control/load-modeling/index.md +++ /dev/null @@ -1,9 +0,0 @@ -# Load Modeling - -```{toctree} -:hidden: - -rl-load/index -dq-machine/index -mp-winding/index -``` \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/mp-winding/index.md b/source/applications/current-control/load-modeling/mp-winding/index.md deleted file mode 100644 index 8e31b609..00000000 --- a/source/applications/current-control/load-modeling/mp-winding/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Multi-Phase Winding - -Introduce generalized Clarke transform and how to apply it to $m$ phase windings, decoupled subspaces, etc. \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/rl-load/index.md b/source/applications/current-control/load-modeling/rl-load/index.md deleted file mode 100644 index 5881c553..00000000 --- a/source/applications/current-control/load-modeling/rl-load/index.md +++ /dev/null @@ -1,9 +0,0 @@ -# RL Load Model - -Single phase RL load. Content from the lecture series on RL load. This will be a short note. -- Circuit diagram -- Governing differential equation relating V and I -- Transfer function in Laplace domain relating V and I -- Summarize as plant that a controller could use. - - diff --git a/source/applications/maglev-control/index.md b/source/applications/maglev-control/index.md deleted file mode 100644 index f4adc1b0..00000000 --- a/source/applications/maglev-control/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Maglev Displacement Control - -Basics of levitation systems, mechanical system stability via PID control. \ No newline at end of file diff --git a/source/applications/speed-control/index.md b/source/applications/speed-control/index.md deleted file mode 100644 index 7f684070..00000000 --- a/source/applications/speed-control/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Speed Control - -How to get a motor to spin at a desired speed using FOC? \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/encoder-fb/index.md b/source/getting-started/control-with-amdc/encoder-fb/index.md deleted file mode 100644 index 842e3c27..00000000 --- a/source/getting-started/control-with-amdc/encoder-fb/index.md +++ /dev/null @@ -1,13 +0,0 @@ -# Encoder Feedback - -## Calibration - -- Converting from raw counts to "theta" -- Direction: +/- depending on phase connections -- Sync machines: dq offset - -## Computing Speed from Position - -- LPF -- State Filter -- Observer \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md deleted file mode 100644 index f35afa77..00000000 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ /dev/null @@ -1,9 +0,0 @@ -# Integrator Anti-Windup - -- How to think about performance of anti-windup -- Different methods - - clamping - - back tracking -- Implementation (continuous/discrete-time) - - Simulink - - Handwritten C code \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md b/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md deleted file mode 100644 index 32787da4..00000000 --- a/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md +++ /dev/null @@ -1,6 +0,0 @@ -# Inverter PWM Dead-Time Compensation - -- Sources of non-linearity - - Dead-time -- How to do -- Example results \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/simulink-code-gen/index.md b/source/getting-started/control-with-amdc/simulink-code-gen/index.md deleted file mode 100644 index 5500ece9..00000000 --- a/source/getting-started/control-with-amdc/simulink-code-gen/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Simulink Control Code Generation - -This should basically be a port of the AMDC-Examples autogen docs, examples, etc \ No newline at end of file From a5694d2bf0ca2492b59cc9b1c60b0e6bb8e6c24c Mon Sep 17 00:00:00 2001 From: Eric Severson Date: Sat, 7 Dec 2024 21:45:01 -0600 Subject: [PATCH 7/7] Remove unused TOC entries --- source/index.rst | 8 -------- 1 file changed, 8 deletions(-) diff --git a/source/index.rst b/source/index.rst index 82f59fa5..71745d26 100644 --- a/source/index.rst +++ b/source/index.rst @@ -24,14 +24,6 @@ AMDC Platform Documentation getting-started/user-guide/index getting-started/control-with-amdc/index -.. toctree:: - :hidden: - :caption: Applications - - applications/current-control/index - applications/speed-control/index - applications/maglev-control/index - .. toctree:: :hidden: :caption: Hardware