experimental fork

Dependencies:   NOKIA_5110 mbed

Committer:
mva111
Date:
Tue Oct 04 16:45:02 2016 +0000
Revision:
2:66a2e52ad175
Parent:
0:52895a475820
Child:
4:87037e41c888
cleaned hv module

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mva111 0:52895a475820 1 #include "mbed.h"
mva111 0:52895a475820 2
mva111 0:52895a475820 3 class HVControl{
mva111 0:52895a475820 4
mva111 0:52895a475820 5 private:
mva111 0:52895a475820 6 int freq, max_freq, min_freq; // oscillator parameters
mva111 0:52895a475820 7 float voltage_ref, divider_value, voltage, thresh, safe_voltage; //hv probe parameters
mva111 0:52895a475820 8 PinName oscillator_pin, measure_pin;
mva111 0:52895a475820 9
mva111 0:52895a475820 10 int period(int f){
mva111 0:52895a475820 11 double T=0;
mva111 0:52895a475820 12 if (f < 1){
mva111 0:52895a475820 13 T = 1;
mva111 0:52895a475820 14 }else{
mva111 0:52895a475820 15 T = 1000000/f;
mva111 0:52895a475820 16 }
mva111 0:52895a475820 17 return (int)(T);
mva111 0:52895a475820 18 }
mva111 0:52895a475820 19
mva111 0:52895a475820 20
mva111 0:52895a475820 21 public:
mva111 0:52895a475820 22 int *hvparams; //array is indexed with the frequency
mva111 2:66a2e52ad175 23
mva111 0:52895a475820 24 HVControl(PinName oscillator_pin_, PinName measure_pin_) {
mva111 0:52895a475820 25 max_freq = 10000; //default maximum frequency
mva111 0:52895a475820 26 min_freq = 1000; //default minimum frequency
mva111 0:52895a475820 27 divider_value = 304; //default board value
mva111 0:52895a475820 28 voltage_ref = 3.3; //mbed default voltage reference
mva111 0:52895a475820 29 voltage = 0; // actual voltage
mva111 0:52895a475820 30 safe_voltage = 20;
mva111 0:52895a475820 31 thresh = 1000; //default maximum high voltage threshold
mva111 0:52895a475820 32 oscillator_pin = oscillator_pin_;
mva111 0:52895a475820 33 measure_pin = measure_pin_;
mva111 0:52895a475820 34 freq = max_freq;
mva111 0:52895a475820 35 }
mva111 0:52895a475820 36
mva111 2:66a2e52ad175 37 float from_adc_voltage(float adc_v){ return adc_v * divider_value * voltage_ref; }
mva111 2:66a2e52ad175 38
mva111 2:66a2e52ad175 39 float to_adc_voltage(float voltage_){ return voltage_/(divider_value * voltage_ref); }
mva111 0:52895a475820 40
mva111 0:52895a475820 41 bool measure(void){
mva111 0:52895a475820 42 AnalogIn probe(measure_pin);
mva111 0:52895a475820 43 voltage = from_adc_voltage(probe.read());
mva111 0:52895a475820 44 if(voltage > thresh){ return 0; }
mva111 0:52895a475820 45 else{ return 1; }
mva111 0:52895a475820 46 }
mva111 0:52895a475820 47
mva111 0:52895a475820 48 void set_frequency(int f){
mva111 0:52895a475820 49 if(f > max_freq){
mva111 0:52895a475820 50 f = max_freq;
mva111 0:52895a475820 51 }
mva111 0:52895a475820 52 if(f < min_freq){
mva111 0:52895a475820 53 f = min_freq;
mva111 0:52895a475820 54 }
mva111 0:52895a475820 55 PwmOut pwm(oscillator_pin);
mva111 0:52895a475820 56 int p = period(f);
mva111 0:52895a475820 57 freq = f;
mva111 0:52895a475820 58 pwm.period_us(p);
mva111 0:52895a475820 59 pwm.pulsewidth_us((int)(p/2));
mva111 0:52895a475820 60 }
mva111 0:52895a475820 61
mva111 0:52895a475820 62 int freq_to_index(int f){ return (f/100)-10; }
mva111 0:52895a475820 63
mva111 0:52895a475820 64 int index_to_freq(int f){ return (f+10)*100; }
mva111 0:52895a475820 65
mva111 0:52895a475820 66 void calibrate(void){
mva111 0:52895a475820 67 hvparams = new int[69];
mva111 0:52895a475820 68 shutdown();
mva111 0:52895a475820 69 for(int f=7800; f>=1000; f-=100){
mva111 0:52895a475820 70 set_frequency(f);
mva111 0:52895a475820 71 wait(1);
mva111 0:52895a475820 72 if(measure()){
mva111 0:52895a475820 73 hvparams[freq_to_index(f)]=(int)voltage;
mva111 0:52895a475820 74 }else{
mva111 0:52895a475820 75 shutdown();
mva111 0:52895a475820 76 break;
mva111 0:52895a475820 77 }
mva111 0:52895a475820 78 }
mva111 0:52895a475820 79 }
mva111 0:52895a475820 80
mva111 0:52895a475820 81 void shutdown(void){
mva111 0:52895a475820 82 DigitalOut pwm_(oscillator_pin);
mva111 0:52895a475820 83 pwm_.write(1);
mva111 0:52895a475820 84 freq = 0;
mva111 2:66a2e52ad175 85 measure();
mva111 0:52895a475820 86 while(voltage > safe_voltage){
mva111 2:66a2e52ad175 87 measure();
mva111 0:52895a475820 88 wait(1);
mva111 0:52895a475820 89 }
mva111 0:52895a475820 90 }
mva111 0:52895a475820 91
mva111 2:66a2e52ad175 92 float get_voltage(void){
mva111 2:66a2e52ad175 93 measure();
mva111 2:66a2e52ad175 94 return voltage;
mva111 2:66a2e52ad175 95 }
mva111 0:52895a475820 96
mva111 0:52895a475820 97 int *get_hvparams(void){ return hvparams; }
mva111 0:52895a475820 98
mva111 0:52895a475820 99 int get_frequency(void){ return freq; }
mva111 0:52895a475820 100 };