maxim ESD demo

Dependencies:   mbed

Committer:
MaximGordon
Date:
Wed Aug 29 00:01:12 2018 +0000
Revision:
0:72ec745e12dc
maxim ESD demo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MaximGordon 0:72ec745e12dc 1 #include "mbed.h"
MaximGordon 0:72ec745e12dc 2
MaximGordon 0:72ec745e12dc 3 #define ACC_MAX 20000 //20000 is equivalent to 1V DAC output
MaximGordon 0:72ec745e12dc 4 #define ADC_MAX 3.2 //if 5Gohm/1Mohm resistor divider is used, ADC=3.2V is equivalent to 16000kV
MaximGordon 0:72ec745e12dc 5
MaximGordon 0:72ec745e12dc 6 Ticker ADC;
MaximGordon 0:72ec745e12dc 7
MaximGordon 0:72ec745e12dc 8 DigitalOut protection_relay_D6(PB_1);
MaximGordon 0:72ec745e12dc 9 DigitalOut protection_relay_D12(PA_6);
MaximGordon 0:72ec745e12dc 10 DigitalOut zap_control_D8(PB_2);
MaximGordon 0:72ec745e12dc 11 DigitalIn turbo_D11(PA_7);
MaximGordon 0:72ec745e12dc 12 InterruptIn button_D2(PD_14);
MaximGordon 0:72ec745e12dc 13 AnalogOut aout(PA_4);
MaximGordon 0:72ec745e12dc 14 PwmOut motor_control_D10(PA_2);
MaximGordon 0:72ec745e12dc 15
MaximGordon 0:72ec745e12dc 16 unsigned acc;
MaximGordon 0:72ec745e12dc 17 AnalogIn ain(A0);
MaximGordon 0:72ec745e12dc 18
MaximGordon 0:72ec745e12dc 19 void ADC_convert()
MaximGordon 0:72ec745e12dc 20 {
MaximGordon 0:72ec745e12dc 21 printf("%i",ain.read_u16());
MaximGordon 0:72ec745e12dc 22 }
MaximGordon 0:72ec745e12dc 23
MaximGordon 0:72ec745e12dc 24 void incr() {
MaximGordon 0:72ec745e12dc 25 if(acc>=ACC_MAX)
MaximGordon 0:72ec745e12dc 26 acc=ACC_MAX;
MaximGordon 0:72ec745e12dc 27 else
MaximGordon 0:72ec745e12dc 28 {
MaximGordon 0:72ec745e12dc 29 if(acc<4000)
MaximGordon 0:72ec745e12dc 30 acc+=1000;
MaximGordon 0:72ec745e12dc 31 else if(acc<8000)
MaximGordon 0:72ec745e12dc 32 acc+=800;
MaximGordon 0:72ec745e12dc 33 else if(acc<10000)
MaximGordon 0:72ec745e12dc 34 acc+=600;
MaximGordon 0:72ec745e12dc 35 else
MaximGordon 0:72ec745e12dc 36 acc+=500;
MaximGordon 0:72ec745e12dc 37 }
MaximGordon 0:72ec745e12dc 38 }
MaximGordon 0:72ec745e12dc 39
MaximGordon 0:72ec745e12dc 40 int main()
MaximGordon 0:72ec745e12dc 41 {
MaximGordon 0:72ec745e12dc 42 acc=0;
MaximGordon 0:72ec745e12dc 43 motor_control_D10.period_ms(10); //PWM with 50ms period
MaximGordon 0:72ec745e12dc 44 motor_control_D10=0.2;
MaximGordon 0:72ec745e12dc 45 button_D2.fall(&incr);
MaximGordon 0:72ec745e12dc 46
MaximGordon 0:72ec745e12dc 47 protection_relay_D6=1; //relay closed
MaximGordon 0:72ec745e12dc 48 protection_relay_D12=1; //relay closed
MaximGordon 0:72ec745e12dc 49
MaximGordon 0:72ec745e12dc 50 //ADC.attach(&ADC_convert, 0.2); //Do ADC convertion every 200ms
MaximGordon 0:72ec745e12dc 51
MaximGordon 0:72ec745e12dc 52 while(1) {
MaximGordon 0:72ec745e12dc 53 wait(0.2); // 200 ms
MaximGordon 0:72ec745e12dc 54 if(acc<=0)
MaximGordon 0:72ec745e12dc 55 acc=0;
MaximGordon 0:72ec745e12dc 56 else
MaximGordon 0:72ec745e12dc 57 if(acc<1000)
MaximGordon 0:72ec745e12dc 58 acc=0;
MaximGordon 0:72ec745e12dc 59 else
MaximGordon 0:72ec745e12dc 60 acc-=1000;
MaximGordon 0:72ec745e12dc 61 if(turbo_D11==1)
MaximGordon 0:72ec745e12dc 62 aout.write_u16(ACC_MAX);
MaximGordon 0:72ec745e12dc 63 else
MaximGordon 0:72ec745e12dc 64 aout.write_u16(acc);
MaximGordon 0:72ec745e12dc 65
MaximGordon 0:72ec745e12dc 66 int ADC_reading=ain.read_u16();
MaximGordon 0:72ec745e12dc 67 motor_control_D10=(0.2+0.8*((float)ADC_reading/65536*3.3/ADC_MAX)); //set motor speed
MaximGordon 0:72ec745e12dc 68 if((ADC_reading/65536*3.3)>ADC_MAX) //if MAX voltage is reached
MaximGordon 0:72ec745e12dc 69 {
MaximGordon 0:72ec745e12dc 70 protection_relay_D6=0; //cut off relay connection
MaximGordon 0:72ec745e12dc 71 protection_relay_D12=0; //cut off relay connection
MaximGordon 0:72ec745e12dc 72 wait_ms(10); //wait 10ms for relay to disconnect completely
MaximGordon 0:72ec745e12dc 73 zap_control_D8=1; //ZAP!
MaximGordon 0:72ec745e12dc 74 wait_ms(5); //wait for Zap to happen
MaximGordon 0:72ec745e12dc 75 acc=0;
MaximGordon 0:72ec745e12dc 76 aout.write_u16(acc); //discharge HV generator
MaximGordon 0:72ec745e12dc 77 zap_control_D8=0; //disconnect CAN bus from HV generator
MaximGordon 0:72ec745e12dc 78 wait_ms(5);
MaximGordon 0:72ec745e12dc 79 protection_relay_D6=1;
MaximGordon 0:72ec745e12dc 80 protection_relay_D12=1;
MaximGordon 0:72ec745e12dc 81 }
MaximGordon 0:72ec745e12dc 82
MaximGordon 0:72ec745e12dc 83 while(turbo_D11==1); //wait until turbo button is released
MaximGordon 0:72ec745e12dc 84
MaximGordon 0:72ec745e12dc 85 printf("%i\n\r", ADC_reading); //send ADC data to GUI
MaximGordon 0:72ec745e12dc 86 }
MaximGordon 0:72ec745e12dc 87 }