1
Dependencies: mbed Watchdog V2_heater_test MODSERIAL FastPWM ADS8568_ADC
main.cpp@0:c43134a862eb, 2019-08-12 (annotated)
- Committer:
- seoirsem
- Date:
- Mon Aug 12 10:44:12 2019 +0000
- Revision:
- 0:c43134a862eb
2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
seoirsem | 0:c43134a862eb | 1 | #include "mbed.h" |
seoirsem | 0:c43134a862eb | 2 | #include "MODSERIAL.h" |
seoirsem | 0:c43134a862eb | 3 | #include "Watchdog.h" |
seoirsem | 0:c43134a862eb | 4 | #include "ADS8568_ADC.h" |
seoirsem | 0:c43134a862eb | 5 | #include "Heater.h" |
seoirsem | 0:c43134a862eb | 6 | #include "FastPWM.h" |
seoirsem | 0:c43134a862eb | 7 | |
seoirsem | 0:c43134a862eb | 8 | #include "math.h" |
seoirsem | 0:c43134a862eb | 9 | /*------------------------------------------------------------------------------ |
seoirsem | 0:c43134a862eb | 10 | Codebase for T99004 Demo Control Board Rev A Firmware |
seoirsem | 0:c43134a862eb | 11 | Date: 10/07/2018 |
seoirsem | 0:c43134a862eb | 12 | Author: AS7 |
seoirsem | 0:c43134a862eb | 13 | |
seoirsem | 0:c43134a862eb | 14 | |
seoirsem | 0:c43134a862eb | 15 | ------------------------------------------------------------------------------*/ |
seoirsem | 0:c43134a862eb | 16 | |
seoirsem | 0:c43134a862eb | 17 | #define ALL_CH 15 //value of convst bus to read all chanels simultaneosly |
seoirsem | 0:c43134a862eb | 18 | |
seoirsem | 0:c43134a862eb | 19 | |
seoirsem | 0:c43134a862eb | 20 | Watchdog wd; //instantiate watchdog class |
seoirsem | 0:c43134a862eb | 21 | |
seoirsem | 0:c43134a862eb | 22 | MODSERIAL pc(PA_9, PA_10, 512); //mcu TX, RX, 512 byte TX and RX buffers |
seoirsem | 0:c43134a862eb | 23 | |
seoirsem | 0:c43134a862eb | 24 | //ADC object inherits SPI, |
seoirsem | 0:c43134a862eb | 25 | ADS8568_ADC adc(PB_15, PB_14, PB_13, PB_12, PC_15, PC_0, PC_1, PC_2, PC_3); |
seoirsem | 0:c43134a862eb | 26 | |
seoirsem | 0:c43134a862eb | 27 | //SPI spi(PB_15, PB_14, PB_13); // mosi, miso, sclk |
seoirsem | 0:c43134a862eb | 28 | I2C i2c(PB_7, PB_8); //SDA, SCL |
seoirsem | 0:c43134a862eb | 29 | |
seoirsem | 0:c43134a862eb | 30 | //indicator LEDs |
seoirsem | 0:c43134a862eb | 31 | DigitalOut hb_led(PC_13); //Green |
seoirsem | 0:c43134a862eb | 32 | DigitalOut led_0(PC_4); //Red |
seoirsem | 0:c43134a862eb | 33 | DigitalOut led_1(PC_5); //Green |
seoirsem | 0:c43134a862eb | 34 | |
seoirsem | 0:c43134a862eb | 35 | //User buttons |
seoirsem | 0:c43134a862eb | 36 | DigitalIn user_0(PB_0); |
seoirsem | 0:c43134a862eb | 37 | DigitalIn user_1(PB_1); |
seoirsem | 0:c43134a862eb | 38 | |
seoirsem | 0:c43134a862eb | 39 | //ADC |
seoirsem | 0:c43134a862eb | 40 | //BusOut adc_convt(PC_0, PC_1, PC_2, PC_3); //channel convert ch_A, ch_B, ch_C, ch_D |
seoirsem | 0:c43134a862eb | 41 | //DigitalOut adc_ncs(PB_12); //chip n_select |
seoirsem | 0:c43134a862eb | 42 | DigitalIn adc_busy(PA_8); //Busy interrupt sig |
seoirsem | 0:c43134a862eb | 43 | //DigitalOut adc_reset(PC_15); |
seoirsem | 0:c43134a862eb | 44 | |
seoirsem | 0:c43134a862eb | 45 | /*ADC channels are connected as follows------------ |
seoirsem | 0:c43134a862eb | 46 | CH_A0 = Heater 1 Current Sense |
seoirsem | 0:c43134a862eb | 47 | CH_A1 = Heater 1 Voltage Sense |
seoirsem | 0:c43134a862eb | 48 | CH_B0 = Heater 2 Current Sense |
seoirsem | 0:c43134a862eb | 49 | CH_B1 = Heater 2 Voltage Sense |
seoirsem | 0:c43134a862eb | 50 | CH_C0 = Photodiode Amp Out 1 |
seoirsem | 0:c43134a862eb | 51 | CH_C1 = Photodiode Amp Out 2 |
seoirsem | 0:c43134a862eb | 52 | CH_D0 = Photodiode Amp Out 3 |
seoirsem | 0:c43134a862eb | 53 | CH_D1 = Photodiode Amp Out 4 |
seoirsem | 0:c43134a862eb | 54 | ---------------------------------------------------*/ |
seoirsem | 0:c43134a862eb | 55 | |
seoirsem | 0:c43134a862eb | 56 | //Heater Control |
seoirsem | 0:c43134a862eb | 57 | FastPWM drive_1(PC_9); |
seoirsem | 0:c43134a862eb | 58 | FastPWM drive_2(PC_8); |
seoirsem | 0:c43134a862eb | 59 | FastPWM guard_1(PC_7); |
seoirsem | 0:c43134a862eb | 60 | FastPWM guard_2(PC_6); |
seoirsem | 0:c43134a862eb | 61 | Timer timer; |
seoirsem | 0:c43134a862eb | 62 | |
seoirsem | 0:c43134a862eb | 63 | |
seoirsem | 0:c43134a862eb | 64 | //Global vars instatiation (to be moved to new places) |
seoirsem | 0:c43134a862eb | 65 | char buffer16[16]; |
seoirsem | 0:c43134a862eb | 66 | float voltages[8]; |
seoirsem | 0:c43134a862eb | 67 | int values[8]; |
seoirsem | 0:c43134a862eb | 68 | int i = 0; |
seoirsem | 0:c43134a862eb | 69 | int log_count = 0; |
seoirsem | 0:c43134a862eb | 70 | |
seoirsem | 0:c43134a862eb | 71 | float cur1 = 0; |
seoirsem | 0:c43134a862eb | 72 | float cur2 = 0; |
seoirsem | 0:c43134a862eb | 73 | float R1 = 0; |
seoirsem | 0:c43134a862eb | 74 | float R2 = 0; |
seoirsem | 0:c43134a862eb | 75 | float scale_factors[8]; |
seoirsem | 0:c43134a862eb | 76 | float scale_factor = 13.273; |
seoirsem | 0:c43134a862eb | 77 | int drivetime_ms = 0; |
seoirsem | 0:c43134a862eb | 78 | int OSR = 1; |
seoirsem | 0:c43134a862eb | 79 | float R_avg = 0; |
seoirsem | 0:c43134a862eb | 80 | |
seoirsem | 0:c43134a862eb | 81 | char outString[100]; |
seoirsem | 0:c43134a862eb | 82 | |
seoirsem | 0:c43134a862eb | 83 | const float h1_inter = 0.392; |
seoirsem | 0:c43134a862eb | 84 | const float h2_inter = 0.392; |
seoirsem | 0:c43134a862eb | 85 | const float h1_slope = 0.0019; |
seoirsem | 0:c43134a862eb | 86 | const float h2_slope = 0.0019; |
seoirsem | 0:c43134a862eb | 87 | |
seoirsem | 0:c43134a862eb | 88 | |
seoirsem | 0:c43134a862eb | 89 | Heater heater_1(0,1,&drive_1, &guard_1, h1_inter, h1_slope); |
seoirsem | 0:c43134a862eb | 90 | Heater heater_2(2,3,&drive_2, &guard_2, h2_inter, h2_slope); |
seoirsem | 0:c43134a862eb | 91 | |
seoirsem | 0:c43134a862eb | 92 | |
seoirsem | 0:c43134a862eb | 93 | int main() |
seoirsem | 0:c43134a862eb | 94 | { |
seoirsem | 0:c43134a862eb | 95 | // Initialsation |
seoirsem | 0:c43134a862eb | 96 | pc.baud(115200); |
seoirsem | 0:c43134a862eb | 97 | //led_1 = drive_1; //tie led 1 and heater 1 outputs together so LED shows while heater is on (initial debug purposes only) |
seoirsem | 0:c43134a862eb | 98 | adc.init(); //initialise ADC |
seoirsem | 0:c43134a862eb | 99 | timer.start(); //Start the timer |
seoirsem | 0:c43134a862eb | 100 | drivetime_ms = 50; |
seoirsem | 0:c43134a862eb | 101 | |
seoirsem | 0:c43134a862eb | 102 | //Initialise drive periods |
seoirsem | 0:c43134a862eb | 103 | drive_1.prescaler(1); |
seoirsem | 0:c43134a862eb | 104 | guard_1.prescaler(1); |
seoirsem | 0:c43134a862eb | 105 | drive_2.period_ticks(TICK_CYCLE); |
seoirsem | 0:c43134a862eb | 106 | guard_2.period_ticks(TICK_CYCLE); |
seoirsem | 0:c43134a862eb | 107 | |
seoirsem | 0:c43134a862eb | 108 | //while (user_1==0); //waits for a button press before starting the programme |
seoirsem | 0:c43134a862eb | 109 | |
seoirsem | 0:c43134a862eb | 110 | |
seoirsem | 0:c43134a862eb | 111 | float ratio_guard = 21.0/82; |
seoirsem | 0:c43134a862eb | 112 | int tic_main = 150; |
seoirsem | 0:c43134a862eb | 113 | int tic_guard = floor(tic_main * ratio_guard); |
seoirsem | 0:c43134a862eb | 114 | |
seoirsem | 0:c43134a862eb | 115 | while(1){ |
seoirsem | 0:c43134a862eb | 116 | |
seoirsem | 0:c43134a862eb | 117 | drive_2.pulsewidth_ticks(tic_main); |
seoirsem | 0:c43134a862eb | 118 | guard_2.pulsewidth_ticks(tic_guard); |
seoirsem | 0:c43134a862eb | 119 | wait(2); |
seoirsem | 0:c43134a862eb | 120 | heater_2.output(); |
seoirsem | 0:c43134a862eb | 121 | //pc.printf("%d, %f, %f\n",tic_guard,j,ratio_guard); |
seoirsem | 0:c43134a862eb | 122 | |
seoirsem | 0:c43134a862eb | 123 | } |
seoirsem | 0:c43134a862eb | 124 | |
seoirsem | 0:c43134a862eb | 125 | } |