Active quenching circuit rev-3 firmware.

Dependencies:   mbed USBDevice

Committer:
kramnik
Date:
Tue Jan 08 21:54:34 2019 +0000
Revision:
0:21fa2141c5b2
Working rev-3 firmware

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kramnik 0:21fa2141c5b2 1 // Include mbed standard functionality library
kramnik 0:21fa2141c5b2 2 #include "mbed.h"
kramnik 0:21fa2141c5b2 3
kramnik 0:21fa2141c5b2 4 // Include USB serial device library imported from mbed web repo
kramnik 0:21fa2141c5b2 5 #include "USBSerial.h"
kramnik 0:21fa2141c5b2 6
kramnik 0:21fa2141c5b2 7 // Include h-files written specifically for this project
kramnik 0:21fa2141c5b2 8 #include "dac1.h"
kramnik 0:21fa2141c5b2 9 #include "dac2.h"
kramnik 0:21fa2141c5b2 10 #include "state_control.h"
kramnik 0:21fa2141c5b2 11
kramnik 0:21fa2141c5b2 12 // Need to double check these colors when LEDs are installed
kramnik 0:21fa2141c5b2 13 DigitalOut led_red( PC_0 );
kramnik 0:21fa2141c5b2 14 DigitalOut led_green( PC_1 );
kramnik 0:21fa2141c5b2 15 DigitalOut led_yellow( PC_2 );
kramnik 0:21fa2141c5b2 16
kramnik 0:21fa2141c5b2 17 DigitalOut precharge_en_bar( PA_3 );
kramnik 0:21fa2141c5b2 18 DigitalOut boost_en( PA_2 );
kramnik 0:21fa2141c5b2 19 DigitalOut cuk_en( PA_1 );
kramnik 0:21fa2141c5b2 20
kramnik 0:21fa2141c5b2 21 DigitalOut one_shot_clr_bar( PA_5 ); // Set this high for now, can later use as timer output
kramnik 0:21fa2141c5b2 22
kramnik 0:21fa2141c5b2 23 //Virtual serial port over USB
kramnik 0:21fa2141c5b2 24 USBSerial serial;
kramnik 0:21fa2141c5b2 25
kramnik 0:21fa2141c5b2 26 int main() {
kramnik 0:21fa2141c5b2 27 one_shot_clr_bar = 1; // Set this high for now, can later use as timer output
kramnik 0:21fa2141c5b2 28
kramnik 0:21fa2141c5b2 29 // Default mode is IV test to prevent damage to device from misconfigured quenching circuit
kramnik 0:21fa2141c5b2 30 set_relay_mode_ivtest();
kramnik 0:21fa2141c5b2 31
kramnik 0:21fa2141c5b2 32 // Precharge the DC/DC buscap, wait 3 seconds, write initial DAC vals, start DC/DC converters
kramnik 0:21fa2141c5b2 33 precharge_en_bar = 0;
kramnik 0:21fa2141c5b2 34 wait( 5.0 );
kramnik 0:21fa2141c5b2 35
kramnik 0:21fa2141c5b2 36 cuk_en = 1;
kramnik 0:21fa2141c5b2 37 wait( 1.0 );
kramnik 0:21fa2141c5b2 38 boost_en = 1;
kramnik 0:21fa2141c5b2 39
kramnik 0:21fa2141c5b2 40 wait( 1.0 );
kramnik 0:21fa2141c5b2 41 led_green = 1;
kramnik 0:21fa2141c5b2 42
kramnik 0:21fa2141c5b2 43 // Initialize 8-channel DAC1
kramnik 0:21fa2141c5b2 44 dac1_init( );
kramnik 0:21fa2141c5b2 45 dac1_code_load_all( 0 );
kramnik 0:21fa2141c5b2 46
kramnik 0:21fa2141c5b2 47 dac2_init( );
kramnik 0:21fa2141c5b2 48
kramnik 0:21fa2141c5b2 49 dac1_code_load_channel( 3000, 0 ); // 3.5V on DAC1 channel 0 (DELTAV_SETPOINT)
kramnik 0:21fa2141c5b2 50 dac1_code_load_channel( 2000, 1 ); // 2.0V on DAC1 channel 1 (DIAMOND_IBIAS)
kramnik 0:21fa2141c5b2 51 dac1_code_load_channel( 3000, 2 ); // 4.0V on DAC1 channel 2 (ONE_SHOT_COMP)
kramnik 0:21fa2141c5b2 52 dac1_code_load_channel( 1320, 3 ); // 1.0V on DAC1 channel 3 (VA_SETPOINT)
kramnik 0:21fa2141c5b2 53 dac1_code_load_channel( 2000, 4 ); // 2.0V on DAC1 channel 4 (ONE_SHOT_CCS)
kramnik 0:21fa2141c5b2 54 dac1_code_load_channel( 4000, 5 ); // 4.0V on DAC1 channel 5 (EXTRA_1)
kramnik 0:21fa2141c5b2 55 dac1_code_load_channel( 4000, 6 ); // 4.0V on DAC1 channel 6 (EXTRA_2)
kramnik 0:21fa2141c5b2 56 dac1_code_load_channel( 4000, 7 ); // 4.0V on DAC1 channel 7 (EXTRA_#)
kramnik 0:21fa2141c5b2 57
kramnik 0:21fa2141c5b2 58 dac2_write( 950 ); // Comparator reference voltage
kramnik 0:21fa2141c5b2 59
kramnik 0:21fa2141c5b2 60 char buf[ 128 ];
kramnik 0:21fa2141c5b2 61 while( 1 ) {
kramnik 0:21fa2141c5b2 62 serial.scanf( "%s", buf );
kramnik 0:21fa2141c5b2 63 serial.printf( "Recv: %s\n", buf );
kramnik 0:21fa2141c5b2 64
kramnik 0:21fa2141c5b2 65 led_red = 1; // Red LED indicates serial activity
kramnik 0:21fa2141c5b2 66
kramnik 0:21fa2141c5b2 67 switch( buf[ 0 ] ) {
kramnik 0:21fa2141c5b2 68 case 'W' : // write to DAC
kramnik 0:21fa2141c5b2 69 if( buf[ 1 ] == '1' ) { // write to DAC1
kramnik 0:21fa2141c5b2 70 char temp[ 4 ] = { buf[ 2 ], buf[ 3 ], buf[ 4 ], buf[ 5 ] };
kramnik 0:21fa2141c5b2 71 uint16_t val = atoi( temp );
kramnik 0:21fa2141c5b2 72 uint8_t channel = buf[ 6 ] - '0';
kramnik 0:21fa2141c5b2 73 dac1_code_load_channel( val, channel );
kramnik 0:21fa2141c5b2 74
kramnik 0:21fa2141c5b2 75 serial.printf( "Success: wrote %d to DAC1 channel %d.\n", val, channel );
kramnik 0:21fa2141c5b2 76 }
kramnik 0:21fa2141c5b2 77 else if( buf[ 1 ] == '2' ) { // write to DAC2
kramnik 0:21fa2141c5b2 78 char temp[ 4 ] = { buf[ 2 ], buf[ 3 ], buf[ 4 ], buf[ 5 ] };
kramnik 0:21fa2141c5b2 79 uint16_t val = atoi( temp );
kramnik 0:21fa2141c5b2 80 dac2_write( val );
kramnik 0:21fa2141c5b2 81
kramnik 0:21fa2141c5b2 82 serial.printf( "Success: wrote %d to DAC2.\n", val );
kramnik 0:21fa2141c5b2 83 }
kramnik 0:21fa2141c5b2 84 else{
kramnik 0:21fa2141c5b2 85 serial.printf( "Error: invalid DAC number.\n" );
kramnik 0:21fa2141c5b2 86 }
kramnik 0:21fa2141c5b2 87 break;
kramnik 0:21fa2141c5b2 88 case 'M' : // change the relay mode
kramnik 0:21fa2141c5b2 89 if( buf[ 1 ] == '0' ) { // set mode to AQC (default)
kramnik 0:21fa2141c5b2 90 set_relay_mode_aqc();
kramnik 0:21fa2141c5b2 91 serial.printf( "Success: changed relay mode to AQC.\n" );
kramnik 0:21fa2141c5b2 92 }
kramnik 0:21fa2141c5b2 93 else if( buf[ 1 ] == '1' ) { // set mode to IV TEST
kramnik 0:21fa2141c5b2 94 set_relay_mode_ivtest();
kramnik 0:21fa2141c5b2 95 serial.printf( "Success: changed relay mode to IV TEST.\n" );
kramnik 0:21fa2141c5b2 96 }
kramnik 0:21fa2141c5b2 97 else{
kramnik 0:21fa2141c5b2 98 serial.printf( "Error: invalid relay mode.\n" );
kramnik 0:21fa2141c5b2 99 }
kramnik 0:21fa2141c5b2 100 break;
kramnik 0:21fa2141c5b2 101 default :
kramnik 0:21fa2141c5b2 102 serial.printf( "Error: invalid command.\n" );
kramnik 0:21fa2141c5b2 103 }
kramnik 0:21fa2141c5b2 104
kramnik 0:21fa2141c5b2 105 led_red = 0;
kramnik 0:21fa2141c5b2 106 }
kramnik 0:21fa2141c5b2 107 }