AD4130 Mbed IIO Firmware
Dependencies: tempsensors sdp_k1_sdram
scripts/ad4130_calibration.py@2:871d585d96ee, 2022-07-15 (annotated)
- Committer:
- MPhalke@MPHALKE-L02.ad.analog.com
- Date:
- Fri Jul 15 17:47:44 2022 +0530
- Revision:
- 2:871d585d96ee
AD4130 firmware - initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1 | import serial |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 2 | from time import sleep |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 3 | from ad4130 import * |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 4 | from ad4130_xattr import * |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 5 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 6 | # Delays in second |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 7 | short_time = 0.2 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 8 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 9 | # Calibration type identifiers |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 10 | internal_calibration = '1' |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 11 | system_calibration = '2' |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 12 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 13 | # Analog input mapping as configured in the firmware |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 14 | ain_mapping = { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 15 | "User Default" : [ 'AIN0-AVSS', 'AIN1-AVSS', 'AIN2-AVSS', 'AIN3-AVSS', |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 16 | 'AIN4-AVSS', 'AIN5-AVSS', 'AIN6-AVSS', 'AIN7-AVSS', |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 17 | 'AIN8-AVSS', 'AIN9-AVSS', 'AIN10-AVSS', 'AIN11-AVSS', |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 18 | 'AIN12-AVSS', 'AIN13-AVSS', 'AIN14-AVSS', 'AIN15-AVSS' |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 19 | ], |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 20 | "Thermistor" : [ 'AIN4-AIN5' ], |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 21 | "Thermocouple" : [ 'AIN2-AIN3', 'AIN4-AIN5' ], |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 22 | "2-Wire RTD" : [ 'AIN2-AIN3' ], |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 23 | "3-Wire RTD" : [ 'AIN2-AIN3' ], |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 24 | "4-Wire RTD" : [ 'AIN2-AIN3' ], |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 25 | "Loadcell" : [ 'AIN5-AIN6' ], |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 26 | "ECG" : [ 'AIN11-AIN14' ], |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 27 | "Noise Test" : [ 'AIN0-AIN1' ], |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 28 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 29 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 30 | # IIO Channel name and respective channel index mapping |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 31 | chn_mappping = { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 32 | "voltage0" : 0, "voltage1" : 1, "voltage2" : 2, "voltage3" : 3, "voltage4" : 4, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 33 | "voltage5" : 5, "voltage6" : 6, "voltage7" : 7, "voltage8" : 8, "voltage9" : 9, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 34 | "voltage10" : 10, "voltage11" : 11, "voltage12" : 12, "voltage13" : 13, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 35 | "voltage14" : 14, "voltage15" : 15, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 36 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 37 | "current0" : 0, "current1" : 1, "current2" : 2, "current3" : 3, "current4" : 4, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 38 | "current5" : 5, "current6" : 6, "current7" : 7, "current8" : 8, "current9" : 9, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 39 | "current10" : 10, "current11" : 11, "current12" : 12, "current13" : 13, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 40 | "current14" : 14, "current15" : 15, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 41 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 42 | "temp0" : 0, "temp1" : 1, "temp2" : 2, "temp3" : 3, "temp4" : 4, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 43 | "temp5" : 5, "temp6" : 6, "temp7" : 7, "temp8" : 8, "temp9" : 9, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 44 | "temp10" : 10, "temp11" : 11, "temp12" : 12, "temp13" : 13, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 45 | "temp14" : 14, "temp15" : 15, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 46 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 47 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 48 | def init_calibration(): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 49 | global device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 50 | global demo_config |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 51 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 52 | ######## User configuration ########## |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 53 | # Configure the backend for PC to IIOD interface |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 54 | uri = "serial:COM12,230400" # For UART, baud rate must be same as set in the FW. COM port is physical Or VCOM. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 55 | device_name = "ad4130" # Name of the device must be same as set in the FW. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 56 | ###################################### |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 57 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 58 | # Create an IIO device context |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 59 | device = ad4130_xattr(uri, device_name) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 60 | device._ctx.set_timeout(100000) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 61 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 62 | # Get current user device config from the firmware |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 63 | demo_config = device.demo_config |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 64 | print("\r\nDemo Config: {}\r\n".format(demo_config)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 65 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 66 | def get_calibration_status(calibration_type, chn, chn_index): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 67 | global gain_before_calib, gain_after_calib |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 68 | global offset_before_calib, offset_after_calib |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 69 | global calibration_status |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 70 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 71 | if (calibration_type == system_calibration): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 72 | calib_status = chn.system_calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 73 | else: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 74 | calib_status = chn.internal_calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 75 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 76 | gain_before_calib = calib_status[0:8] |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 77 | gain_after_calib = calib_status[8:16] |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 78 | offset_before_calib = calib_status[16:24] |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 79 | offset_after_calib = calib_status[24:32] |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 80 | calibration_status = calib_status[32:] |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 81 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 82 | def perform_calibration(): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 83 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 84 | if (demo_config == "Power Test"): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 85 | # Power test uses internal ADC channels, on which calibration can't be performed |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 86 | print("Invalid demo mode config. Calibration can't be performed on internal ADC channels!!") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 87 | return |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 88 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 89 | # Select calibration type |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 90 | calibration_type = input("\r\nSelect Calibration Type:\r\n\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 91 | {}. Internal Calibration\r\n\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 92 | {}. System Calibration\r\n".format(internal_calibration, system_calibration)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 93 | if (calibration_type > system_calibration): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 94 | print("Invalid Input!!") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 95 | return |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 96 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 97 | # Perform calibration for all channels |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 98 | for chn in device.channel: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 99 | chn_index = chn_mappping[chn.name] |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 100 | print("-------------------------------------------") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 101 | print("Calibrating channel {} ".format(chn_index)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 102 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 103 | if (calibration_type == system_calibration): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 104 | # Perform zero-scale (offset) system calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 105 | val = input("Apply zero-scale voltage between {} and press enter".format(ain_mapping[demo_config][chn_index])) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 106 | chn.system_calibration = "start_calibration" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 107 | sleep(short_time) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 108 | get_calibration_status(calibration_type, chn, chn_index) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 109 | print("Offset (before calibration): 0x{}".format(offset_before_calib)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 110 | print("Offset (after calibration): 0x{}".format(offset_after_calib)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 111 | if (calibration_status == "calibration_done"): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 112 | print("System offset calibration successfull..\r\n") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 113 | else: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 114 | print("System offset calibration failed!!\r\n") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 115 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 116 | # Perform full-scale (gain) system calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 117 | val = input("Apply full-scale voltage between {} and press enter".format(ain_mapping[demo_config][chn_index])) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 118 | chn.system_calibration = "start_calibration" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 119 | sleep(short_time) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 120 | get_calibration_status(calibration_type, chn, chn_index) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 121 | print("Gain (before calibration): 0x{}".format(gain_before_calib)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 122 | print("Gain (after calibration): 0x{}".format(gain_after_calib)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 123 | if (calibration_status == "calibration_done"): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 124 | print("System gain calibration successfull..\r\n") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 125 | else: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 126 | print("System gain calibration failed!!\r\n") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 127 | else: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 128 | # Perform full-scale (gain) internal calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 129 | chn.internal_calibration = "start_calibration" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 130 | sleep(short_time) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 131 | get_calibration_status(calibration_type, chn, chn_index) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 132 | print("Gain (before calibration): 0x{}".format(gain_before_calib)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 133 | print("Gain (after calibration): 0x{}".format(gain_after_calib)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 134 | if (calibration_status == "calibration_done"): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 135 | print("Internal gain calibration successfull..\r\n") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 136 | elif (calibration_status == "calibration_skipped"): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 137 | print("Internal gain calibration skipped due to PGA=1\r\n") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 138 | else: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 139 | print("Internal gain calibration failed..\r\n") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 140 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 141 | # Perform zero-scale (offset) internal calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 142 | chn.internal_calibration = "start_calibration" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 143 | sleep(short_time) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 144 | get_calibration_status(calibration_type, chn, chn_index) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 145 | print("Offset (before calibration): 0x{}".format(offset_before_calib)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 146 | print("Offset (after calibration): 0x{}".format(offset_after_calib)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 147 | if (calibration_status == "calibration_done"): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 148 | print("Internal offset calibration successfull..\r\n") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 149 | else: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 150 | print("Internal offset calibration failed!!\r\n") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 151 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 152 | def exit(): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 153 | global device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 154 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 155 | # Delete the objects |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 156 | del device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 157 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 158 | def main(): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 159 | init_calibration() |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 160 | perform_calibration() |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 161 | exit() |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 162 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 163 | if __name__ == "__main__": |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 164 | main() |