Gordon Lee
/
CAN_Demo_Ctrl
maxim ESD demo
main.cpp
- Committer:
- MaximGordon
- Date:
- 2018-08-29
- Revision:
- 0:72ec745e12dc
File content as of revision 0:72ec745e12dc:
#include "mbed.h" #define ACC_MAX 20000 //20000 is equivalent to 1V DAC output #define ADC_MAX 3.2 //if 5Gohm/1Mohm resistor divider is used, ADC=3.2V is equivalent to 16000kV Ticker ADC; DigitalOut protection_relay_D6(PB_1); DigitalOut protection_relay_D12(PA_6); DigitalOut zap_control_D8(PB_2); DigitalIn turbo_D11(PA_7); InterruptIn button_D2(PD_14); AnalogOut aout(PA_4); PwmOut motor_control_D10(PA_2); unsigned acc; AnalogIn ain(A0); void ADC_convert() { printf("%i",ain.read_u16()); } void incr() { if(acc>=ACC_MAX) acc=ACC_MAX; else { if(acc<4000) acc+=1000; else if(acc<8000) acc+=800; else if(acc<10000) acc+=600; else acc+=500; } } int main() { acc=0; motor_control_D10.period_ms(10); //PWM with 50ms period motor_control_D10=0.2; button_D2.fall(&incr); protection_relay_D6=1; //relay closed protection_relay_D12=1; //relay closed //ADC.attach(&ADC_convert, 0.2); //Do ADC convertion every 200ms while(1) { wait(0.2); // 200 ms if(acc<=0) acc=0; else if(acc<1000) acc=0; else acc-=1000; if(turbo_D11==1) aout.write_u16(ACC_MAX); else aout.write_u16(acc); int ADC_reading=ain.read_u16(); motor_control_D10=(0.2+0.8*((float)ADC_reading/65536*3.3/ADC_MAX)); //set motor speed if((ADC_reading/65536*3.3)>ADC_MAX) //if MAX voltage is reached { protection_relay_D6=0; //cut off relay connection protection_relay_D12=0; //cut off relay connection wait_ms(10); //wait 10ms for relay to disconnect completely zap_control_D8=1; //ZAP! wait_ms(5); //wait for Zap to happen acc=0; aout.write_u16(acc); //discharge HV generator zap_control_D8=0; //disconnect CAN bus from HV generator wait_ms(5); protection_relay_D6=1; protection_relay_D12=1; } while(turbo_D11==1); //wait until turbo button is released printf("%i\n\r", ADC_reading); //send ADC data to GUI } }