Subversion Repositories EngineBay2

Rev

Rev 41 | Rev 43 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 41 Rev 42
Line 89... Line 89...
89
 
89
 
90
// scale for filtered samples
90
// scale for filtered samples
91
#define Scale 1024.0
91
#define Scale 1024.0
92
 
92
 
93
// storage for ADC
93
// storage for ADC
94
uint16_t ADC_Samples[ADC_CHANNELS];
94
uint16_t ADC_Samples[ADC_CHANNELS] = { [0 ... ADC_CHANNELS-1] = 0 };
95
 
95
 
96
uint32_t FILT_Samples[ADC_CHANNELS]; // filtered ADC samples * Scale
96
uint32_t FILT_Samples[ADC_CHANNELS] = { [0 ... ADC_CHANNELS-1] = 0 }; // filtered ADC samples * Scale
97
 
97
 
98
 
98
 
99
#define NOM_VREF 3.3
99
#define NOM_VREF 3.3
100
// initial ADC vref
100
// initial ADC vref
101
float  adc_vref   = NOM_VREF;
101
float  adc_vref   = NOM_VREF;
Line 119... Line 119...
119
unsigned int RPM_Period_Ptr = 0;
119
unsigned int RPM_Period_Ptr = 0;
120
 
120
 
121
unsigned int Coded_RPM = 0;
121
unsigned int Coded_RPM = 0;
122
unsigned int Coded_CHT = 0;
122
unsigned int Coded_CHT = 0;
123
 
123
 
124
uint32_t Power_CHT_Timer;
124
uint32_t PowerTempTimer;
125
 
125
 
126
uint16_t Starter_Debounce = 0;
126
uint16_t Starter_Debounce = 0;
127
 
127
 
128
/* USER CODE END PV */
128
/* USER CODE END PV */
129
 
129
 
Line 151... Line 151...
151
  PutCharSerial (&uc1, ((x) >> 6) & 0x3F);
151
  PutCharSerial (&uc1, ((x) >> 6) & 0x3F);
152
  PutCharSerial (&uc1, (x) & 0x3F);
152
  PutCharSerial (&uc1, (x) & 0x3F);
153
}
153
}
154
 
154
 
155
void
155
void
156
init_ADC_filter ()
-
 
157
{
-
 
158
  int i;
-
 
159
  for (i = 0; i < ADC_CHANNELS; i++)
-
 
160
    {
-
 
161
      FILT_Samples[i] = 0;
-
 
162
    }
-
 
163
}
-
 
164
 
-
 
165
void
-
 
