Rev 19 | Rev 21 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 19 | Rev 20 | ||
---|---|---|---|
Line 65... | Line 65... | ||
65 | 65 | ||
66 | /* USER CODE BEGIN PV */ |
66 | /* USER CODE BEGIN PV */ |
67 | int const T100MS = 100; |
67 | int const T100MS = 100; |
68 | 68 | ||
69 | int const DISPLAY_REINITIALISE = 60 * 1000; |
69 | int const DISPLAY_REINITIALISE = 60 * 1000; |
70 | // compensated pressure in mb * 100 |
70 | /// @brief compensated pressure in mb * 100 |
71 | uint32_t comp_pres = 0; |
71 | uint32_t compensatedManifoldPressure = 0; |
- | 72 | /// @brief compensated atmospheric pressure |
|
- | 73 | uint32_t compensatedAtmosphericPressure = 0; |
|
72 | // compensated temperature |
74 | /// @brief compensated temperature |
73 | int32_t comp_temp = -10000; |
75 | int32_t compensatedTemperature = -10000; |
74 | 76 | ||
75 | int32_t timing = 0; |
77 | int32_t timing = 0; |
76 | 78 | ||
77 | // 6 degrees error in timing wheel this time .. |
79 | // 6 degrees error in timing wheel this time .. |
78 | int const TIMING_OFFSET = -6 * TIMING_SCALE; |
80 | int const TIMING_OFFSET = -6 * TIMING_SCALE; |
Line 83... | Line 85... | ||
83 | uint32_t const DEFAULT_ATMOSPHERIC_PRESSURE = 1014 * 100; |
85 | uint32_t const DEFAULT_ATMOSPHERIC_PRESSURE = 1014 * 100; |
84 | 86 | ||
85 | uint32_t const DEFAULT_ATMOSPHERIC_TEMPERATURE = 25 * 100; |
87 | uint32_t const DEFAULT_ATMOSPHERIC_TEMPERATURE = 25 * 100; |
86 | 88 | ||
87 | // Serial buffers |
89 | // Serial buffers |
88 | #define TX_BUFFER_SIZE 128 |
90 | #define TX_BUFFER_SIZE 128 |
89 | #define RX_BUFFER_SIZE 128 |
91 | #define RX_BUFFER_SIZE 128 |
90 | unsigned volatile char tx_buffer[TX_BUFFER_SIZE]; |
92 | unsigned volatile char tx_buffer[TX_BUFFER_SIZE]; |
91 | unsigned volatile char rx_buffer[RX_BUFFER_SIZE]; |
93 | unsigned volatile char rx_buffer[RX_BUFFER_SIZE]; |
92 | 94 | ||
93 | /* USER CODE END PV */ |
95 | /* USER CODE END PV */ |
Line 103... | Line 105... | ||
103 | static void MX_USART2_UART_Init(void); |
105 | static void MX_USART2_UART_Init(void); |
104 | static void MX_TIM3_Init(void); |
106 | static void MX_TIM3_Init(void); |
105 | static void MX_IWDG_Init(void); |
107 | static void MX_IWDG_Init(void); |
106 | /* USER CODE BEGIN PFP */ |
108 | /* USER CODE BEGIN PFP */ |
107 | 109 | ||
108 | void libPLXcallbackRecievedData(PLX_SensorInfo * info) |
110 | void libPLXcallbackRecievedData(PLX_SensorInfo *info) |
- | 111 | { |
|
109 | { (void)info; } |
112 | (void)info; |
- | 113 | } |
|
110 | 114 | ||
111 | void libPLXcallbackSendUserData() |
115 | void libPLXcallbackSendUserData() |
112 | { |
116 | { |
113 | // send MAP |
117 | // send MAP |
114 | PLX_SensorInfo info; |
118 | PLX_SensorInfo info; |
115 | ConvToPLXInstance(libPLXgetNextInstance(PLX_MAP), &info); |
119 | ConvToPLXInstance(libPLXgetNextInstance(PLX_MAP), &info); |
116 | ConvToPLXAddr(PLX_MAP, &info); |
120 | ConvToPLXAddr(PLX_MAP, &info); |
117 | ConvToPLXReading(ConveriMFDData2Raw(PLX_MAP, PRESSURE_kPa, (float)(comp_pres) / 100.0), &info); |
121 | ConvToPLXReading(ConveriMFDData2Raw(PLX_MAP, PRESSURE_kPa, (float)(compensatedManifoldPressure) / 100.0), &info); |
118 | sendInfo(&uc2, &info); |
122 | sendInfo(&uc2, &info); |
119 | 123 | ||
120 | ConvToPLXInstance(libPLXgetNextInstance(PLX_Timing), &info); |
124 | ConvToPLXInstance(libPLXgetNextInstance(PLX_Timing), &info); |
121 | ConvToPLXAddr(PLX_Timing, &info); |
125 | ConvToPLXAddr(PLX_Timing, &info); |
122 | ConvToPLXReading(ConveriMFDData2Raw(PLX_Timing, 0, (float)(timing) / TIMING_SCALE), &info); |
126 | ConvToPLXReading(ConveriMFDData2Raw(PLX_Timing, 0, (float)(timing) / TIMING_SCALE), &info); |
Line 200... | Line 204... | ||
200 | // Start the input capture and the falling edge interrupt |
204 | // Start the input capture and the falling edge interrupt |
201 | HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2); |
205 | HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2); |
202 | 206 | ||
203 | __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 5); // delay of 5 uS |
207 | __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 5); // delay of 5 uS |
204 | 208 | ||
205 | // HAL_I2C_ClearBusyFlagErrata_2_14_7(&hi2c1); |
209 | // HAL_I2C_ClearBusyFlagErrata_2_14_7(&hi2c1); |
206 | MX_I2C1_Init(); |
210 | MX_I2C1_Init(); |
207 | init_bmp(&hi2c1); |
211 | init_bmp(&hi2c1, &bmp); |
- | 212 | init_bmp(&hi2c1, &bmpAtm); |
|
- | 213 | ||
208 | uint32_t lastTick = HAL_GetTick(); |
214 | uint32_t lastTick = HAL_GetTick(); |
209 | 215 | ||
210 | uint32_t displayOff = lastTick + 10000; |
216 | uint32_t displayOff = lastTick + 10000; |
211 | uint32_t displayReinitialise = lastTick + DISPLAY_REINITIALISE; // every minute, reinitialise display because of risk of noise |
217 | uint32_t displayReinitialise = lastTick + DISPLAY_REINITIALISE; // every minute, reinitialise display because of risk of noise |
212 | 218 | ||
Line 262... | Line 268... | ||
262 | if (HAL_GetTick() - lastTick > T100MS) |
268 | if (HAL_GetTick() - lastTick > T100MS) |
263 | { |
269 | { |
264 | lastTick = HAL_GetTick(); |
270 | lastTick = HAL_GetTick(); |
265 | /* Reading the raw data from sensor */ |
271 | /* Reading the raw data from sensor */ |
266 | struct bmp280_uncomp_data ucomp_data; |
272 | struct bmp280_uncomp_data ucomp_data; |
- | 273 | ||
267 | uint8_t rslt = bmp280_get_uncomp_data(&ucomp_data, &bmp); |
274 | uint8_t rslt = bmp280_get_uncomp_data(&ucomp_data, &bmp); |
268 | 275 | ||
269 | uint8_t rslt2 = 1; |
276 | uint8_t manifoldStatus = 1; |
270 | uint8_t rslt3 = 1; |
277 | uint8_t temperatureStatus = 1; |
- | 278 | uint8_t atmosphericStatus = 1; |
|
271 | 279 | ||
272 | if (rslt == 0) |
280 | if (rslt == BMP280_OK) |
273 | { |
281 | { |
274 | rslt2 = bmp280_get_comp_pres_32bit(&comp_pres, ucomp_data.uncomp_press, &bmp); |
282 | manifoldStatus = bmp280_get_comp_pres_32bit(&compensatedManifoldPressure, ucomp_data.uncomp_press, &bmp); |
275 | 283 | ||
276 | rslt3 = bmp280_get_comp_temp_32bit(&comp_temp, ucomp_data.uncomp_temp, &bmp); |
284 | temperatureStatus = bmp280_get_comp_temp_32bit(&compensatedTemperature, ucomp_data.uncomp_temp, &bmp); |
277 | 285 | ||
278 | #if defined TEST_CODE |
286 | #if defined TEST_CODE |
279 | comp_pres = 100000; |
287 | compensatedManifoldPressure = 100000; |
280 | comp_temp = 4000; |
288 | compensatedTemperature = 4000; |
281 | #endif |
289 | #endif |
282 | } |
290 | } |
- | 291 | // get atmospheric data |
|
- | 292 | if (rslt == BMP280_OK) |
|
- | 293 | { |
|
- | 294 | rslt = bmp280_get_uncomp_data(&ucomp_data, &bmpAtm); |
|
- | 295 | // now to read the environmental pressure |
|
- | 296 | if (rslt == BMP280_OK) |
|
- | 297 | atmosphericStatus = bmp280_get_comp_pres_32bit(&compensatedAtmosphericPressure, ucomp_data.uncomp_press, &bmpAtm); |
|
- | 298 | } |
|
- | 299 | if (manifoldStatus != BMP280_OK) |
|
- | 300 | compensatedManifoldPressure = DEFAULT_ATMOSPHERIC_PRESSURE; |
|
- | 301 | if (temperatureStatus != BMP280_OK) |
|
- | 302 | compensatedTemperature = DEFAULT_ATMOSPHERIC_TEMPERATURE; |
|
- | 303 | if (atmosphericStatus != BMP280_OK) |
|
- | 304 | compensatedAtmosphericPressure = DEFAULT_ATMOSPHERIC_PRESSURE; |
|
- | 305 | ||
- | 306 | uint32_t vacuum = compensatedAtmosphericPressure - compensatedManifoldPressure; |
|
283 | // if the BMP280 pressure is good, then allow it through, otherwise drop to |
307 | // if the BMP280 pressure is good, then allow it through, otherwise drop to |
284 | // centrifugal advance only. |
308 | // centrifugal advance only. |
285 | if (rslt == BMP280_OK && rslt2 == BMP280_OK && rslt3 == BMP280_OK) |
- | |
286 | cc_feed_env(comp_pres, comp_temp); |
309 | // feed difference and add default pressure |
287 | else |
- | |
288 | cc_feed_env(DEFAULT_ATMOSPHERIC_PRESSURE, DEFAULT_ATMOSPHERIC_TEMPERATURE); |
310 | cc_feed_env(vacuum + DEFAULT_ATMOSPHERIC_PRESSURE, compensatedTemperature); |
289 | 311 | ||
290 | // compute RPM value, feed to display |
312 | // compute RPM value, feed to display |
291 | #if defined TEST_CODE |
313 | #if defined TEST_CODE |
292 | int rpm = 1000; |
314 | int rpm = 1000; |
293 | #else |
315 | #else |
294 | int rpm = CalculateRPM(); |
316 | int rpm = CalculateRPM(); |
295 | #endif |
317 | #endif |
296 | if (rpm > 0) |
318 | if (rpm > 0) |
297 | { |
319 | { |
298 | cc_feed_rpm(rpm); |
320 | cc_feed_rpm(rpm); |
299 | // compute timing value, feed to display |
321 | // compute timing value, feed to display |
300 | timing = mapTiming(rpm, 1000 - comp_pres / 100); |
322 | timing = mapTiming(rpm, 1000 - vacuum / 100); |
301 | cc_feed_timing(timing); |
323 | cc_feed_timing(timing); |
302 | // enable double spark below 1200 rpm |
324 | // enable double spark below 1200 rpm |
303 | int microsecs = mapTimingToMicroseconds(timing + TIMING_OFFSET, rpm > DOUBLE_SPARK_RPM); |
325 | int microsecs = mapTimingToMicroseconds(timing + TIMING_OFFSET, rpm > DOUBLE_SPARK_RPM); |
304 | __HAL_TIM_SET_AUTORELOAD(&htim1, microsecs + SAW_DELAY); |
326 | __HAL_TIM_SET_AUTORELOAD(&htim1, microsecs + SAW_DELAY); |
305 | } |
327 | } |