Gordon Lee
/
CAN_Demo_Ctrl
maxim ESD demo
main.cpp@0:72ec745e12dc, 2018-08-29 (annotated)
- Committer:
- MaximGordon
- Date:
- Wed Aug 29 00:01:12 2018 +0000
- Revision:
- 0:72ec745e12dc
maxim ESD demo
Who changed what in which revision?
User | Revision | Line number | New 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 | } |