current monitoring dlc update lol
This commit is contained in:
		@ -25,7 +25,7 @@ typedef struct {
 | 
			
		||||
  uint8_t radiatorfans;
 | 
			
		||||
  uint8_t tsacfans;
 | 
			
		||||
  uint8_t pwmaggregat;
 | 
			
		||||
  uint8_t pwmpumps;
 | 
			
		||||
  uint8_t cooling_pump;
 | 
			
		||||
  uint8_t checksum;
 | 
			
		||||
} rx_status_frame;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -13,28 +13,29 @@
 | 
			
		||||
// Convert ADC quants to I_S in mA
 | 
			
		||||
#define CURR_SENSE_IS_FACTOR  ((3.3f / 4096) / 1.2f) // 3.3V / 12bit / 1.2kOhm
 | 
			
		||||
// Convert ADC quants to I_L in mA
 | 
			
		||||
#define CURR_SENSE_FACTOR_31A (34100 * CURR_SENSE_IS_FACTOR)
 | 
			
		||||
#define CURR_SENSE_FACTOR_5A  (3700 * CURR_SENSE_IS_FACTOR)
 | 
			
		||||
#define CURR_SENSE_FACTOR_(7.5)A (5450 * CURR_SENSE_IS_FACTOR)
 | 
			
		||||
#define CURR_SENSE_FACTOR_7_5A (5450 * CURR_SENSE_IS_FACTOR)
 | 
			
		||||
#define CURR_SENSE_FACTOR_21A (22700 * CURR_SENSE_IS_FACTOR)
 | 
			
		||||
#define CURR_SENSE_FACTOR_31A (34100 * CURR_SENSE_IS_FACTOR)
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  uint16_t servicebrake;
 | 
			
		||||
  uint16_t sensorbox;
 | 
			
		||||
  uint16_t fans;
 | 
			
		||||
  uint16_t aggregat;
 | 
			
		||||
  uint16_t inverter;
 | 
			
		||||
  uint16_t pumps;
 | 
			
		||||
  uint16_t steering;
 | 
			
		||||
 | 
			
		||||
  uint16_t acu;
 | 
			
		||||
  uint16_t epsc;
 | 
			
		||||
  uint16_t radiator_fans;
 | 
			
		||||
  uint16_t tsac_fans;
 | 
			
		||||
  uint16_t gss;
 | 
			
		||||
  uint16_t lidar;
 | 
			
		||||
  uint16_t sdc;
 | 
			
		||||
  uint16_t inverters;
 | 
			
		||||
  uint16_t servos;
 | 
			
		||||
  uint16_t aggregat;
 | 
			
		||||
  uint16_t misc;
 | 
			
		||||
  uint16_t always_on;
 | 
			
		||||
  uint16_t shutdown_circuit;
 | 
			
		||||
  uint16_t modevalve_1;
 | 
			
		||||
  uint16_t modevalve_2;
 | 
			
		||||
  uint16_t ebsvalve_1;
 | 
			
		||||
  uint16_t ebsvalve_2;
 | 
			
		||||
  uint16_t ebs_cs_valve;
 | 
			
		||||
  uint16_t reserved;
 | 
			
		||||
  uint16_t ebsvalve_a;
 | 
			
		||||
  uint16_t ebsvalve_b;
 | 
			
		||||
  uint16_t cooling_pump;
 | 
			
		||||
} CurrentMeasurements;
 | 
			
		||||
 | 
			
		||||
