Daniel Kramnik
/
aqc-rev-3-f411re
Active quenching circuit rev-3 firmware.
main.cpp@0:21fa2141c5b2, 2019-01-08 (annotated)
- Committer:
- kramnik
- Date:
- Tue Jan 08 21:54:34 2019 +0000
- Revision:
- 0:21fa2141c5b2
Working rev-3 firmware
Who changed what in which revision?
User | Revision | Line number | New 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 | } |