166
filter_ADC_samples ()
156
filter_ADC_samples ()
167
{
157
{
168
  int i;
158
  int i;
169
  for (i = 0; i < ADC_CHANNELS; i++)
159
  for (i = 0; i < ADC_CHANNELS; i++)
170
    {
160
    {
Line 276... Line 266...
276
 
266
 
277
FunctionalState CHT_Enable = ENABLE;
267
FunctionalState CHT_Enable = ENABLE;
278
 
268
 
279
#define CORR 3
269
#define CORR 3
280
 
270
 
281
uint16_t CHT_Observations[2] =
271
uint16_t Temp_Observations[NUM_SPI_TEMP_SENS] = { [0 ... NUM_SPI_TEMP_SENS-1] = 0 };
282
  { 0, 0 };
-
 
283
 
272
 
284
// look for the trigger pin being high then low - the points
-
 
285
// are opening, and skip the reading
-
 
286
 
273
 
-
 
274
/// \param item The array index to send
-
 
275
/// \param instance The instance to send over the bus
-
 
276
/// \param type the code to use for this observation
287
void
277
void
288
ProcessCHT (int instance)
278
ProcessTemp (char item, int instance, enum PLX_Observations type)
289
{
279
{
-
 
280
  if (item > NUM_SPI_TEMP_SENS)
-
 
281
    return;
290
  plx_sendword (PLX_X_CHT);
282
  plx_sendword (type);
291
  PutCharSerial (&uc1, instance);
283
  PutCharSerial (&uc1, instance);
292
  plx_sendword (CHT_Observations[instance]);
284
  plx_sendword (Temp_Observations[item]);
293
 
285
 
294
}
286
}
295
 
287
 
-
 
288
 
-
 
289
/// \brief Reset the temperature chip select system
-
 
290
void resetTempCS(void)
-
 
291
{
-
 
292
     HAL_GPIO_WritePin (SPI_CS_D_GPIO_Port, SPI_CS_D_Pin, GPIO_PIN_SET);
-
 
293
     HAL_GPIO_WritePin (SPI_CS_Clk_GPIO_Port, SPI_CS_Clk_Pin,
-
 
294
                         GPIO_PIN_SET);
-
 
295
 
-
 
296
     for (int i = 0 ; i < 4; i++)
-
 
297
       {
-
 
298
             HAL_GPIO_WritePin (SPI_CS_Clk_GPIO_Port, SPI_CS_Clk_Pin,
-
 
299
                                 GPIO_PIN_RESET);
-
 
300
             HAL_GPIO_WritePin (SPI_CS_Clk_GPIO_Port, SPI_CS_Clk_Pin,
-
 
301
                                 GPIO_PIN_SET);
-
 
302
       }
-
 
303
 
-
 
304
     // prepare for selecting next pin
-
 
305
     HAL_GPIO_WritePin (SPI_CS_D_GPIO_Port, SPI_CS_D_Pin, GPIO_PIN_RESET);
-
 
306
 
-
 
307
}
-
 
308
 
-
 
309
void nextTempCS(void)
-
 
310
{
-
 
311
  HAL_GPIO_WritePin (SPI_CS_Clk_GPIO_Port, SPI_CS_Clk_Pin,
-
 
312
                         GPIO_PIN_RESET);
-
 
313
  HAL_GPIO_WritePin (SPI_CS_Clk_GPIO_Port, SPI_CS_Clk_Pin,
-
 
314
                         GPIO_PIN_SET);
-
 
315
  HAL_GPIO_WritePin (SPI_CS_D_GPIO_Port, SPI_CS_D_Pin, GPIO_PIN_SET);
-
 
316
}
-
 
317
 
296
void
318
void
297
EnableCHT (FunctionalState state)
319
EnableTempSensors (FunctionalState state)
298
 
320
 
299
{
321
{
300
  GPIO_InitTypeDef GPIO_InitStruct;
322
  GPIO_InitTypeDef GPIO_InitStruct;
301
 
323
 
302
  CHT_Enable = state;
324
  CHT_Enable = state;
303
 
325
 
304
  /* enable SPI in live mode : assume it and its GPIOs are already initialised in SPI mode */
326
  /* enable SPI in live mode : assume it and its GPIOs are already initialised in SPI mode */
305
  if (state == ENABLE)
327
  if (state == ENABLE)
306
    {
328
    {
307
      HAL_GPIO_WritePin (ENA_AUX_5V_GPIO_Port, ENA_AUX_5V_Pin, GPIO_PIN_SET);
329
      HAL_GPIO_WritePin (ENA_AUX_5V_GPIO_Port, ENA_AUX_5V_Pin, GPIO_PIN_SET);
308
      HAL_GPIO_WritePin (SPI_NS_Temp_GPIO_Port, SPI_NS_Temp_Pin, GPIO_PIN_SET);
-
 
309
      HAL_GPIO_WritePin (SPI_NS_Temp2_GPIO_Port, SPI_NS_Temp2_Pin,
-
 
-
 
330
 
310
                         GPIO_PIN_SET);
331
      resetTempCS();
311
 
332
 
312
      /* put the SPI pins back into SPI AF mode */
333
      /* put the SPI pins back into SPI AF mode */
313
      GPIO_InitStruct.Pin = SPI1_MOSI_Pin | SPI1_MISO_Pin | SPI1_SCK_Pin;
334
      GPIO_InitStruct.Pin = SPI1_MOSI_Pin | SPI1_MISO_Pin | SPI1_SCK_Pin;
314
      GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
335
      GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
315
      GPIO_InitStruct.Pull = GPIO_NOPULL;
336
      GPIO_InitStruct.Pull = GPIO_NOPULL;
Line 319... Line 340...
319
    }
340
    }
320
  else
341
  else
321
    {
342
    {
322
      /*  Power down the SPI interface taking signals all low */
343
      /*  Power down the SPI interface taking signals all low */
323
      HAL_GPIO_WritePin (ENA_AUX_5V_GPIO_Port, ENA_AUX_5V_Pin, GPIO_PIN_RESET);
344
      HAL_GPIO_WritePin (ENA_AUX_5V_GPIO_Port, ENA_AUX_5V_Pin, GPIO_PIN_RESET);
324
      HAL_GPIO_WritePin (SPI_NS_Temp_GPIO_Port, SPI_NS_Temp_Pin,
-
 
325
                         GPIO_PIN_RESET);
-
 
326
      HAL_GPIO_WritePin (SPI_NS_Temp2_GPIO_Port, SPI_NS_Temp2_Pin,
-
 
327
                         GPIO_PIN_RESET);
-
 
328
 
345
 
329
      HAL_GPIO_WritePin (SPI1_SCK_GPIO_Port,
346
      HAL_GPIO_WritePin (SPI1_SCK_GPIO_Port,
330
                         SPI1_MOSI_Pin | SPI1_MISO_Pin | SPI1_SCK_Pin,
347
                         SPI1_MOSI_Pin | SPI1_MISO_Pin | SPI1_SCK_Pin,
331
                         GPIO_PIN_RESET);
348
                         GPIO_PIN_RESET);
332
 
349
 
Line 507... Line 524...
507
  HAL_TIM_Base_MspInit (&htim3);
524
  HAL_TIM_Base_MspInit (&htim3);
508
  __HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE);
525
  __HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE);
509
  uint32_t Ticks = HAL_GetTick () + 100;
526
  uint32_t Ticks = HAL_GetTick () + 100;
510
  int CalCounter = 0;
527
  int CalCounter = 0;
511
 
528
 
512
  Power_CHT_Timer = HAL_GetTick () + 1000; /* wait 10 seconds before powering up the CHT sensor */
529
  PowerTempTimer = HAL_GetTick () + 1000; /* wait 10 seconds before powering up the CHT sensor */
513
 
530
 
514
  /* USER CODE END 2 */
531
  /* USER CODE END 2 */
515
 
532
 
516
  /* Infinite loop */
533
  /* Infinite loop */
517
  /* USER CODE BEGIN WHILE */
534
  /* USER CODE BEGIN WHILE */
Line 554... Line 571...
554
            }
571
            }
555
        }
572
        }
556
 
573
 
557
      if (Starter_Debounce == STARTER_LIMIT)
574
      if (Starter_Debounce == STARTER_LIMIT)
558
        {
575
        {
559
          EnableCHT (DISABLE);
576
          EnableTempSensors (DISABLE);
560
          Power_CHT_Timer = HAL_GetTick () + 1000;
577
          PowerTempTimer = HAL_GetTick () + 1000;
561
        }
578
        }
562
      else
579
      else
563
      /* if the Power_CHT_Timer is set then wait for it to timeout, then power up CHT */
580
      /* if the PowerTempTimer is set then wait for it to timeout, then power up CHT */
564
        {
581
        {
565
          if ((Power_CHT_Timer > 0) && (HAL_GetTick () > Power_CHT_Timer))
582
          if ((PowerTempTimer > 0) && (HAL_GetTick () > PowerTempTimer))
566
            {
583
            {
567
              EnableCHT (ENABLE);
584
              EnableTempSensors (ENABLE);
568
              Power_CHT_Timer = 0;
585
              PowerTempTimer = 0;
569
            }
586
            }
570
        }
587
        }
571
 
588
 
572
      // check to see if we have any incoming data, copy and append if so, if no data then create our own frames.
589
      // check to see if we have any incoming data, copy and append if so, if no data then create our own frames.
573
      int c;
590
      int c;
Line 602... Line 619...
602
        {
619
        {
603
          send = 0;
620
          send = 0;
604
 
621
 
605
          // send the observations
622
          // send the observations
606
          ProcessRPM (0);
623
          ProcessRPM (0);
-
 
624
          ProcessTemp (0,0,PLX_X_CHT);
-
 
625
          ProcessTemp (1,1,PLX_X_CHT);
607
          ProcessCHT (0);
626
          ProcessTemp (2,0,PLX_AIT);
608
          ProcessCHT (1);
627
          ProcessTemp (3,1,PLX_AIT);
609
          ProcessBatteryVoltage (0); // Batt 1
628
          ProcessBatteryVoltage (0); // Batt 1
610
          ProcessBatteryVoltage (1); // Batt 2
629
          ProcessBatteryVoltage (1); // Batt 2
611
          ProcessCPUTemperature (0); //  built in temperature sensor
630
          ProcessCPUTemperature (0); //  built in temperature sensor
612
 
631
 
613
          ProcessMAP (0);
632
          ProcessMAP (0);
Line 1072... Line 1091...
1072
 
1091
 
1073
  /*Configure GPIO pin Output Level */
1092
  /*Configure GPIO pin Output Level */
1074
  HAL_GPIO_WritePin(LED_Blink_GPIO_Port, LED_Blink_Pin, GPIO_PIN_RESET);
1093
  HAL_GPIO_WritePin(LED_Blink_GPIO_Port, LED_Blink_Pin, GPIO_PIN_RESET);
1075
 
1094
 
1076
  /*Configure GPIO pin Output Level */
1095
  /*Configure GPIO pin Output Level */
1077
  HAL_GPIO_WritePin(GPIOB, SPI_NS_Temp_Pin|SPI_NS_Temp2_Pin|ENA_AUX_5V_Pin, GPIO_PIN_RESET);
1096
  HAL_GPIO_WritePin(GPIOB, SPI_CS_D_Pin|SPI_CS_Clk_Pin|ENA_AUX_5V_Pin, GPIO_PIN_RESET);
1078
 
1097
 
1079
  /*Configure GPIO pin : LED_Blink_Pin */
1098
  /*Configure GPIO pin : LED_Blink_Pin */
1080
  GPIO_InitStruct.Pin = LED_Blink_Pin;
1099
  GPIO_InitStruct.Pin = LED_Blink_Pin;
1081
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
1100
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
1082
  GPIO_InitStruct.Pull = GPIO_NOPULL;
1101
  GPIO_InitStruct.Pull = GPIO_NOPULL;
1083
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1102
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1084
  HAL_GPIO_Init(LED_Blink_GPIO_Port, &GPIO_InitStruct);
1103
  HAL_GPIO_Init(LED_Blink_GPIO_Port, &GPIO_InitStruct);
1085
 
1104
 
1086
  /*Configure GPIO pins : SPI_NS_Temp_Pin SPI_NS_Temp2_Pin ENA_AUX_5V_Pin */
1105
  /*Configure GPIO pins : SPI_CS_D_Pin SPI_CS_Clk_Pin ENA_AUX_5V_Pin */
1087
  GPIO_InitStruct.Pin = SPI_NS_Temp_Pin|SPI_NS_Temp2_Pin|ENA_AUX_5V_Pin;
1106
  GPIO_InitStruct.Pin = SPI_CS_D_Pin|SPI_CS_Clk_Pin|ENA_AUX_5V_Pin;
1088
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
1107
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
1089
  GPIO_InitStruct.Pull = GPIO_NOPULL;
1108
  GPIO_InitStruct.Pull = GPIO_NOPULL;
1090
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1109
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
1091
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
1110
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
1092
 
1111