1

Dependencies:   mbed Watchdog V2_heater_test MODSERIAL FastPWM ADS8568_ADC

Committer:
seoirsem
Date:
Mon Aug 12 10:44:12 2019 +0000
Revision:
0:c43134a862eb
2

Who changed what in which revision?

UserRevisionLine numberNew 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 }