123

Dependencies:   mbed

Fork of LG by igor Apu

Committer:
Diletant
Date:
Sun May 22 18:59:20 2016 +0000
Revision:
166:c3c0b8a90d81
Parent:
161:efd949e8d536
Child:
167:bedc0a9d559a
Device & ... update. Not final!!!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Diletant 149:abbf7663d27d 1 #ifndef __DEVICE_PLCS_H__
Diletant 149:abbf7663d27d 2 #define __DEVICE_PLCS_H__
Diletant 149:abbf7663d27d 3
Diletant 166:c3c0b8a90d81 4 //Path length control system sequencer typedefs
Diletant 166:c3c0b8a90d81 5 typedef struct _DevicePLCSSequencerSettings {
Diletant 166:c3c0b8a90d81 6 uint8_t enabled; //Enable sequence generation
Diletant 166:c3c0b8a90d81 7 uint8_t voltage; //Modulate voltage output
Diletant 166:c3c0b8a90d81 8 uint8_t io; //Modulate GPIO pin
Diletant 166:c3c0b8a90d81 9 uint32_t sequence[64]; //Generator sequence
Diletant 166:c3c0b8a90d81 10 } DevicePLCSSequencerSettings;
Diletant 166:c3c0b8a90d81 11
Diletant 166:c3c0b8a90d81 12 typedef struct _DevicePLCSSequencerState {
Diletant 166:c3c0b8a90d81 13 uint8_t enabled; //Enable sequence generation
Diletant 166:c3c0b8a90d81 14 uint8_t counter; //Sequence counter: sequence position = device.measurement.counter + device.measurement.length * device.plcs.sequencer.counter
Diletant 166:c3c0b8a90d81 15 uint8_t voltage; //Modulate voltage output
Diletant 166:c3c0b8a90d81 16 uint8_t io; //Modulate GPIO pin
Diletant 166:c3c0b8a90d81 17 } DevicePLCSSequencerState;
Diletant 166:c3c0b8a90d81 18
Diletant 166:c3c0b8a90d81 19 typedef struct _DevicePLCSSequencer {
Diletant 166:c3c0b8a90d81 20 DevicePLCSSequencerSettings settings;
Diletant 166:c3c0b8a90d81 21 DevicePLCSSequencerState state;
Diletant 166:c3c0b8a90d81 22 } DevicePLCSSequencer;
Diletant 166:c3c0b8a90d81 23
Diletant 166:c3c0b8a90d81 24 //Path length control system input ( = ADC - low pass filter - code - voltage) typedefs
Diletant 166:c3c0b8a90d81 25 typedef struct _DevicePLCSInput {
Diletant 166:c3c0b8a90d81 26 int32_t voltage;
Diletant 166:c3c0b8a90d81 27 int32_t sum;
Diletant 166:c3c0b8a90d81 28 int32_t counter;
Diletant 166:c3c0b8a90d81 29 int32_t average;
Diletant 166:c3c0b8a90d81 30 } DevicePLCSInput;
Diletant 166:c3c0b8a90d81 31
Diletant 166:c3c0b8a90d81 32 //Path length control system phase detector typedefs
Diletant 166:c3c0b8a90d81 33 typedef struct _DevicePLCSPhaseDetectorSettings {
Diletant 166:c3c0b8a90d81 34 uint8_t enabled; //Enable phase detector output
Diletant 166:c3c0b8a90d81 35 uint8_t input; //Take ISACS input as feedback
Diletant 166:c3c0b8a90d81 36 uint8_t output; //Take ISACS output as feedback
Diletant 166:c3c0b8a90d81 37 uint8_t sequencer; //Take sequencer as reference (and ISACS amplitude/output as feedback)
Diletant 166:c3c0b8a90d81 38 uint8_t delta; //Take delta as reference (and ISACS amplitude/output delta as feedback)
Diletant 166:c3c0b8a90d81 39 uint8_t delay; //Phase detector sequence delay
Diletant 166:c3c0b8a90d81 40 } DevicePLCSPhaseDetectorSettings;
Diletant 166:c3c0b8a90d81 41
Diletant 166:c3c0b8a90d81 42 typedef struct _DevicePLCSPhaseDetectorState {
Diletant 166:c3c0b8a90d81 43 uint8_t enabled; //Enable phase detector output
Diletant 166:c3c0b8a90d81 44 uint8_t input; //Take ISACS amplitude as feedback
Diletant 166:c3c0b8a90d81 45 uint8_t output; //Take ISACS output as feedback
Diletant 166:c3c0b8a90d81 46 uint8_t sequencer; //Take sequencer as reference (and ISACS amplitude as feedback)
Diletant 166:c3c0b8a90d81 47 uint8_t delta; //Take PLCS output delta as reference (and ISACS amplitude/output delta as feedback)
Diletant 166:c3c0b8a90d81 48 uint8_t delay; //Phase detector sequence delay
Diletant 166:c3c0b8a90d81 49 uint32_t phase; //Phase detector output
Diletant 166:c3c0b8a90d81 50 } DevicePLCSPhaseDetectorState;
Diletant 156:e68ee0bcdcda 51
Diletant 166:c3c0b8a90d81 52 typedef struct _DevicePLCSPhaseDetector {
Diletant 166:c3c0b8a90d81 53 DevicePLCSPhaseDetectorSettings settings;
Diletant 166:c3c0b8a90d81 54 DevicePLCSPhaseDetectorState state;
Diletant 166:c3c0b8a90d81 55 } DevicePLCSPhaseDetector;
Diletant 166:c3c0b8a90d81 56
Diletant 166:c3c0b8a90d81 57 //Path length control system output ( = DAC + amplifier + control unit + heater/piezo) typedefs
Diletant 166:c3c0b8a90d81 58 typedef struct _DevicePLCSOutputInterpolatorSettings {
Diletant 166:c3c0b8a90d81 59 uint32_t points; //Number of actual control points (up to 16)
Diletant 166:c3c0b8a90d81 60 int32_t voltage[16]; //Output voltage control points in signed 16.16 fixed point format
Diletant 166:c3c0b8a90d81 61 int32_t code[16]; //DAC code control points
Diletant 166:c3c0b8a90d81 62 } DevicePLCSOutputInterpolatorSettings;
Diletant 166:c3c0b8a90d81 63
Diletant 166:c3c0b8a90d81 64 typedef struct _DevicePLCSOutputInterpolator {
Diletant 166:c3c0b8a90d81 65 DevicePLCSOutputInterpolatorSettings settings;
Diletant 166:c3c0b8a90d81 66 } DevicePLCSSOutputInterpolator;
Diletant 166:c3c0b8a90d81 67
Diletant 166:c3c0b8a90d81 68 typedef struct _DevicePLCSOutputStartSettings {
Diletant 166:c3c0b8a90d81 69 int32_t voltage; //Output voltage in signed 16.16 fixed point format
Diletant 166:c3c0b8a90d81 70 } DevicePLCSOutputStartSettings;
Diletant 166:c3c0b8a90d81 71
Diletant 166:c3c0b8a90d81 72 typedef struct _DevicePLCSOutputStart {
Diletant 166:c3c0b8a90d81 73 DevicePLCSOutputStartSettings settings;
Diletant 166:c3c0b8a90d81 74 } DevicePLCSOutputStart;
Diletant 166:c3c0b8a90d81 75
Diletant 166:c3c0b8a90d81 76 typedef struct _DevicePLCSOutputResetSettings {
Diletant 166:c3c0b8a90d81 77 int32_t voltage; //Output voltage in signed 16.16 fixed point format
Diletant 166:c3c0b8a90d81 78 } DevicePLCSOutputResetSettings;
Diletant 166:c3c0b8a90d81 79
Diletant 166:c3c0b8a90d81 80 typedef struct _DevicePLCSOutputReset {
Diletant 166:c3c0b8a90d81 81 DevicePLCSOutputResetSettings settings;
Diletant 166:c3c0b8a90d81 82 } DevicePLCSOutputReset;
Diletant 166:c3c0b8a90d81 83
Diletant 166:c3c0b8a90d81 84 typedef struct _DevicePLCSOutputSettings {
Diletant 166:c3c0b8a90d81 85 uint8_t enabled; //Enable DAC output
Diletant 166:c3c0b8a90d81 86 //DevicePLCSOutputInterpolatorSettings interpolator;
Diletant 166:c3c0b8a90d81 87 //DevicePLCSOutputConditionSettings start;
Diletant 166:c3c0b8a90d81 88 //DevicePLCSOutputConditionSettings reset;
Diletant 166:c3c0b8a90d81 89 } DevicePLCSOutputSettings;
Diletant 166:c3c0b8a90d81 90
Diletant 166:c3c0b8a90d81 91 typedef struct _DevicePLCSOutputState {
Diletant 166:c3c0b8a90d81 92 uint8_t enabled; //Enable DAC output
Diletant 166:c3c0b8a90d81 93 uint32_t voltage; //Voltage output
Diletant 166:c3c0b8a90d81 94 } DevicePLCSOutputState;
Diletant 166:c3c0b8a90d81 95
Diletant 166:c3c0b8a90d81 96 typedef struct _DevicePLCSOutput {
Diletant 166:c3c0b8a90d81 97 DevicePLCSOutputSettings settings;
Diletant 166:c3c0b8a90d81 98 DevicePLCSOutputState state;
Diletant 166:c3c0b8a90d81 99 DevicePLCSSOutputInterpolator interpolator;
Diletant 166:c3c0b8a90d81 100 DevicePLCSOutputStart start;
Diletant 166:c3c0b8a90d81 101 DevicePLCSOutputReset reset;
Diletant 166:c3c0b8a90d81 102 } DevicePLCSOutput;
Diletant 156:e68ee0bcdcda 103
Diletant 161:efd949e8d536 104 //Path length control reset typedefs
Diletant 161:efd949e8d536 105 typedef struct _DevicePathLengthControlResetDelaySettings {
Diletant 161:efd949e8d536 106 uint32_t center; //reset delay in mks for normal conditions
Diletant 161:efd949e8d536 107 uint32_t slope; //signed 16.16 format output voltage reset level correction per correction interval
Diletant 161:efd949e8d536 108 } DevicePathLengthControlResetDelaySettings;
Diletant 161:efd949e8d536 109
Diletant 161:efd949e8d536 110 typedef struct _DevicePathLengthControlResetLevelSettings {
Diletant 161:efd949e8d536 111 uint32_t center; //signed 16.16 format output voltage reset level
Diletant 161:efd949e8d536 112 uint32_t slope; //signed 16.16 format output voltage reset level correction per correction interval
Diletant 161:efd949e8d536 113 } DevicePathLengthControlResetLevelSettings;
Diletant 161:efd949e8d536 114
Diletant 161:efd949e8d536 115 typedef struct _DevicePathLengthControlResetConditionSettings {
Diletant 161:efd949e8d536 116 DevicePathLengthControlResetDelaySettings delay;
Diletant 161:efd949e8d536 117 DevicePathLengthControlResetLevelSettings level;
Diletant 161:efd949e8d536 118 } DevicePathLengthControlResetConditionSettings;
Diletant 161:efd949e8d536 119
Diletant 161:efd949e8d536 120 typedef struct _DevicePathLengthControlResetSettings {
Diletant 161:efd949e8d536 121 DevicePathLengthControlResetConditionSettings cooling;
Diletant 161:efd949e8d536 122 DevicePathLengthControlResetConditionSettings heating;
Diletant 161:efd949e8d536 123 } DevicePathLengthControlResetSettings;
Diletant 161:efd949e8d536 124
Diletant 161:efd949e8d536 125 typedef struct _DevicePathLengthControlResetState {
Diletant 161:efd949e8d536 126 uint32_t delay; //reset delay in mks
Diletant 161:efd949e8d536 127 uint32_t level; //signed 16.16 format output voltage reset level
Diletant 161:efd949e8d536 128 } DevicePathLengthControlResetState;
Diletant 161:efd949e8d536 129
Diletant 161:efd949e8d536 130 typedef struct _DevicePathLengthControlReset {
Diletant 161:efd949e8d536 131 DevicePathLengthControlResetSettings settings;
Diletant 161:efd949e8d536 132 DevicePathLengthControlResetState state;
Diletant 161:efd949e8d536 133 } DevicePathLengthControlReset;
Diletant 161:efd949e8d536 134
Diletant 161:efd949e8d536 135 //Path length control system regulator typedefs
Diletant 161:efd949e8d536 136 typedef struct _DevicePathLengthControlRegulatorSettings {
Diletant 161:efd949e8d536 137 uint8_t enabled;
Diletant 161:efd949e8d536 138 uint32_t reference; //signed 16.16 format reference voltage
Diletant 161:efd949e8d536 139 uint32_t scale; //signed 16.16 format regulator scale factor
Diletant 161:efd949e8d536 140 } DevicePathLengthControlRegulatorSettings;
Diletant 149:abbf7663d27d 141
Diletant 161:efd949e8d536 142 typedef struct _DevicePathLengthControlRegulatorState {
Diletant 161:efd949e8d536 143 uint8_t enabled;
Diletant 161:efd949e8d536 144 uint32_t reference; //signed 16.16 format reference voltage
Diletant 161:efd949e8d536 145 uint32_t scale; //signed 16.16 format regulator scale factor
Diletant 161:efd949e8d536 146 uint32_t error; //signed 16.16 format regulator error
Diletant 161:efd949e8d536 147 } DevicePathLengthControlRegulatorState;
Diletant 161:efd949e8d536 148
Diletant 161:efd949e8d536 149 typedef struct _DevicePathLengthControlRegulator {
Diletant 161:efd949e8d536 150 DevicePathLengthControlRegulatorSettings settings;
Diletant 161:efd949e8d536 151 DevicePathLengthControlRegulatorState state;
Diletant 161:efd949e8d536 152 } DevicePathLengthControlRegulator;
Diletant 161:efd949e8d536 153
Diletant 161:efd949e8d536 154 //Path length control system typedefs
Diletant 166:c3c0b8a90d81 155 // Information signal amplitude ADC: device.controller.SSP.ADC[4]
Diletant 161:efd949e8d536 156 // Path length control system DAC: device.controller.SSP.DAC[1]
Diletant 149:abbf7663d27d 157 typedef struct _DevicePathLengthControlSystem {
Diletant 166:c3c0b8a90d81 158 DevicePLCSSequencer sequencer;
Diletant 166:c3c0b8a90d81 159 DevicePLCSInput input;
Diletant 166:c3c0b8a90d81 160 DevicePLCSPhaseDetector detector;
Diletant 166:c3c0b8a90d81 161 DevicePathLengthControlRegulator regulator;
Diletant 166:c3c0b8a90d81 162 DevicePLCSOutput output;
Diletant 161:efd949e8d536 163 DevicePathLengthControlReset reset;
Diletant 149:abbf7663d27d 164 } DevicePathLengthControlSystem;
Diletant 149:abbf7663d27d 165
Diletant 161:efd949e8d536 166 //Path length control system functions
Diletant 149:abbf7663d27d 167 void InitPathLengthControlSystemWithDefaults(void);
Diletant 149:abbf7663d27d 168 void InitPathLengthControlSystem(void);
Diletant 149:abbf7663d27d 169 void StartPathLengthControlSystem(void);
Diletant 149:abbf7663d27d 170
Diletant 166:c3c0b8a90d81 171 void plcsProcess(void);
Diletant 166:c3c0b8a90d81 172
Diletant 149:abbf7663d27d 173 #endif /* __DEVICE_PLCS_H__ */