Rev 40 | Rev 42 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 40 | Rev 41 | ||
---|---|---|---|
Line 197... | Line 197... | ||
197 | void |
197 | void |
198 | ProcessRPM (int instance) |
198 | ProcessRPM (int instance) |
199 | { |
199 | { |
200 | // compute the timer values |
200 | // compute the timer values |
201 | // snapshot timers |
201 | // snapshot timers |
202 | unsigned long RPM_Pulsewidth; |
202 | unsigned short RPM_Pulsewidth; |
203 | // current RPM pulse next slot index |
203 | // current RPM pulse next slot index |
204 | unsigned long RPM_Count_Val; |
204 | unsigned short RPM_Count_Val; |
205 | __disable_irq (); // copy the counter value |
205 | __disable_irq (); // copy the counter value |
206 | RPM_Count_Val = RPM_Count; |
206 | RPM_Count_Val = RPM_Count; |
207 | __enable_irq (); |
207 | __enable_irq (); |
208 | // do calculations |
208 | // do calculations |
209 | // if there is only one entry, cannot get difference |
209 | // if there is only one entry, cannot get difference |
Line 217... | Line 217... | ||
217 | unsigned int next_count = (RPM_Count_Latch + 1) % RPM_SAMPLES; |
217 | unsigned int next_count = (RPM_Count_Latch + 1) % RPM_SAMPLES; |
218 | if (next_count == RPM_Count_Val) |
218 | if (next_count == RPM_Count_Val) |
219 | { |
219 | { |
220 | break; // completed loop |
220 | break; // completed loop |
221 | } |
221 | } |
- | 222 | char pulse_level = RPM_Level[RPM_Count_Latch]; |
|
222 | base_time = RPM_Time[RPM_Count_Latch]; |
223 | base_time = RPM_Time[RPM_Count_Latch]; |
223 | new_time = RPM_Time[next_count]; |
224 | new_time = RPM_Time[next_count]; |
224 | RPM_Count_Latch = next_count; |
225 | RPM_Count_Latch = next_count; |
225 | 226 | ||
226 | RPM_Pulsewidth = new_time - base_time; // not wrapped |
227 | RPM_Pulsewidth = new_time - base_time; // not wrapped |
227 | 228 | ||
- | 229 | // if the pulse was low, |
|
228 | if (RPM_Pulsewidth > BREAKER_MIN) |
230 | if (pulse_level == 0 && RPM_Pulsewidth > BREAKER_MIN) |
229 | { |
231 | { |
230 | 232 | ||
231 | RPM_Diff = new_time - last_dwell_end; |
233 | RPM_Diff = new_time - last_dwell_end; |
232 | 234 | ||
233 | RPM_Period[RPM_Period_Ptr] = RPM_Diff; |
235 | RPM_Period[RPM_Period_Ptr] = RPM_Diff; |
Line 495... | Line 497... | ||
495 | 497 | ||
496 | // initialise all the STMCubeMX stuff |
498 | // initialise all the STMCubeMX stuff |
497 | HAL_TIM_Base_MspInit (&htim2); |
499 | HAL_TIM_Base_MspInit (&htim2); |
498 | // Start the counter |
500 | // Start the counter |
499 | HAL_TIM_Base_Start (&htim2); |
501 | HAL_TIM_Base_Start (&htim2); |
500 | // Start the input capture and the interrupt |
502 | // Start the input capture and the rising edge interrupt |
501 | HAL_TIM_IC_Start_IT (&htim2, TIM_CHANNEL_1); |
503 | HAL_TIM_IC_Start_IT (&htim2, TIM_CHANNEL_1); |
- | 504 | // Start the input capture and the falling edge interrupt |
|
- | 505 | HAL_TIM_IC_Start_IT (&htim2, TIM_CHANNEL_2); |
|
502 | 506 | ||
503 | HAL_TIM_Base_MspInit (&htim3); |
507 | HAL_TIM_Base_MspInit (&htim3); |
504 | __HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE); |
508 | __HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE); |
505 | uint32_t Ticks = HAL_GetTick () + 100; |
509 | uint32_t Ticks = HAL_GetTick () + 100; |
506 | int CalCounter = 0; |
510 | int CalCounter = 0; |
Line 813... | Line 817... | ||
813 | hspi1.Init.Direction = SPI_DIRECTION_2LINES; |
817 | hspi1.Init.Direction = SPI_DIRECTION_2LINES; |
814 | hspi1.Init.DataSize = SPI_DATASIZE_8BIT; |
818 | hspi1.Init.DataSize = SPI_DATASIZE_8BIT; |
815 | hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; |
819 | hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; |
816 | hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; |
820 | hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; |
817 | hspi1.Init.NSS = SPI_NSS_SOFT; |
821 | hspi1.Init.NSS = SPI_NSS_SOFT; |
818 | hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64; |
822 | hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; |
819 | hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; |
823 | hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; |
820 | hspi1.Init.TIMode = SPI_TIMODE_DISABLE; |
824 | hspi1.Init.TIMode = SPI_TIMODE_DISABLE; |
821 | hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; |
825 | hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; |
822 | hspi1.Init.CRCPolynomial = 10; |
826 | hspi1.Init.CRCPolynomial = 10; |
823 | if (HAL_SPI_Init(&hspi1) != HAL_OK) |
827 | if (HAL_SPI_Init(&hspi1) != HAL_OK) |
Line 848... | Line 852... | ||
848 | 852 | ||
849 | /* USER CODE BEGIN TIM2_Init 1 */ |
853 | /* USER CODE BEGIN TIM2_Init 1 */ |
850 | 854 | ||
851 | /* USER CODE END TIM2_Init 1 */ |
855 | /* USER CODE END TIM2_Init 1 */ |
852 | htim2.Instance = TIM2; |
856 | htim2.Instance = TIM2; |
853 | htim2.Init.Prescaler = 359; |
857 | htim2.Init.Prescaler = 719; |
854 | htim2.Init.CounterMode = TIM_COUNTERMODE_UP; |
858 | htim2.Init.CounterMode = TIM_COUNTERMODE_UP; |
855 | htim2.Init.Period = 65535; |
859 | htim2.Init.Period = 65535; |
856 | htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
860 | htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
857 | htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
861 | htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
858 | if (HAL_TIM_Base_Init(&htim2) != HAL_OK) |
862 | if (HAL_TIM_Base_Init(&htim2) != HAL_OK) |
Line 880... | Line 884... | ||
880 | sConfigIC.ICFilter = 15; |
884 | sConfigIC.ICFilter = 15; |
881 | if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) |
885 | if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) |
882 | { |
886 | { |
883 | Error_Handler(); |
887 | Error_Handler(); |
884 | } |
888 | } |
- | 889 | sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING; |
|
- | 890 | sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI; |
|
- | 891 | sConfigIC.ICFilter = 0; |
|
- | 892 | if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK) |
|
- | 893 | { |
|
- | 894 | Error_Handler(); |
|
- | 895 | } |
|
885 | /* USER CODE BEGIN TIM2_Init 2 */ |
896 | /* USER CODE BEGIN TIM2_Init 2 */ |
886 | 897 | ||
887 | /* USER CODE END TIM2_Init 2 */ |
898 | /* USER CODE END TIM2_Init 2 */ |
888 | 899 | ||
889 | } |
900 | } |
Line 906... | Line 917... | ||
906 | 917 | ||
907 | /* USER CODE BEGIN TIM3_Init 1 */ |
918 | /* USER CODE BEGIN TIM3_Init 1 */ |
908 | 919 | ||
909 | /* USER CODE END TIM3_Init 1 */ |
920 | /* USER CODE END TIM3_Init 1 */ |
910 | htim3.Instance = TIM3; |
921 | htim3.Instance = TIM3; |
911 | htim3.Init.Prescaler = 359; |
922 | htim3.Init.Prescaler = 719; |
912 | htim3.Init.CounterMode = TIM_COUNTERMODE_UP; |
923 | htim3.Init.CounterMode = TIM_COUNTERMODE_UP; |
913 | htim3.Init.Period = 99; |
924 | htim3.Init.Period = 199; |
914 | htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
925 | htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
915 | htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
926 | htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
916 | if (HAL_TIM_Base_Init(&htim3) != HAL_OK) |
927 | if (HAL_TIM_Base_Init(&htim3) != HAL_OK) |
917 | { |
928 | { |
918 | Error_Handler(); |
929 | Error_Handler(); |
Line 935... | Line 946... | ||
935 | if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) |
946 | if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) |
936 | { |
947 | { |
937 | Error_Handler(); |
948 | Error_Handler(); |
938 | } |
949 | } |
939 | sConfigOC.OCMode = TIM_OCMODE_TIMING; |
950 | sConfigOC.OCMode = TIM_OCMODE_TIMING; |
940 | sConfigOC.Pulse = 98; |
951 | sConfigOC.Pulse = 198; |
941 | sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; |
952 | sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; |
942 | sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
953 | sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
943 | if (HAL_TIM_OC_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) |
954 | if (HAL_TIM_OC_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) |
944 | { |
955 | { |
945 | Error_Handler(); |
956 | Error_Handler(); |
Line 967... | Line 978... | ||
967 | 978 | ||
968 | /* USER CODE BEGIN TIM4_Init 1 */ |
979 | /* USER CODE BEGIN TIM4_Init 1 */ |
969 | 980 | ||
970 | /* USER CODE END TIM4_Init 1 */ |
981 | /* USER CODE END TIM4_Init 1 */ |
971 | htim4.Instance = TIM4; |
982 | htim4.Instance = TIM4; |
972 | htim4.Init.Prescaler = 359; |
983 | htim4.Init.Prescaler = 719; |
973 | htim4.Init.CounterMode = TIM_COUNTERMODE_UP; |
984 | htim4.Init.CounterMode = TIM_COUNTERMODE_UP; |
974 | htim4.Init.Period = 9999; |
985 | htim4.Init.Period = 9999; |
975 | htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
986 | htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
976 | htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
987 | htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
977 | if (HAL_TIM_Base_Init(&htim4) != HAL_OK) |
988 | if (HAL_TIM_Base_Init(&htim4) != HAL_OK) |