void currentMonitor_init(ADC_HandleTypeDef* hadc1, ADC_HandleTypeDef* hadc2,
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,7 @@ void can_sendloop() {
 | 
			
		||||
  status_data[2] = rxstate.tsacfans;
 | 
			
		||||
  status_data[3] = rxstate.radiatorfans;
 | 
			
		||||
  status_data[4] = rxstate.pwmaggregat;
 | 
			
		||||
  status_data[5] = rxstate.pwmpumps;
 | 
			
		||||
  status_data[5] = rxstate.cooling_pump;
 | 
			
		||||
  status_data[6] = 0xFF ^ rxstate.checksum;
 | 
			
		||||
  ftcan_transmit(TX_STATUS_MSG_ID, status_data, 7);
 | 
			
		||||
 | 
			
		||||
@ -41,49 +41,49 @@ return;
 | 
			
		||||
      data[1] = current_measurements_adc_val.always_on & 0xFF;
 | 
			
		||||
      data[2] = current_measurements_adc_val.misc >> 8;
 | 
			
		||||
      data[3] = current_measurements_adc_val.misc & 0xFF;
 | 
			
		||||
      data[4] = current_measurements_adc_val.inverter >> 8;
 | 
			
		||||
      data[5] = current_measurements_adc_val.inverter & 0xFF;
 | 
			
		||||
      data[6] = current_measurements_adc_val.shutdown_circuit >> 8;
 | 
			
		||||
      data[7] = current_measurements_adc_val.shutdown_circuit & 0xFF;
 | 
			
		||||
      data[4] = current_measurements_adc_val.inverters >> 8;
 | 
			
		||||
      data[5] = current_measurements_adc_val.inverters & 0xFF;
 | 
			
		||||
      data[6] = current_measurements_adc_val.sdc >> 8;
 | 
			
		||||
      data[7] = current_measurements_adc_val.sdc & 0xFF;
 | 
			
		||||
      ftcan_transmit(CUR_CHANNELS_1_ID, data, 8);
 | 
			
		||||
 | 
			
		||||
      break;
 | 
			
		||||
    case 1:
 | 
			
		||||
 | 
			
		||||
      data[0] = current_measurements_adc_val.fans >> 8;
 | 
			
		||||
      data[1] = current_measurements_adc_val.fans & 0xFF;
 | 
			
		||||
      data[2] = current_measurements_adc_val.pumps >> 8;
 | 
			
		||||
      data[3] = current_measurements_adc_val.pumps & 0xFF;
 | 
			
		||||
      data[0] = current_measurements_adc_val.tsac_fans >> 8;
 | 
			
		||||
      data[1] = current_measurements_adc_val.tsac_fans & 0xFF;
 | 
			
		||||
      data[2] = current_measurements_adc_val.cooling_pump >> 8;
 | 
			
		||||
      data[3] = current_measurements_adc_val.cooling_pump & 0xFF;
 | 
			
		||||
      data[4] = current_measurements_adc_val.aggregat >> 8;
 | 
			
		||||
      data[5] = current_measurements_adc_val.aggregat & 0xFF;
 | 
			
		||||
      data[6] = current_measurements_adc_val.steering >> 8;
 | 
			
		||||
      data[7] = current_measurements_adc_val.steering & 0xFF;
 | 
			
		||||
      data[6] = current_measurements_adc_val.epsc >> 8;
 | 
			
		||||
      data[7] = current_measurements_adc_val.epsc & 0xFF;
 | 
			
		||||
      ftcan_transmit(CUR_CHANNELS_2_ID, data, 8);
 | 
			
		||||
 | 
			
		||||
      break;
 | 
			
		||||
    case 2:
 | 
			
		||||
 | 
			
		||||
      data[0] = current_measurements_adc_val.ebsvalve_1 >> 8;
 | 
			
		||||
      data[1] = current_measurements_adc_val.ebsvalve_1 & 0xFF;
 | 
			
		||||
      data[2] = current_measurements_adc_val.ebsvalve_2 >> 8;
 | 
			
		||||
      data[3] = current_measurements_adc_val.ebsvalve_2 & 0xFF;
 | 
			
		||||
      data[4] = current_measurements_adc_val.modevalve_1 >> 8;
 | 
			
		||||
      data[5] = current_measurements_adc_val.modevalve_1 & 0xFF;
 | 
			
		||||
      data[6] = current_measurements_adc_val.modevalve_2 >> 8;
 | 
			
		||||
      data[7] = current_measurements_adc_val.modevalve_2 & 0xFF;
 | 
			
		||||
      data[0] = current_measurements_adc_val.ebsvalve_a >> 8;
 | 
			
		||||
      data[1] = current_measurements_adc_val.ebsvalve_a & 0xFF;
 | 
			
		||||
      data[2] = current_measurements_adc_val.ebsvalve_b >> 8;
 | 
			
		||||
      data[3] = current_measurements_adc_val.ebsvalve_b & 0xFF;
 | 
			
		||||
      data[4] = current_measurements_adc_val.ebs_cs_valve >> 8;
 | 
			
		||||
      data[5] = current_measurements_adc_val.ebs_cs_valve & 0xFF;
 | 
			
		||||
      data[6] = current_measurements_adc_val.gss >> 8;
 | 
			
		||||
      data[7] = current_measurements_adc_val.gss & 0xFF;
 | 
			
		||||
      ftcan_transmit(CUR_CHANNELS_3_ID, data, 8);
 | 
			
		||||
 | 
			
		||||
      break;
 | 
			
		||||
    case 3:
 | 
			
		||||
 | 
			
		||||
      data[0] = current_measurements_adc_val.sensorbox >> 8;
 | 
			
		||||
      data[1] = current_measurements_adc_val.sensorbox & 0xFF;
 | 
			
		||||
      data[2] = current_measurements_adc_val.servicebrake >> 8;
 | 
			
		||||
      data[3] = current_measurements_adc_val.servicebrake & 0xFF;
 | 
			
		||||
      data[0] = current_measurements_adc_val.radiator_fans >> 8;
 | 
			
		||||
      data[1] = current_measurements_adc_val.radiator_fans & 0xFF;
 | 
			
		||||
      data[2] = current_measurements_adc_val.acu >> 8;
 | 
			
		||||
      data[3] = current_measurements_adc_val.acu & 0xFF;
 | 
			
		||||
      data[4] = current_measurements_adc_val.servos >> 8;
 | 
			
		||||
      data[5] = current_measurements_adc_val.servos & 0xFF;
 | 
			
		||||
      data[6] = current_measurements_adc_val.shutdown_circuit >> 8;
 | 
			
		||||
      data[7] = current_measurements_adc_val.shutdown_circuit & 0xFF;
 | 
			
		||||
      data[6] = current_measurements_adc_val.lidar >> 8;
 | 
			
		||||
      data[7] = current_measurements_adc_val.lidar & 0xFF;
 | 
			
		||||
      ftcan_transmit(CUR_CHANNELS_4_ID, data, 8);
 | 
			
		||||
 | 
			
		||||
      break;
 | 
			
		||||
@ -104,7 +104,7 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t* data) {
 | 
			
		||||
    rxstate.radiatorfans = data[2];
 | 
			
		||||
    rxstate.tsacfans = data[3];
 | 
			
		||||
    rxstate.pwmaggregat = data[4];
 | 
			
		||||
    rxstate.pwmpumps = data[5];
 | 
			
		||||
    rxstate.cooling_pump = data[5];
 | 
			
		||||
    rxstate.checksum = data[6];
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -10,13 +10,13 @@
 | 
			
		||||
 | 
			
		||||
volatile union adc1_channels {
 | 
			
		||||
  struct {
 | 
			
		||||
    uint16_t isense12;
 | 
			
		||||
    uint16_t isense11;
 | 
			
		||||
    uint16_t isense6;
 | 
			
		||||
    uint16_t isense13;
 | 
			
		||||
    uint16_t isense5;
 | 
			
		||||
    uint16_t isense3;
 | 
			
		||||
    uint16_t isense7;
 | 
			
		||||
    uint16_t isense12;  // acu
 | 
			
		||||
    uint16_t isense11;  // epsc
 | 
			
		||||
    uint16_t isense6;   // radiator fans 
 | 
			
		||||
    uint16_t isense13;  // tsac fans 
 | 
			
		||||
    uint16_t isense5;   // gss and lidar 
 | 
			
		||||
    uint16_t isense3;   // sdc and always on 
 | 
			
		||||
    uint16_t isense7;   // misc and inverters
 | 
			
		||||
  } adcbank1;
 | 
			
		||||
 | 
			
		||||
  uint16_t adcbuffer[7]; // array 7*16 bit
 | 
			
		||||
@ -25,12 +25,12 @@ volatile union adc1_channels {
 | 
			
		||||
// ADC's anpassen adc1 - 9, adc2 ist halt 5 , buffer anpassen und namen auch ( isense usw)
 | 
			
		||||
volatile union adc2_channels {
 | 
			
		||||
  struct {
 | 
			
		||||
    uint16_t isense2;
 | 
			
		||||
    uint16_t isense1;
 | 
			
		||||
    uint16_t isense10;
 | 
			
		||||
    uint16_t isense4;
 | 
			
		||||
    uint16_t isense2;    // ebs valve a and ebs valve b 
 | 
			
		||||
    uint16_t isense1;    // ebs cs valve 
 | 
			
		||||
    uint16_t isense10;   // hyr aggregat 
 | 
			
		||||
    uint16_t isense4;     // cooling pump and reserved 
 | 
			
		||||
 | 
			
		||||
  } adcbank2;
 | 
			
		||||
  } adcbank1;
 | 
			
		||||
 | 
			
		||||
  uint16_t adcbuffer[4];
 | 
			
		||||
 | 
			
		||||
@ -55,7 +55,7 @@ void currentMonitor_init(ADC_HandleTypeDef* hadc1, ADC_HandleTypeDef* hadc2, //
 | 
			
		||||
  adc2 = hadc2;
 | 
			
		||||
  HAL_TIM_Base_Start(trigtim);
 | 
			
		||||
  HAL_ADC_Start_DMA(hadc1, (uint32_t*)adc_channels1.adcbuffer, 7);
 | 
			
		||||
  HAL_ADC_Start_DMA(hadc2, (uint32_t*)adc_channels2.adcbuffer, 7); // wie adc mit dma geht , red mit jasper
 | 
			
		||||
  HAL_ADC_Start_DMA(hadc2, (uint32_t*)adc_channels2.adcbuffer, 4); // wie adc mit dma geht , red mit jasper
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t currentMonitor_checklimits() { return 0; }
 | 
			
		||||
@ -63,59 +63,64 @@ uint8_t currentMonitor_checklimits() { return 0; }
 | 
			
		||||
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
 | 
			
		||||
  if (hadc == adc2) {
 | 
			
		||||
    if (adcbank2 == GPIO_PIN_RESET) {
 | 
			
		||||
      current_measurements_adc_val.always_on =
 | 
			
		||||
          adc_channels2.adcbank1.isense10 * CURR_SENSE_FACTOR_2A;
 | 
			
		||||
      current_measurements_adc_val.modevalve_1 =
 | 
			
		||||
          adc_channels2.adcbank1.isense5 * CURR_SENSE_FACTOR_5A;
 | 
			
		||||
      current_measurements_adc_val.ebsvalve_1 =
 | 
			
		||||
          adc_channels2.adcbank1.isense4 * CURR_SENSE_FACTOR_5A;
 | 
			
		||||
      current_measurements_adc_val.ebsvalve_a =
 | 
			
		||||
          adc_channels2.adcbank1.isense2 * CURR_SENSE_FACTOR_5A;
 | 
			
		||||
      current_measurements_adc_val.cooling_pump =
 | 
			
		||||
          adc_channels2.adcbank1.isense4 * CURR_SENSE_FACTOR_7_5A;
 | 
			
		||||
      adcbank2 = GPIO_PIN_SET;
 | 
			
		||||
    } else {
 | 
			
		||||
      current_measurements_adc_val.shutdown_circuit =
 | 
			
		||||
          adc_channels2.adcbank1.isense10 * CURR_SENSE_FACTOR_2A;
 | 
			
		||||
      current_measurements_adc_val.modevalve_2 =
 | 
			
		||||
          adc_channels2.adcbank1.isense5 * CURR_SENSE_FACTOR_5A;
 | 
			
		||||
      current_measurements_adc_val.ebsvalve_2 =
 | 
			
		||||
          adc_channels2.adcbank1.isense4 * CURR_SENSE_FACTOR_5A;
 | 
			
		||||
      current_measurements_adc_val.ebsvalve_b =
 | 
			
		||||
          adc_channels2.adcbank1.isense2 * CURR_SENSE_FACTOR_5A;
 | 
			
		||||
      current_measurements_adc_val.reserved =
 | 
			
		||||
          adc_channels2.adcbank1.isense4 * CURR_SENSE_FACTOR_7_5A;
 | 
			
		||||
      adcbank2 = GPIO_PIN_RESET;
 | 
			
		||||
    }
 | 
			
		||||
    current_measurements_adc_val.fans =
 | 
			
		||||
        adc_channels2.adcbank1.isense6 * CURR_SENSE_FACTOR_21A;
 | 
			
		||||
    current_measurements_adc_val.ebs_cs_valve =
 | 
			
		||||
        adc_channels2.adcbank1.isense1 * CURR_SENSE_FACTOR_5A;
 | 
			
		||||
    current_measurements_adc_val.aggregat =
 | 
			
		||||
        adc_channels2.adcbank1.isense1 * CURR_SENSE_FACTOR_21A;
 | 
			
		||||
    current_measurements_adc_val.inverter =
 | 
			
		||||
        adc_channels2.adcbank1.isense11 * CURR_SENSE_FACTOR_10A;
 | 
			
		||||
    current_measurements_adc_val.steering =
 | 
			
		||||
        adc_channels2.adcbank1.isense7 * CURR_SENSE_FACTOR_10A;
 | 
			
		||||
        adc_channels2.adcbank1.isense10 * CURR_SENSE_FACTOR_21A;
 | 
			
		||||
 | 
			
		||||
    HAL_GPIO_WritePin(DSEL_4_GPIO_Port, DSEL_4_Pin,
 | 
			
		||||
    HAL_GPIO_WritePin(DSEL_3_GPIO_Port, DSEL_3_Pin,
 | 
			
		||||
                      adcbank2);
 | 
			
		||||
    HAL_GPIO_WritePin(DSEL_5_GPIO_Port, DSEL_5_Pin,
 | 
			
		||||
                      adcbank2);
 | 
			
		||||
    HAL_GPIO_WritePin(DSEL_6_GPIO_Port, DSEL_6_Pin,
 | 
			
		||||
    HAL_GPIO_WritePin(DSEL_8_GPIO_Port, DSEL_8_Pin,
 | 
			
		||||
                      adcbank2);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (hadc == adc1) {
 | 
			
		||||
    if (adcbank1 == GPIO_PIN_RESET) {
 | 
			
		||||
      current_measurements_adc_val.servos =
 | 
			
		||||
          adc_channels1.adcbank1.isense8 * CURR_SENSE_FACTOR_5A;
 | 
			
		||||
      current_measurements_adc_val.sdc=
 | 
			
		||||
          adc_channels1.adcbank1.isense3 * CURR_SENSE_FACTOR_5A;
 | 
			
		||||
      current_measurements_adc_val.misc=
 | 
			
		||||
          adc_channels1.adcbank1.isense7 * CURR_SENSE_FACTOR_7_5A; 
 | 
			
		||||
      current_measurements_adc_val.gss=
 | 
			
		||||
          adc_channels1.adcbank1.isense5 * CURR_SENSE_FACTOR_7_5A; 
 | 
			
		||||
    
 | 
			
		||||
      adcbank1 = GPIO_PIN_SET;
 | 
			
		||||
    } else {
 | 
			
		||||
      current_measurements_adc_val.misc =
 | 
			
		||||
          adc_channels1.adcbank1.isense8 * CURR_SENSE_FACTOR_5A;
 | 
			
		||||
      current_measurements_adc_val.always_on =
 | 
			
		||||
          adc_channels1.adcbank1.isense3 * CURR_SENSE_FACTOR_5A;
 | 
			
		||||
      current_measurements_adc_val.inverters =
 | 
			
		||||
          adc_channels1.adcbank1.isense7 * CURR_SENSE_FACTOR_7_5A; 
 | 
			
		||||
      current_measurements_adc_val.lidar=
 | 
			
		||||
          adc_channels1.adcbank1.isense5 * CURR_SENSE_FACTOR_7_5A; 
 | 
			
		||||
      adcbank1 = GPIO_PIN_RESET;
 | 
			
		||||
    }
 | 
			
		||||
    current_measurements_adc_val.servicebrake =
 | 
			
		||||
        adc_channels1.adcbank1.isense3 * CURR_SENSE_FACTOR_2A;
 | 
			
		||||
    current_measurements_adc_val.sensorbox =
 | 
			
		||||
        adc_channels1.adcbank1.isense2 * CURR_SENSE_FACTOR_21A;
 | 
			
		||||
    current_measurements_adc_val.pumps =
 | 
			
		||||
        adc_channels1.adcbank1.isense9 * CURR_SENSE_FACTOR_10A;
 | 
			
		||||
    current_measurements_adc_val.acu=
 | 
			
		||||
        adc_channels1.adcbank1.isense12 * CURR_SENSE_FACTOR_31A;
 | 
			
		||||
    current_measurements_adc_val.epsc =
 | 
			
		||||
        adc_channels1.adcbank1.isense11 * CURR_SENSE_FACTOR_21A;
 | 
			
		||||
    current_measurements_adc_val.tsac_fans =
 | 
			
		||||
        adc_channels1.adcbank1.isense13 * CURR_SENSE_FACTOR_31A;
 | 
			
		||||
    current_measurements_adc_val.radiator_fans=
 | 
			
		||||
          adc_channels1.adcbank1.isense6 * CURR_SENSE_FACTOR_21A; 
 | 
			
		||||
 | 
			
		||||
    HAL_GPIO_WritePin(DSEL_3_GPIO_Port, DSEL_3_Pin,
 | 
			
		||||
    HAL_GPIO_WritePin(DSEL_5_GPIO_Port, DSEL_5_Pin,
 | 
			
		||||
                      adcbank1);
 | 
			
		||||
  }
 | 
			
		||||
    HAL_GPIO_WritePin(DSEL_4_GPIO_Port, DSEL_4_Pin,
 | 
			
		||||
                      adcbank1);                   
 | 
			
		||||
    HAL_GPIO_WritePin(DSEL_7_GPIO_Port, DSEL_7_Pin,
 | 
			
		||||
                      adcbank1); 
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -142,7 +142,7 @@ while(1)
 | 
			
		||||
      canmsg_received = 0;
 | 
			
		||||
      ChannelControl_UpdateGPIOs(rxstate.iostatus);
 | 
			
		||||
      ChannelControl_UpdatePWMs(rxstate.radiatorfans, rxstate.tsacfans, rxstate.pwmaggregat,
 | 
			
		||||
                                rxstate.pwmpumps); // gotta change , to see whats left of it and whats not
 | 
			
		||||
                                rxstate.cooling_pump); // gotta change , to see whats left of it and whats not
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((HAL_GetTick() - lasttick) > 100U) {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user