1 | /**
|
2 | * @brief This function handles TIM2 global interrupt.
|
3 | */
|
4 | void TIM2_IRQHandler(void)
|
5 | {
|
6 | /* USER CODE BEGIN TIM2_IRQn 0 */
|
7 |
|
8 | if(__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_CC4) == SET )
|
9 | {
|
10 |
|
11 | __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_CC4);
|
12 |
|
13 | if(HAL_COMP_GetOutputLevel(&hcomp2) == COMP_OUTPUTLEVEL_HIGH)
|
14 | {
|
15 | T_total_ch1 = (__HAL_TIM_GET_COMPARE(&htim2, TIM_CHANNEL_4) - T_rising_edge_ch1);
|
16 | T_rising_edge_ch1 = __HAL_TIM_GET_COMPARE(&htim2, TIM_CHANNEL_4);
|
17 | timeout_ch1 = 0;
|
18 | }
|
19 | else if(HAL_COMP_GetOutputLevel(&hcomp2) == COMP_OUTPUTLEVEL_LOW)
|
20 | {
|
21 | T_high_ch1 = (__HAL_TIM_GET_COMPARE(&htim2, TIM_CHANNEL_4) - T_rising_edge_ch1);
|
22 | }
|
23 |
|
24 |
|
25 | if(T_high_ch1 < T_high_55 ) // under 55µs -> forward rotation
|
26 | {
|
27 | period_ch1 = T_total_ch1;
|
28 | direction_ch1 = 0;
|
29 | //low_value++;
|
30 | }
|
31 | else if( (T_high_ch1 > T_high_70) && (T_high_ch1 < T_high_110) ) // between 70µs and 110µs -> reverse rotation
|
32 | {
|
33 | period_ch1 = T_total_ch1;
|
34 | direction_ch1 = 1;
|
35 | //mid_value++;
|
36 | }
|
37 | else if(T_high_ch1 > T_high_145) //over 145µs -> unknown rotation
|
38 | {
|
39 | period_ch1 = 0;
|
40 | direction_ch1 = 0;
|
41 | //high_value++;
|
42 | }
|
43 |
|
44 | }
|
45 |
|
46 | /* USER CODE END TIM2_IRQn 0 */
|
47 | HAL_TIM_IRQHandler(&htim2);
|
48 | /* USER CODE BEGIN TIM2_IRQn 1 */
|
49 |
|
50 | /* USER CODE END TIM2_IRQn 1 */
|
51 | }
|
52 |
|
53 | /**
|
54 | * @brief This function handles TIM3 global interrupt.
|
55 | */
|
56 | void TIM3_IRQHandler(void)
|
57 | {
|
58 | /* USER CODE BEGIN TIM3_IRQn 0 */
|
59 |
|
60 | if(__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE) == SET )
|
61 | {
|
62 | timer32b.int16b[1]++ ;
|
63 | __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE);
|
64 | }
|
65 |
|
66 |
|
67 | if(__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_CC1) == SET )
|
68 | {
|
69 |
|
70 | __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_CC1);
|
71 |
|
72 |
|
73 | timer32b.int16b[0] = __HAL_TIM_GET_COMPARE(&htim3, TIM_CHANNEL_1);
|
74 |
|
75 |
|
76 | if(HAL_COMP_GetOutputLevel(&hcomp4) == COMP_OUTPUTLEVEL_HIGH)
|
77 | {
|
78 | T_total_ch2 = timer32b.int32b - T_rising_edge_ch2;
|
79 | T_rising_edge_ch2 = timer32b.int32b;
|
80 | timeout_ch2 = 0;
|
81 | }
|
82 | else
|
83 | {
|
84 | T_high_ch2 = timer32b.int32b - T_rising_edge_ch2;
|
85 | }
|
86 |
|
87 |
|
88 | if(T_high_ch2 < T_high_55 ) // under 55µs -> forward rotation
|
89 | {
|
90 | period_ch2 = T_total_ch2;
|
91 | direction_ch2 = 0;
|
92 | low_value++;
|
93 | }
|
94 | else if( (T_high_ch2 > T_high_70) && (T_high_ch2 < T_high_110) ) // between 70µs and 110µs -> reverse rotation
|
95 | {
|
96 | period_ch2 = T_total_ch2;
|
97 | direction_ch2 = 1;
|
98 | mid_value++;
|
99 | }
|
100 | else if(T_high_ch2 > T_high_145) //over 145µs -> unknown rotation
|
101 | {
|
102 | period_ch2 = 0;
|
103 | direction_ch2 = 0;
|
104 | high_value++;
|
105 | }
|
106 |
|
107 | }
|
108 |
|
109 | /* USER CODE END TIM3_IRQn 0 */
|
110 | HAL_TIM_IRQHandler(&htim3);
|
111 | /* USER CODE BEGIN TIM3_IRQn 1 */
|
112 |
|
113 | /* USER CODE END TIM3_IRQn 1 */
|
114 | }
|