tmrangle  2.0.0.0
tmrangle.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef TMRANGLE_H
36 #define TMRANGLE_H
37 
38 #include "mikrosdk_version.h"
39 
40 #ifdef __GNUC__
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
43 #else
44 #include "delays.h"
45 #endif
46 #endif
47 
48 #include "drv_digital_out.h"
49 #include "drv_digital_in.h"
50 #include "drv_spi_master.h"
51 
52 
53 // -------------------------------------------------------------- PUBLIC MACROS
64 #define TMRANGLE_MAP_MIKROBUS( cfg, mikrobus ) \
65  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
66  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
67  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
68  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS )
69 
75 #define TMRANGLE_RETVAL uint8_t
76 
77 #define TMRANGLE_OK 0x00
78 #define TMRANGLE_INIT_ERROR 0xFF
79 
85 #define TMRANGLE_COS_N 0x00
86 #define TMRANGLE_COS_P 0x01
87 #define TMRANGLE_SIN_P 0x02
88 #define TMRANGLE_SIN_N 0x03
89 
95 #define TMRANGLE_RAD2DEGFACTOR 57.3248
96 #define TMRANGLE_ROTATION_VALID 1
97 #define TMRANGLE_ANGLE45_H 0.7894
98 #define TMRANGLE_ANGLE45_L 0.7806
99 #define TMRANGLE_ANGLE135_H 2.3594
100 #define TMRANGLE_ANGLE135_L 2.3506
101 
107 #define TMRANGLE_MAX_DIFF_SIN 1251
108 #define TMRANGLE_MAX_DIFF_COS 1217
109 #define TMRANGLE_MIN_DIFF_SIN -1200
110 #define TMRANGLE_MIN_DIFF_COS -1206
111 #define TMRANGLE_SIN_45 854.0
112 #define TMRANGLE_COS_45 864.0
113 #define TMRANGLE_SIN_135 873.0
114 #define TMRANGLE_COS_135 -865.0
115  // End group macro
118 // --------------------------------------------------------------- PUBLIC TYPES
127 typedef struct
128 {
129  uint16_t sin_p;
130 
131  uint16_t cos_p;
132 
133  uint16_t sin_n;
134 
135  uint16_t cos_n;
136 
137  int16_t diff_x;
138 
139  int16_t diff_y;
140 
143 
144 typedef struct
145 {
146  digital_out_t cs;
147 
148  // Modules
149 
150  spi_master_t spi;
151  pin_name_t chip_select;
152 
154 
155 } tmrangle_t;
156 
160 typedef struct
161 {
162  // Communication gpio pins
163 
164  pin_name_t miso;
165  pin_name_t mosi;
166  pin_name_t sck;
167  pin_name_t cs;
168 
169 
170  // static variable
171 
172  uint32_t spi_speed;
173  uint8_t spi_mode;
174  spi_master_chip_select_polarity_t cs_polarity;
175 
177 
178 
179 typedef struct
180 {
181  uint8_t angle_45_found;
184 
185  int32_t max_cos;
186 
187  int32_t min_cos;
188 
189  int32_t max_sin;
190 
191  int32_t min_sin;
192 
193  float x_45;
194 
195  float x_135;
196 
197  float y_45;
198 
199  float y_135;
200 
201  float x_45_corr;
202 
203  float x_135_corr;
204 
205  float y_45_corr;
206 
207  float y_135_corr;
208 
209  float amplitude_x;
210 
211  float amplitude_y;
212 
213  float offset_x;
214 
215  float offset_y;
216 
218 
220 
222 
224 
225 typedef struct
226 {
228 
229  float sin_ortho;
230 
231  float cos_ortho;
232 
234 
235 typedef struct
236 {
237  int32_t max_diff_sin;
238  int32_t max_diff_cos;
239  int32_t min_diff_sin;
240  int32_t min_diff_cos;
241  float sin_45;
242  float cos_45;
243  float sin_135;
244  float cos_135;
245 
247  // End types group
249 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
250 
255 #ifdef __cplusplus
256 extern "C"{
257 #endif
258 
268 
277 
291 uint16_t tmrangle_read_channel_adc ( tmrangle_t* ctx, uint8_t channel );
292 
304 
315 
327  tmrangle_rotation_data_store_t* rotation_data_store );
328 
339 
355  trigonometry_t* dev );
356 
371 
372 
388 
401 
414 
431  tmrangle_calib_data_t* calib_param );
432 
433 
434 
435 #ifdef __cplusplus
436 }
437 #endif
438 #endif // _TMRANGLE_H_
439  // End public_function group
442 
443 // ------------------------------------------------------------------------- END
tmrangle_cfg_t::mosi
pin_name_t mosi
Definition: tmrangle.h:165
tmrangle_rotation_data_store_t::x_45_corr
float x_45_corr
Definition: tmrangle.h:201
tmrangle_calib_data_t::cos_ortho
float cos_ortho
Definition: tmrangle.h:231
tmrangle_init
TMRANGLE_RETVAL tmrangle_init(tmrangle_t *ctx, tmrangle_cfg_t *cfg)
Initialization function.
tmrangle_cfg_t::cs
pin_name_t cs
Definition: tmrangle.h:167
tmrangle_t::sensor_data
tmrangle_analog_sensor_data_t sensor_data
Definition: tmrangle.h:153
tmrangle_rotation_data_store_t::amplitude_y
float amplitude_y
Definition: tmrangle.h:211
tmrangle_rotation_data_store_t::min_sin
int32_t min_sin
Definition: tmrangle.h:191
trigonometry_t::sin_135
float sin_135
Definition: tmrangle.h:243
trigonometry_t::max_diff_sin
int32_t max_diff_sin
Definition: tmrangle.h:237
tmrangle_init_calib_data
void tmrangle_init_calib_data(tmrangle_t *ctx, tmrangle_calib_data_t *calib_param, trigonometry_t *dev)
Initialization and stores calibration parameters function.
tmrangle_calib_one_direction_min_max
void tmrangle_calib_one_direction_min_max(tmrangle_t *ctx, tmrangle_rotation_data_store_t *rotation_data_store)
Find and stores rotation parameters ( min, max ) function.
tmrangle_rotation_data_store_t::angle_135_found
uint8_t angle_135_found
Definition: tmrangle.h:182
tmrangle_get_calib_deff_angle
float tmrangle_get_calib_deff_angle(tmrangle_t *ctx, tmrangle_calib_data_t *calib_param)
Calculate the calibrated angle ( radians ) function.
TMRANGLE_RETVAL
#define TMRANGLE_RETVAL
Definition: tmrangle.h:75
tmrangle_init_sensor_data
void tmrangle_init_sensor_data(tmrangle_t *ctx)
Read and stores parameters data function.
tmrangle_analog_sensor_data_t
Click ctx object definition.
Definition: tmrangle.h:128
tmrangle_t::cs
digital_out_t cs
Definition: tmrangle.h:146
tmrangle_analog_sensor_data_t::cos_p
uint16_t cos_p
Definition: tmrangle.h:131
tmrangle_calib_data_t::sin_ortho
float sin_ortho
Definition: tmrangle.h:229
tmrangle_calibration_find_param
void tmrangle_calibration_find_param(tmrangle_t *ctx, tmrangle_calib_data_t *calib_param)
Get new calibration rotation parameters function.
tmrangle_analog_sensor_data_t::diff_y
int16_t diff_y
Definition: tmrangle.h:139
tmrangle_rotation_data_store_t::magnitude_135
float magnitude_135
Definition: tmrangle.h:219
tmrangle_rotation_data_store_t::amplitude_x
float amplitude_x
Definition: tmrangle.h:209
tmrangle_rotation_data_store_t::y_135_corr
float y_135_corr
Definition: tmrangle.h:207
tmrangle_analog_sensor_data_t::sin_p
uint16_t sin_p
Definition: tmrangle.h:129
tmrangle_t
Definition: tmrangle.h:145
tmrangle_rotation_data_store_t::nr_valid_rotations
uint32_t nr_valid_rotations
Definition: tmrangle.h:183
trigonometry_t::min_diff_sin
int32_t min_diff_sin
Definition: tmrangle.h:239
tmrangle_rotation_data_store_t::y_135
float y_135
Definition: tmrangle.h:199
tmrangle_calculate_diff
void tmrangle_calculate_diff(tmrangle_t *ctx)
Calculate the differential values of sin,cos signal and angle function.
tmrangle_calib_calculate_ortho
void tmrangle_calib_calculate_ortho(tmrangle_calib_data_t *calib_param)
Calculates and stores parameters, based on found parameters from both CW and CCW function.
tmrangle_analog_sensor_data_t::cos_n
uint16_t cos_n
Definition: tmrangle.h:135
tmrangle_analog_sensor_data_t::sin_n
uint16_t sin_n
Definition: tmrangle.h:133
tmrangle_rotation_data_store_t::angle_45_found
uint8_t angle_45_found
Definition: tmrangle.h:181
tmrangle_rotation_data_store_t::x_135
float x_135
Definition: tmrangle.h:195
tmrangle_cfg_setup
void tmrangle_cfg_setup(tmrangle_cfg_t *cfg)
Config Object Initialization function.
tmrangle_read_channel_adc
uint16_t tmrangle_read_channel_adc(tmrangle_t *ctx, uint8_t channel)
Read the ADC value of the selected channel function.
tmrangle_cfg_t::sck
pin_name_t sck
Definition: tmrangle.h:166
tmrangle_get_calib_angle
float tmrangle_get_calib_angle(tmrangle_t *ctx, tmrangle_calib_data_t *calib_param)
Calculate the calibrated angle ( degree ) function.
tmrangle_cfg_t::spi_speed
uint32_t spi_speed
Definition: tmrangle.h:172
tmrangle_rotation_data_store_t::max_cos
int32_t max_cos
Definition: tmrangle.h:185
tmrangle_cfg_t
Click configuration structure definition.
Definition: tmrangle.h:161
tmrangle_calib_data_t::rotation_data
tmrangle_rotation_data_store_t rotation_data
Definition: tmrangle.h:227
tmrangle_rotation_data_store_t
Definition: tmrangle.h:180
tmrangle_cfg_t::spi_mode
uint8_t spi_mode
Definition: tmrangle.h:173
tmrangle_rotation_data_store_t::ortho_one_dir
float ortho_one_dir
Definition: tmrangle.h:221
trigonometry_t
Definition: tmrangle.h:236
tmrangle_analog_sensor_data_t::diff_x
int16_t diff_x
Definition: tmrangle.h:137
tmrangle_t::chip_select
pin_name_t chip_select
Definition: tmrangle.h:151
tmrangle_calib_data_t
Definition: tmrangle.h:226
tmrangle_calib_find_min_max
void tmrangle_calib_find_min_max(tmrangle_t *ctx, tmrangle_rotation_data_store_t *rotation_data_store)
Compare and stores rotation parameters function.
tmrangle_rotation_data_store_t::offset_x
float offset_x
Definition: tmrangle.h:213
tmrangle_rotation_data_store_t::x_45
float x_45
Definition: tmrangle.h:193
tmrangle_rotation_data_store_t::max_sin
int32_t max_sin
Definition: tmrangle.h:189
tmrangle_rotation_data_store_t::y_45_corr
float y_45_corr
Definition: tmrangle.h:205
tmrangle_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: tmrangle.h:174
trigonometry_t::cos_135
float cos_135
Definition: tmrangle.h:244
tmrangle_rotation_data_store_t::x_135_corr
float x_135_corr
Definition: tmrangle.h:203
trigonometry_t::sin_45
float sin_45
Definition: tmrangle.h:241
tmrangle_rotation_data_store_t::offset_y
float offset_y
Definition: tmrangle.h:215
tmrangle_calib_calculate_one_direction
void tmrangle_calib_calculate_one_direction(tmrangle_t *ctx, tmrangle_rotation_data_store_t *rotation_data_store)
Calculates and stores parameters, based on found parameters function.
trigonometry_t::cos_45
float cos_45
Definition: tmrangle.h:242
tmrangle_rotation_data_store_t::min_cos
int32_t min_cos
Definition: tmrangle.h:187
tmrangle_rotation_data_store_t::y_45
float y_45
Definition: tmrangle.h:197
trigonometry_t::max_diff_cos
int32_t max_diff_cos
Definition: tmrangle.h:238
tmrangle_t::spi
spi_master_t spi
Definition: tmrangle.h:150
tmrangle_cfg_t::miso
pin_name_t miso
Definition: tmrangle.h:164
tmrangle_rotation_data_store_t::magnitude_45
float magnitude_45
Definition: tmrangle.h:217
tmrangle_analog_sensor_data_t::uncalibrated_angle
float uncalibrated_angle
Definition: tmrangle.h:141
trigonometry_t::min_diff_cos
int32_t min_diff_cos
Definition: tmrangle.h:240