Es un backup para las pruebas de firmware y hardware de un ventilador
Dependencies: mbed QEI FastPWM
encoder_interface.cpp@12:3bc2465b034a, 2020-05-15 (annotated)
- Committer:
- miguelangel_2511
- Date:
- Fri May 15 20:29:30 2020 +0000
- Revision:
- 12:3bc2465b034a
- Parent:
- 0:9d0b9785d3d6
hola papu
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
miguelangel_2511 | 0:9d0b9785d3d6 | 1 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 2 | #include "mbed.h" |
miguelangel_2511 | 0:9d0b9785d3d6 | 3 | #include "QEI.h" |
miguelangel_2511 | 0:9d0b9785d3d6 | 4 | #include "stdint.h" |
miguelangel_2511 | 0:9d0b9785d3d6 | 5 | #include "project_defines.h" |
miguelangel_2511 | 0:9d0b9785d3d6 | 6 | #include "encoder_interface.h" |
miguelangel_2511 | 0:9d0b9785d3d6 | 7 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 8 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 9 | /* Object definition */ |
miguelangel_2511 | 0:9d0b9785d3d6 | 10 | QEI rotary_encoder(ENCODER_A_SIGNAL, ENCODER_B_SIGNAL, NC, 624, QEI::X4_ENCODING); |
miguelangel_2511 | 0:9d0b9785d3d6 | 11 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 12 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 13 | /* Global variables definition */ |
miguelangel_2511 | 0:9d0b9785d3d6 | 14 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 15 | int8_t past_parameter_selection_index = PARAMETER_SELECTION_INDEX_DEFAULT; |
miguelangel_2511 | 0:9d0b9785d3d6 | 16 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 17 | volatile uint8_t parameter_selection_index_change_flag = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 18 | int8_t parameter_selection_index = PARAMETER_SELECTION_INDEX_DEFAULT; |
miguelangel_2511 | 0:9d0b9785d3d6 | 19 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 20 | volatile uint8_t volume_setpoint_index_change_flag = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 21 | int8_t volume_setpoint_index = VOLUME_SETPOINT_INDEX_DEFAULT ; |
miguelangel_2511 | 0:9d0b9785d3d6 | 22 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 23 | volatile uint8_t resp_frequency_index_change_flag = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 24 | int8_t resp_frequency_index = RESP_FREQUENCY_INDEX_DEFAULT; |
miguelangel_2511 | 0:9d0b9785d3d6 | 25 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 26 | volatile uint8_t i_e_ratio_index_change_flag = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 27 | int8_t i_e_ratio_index = I_E_RATIO_INDEX_DEFAULT; |
miguelangel_2511 | 0:9d0b9785d3d6 | 28 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 29 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 30 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 31 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 32 | void Parameter_Selection_Index_Update(void){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 33 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 34 | static int8_t previous_parameter_selection_index = PARAMETER_SELECTION_INDEX_DEFAULT; |
miguelangel_2511 | 0:9d0b9785d3d6 | 35 | int32_t encoder_counter; |
miguelangel_2511 | 0:9d0b9785d3d6 | 36 | int8_t valid_step; |
miguelangel_2511 | 0:9d0b9785d3d6 | 37 | int8_t temp; |
miguelangel_2511 | 0:9d0b9785d3d6 | 38 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 39 | encoder_counter = rotary_encoder.getPulses(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 40 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 41 | if(encoder_counter >= ENCODER_THRESHOLD){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 42 | valid_step = 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 43 | rotary_encoder.reset(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 44 | }else if(encoder_counter <= -ENCODER_THRESHOLD){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 45 | valid_step = -1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 46 | rotary_encoder.reset(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 47 | }else{ |
miguelangel_2511 | 0:9d0b9785d3d6 | 48 | valid_step = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 49 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 50 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 51 | temp = parameter_selection_index + valid_step; |
miguelangel_2511 | 0:9d0b9785d3d6 | 52 | if(temp < 0){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 53 | parameter_selection_index = PARAMETER_SELECTION_INDEX_LIMIT - 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 54 | }else if(temp >= PARAMETER_SELECTION_INDEX_LIMIT){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 55 | parameter_selection_index = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 56 | }else{ |
miguelangel_2511 | 0:9d0b9785d3d6 | 57 | parameter_selection_index = temp; |
miguelangel_2511 | 0:9d0b9785d3d6 | 58 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 59 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 60 | if(parameter_selection_index != previous_parameter_selection_index){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 61 | parameter_selection_index_change_flag = 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 62 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 63 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 64 | past_parameter_selection_index = previous_parameter_selection_index; |
miguelangel_2511 | 0:9d0b9785d3d6 | 65 | previous_parameter_selection_index = parameter_selection_index; |
miguelangel_2511 | 0:9d0b9785d3d6 | 66 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 67 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 68 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 69 | void Volume_Setpoint_Index_Update(void){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 70 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 71 | static int8_t previous_volume_setpoint_index = VOLUME_SETPOINT_INDEX_DEFAULT; |
miguelangel_2511 | 0:9d0b9785d3d6 | 72 | int32_t encoder_counter; |
miguelangel_2511 | 0:9d0b9785d3d6 | 73 | int8_t valid_step; |
miguelangel_2511 | 0:9d0b9785d3d6 | 74 | int8_t temp; |
miguelangel_2511 | 0:9d0b9785d3d6 | 75 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 76 | encoder_counter = rotary_encoder.getPulses(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 77 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 78 | if(encoder_counter >= ENCODER_THRESHOLD){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 79 | valid_step = 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 80 | rotary_encoder.reset(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 81 | }else if(encoder_counter <= -ENCODER_THRESHOLD){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 82 | valid_step = -1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 83 | rotary_encoder.reset(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 84 | }else{ |
miguelangel_2511 | 0:9d0b9785d3d6 | 85 | valid_step = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 86 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 87 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 88 | temp = volume_setpoint_index + valid_step; |
miguelangel_2511 | 0:9d0b9785d3d6 | 89 | if(temp < 0){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 90 | volume_setpoint_index = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 91 | }else if(temp >= VOLUME_SETPOINT_INDEX_LIMIT){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 92 | volume_setpoint_index = VOLUME_SETPOINT_INDEX_LIMIT - 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 93 | }else{ |
miguelangel_2511 | 0:9d0b9785d3d6 | 94 | volume_setpoint_index = temp; |
miguelangel_2511 | 0:9d0b9785d3d6 | 95 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 96 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 97 | if(volume_setpoint_index != previous_volume_setpoint_index){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 98 | volume_setpoint_index_change_flag = 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 99 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 100 | previous_volume_setpoint_index = volume_setpoint_index; |
miguelangel_2511 | 0:9d0b9785d3d6 | 101 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 102 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 103 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 104 | void Resp_Frequency_Index_Update(void){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 105 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 106 | static int8_t previous_resp_frequency_index = RESP_FREQUENCY_INDEX_DEFAULT; |
miguelangel_2511 | 0:9d0b9785d3d6 | 107 | int32_t encoder_counter; |
miguelangel_2511 | 0:9d0b9785d3d6 | 108 | int8_t valid_step; |
miguelangel_2511 | 0:9d0b9785d3d6 | 109 | int8_t temp; |
miguelangel_2511 | 0:9d0b9785d3d6 | 110 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 111 | encoder_counter = rotary_encoder.getPulses(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 112 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 113 | if(encoder_counter >= ENCODER_THRESHOLD){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 114 | valid_step = 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 115 | rotary_encoder.reset(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 116 | }else if(encoder_counter <= -ENCODER_THRESHOLD){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 117 | valid_step = -1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 118 | rotary_encoder.reset(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 119 | }else{ |
miguelangel_2511 | 0:9d0b9785d3d6 | 120 | valid_step = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 121 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 122 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 123 | temp = resp_frequency_index + valid_step; |
miguelangel_2511 | 0:9d0b9785d3d6 | 124 | if(temp < 0){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 125 | resp_frequency_index = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 126 | }else if(temp >= RESP_FREQUENCY_INDEX_LIMIT){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 127 | resp_frequency_index = RESP_FREQUENCY_INDEX_LIMIT - 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 128 | }else{ |
miguelangel_2511 | 0:9d0b9785d3d6 | 129 | resp_frequency_index = temp; |
miguelangel_2511 | 0:9d0b9785d3d6 | 130 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 131 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 132 | if(resp_frequency_index != previous_resp_frequency_index){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 133 | resp_frequency_index_change_flag = 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 134 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 135 | previous_resp_frequency_index = resp_frequency_index; |
miguelangel_2511 | 0:9d0b9785d3d6 | 136 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 137 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 138 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 139 | void I_E_Ratio_Index_Update(void){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 140 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 141 | static int8_t previous_i_e_ratio_index = I_E_RATIO_INDEX_DEFAULT; |
miguelangel_2511 | 0:9d0b9785d3d6 | 142 | int32_t encoder_counter; |
miguelangel_2511 | 0:9d0b9785d3d6 | 143 | int8_t valid_step; |
miguelangel_2511 | 0:9d0b9785d3d6 | 144 | int8_t temp; |
miguelangel_2511 | 0:9d0b9785d3d6 | 145 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 146 | encoder_counter = rotary_encoder.getPulses(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 147 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 148 | if(encoder_counter >= ENCODER_THRESHOLD){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 149 | valid_step = 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 150 | rotary_encoder.reset(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 151 | }else if(encoder_counter <= -ENCODER_THRESHOLD){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 152 | valid_step = -1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 153 | rotary_encoder.reset(); |
miguelangel_2511 | 0:9d0b9785d3d6 | 154 | }else{ |
miguelangel_2511 | 0:9d0b9785d3d6 | 155 | valid_step = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 156 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 157 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 158 | temp = i_e_ratio_index + valid_step; |
miguelangel_2511 | 0:9d0b9785d3d6 | 159 | if(temp < 0){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 160 | i_e_ratio_index = 0; |
miguelangel_2511 | 0:9d0b9785d3d6 | 161 | }else if(temp >= I_E_RATIO_INDEX_LIMIT){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 162 | i_e_ratio_index = I_E_RATIO_INDEX_LIMIT - 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 163 | }else{ |
miguelangel_2511 | 0:9d0b9785d3d6 | 164 | i_e_ratio_index = temp; |
miguelangel_2511 | 0:9d0b9785d3d6 | 165 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 166 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 167 | if(i_e_ratio_index != previous_i_e_ratio_index){ |
miguelangel_2511 | 0:9d0b9785d3d6 | 168 | i_e_ratio_index_change_flag = 1; |
miguelangel_2511 | 0:9d0b9785d3d6 | 169 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 170 | previous_i_e_ratio_index = i_e_ratio_index; |
miguelangel_2511 | 0:9d0b9785d3d6 | 171 | } |
miguelangel_2511 | 0:9d0b9785d3d6 | 172 | |
miguelangel_2511 | 0:9d0b9785d3d6 | 173 |