-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpowerstep01priv.h
More file actions
273 lines (224 loc) · 6.79 KB
/
powerstep01priv.h
File metadata and controls
273 lines (224 loc) · 6.79 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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
#ifndef __POWERSTEP01PRIV_H
#define __POWERSTEP01PRIV_H
#ifndef __ps_packed
#define __ps_packed __attribute__((packed))
#endif
#define __MS(v, m, s) (((v) & m) << s)
#define MASK_PARAM (0x1F)
#define MASK_DIR (0x01)
#define MASK_ACT (0x01)
#define SHIFT_PARAM (0)
#define SHIFT_DIR (0)
#define SHIFT_ACT (3)
#define CMD_NOP() (0b00000000)
#define CMD_SETPARAM(param) (0b00000000 | __MS(param, MASK_PARAM, SHIFT_PARAM))
#define CMD_GETPARAM(param) (0b00100000 | __MS(param, MASK_PARAM, SHIFT_PARAM))
#define CMD_RUN(dir) (0b01010000 | __MS(dir, MASK_DIR, SHIFT_DIR))
#define CMD_STEPCLOCK(dir) (0b01011000 | __MS(dir, MASK_DIR, SHIFT_DIR))
#define CMD_MOVE(dir) (0b01000000 | __MS(dir, MASK_DIR, SHIFT_DIR))
#define CMD_GOTO() (0b01100000)
#define CMD_GOTODIR(dir) (0b01101000 | __MS(dir, MASK_DIR, SHIFT_DIR))
#define CMD_GOUNTIL(act, dir) (0b10000010 | __MS(act, MASK_ACT, SHIFT_ACT) | __MS(dir, MASK_DIR, SHIFT_DIR))
#define CMD_RELEASESW(act, dir) (0b10010010 | __MS(act, MASK_ACT, SHIFT_ACT) | __MS(dir, MASK_DIR, SHIFT_DIR))
#define CMD_GOHOME() (0b01110000)
#define CMD_GOMARK() (0b01111000)
#define CMD_RESETPOS() (0b11011000)
#define CMD_RESETDEVICE() (0b11000000)
#define CMD_SOFTSTOP() (0b10110000)
#define CMD_HARDSTOP() (0b10111000)
#define CMD_SOFTHIZ() (0b10100000)
#define CMD_HARDHIZ() (0b10101000)
#define CMD_GETSTATUS() (0b11010000)
#define CMDSIZE(b) ((b) + 1)
#define PARAM_ABSPOS (0x01)
#define PARAM_ELPOS (0x02)
#define PARAM_MARK (0x03)
#define PARAM_SPEED (0x04)
#define PARAM_ACC (0x05)
#define PARAM_DEC (0x06)
#define PARAM_MAXSPEED (0x07)
#define PARAM_MINSPEED (0x08)
#define PARAM_ADCOUT (0x12)
#define PARAM_OCDTH (0x13)
#define PARAM_FSSPD (0x15)
#define PARAM_STEPMODE (0x16)
#define PARAM_ALARMEN (0x17)
#define PARAM_GATECFG1 (0x18)
#define PARAM_GATECFG2 (0x19)
#define PARAM_STATUS (0x1B)
#define PARAM_CONFIG (0x1A)
/* Both Voltage & Current Mode */
#define PARAM_KTVALHOLD (0x09)
#define PARAM_KTVALRUN (0x0A)
#define PARAM_KTVALACC (0x0B)
#define PARAM_KTVALDEC (0x0C)
/* Voltage Mode */
#define PARAM_INTSPEED (0x0D)
#define PARAM_STSLP (0x0E)
#define PARAM_FNSLPACC (0x0F)
#define PARAM_FNSLPDEC (0x10)
#define PARAM_KTHERM (0x11)
#define PARAM_STALLTH (0x14)
/* Current Mode */
#define PARAM_TFAST (0x0E)
#define PARAM_TONMIN (0x0F)
#define PARAM_TOFFMIN (0x10)
/* REG ABSPOS */
#define ABSPOS_MASK (0x003FFFFF)
/* REG ELPOS */
typedef struct __ps_packed {
uint8_t unused : 7;
uint8_t step_U : 1;
uint8_t microstep : 7;
uint8_t step_L : 1;
} ps_elpos_reg;
/* REG MARK */
#define MARK_MASK (0x003FFFFF)
/* REG SPEED */
#define SPEED_COEFF (0.015)
#define SPEED_MAX (15625.0)
/* REG ACC */
#define ACC_COEFF (0.137438)
#define ACC_MASK (0x0FFF)
/* REG DEC */
#define DEC_COEFF (0.137438)
#define DEC_MASK (0x0FFF)
/* REG MAXSPEED */
#define MAXSPEED_COEFF (0.065536)
#define MAXSPEED_MASK (0x03FF)
/* REG MINSPEED */
typedef struct __ps_packed {
uint8_t min_speed_U : 4;
uint8_t lspd_opt : 1;
uint8_t unused : 3;
uint8_t min_speed_L : 8;
} ps_minspeed_reg;
#define MINSPEED_COEFF (4.194304)
#define MINSPEED_MASK (0x0FFF)
/* REG OCDTH */
#define OCDTH_COEFF (0.032)
#define OCDTH_MASK (0x1F)
/* REG FSSPD */
typedef struct __ps_packed {
uint8_t fs_spd_U : 2;
uint8_t boost_mode : 1;
uint8_t unused : 5;
uint8_t fs_spd_L : 8;
} ps_fsspd_reg;
#define FSSPD_COEFF (0.065536)
#define FSSPD_OFFSET (0.5)
#define FSSPD_MASK (0x03FF)
/* REG STEPMODE */
typedef struct __ps_packed {
uint8_t step_sel : 3;
uint8_t cm_vm : 1;
uint8_t sync_sel : 3;
uint8_t sync_en : 1;
} ps_stepmode_reg;
/* REG ALARMEN */
typedef struct __ps_packed {
uint8_t overcurrent : 1;
uint8_t thermal_shutdown : 1;
uint8_t thermal_warning : 1;
uint8_t undervoltage : 1;
uint8_t adc_undervoltage : 1;
uint8_t stall_detect : 1;
uint8_t user_switch : 1;
uint8_t command_error : 1;
} ps_alarms_reg;
/* REG GATECFG1 */
typedef struct __ps_packed {
uint8_t tboost : 3;
uint8_t wd_en : 1;
uint8_t unused : 4;
uint8_t slew : 8;
} ps_gatecfg1_reg;
/* REG GATECFG2 */
typedef struct __ps_packed {
uint8_t tdt : 5;
uint8_t tblank : 3;
} ps_gatecfg2_reg;
/* REG STATUS */
typedef struct __ps_packed {
uint8_t stck_mod : 1;
uint8_t uvlo : 1;
uint8_t uvlo_adc : 1;
uint8_t th_status : 2;
uint8_t ocd : 1;
uint8_t stall_b : 1;
uint8_t stall_a : 1;
uint8_t hiz : 1;
uint8_t busy : 1;
uint8_t sw_f : 1;
uint8_t sw_evn : 1;
uint8_t dir : 1;
uint8_t mot_status: 2;
uint8_t cmd_error : 1;
} ps_status_reg;
typedef enum __ps_thstatus {
TH_NORMAL = 0x0,
TH_WARNING = 0x1,
TH_BRIDGESHUTDOWN = 0x2,
TH_DEVICESHUTDOWN = 0x3
} ps_thstatus;
/* REG CONFIG */
typedef struct __ps_packed {
uint8_t __mask3 : 2;
uint8_t f_pwm_dec : 3;
uint8_t f_pwm_int : 3;
uint8_t __mask1 : 5;
uint8_t en_vscomp : 1;
uint8_t unused : 1;
uint8_t __mask2 : 1;
} ps_config_vm_reg;
typedef struct __ps_packed {
uint8_t __mask3 : 2;
uint8_t tsw : 5;
uint8_t pred_en : 1;
uint8_t __mask1 : 5;
uint8_t en_tqreg : 1;
uint8_t unused : 1;
uint8_t __mask2 : 1;
} ps_config_cm_reg;
typedef struct __ps_packed {
uint8_t uvloval : 1;
uint8_t vccval : 1;
uint8_t __mask2 : 6;
uint8_t clk_sel : 4;
uint8_t sw_mode : 1;
uint8_t __mask1 : 2;
uint8_t oc_sd : 1;
} ps_config_com_reg;
typedef union __ps_config_reg {
ps_config_vm_reg vm;
ps_config_cm_reg cm;
ps_config_com_reg com;
} ps_config_reg;
#define CM_TSW_COEFF (0.25)
#define CM_TSW_MASK (0x1F)
/* KVALS */
#define KTVALS_COEFF (0.00392156)
/* VM BEMF */
#define BEMFSPEEDCO_COEFF (0.0596)
#define BEMFSPEEDCO_MASK (0x3FFF)
#define BEMFSLOPE_COEFF (0.0015)
#define BEMFSLOPE_MASK (0xFF)
/* VM STALL */
#define STALL_COEFF (31.25)
#define STALL_OFFSET (31.25)
#define STALL_MASK (0x1F)
/* REG TON_MIN / TOFF_MIN */
#define MINCTRL_COEFF (0.5)
#define MINCTRL_OFFSET (0.5)
#define MINCTRL_MASK (0x7F)
/* REG TFAST */
typedef struct __ps_packed {
uint8_t fast_step : 4;
uint8_t toff_fast : 4;
} ps_tfast_reg;
#define TFAST_COEFF (2.0)
#define TFAST_OFFSET (2.0)
#define TFAST_MASK (0x0F)
/* CMD MOVE */
#define MOVE_MASK (0x003FFFFF)
#endif