MH K8 firmware with HV control.

Dependencies:   mbed NOKIA_5110

Fork of muonhunter-K8 by Oliver Keller

Committer:
mva111
Date:
Wed Oct 05 16:56:33 2016 +0000
Revision:
4:87037e41c888
Parent:
2:66a2e52ad175
Child:
7:6a0958c2be7e
default code should have the buzzer on and removed some methods from the detection class

Who changed what in which revision?

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