Alvaro Cassinelli
/
skinGames_II
save loops
hardwareIO/lockin.h@1:3be7b7d050f4, 2014-12-02 (annotated)
- Committer:
- mbedalvaro
- Date:
- Tue Dec 02 08:29:59 2014 +0000
- Revision:
- 1:3be7b7d050f4
- Parent:
- 0:df6fdd9b99f0
updated
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbedalvaro | 0:df6fdd9b99f0 | 1 | #ifndef MBED_LOCKIN_H |
mbedalvaro | 0:df6fdd9b99f0 | 2 | #define MBED_LOCKIN_H |
mbedalvaro | 0:df6fdd9b99f0 | 3 | |
mbedalvaro | 0:df6fdd9b99f0 | 4 | #include "mbed.h" |
mbedalvaro | 0:df6fdd9b99f0 | 5 | #include "adc.h" |
mbedalvaro | 0:df6fdd9b99f0 | 6 | |
mbedalvaro | 0:df6fdd9b99f0 | 7 | #define MBEDFREQUENCY 96000 //frequency of the mBed in KHz |
mbedalvaro | 0:df6fdd9b99f0 | 8 | |
mbedalvaro | 0:df6fdd9b99f0 | 9 | //#define I_Volts_SAT 5 // this is 5V (the saturation voltage for the APD+LockIn+ADC, being it the arduino (when in normal mode) or the SPI. This saturation voltage could be different for each mode!? |
mbedalvaro | 0:df6fdd9b99f0 | 10 | |
mbedalvaro | 0:df6fdd9b99f0 | 11 | #define LOCKIN_ADC_PIN p18 //ADC pin : connect to lockin "output" |
mbedalvaro | 0:df6fdd9b99f0 | 12 | |
mbedalvaro | 0:df6fdd9b99f0 | 13 | #define LOCKIN_REF_PIN p23 //PWM pin : connect to lockin reference signal. |
mbedalvaro | 0:df6fdd9b99f0 | 14 | #define LOCKIN_LASER_PIN p25 //PWM pin : connect to laser control - note: the red laser by default, but could be a fourth IR laser... |
mbedalvaro | 0:df6fdd9b99f0 | 15 | // p21 to p26 are used by the PWM timers even if only 2 pin are connected to the circuit |
mbedalvaro | 0:df6fdd9b99f0 | 16 | |
mbedalvaro | 0:df6fdd9b99f0 | 17 | #define BUFFER_SIZE 15 |
mbedalvaro | 0:df6fdd9b99f0 | 18 | #define BUFFER_SIZE_MEDIAN 5 |
mbedalvaro | 0:df6fdd9b99f0 | 19 | #define DELAY_BUFFER_MEDIAN 0 |
mbedalvaro | 0:df6fdd9b99f0 | 20 | |
mbedalvaro | 0:df6fdd9b99f0 | 21 | |
mbedalvaro | 0:df6fdd9b99f0 | 22 | class Lockin { |
mbedalvaro | 0:df6fdd9b99f0 | 23 | public: |
mbedalvaro | 0:df6fdd9b99f0 | 24 | // default constructor (untouched!) |
mbedalvaro | 0:df6fdd9b99f0 | 25 | // Lockin(); |
mbedalvaro | 0:df6fdd9b99f0 | 26 | |
mbedalvaro | 0:df6fdd9b99f0 | 27 | // initialization of object modes (could have parameters): |
mbedalvaro | 0:df6fdd9b99f0 | 28 | void init(); |
mbedalvaro | 0:df6fdd9b99f0 | 29 | |
mbedalvaro | 0:df6fdd9b99f0 | 30 | void initPWM(); //setup the laser and reference signal used by the lockin |
mbedalvaro | 0:df6fdd9b99f0 | 31 | void setPWMFrequency(float freq); //change the shared period of the pwm signals |
mbedalvaro | 0:df6fdd9b99f0 | 32 | void setLaserPhaseShift(float phaseShift); //change the phase shift of the laser (from 0 to 1) |
mbedalvaro | 0:df6fdd9b99f0 | 33 | void setLockinPhaseShift(float phaseShift); //change the phase shift of the lock-in (from 0 to 1) |
mbedalvaro | 0:df6fdd9b99f0 | 34 | //future works: |
mbedalvaro | 0:df6fdd9b99f0 | 35 | //add function to change frequency or offset with a potentiometer for exemple |
mbedalvaro | 0:df6fdd9b99f0 | 36 | //or scan the best frequency... |
mbedalvaro | 0:df6fdd9b99f0 | 37 | |
mbedalvaro | 0:df6fdd9b99f0 | 38 | void setLaserPower(bool power); //change PWM settings to turn on/off the laser |
mbedalvaro | 0:df6fdd9b99f0 | 39 | |
mbedalvaro | 0:df6fdd9b99f0 | 40 | void setADC_forLockin(int mode); //1 set, 0 reset |
mbedalvaro | 0:df6fdd9b99f0 | 41 | |
mbedalvaro | 0:df6fdd9b99f0 | 42 | unsigned short getSmoothValue(); //return the average of the value stored on the buffer |
mbedalvaro | 0:df6fdd9b99f0 | 43 | unsigned short getLastValue(); //return the last conversion of the ADC |
mbedalvaro | 0:df6fdd9b99f0 | 44 | unsigned short getMedianValue(); //return the median value of the buffer |
mbedalvaro | 0:df6fdd9b99f0 | 45 | //it is just a begining; we can add more complex method for denoising for exemple |
mbedalvaro | 0:df6fdd9b99f0 | 46 | //maybe, needs function to start and stop the lockin |
mbedalvaro | 0:df6fdd9b99f0 | 47 | |
mbedalvaro | 0:df6fdd9b99f0 | 48 | void clearBuffer(); |
mbedalvaro | 0:df6fdd9b99f0 | 49 | |
mbedalvaro | 0:df6fdd9b99f0 | 50 | //can be private |
mbedalvaro | 0:df6fdd9b99f0 | 51 | //void catchInterupt(uint32_t value); |
mbedalvaro | 0:df6fdd9b99f0 | 52 | |
mbedalvaro | 0:df6fdd9b99f0 | 53 | //variables |
mbedalvaro | 0:df6fdd9b99f0 | 54 | unsigned short buffer[BUFFER_SIZE]; // does not need to be a float - in fact values are from 0 to 4096 (i.e., |
mbedalvaro | 0:df6fdd9b99f0 | 55 | //unsigned short int buffer[BUFFER_SIZE]; // this is two bytes (0 to 65535) |
mbedalvaro | 0:df6fdd9b99f0 | 56 | unsigned short orderedBuffer[BUFFER_SIZE_MEDIAN]; // for computation of the MEDIAN value |
mbedalvaro | 0:df6fdd9b99f0 | 57 | int buffer_pos; |
mbedalvaro | 0:df6fdd9b99f0 | 58 | |
mbedalvaro | 0:df6fdd9b99f0 | 59 | float refFrequency; // frequency of sensing laser and lock-in (in KHz) |
mbedalvaro | 0:df6fdd9b99f0 | 60 | //Phase shift of the pwm signals (from 0 to 1): |
mbedalvaro | 0:df6fdd9b99f0 | 61 | //it corresponds to a percentage of the half of a period |
mbedalvaro | 0:df6fdd9b99f0 | 62 | //(no phase shift ==> 0% / 90deg phase shift ==> 100%) |
mbedalvaro | 0:df6fdd9b99f0 | 63 | float phaseShiftLaser; // phase shift of the sensing laser |
mbedalvaro | 0:df6fdd9b99f0 | 64 | float phaseShiftLockin; // phase shift of the lock-in reference |
mbedalvaro | 0:df6fdd9b99f0 | 65 | |
mbedalvaro | 0:df6fdd9b99f0 | 66 | int refFreq; //frequency of the lockin |
mbedalvaro | 0:df6fdd9b99f0 | 67 | int offsetRef; //offset between the laser signal and the lockin reference signal |
mbedalvaro | 0:df6fdd9b99f0 | 68 | int halfRefFreq; |
mbedalvaro | 0:df6fdd9b99f0 | 69 | |
mbedalvaro | 0:df6fdd9b99f0 | 70 | private: |
mbedalvaro | 0:df6fdd9b99f0 | 71 | // PWM match register value are saved as private |
mbedalvaro | 0:df6fdd9b99f0 | 72 | // to avoid computation when turn on/off for exemple |
mbedalvaro | 0:df6fdd9b99f0 | 73 | int _currentMR[6]; |
mbedalvaro | 0:df6fdd9b99f0 | 74 | |
mbedalvaro | 0:df6fdd9b99f0 | 75 | |
mbedalvaro | 0:df6fdd9b99f0 | 76 | }; |
mbedalvaro | 0:df6fdd9b99f0 | 77 | |
mbedalvaro | 0:df6fdd9b99f0 | 78 | extern Lockin lockin; |
mbedalvaro | 0:df6fdd9b99f0 | 79 | |
mbedalvaro | 0:df6fdd9b99f0 | 80 | #endif |