Hardware IO control: mirrors, lock in

lockin.h

Committer:
mbedalvaro
Date:
2011-10-17
Revision:
0:c19dc1d8b225

File content as of revision 0:c19dc1d8b225:

#ifndef MBED_LOCKIN_H
#define MBED_LOCKIN_H

#include "mbed.h"
#include "adc.h"

#define MBEDFREQUENCY 96000 //frequency of the mBed in KHz

//#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!?

#define LOCKIN_ADC_PIN      p18 //ADC pin : connect to lockin output
#define LOCKIN_LASER_PIN    p22 //PWM pin : connect to laser input
#define LOCKIN_REF_PIN      p25 //PWM pin : connect to lockin input
// p21 to p25 are used by the PWM timers even if only 2 pin are connected to the circuit

#define BUFFER_SIZE 3


class Lockin {
public:
    // default constructor (untouched!)
    // Lockin();
    
    // initialization of object modes (could have parameters):
    void init();
    
    void initPWM(); //setup the laser and reference signal used by the lockin
    void setPWMFrequency(float freq); //change the shared period of the pwm signals
    void setLaserPhaseShift(float phaseShift); //change the phase shift of the laser (from 0 to 1)
    void setLockinPhaseShift(float phaseShift); //change the phase shift of the lock-in (from 0 to 1)
    //future works: 
    //add function to change frequency or offset with a potentiometer for exemple
    //or scan the best frequency...
    
    void setLaserPower(bool power); //change PWM settings to turn on/off the laser
    
    
    float getSmoothValue(); //return the average of the value stored on the buffer
    float getLastValue(); //return the last conversion of the ADC
    //it is just a begining; we can add more complex method for denoising for exemple
    //maybe, needs function to start and stop the lockin
    
    void clearBuffer();
    
    //can be private
    //void catchInterupt(uint32_t value);
    
    //variables
    float buffer[BUFFER_SIZE];
    int buffer_pos;
    
    float refFrequency;     // frequency of sensing laser and lock-in (in KHz)
    //Phase shift of the pwm signals (from 0 to 1):
    //it corresponds to a percentage of the half of a period
    //(no phase shift ==> 0% / 90deg phase shift ==> 100%)
    float phaseShiftLaser;  // phase shift of the sensing laser 
    float phaseShiftLockin; // phase shift of the lock-in reference
    
    int refFreq; //frequency of the lockin
    int offsetRef; //offset between the laser signal and the lockin reference signal
    int halfRefFreq;
    
private:
    // PWM match register value are saved as private 
    // to avoid computation when turn on/off for exemple
    int _currentMR[6]; 
    

};

extern Lockin lockin;

#endif