MGE_Hal.h
4.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#ifndef __MGE_HAL_H_
#define __MGE_HAL_H_
#include "TLE5012B_spi.h"
#include "MOT_Dev_Config.h"
// /$$ /$$ /$$$$$$ /$$$$$$$$ /$$ /$$ /$$$$$$ /$$
// | $$$ /$$$ /$$__ $$| $$_____/ | $$ | $$ /$$__ $$| $$
// | $$$$ /$$$$| $$ \__/| $$ | $$ | $$| $$ \ $$| $$
// | $$ $$/$$ $$| $$ /$$$$| $$$$$ | $$$$$$$$| $$$$$$$$| $$
// | $$ $$$| $$| $$|_ $$| $$__/ | $$__ $$| $$__ $$| $$
// | $$\ $ | $$| $$ \ $$| $$ | $$ | $$| $$ | $$| $$
// | $$ \/ | $$| $$$$$$/| $$$$$$$$ | $$ | $$| $$ | $$| $$$$$$$$
// |__/ |__/ \______/ |________/ |__/ |__/|__/ |__/|________/
//
// Magnetic encoder hardware abstraction layer
// +--------------------------------+
// | |
// | MGE hardware abstraction layer |
// | |
// +----------------+---------------+
// |
// |
// |
// +------------+-----------+
// | F4 |
// | TLE5012 BSP |
// | F1 |
// +------------------------+
#if TLE5012B_SPI_CONFIG_USE_IQ
#include "IQmathLib.h"
#define MGE_BSP_ANGE_GET(x) tle5012b_read_angle_iq(x)
#define MGE_BSP_INIT(x) tle5012b_spi_init(x)
#define MGE_BSP_iq _iq14
#define MGE_BSP_IQ(x) _IQ14(x)
#define MGE_HAL_iq _iq20
#define MGE_HAL_IQ(x) _IQ20(x)
#define MGE_HAL_IQ_DIV(x,y) _IQ20div(x,y)
#define MGE_HAL_IQToF(x) _IQ20toF(x)
#else
//HAL & BSP API Mapping
// #define MGE_BSP_ANGEABS_GET(x) tle5012b_read_angleAbs_f(x)
// #define MGE_BSP_ANGEABS_GET(x) tle5012b_read_angleAbs_AvgF_f(x)
// #define MGE_BSP_ANGEABS_GET(x) tle5012b_read_angleAbs_FAvgf(x)
// #define MGE_BSP_ANGEABS_GET(x) tle5012b_read_angleAbs_InterF_f(x)
// #define MGE_BSP_ANGEABS_GET_WITH_FILTER(x) tle5012b_read_angle_RecAVGF_f(x)
/**
* @brief MGE BSP Get absolute angle ( From 0 - 2pi )
* @param void - Nothing need to input
*/
#define MGE_BSP_ANGEABS_GET(x) tle5012b_read_angleAbs_f(x)
/**
* @brief MGE BSP Get absolute angle ( From 0 - 2pi ) - with BSP Filter
* @param void - Nothing need to input
*/
#define MGE_BSP_ANGEABS_GET_WITH_FILTER(x) tle5012b_read_angleAbs_InterF_f(x)
/**
* @brief MGE BSP Get FULL angle (Record Loop)
* @param void - Nothing need to input
*/
#define MGE_BSP_ANGE_GET(x) tle5012b_read_angle_f(x)
/**
* @brief MGE BSP Get BSP RAW angle (Depends on the BSP)
* #For Debug#
* @param void - Nothing need to input
*/
#define MGE_BSP_ANGEBSPRAW_GET(x) tle5012b_read_angleRAW(x)
/**
* @brief MGE BSP Init (Sensor underlying initialization)
* @param void - Nothing need to input
*/
#define MGE_BSP_INIT(x) tle5012b_spi_init(x)
#endif
typedef enum
{
MGE_DIRECTION_CW = 1, //clockwise
MGE_DIRECTION_CCW = -1, // counter clockwise
MGE_DIRECTION_UNKNOWN = 0 //not yet known or invalid state
} MGE_DIRECTION;
typedef struct
{
int8_t mge_direction;
float staticAngleOffset;
} MGE_PARA;
typedef uint16_t mgeBsp_t;
void mge_hal_Init(void);
//CUT## MGE 参数设置
int8_t mge_Get_direction(void);
/// @brief 设置磁编码器的方向,输入的是一个枚举,需要为 MGE_DIRECTION_CW 或者 MGE_DIRECTION_CCW ,其他的输入会让方向置为UNKNOW
/// @param dir MGE_DIRECTION枚举
/// @return 返回操作结果 , 0 - 成功 , -1 - 失败(输入非法)
int mge_Set_direction(MGE_DIRECTION dir);
float mge_Get_abOffset(void);
/// @brief 设置磁编码器的偏移,需要为[-2PI ~ 2PI]之间,如果超出这个范围,会返回(-1),且设置不会被应用
/// @param offset 弧度制的角度,范围为[-2PI ~ 2PI]
/// @return 返回操作结果 , 0 - 成功 , -1 - 失败(输入非法)
int mge_Set_abOffset(float offset);
//CUT## MGE 角度获取
float mge_hal_GetAngle(void);
float mge_hal_GetRawAngle(void);
float mge_hal_GetAbsAngle(void);
float mge_hal_GetAbsAngle_withFilter(void);
// float mge_hal_getElectricalAngleABS(void);
// float mge_hal_getElectricalAngleABS_LP(void);
// float mge_hal_getElectricalAngleLoop(void);
float mge_hal_GetVel(void);
float mge_hal_GetVel_ExtAngle(float angle);
float mge_hal_calculateArcMidpointAngleBTP(float angle1, float angle2);
#endif