@@ -165,17 +165,32 @@ bool SimpleFOCRegisters::registerToComms(RegisterIO& comms, uint8_t reg, FOCMoto
165165 case SimpleFOCRegister::REG_VEL_PID_D:
166166 comms << motor->PID_velocity .D ;
167167 break ;
168+ case SimpleFOCRegister::REG_VEL_PID_LIM:
169+ comms << motor->PID_velocity .limit ;
170+ break ;
171+ case SimpleFOCRegister::REG_VEL_PID_RAMP:
172+ comms << motor->PID_velocity .output_ramp ;
173+ break ;
168174 case SimpleFOCRegister::REG_VEL_LPF_T:
169175 comms << motor->LPF_velocity .Tf ;
170176 break ;
171177 case SimpleFOCRegister::REG_ANG_PID_P:
172178 comms << motor->P_angle .P ;
173179 break ;
174- case SimpleFOCRegister::REG_VEL_LIMIT :
175- comms << motor->velocity_limit ;
180+ case SimpleFOCRegister::REG_ANG_PID_I :
181+ comms << motor->P_angle . I ;
176182 break ;
177- case SimpleFOCRegister::REG_VEL_MAX_RAMP:
178- comms << motor->PID_velocity .output_ramp ;
183+ case SimpleFOCRegister::REG_ANG_PID_D:
184+ comms << motor->P_angle .D ;
185+ break ;
186+ case SimpleFOCRegister::REG_ANG_PID_LIM:
187+ comms << motor->P_angle .limit ;
188+ break ;
189+ case SimpleFOCRegister::REG_ANG_PID_RAMP:
190+ comms << motor->P_angle .output_ramp ;
191+ break ;
192+ case SimpleFOCRegister::REG_ANG_LPF_T:
193+ comms << motor->LPF_angle .Tf ;
179194 break ;
180195
181196 case SimpleFOCRegister::REG_CURQ_PID_P:
@@ -187,6 +202,12 @@ bool SimpleFOCRegisters::registerToComms(RegisterIO& comms, uint8_t reg, FOCMoto
187202 case SimpleFOCRegister::REG_CURQ_PID_D:
188203 comms << motor->PID_current_q .D ;
189204 break ;
205+ case SimpleFOCRegister::REG_CURQ_PID_LIM:
206+ comms << motor->PID_current_q .limit ;
207+ break ;
208+ case SimpleFOCRegister::REG_CURQ_PID_RAMP:
209+ comms << motor->PID_current_q .output_ramp ;
210+ break ;
190211 case SimpleFOCRegister::REG_CURQ_LPF_T:
191212 comms << motor->LPF_current_q .Tf ;
192213 break ;
@@ -199,6 +220,12 @@ bool SimpleFOCRegisters::registerToComms(RegisterIO& comms, uint8_t reg, FOCMoto
199220 case SimpleFOCRegister::REG_CURD_PID_D:
200221 comms << motor->PID_current_d .D ;
201222 break ;
223+ case SimpleFOCRegister::REG_CURD_PID_LIM:
224+ comms << motor->PID_current_d .limit ;
225+ break ;
226+ case SimpleFOCRegister::REG_CURD_PID_RAMP:
227+ comms << motor->PID_current_d .output_ramp ;
228+ break ;
202229 case SimpleFOCRegister::REG_CURD_LPF_T:
203230 comms << motor->LPF_current_d .Tf ;
204231 break ;
@@ -209,6 +236,9 @@ bool SimpleFOCRegisters::registerToComms(RegisterIO& comms, uint8_t reg, FOCMoto
209236 case SimpleFOCRegister::REG_CURRENT_LIMIT:
210237 comms << motor->current_limit ;
211238 break ;
239+ case SimpleFOCRegister::REG_VELOCITY_LIMIT:
240+ comms << motor->velocity_limit ;
241+ break ;
212242 case SimpleFOCRegister::REG_MOTION_DOWNSAMPLE:
213243 comms << (uint8_t )motor->motion_downsample ;
214244 break ;
@@ -241,13 +271,49 @@ bool SimpleFOCRegisters::registerToComms(RegisterIO& comms, uint8_t reg, FOCMoto
241271 comms << (uint8_t )motor->pole_pairs ;
242272 break ;
243273
274+ // case SimpleFOCRegister::REG_CURA_GAIN:
275+ // if (motor->current_sense)
276+ // comms << motor->current_sense->gain_a;
277+ // else
278+ // comms << 0.0f;
279+ // break;
280+ // case SimpleFOCRegister::REG_CURB_GAIN:
281+ // if (motor->current_sense)
282+ // comms << motor->current_sense->gain_b;
283+ // else
284+ // comms << 0.0f;
285+ // break;
286+ // case SimpleFOCRegister::REG_CURC_GAIN:
287+ // if (motor->current_sense)
288+ // comms << motor->current_sense->gain_c;
289+ // else
290+ // comms << 0.0f;
291+ // break;
292+ // case SimpleFOCRegister::REG_CURA_OFFSET:
293+ // if (motor->current_sense)
294+ // comms << motor->current_sense->offset_a;
295+ // else
296+ // comms << 0.0f;
297+ // break;
298+ // case SimpleFOCRegister::REG_CURB_OFFSET:
299+ // if (motor->current_sense)
300+ // comms << motor->current_sense->offset_b;
301+ // else
302+ // comms << 0.0f;
303+ // break;
304+ // case SimpleFOCRegister::REG_CURC_OFFSET:
305+ // if (motor->current_sense)
306+ // comms << motor->current_sense->offset_c;
307+ // else
308+ // comms << 0.0f;
309+ // break;
310+
244311 case SimpleFOCRegister::REG_SYS_TIME:
245312 // TODO how big is millis()? Same on all platforms?
246313 comms << (uint32_t )(int )millis ();
247314 break ;
248315 // unknown register or write only register (no read) or can't handle in superclass
249316 case SimpleFOCRegister::REG_NUM_MOTORS:
250- case SimpleFOCRegister::REG_REPORT:
251317 case SimpleFOCRegister::REG_MOTOR_ADDRESS:
252318 case SimpleFOCRegister::REG_ENABLE_ALL:
253319 default :
@@ -338,17 +404,32 @@ bool SimpleFOCRegisters::commsToRegister(RegisterIO& comms, uint8_t reg, FOCMoto
338404 case SimpleFOCRegister::REG_VEL_PID_D:
339405 comms >> (motor->PID_velocity .D );
340406 return true ;
407+ case SimpleFOCRegister::REG_VEL_PID_LIM:
408+ comms >> (motor->PID_velocity .limit );
409+ return true ;
410+ case SimpleFOCRegister::REG_VEL_PID_RAMP:
411+ comms >> (motor->PID_velocity .output_ramp );
412+ return true ;
341413 case SimpleFOCRegister::REG_VEL_LPF_T:
342414 comms >> (motor->LPF_velocity .Tf );
343415 return true ;
344416 case SimpleFOCRegister::REG_ANG_PID_P:
345417 comms >> (motor->P_angle .P );
346418 return true ;
347- case SimpleFOCRegister::REG_VEL_LIMIT :
348- comms >> (motor->velocity_limit );
419+ case SimpleFOCRegister::REG_ANG_PID_I :
420+ comms >> (motor->P_angle . I );
349421 return true ;
350- case SimpleFOCRegister::REG_VEL_MAX_RAMP:
351- comms >> (motor->PID_velocity .output_ramp );
422+ case SimpleFOCRegister::REG_ANG_PID_D:
423+ comms >> (motor->P_angle .D );
424+ return true ;
425+ case SimpleFOCRegister::REG_ANG_PID_LIM:
426+ comms >> (motor->P_angle .limit );
427+ return true ;
428+ case SimpleFOCRegister::REG_ANG_PID_RAMP:
429+ comms >> (motor->P_angle .output_ramp );
430+ return true ;
431+ case SimpleFOCRegister::REG_ANG_LPF_T:
432+ comms >> (motor->LPF_angle .Tf );
352433 return true ;
353434
354435 case SimpleFOCRegister::REG_CURQ_PID_P:
@@ -360,6 +441,12 @@ bool SimpleFOCRegisters::commsToRegister(RegisterIO& comms, uint8_t reg, FOCMoto
360441 case SimpleFOCRegister::REG_CURQ_PID_D:
361442 comms >> (motor->PID_current_q .D );
362443 return true ;
444+ case SimpleFOCRegister::REG_CURQ_PID_LIM:
445+ comms >> (motor->PID_current_q .limit );
446+ return true ;
447+ case SimpleFOCRegister::REG_CURQ_PID_RAMP:
448+ comms >> (motor->PID_current_q .output_ramp );
449+ return true ;
363450 case SimpleFOCRegister::REG_CURQ_LPF_T:
364451 comms >> (motor->LPF_current_q .Tf );
365452 return true ;
@@ -372,15 +459,36 @@ bool SimpleFOCRegisters::commsToRegister(RegisterIO& comms, uint8_t reg, FOCMoto
372459 case SimpleFOCRegister::REG_CURD_PID_D:
373460 comms >> (motor->PID_current_d .D );
374461 return true ;
462+ case SimpleFOCRegister::REG_CURD_PID_LIM:
463+ comms >> (motor->PID_current_d .limit );
464+ return true ;
465+ case SimpleFOCRegister::REG_CURD_PID_RAMP:
466+ comms >> (motor->PID_current_d .output_ramp );
467+ return true ;
375468 case SimpleFOCRegister::REG_CURD_LPF_T:
376469 comms >> (motor->LPF_current_d .Tf );
377470 return true ;
378471
379472 case SimpleFOCRegister::REG_VOLTAGE_LIMIT:
380473 comms >> (motor->voltage_limit );
474+ if (motor->phase_resistance ==NOT_SET){
475+ motor->PID_velocity .limit = motor->voltage_limit ;
476+ if (motor->controller ==MotionControlType::angle_nocascade)
477+ motor->P_angle .limit = motor->voltage_limit ;
478+ }
381479 return true ;
382480 case SimpleFOCRegister::REG_CURRENT_LIMIT:
383481 comms >> (motor->current_limit );
482+ if (motor->phase_resistance !=NOT_SET) {
483+ motor->PID_velocity .limit = motor->current_limit ;
484+ if (motor->controller ==MotionControlType::angle_nocascade)
485+ motor->P_angle .limit = motor->current_limit ;
486+ }
487+ return true ;
488+ case SimpleFOCRegister::REG_VELOCITY_LIMIT:
489+ comms >> (motor->velocity_limit );
490+ if (motor->controller !=MotionControlType::angle_nocascade)
491+ motor->P_angle .limit = motor->velocity_limit ;
384492 return true ;
385493 case SimpleFOCRegister::REG_MOTION_DOWNSAMPLE:
386494 comms >> val8;
@@ -417,6 +525,38 @@ bool SimpleFOCRegisters::commsToRegister(RegisterIO& comms, uint8_t reg, FOCMoto
417525 comms >> val8;
418526 motor->pole_pairs = val8;
419527 return true ;
528+
529+ // case SimpleFOCRegister::REG_CURA_GAIN:
530+ // comms >> va;
531+ // if (motor->current_sense)
532+ // motor->current_sense->gain_a = va;
533+ // return true;
534+ // case SimpleFOCRegister::REG_CURB_GAIN:
535+ // comms >> vb;
536+ // if (motor->current_sense)
537+ // motor->current_sense->gain_b = vb;
538+ // return true;
539+ // case SimpleFOCRegister::REG_CURC_GAIN:
540+ // comms >> vc;
541+ // if (motor->current_sense)
542+ // motor->current_sense->gain_c = vc;
543+ // return true;
544+ // case SimpleFOCRegister::REG_CURA_OFFSET:
545+ // comms >> va;
546+ // if (motor->current_sense)
547+ // motor->current_sense->offset_a = va;
548+ // return true;
549+ // case SimpleFOCRegister::REG_CURB_OFFSET:
550+ // comms >> vb;
551+ // if (motor->current_sense)
552+ // motor->current_sense->offset_b = vb;
553+ // return true;
554+ // case SimpleFOCRegister::REG_CURC_OFFSET:
555+ // comms >> vc;
556+ // if (motor->current_sense)
557+ // motor->current_sense->offset_c = vc;
558+ // return true;
559+
420560 // unknown register or read-only register (no write) or can't handle in superclass
421561 case SimpleFOCRegister::REG_ITERATIONS_SEC:
422562 case SimpleFOCRegister::REG_STATUS:
@@ -439,7 +579,6 @@ bool SimpleFOCRegisters::commsToRegister(RegisterIO& comms, uint8_t reg, FOCMoto
439579 case SimpleFOCRegister::REG_NUM_MOTORS:
440580 case SimpleFOCRegister::REG_MOTOR_ADDRESS:
441581 case SimpleFOCRegister::REG_ENABLE_ALL:
442- case SimpleFOCRegister::REG_REPORT:
443582 default :
444583 return false ;
445584 }
@@ -468,17 +607,26 @@ uint8_t SimpleFOCRegisters::sizeOfRegister(uint8_t reg){
468607 case SimpleFOCRegister::REG_VEL_PID_P:
469608 case SimpleFOCRegister::REG_VEL_PID_I:
470609 case SimpleFOCRegister::REG_VEL_PID_D:
610+ case SimpleFOCRegister::REG_VEL_PID_LIM:
611+ case SimpleFOCRegister::REG_VEL_PID_RAMP:
471612 case SimpleFOCRegister::REG_VEL_LPF_T:
472613 case SimpleFOCRegister::REG_ANG_PID_P:
473- case SimpleFOCRegister::REG_VEL_LIMIT:
474- case SimpleFOCRegister::REG_VEL_MAX_RAMP:
614+ case SimpleFOCRegister::REG_ANG_PID_I:
615+ case SimpleFOCRegister::REG_ANG_PID_D:
616+ case SimpleFOCRegister::REG_ANG_PID_LIM:
617+ case SimpleFOCRegister::REG_ANG_PID_RAMP:
618+ case SimpleFOCRegister::REG_ANG_LPF_T:
475619 case SimpleFOCRegister::REG_CURQ_PID_P:
476620 case SimpleFOCRegister::REG_CURQ_PID_I:
477621 case SimpleFOCRegister::REG_CURQ_PID_D:
622+ case SimpleFOCRegister::REG_CURQ_PID_LIM:
623+ case SimpleFOCRegister::REG_CURQ_PID_RAMP:
478624 case SimpleFOCRegister::REG_CURQ_LPF_T:
479625 case SimpleFOCRegister::REG_CURD_PID_P:
480626 case SimpleFOCRegister::REG_CURD_PID_I:
481627 case SimpleFOCRegister::REG_CURD_PID_D:
628+ case SimpleFOCRegister::REG_CURD_PID_LIM:
629+ case SimpleFOCRegister::REG_CURD_PID_RAMP:
482630 case SimpleFOCRegister::REG_CURD_LPF_T:
483631 case SimpleFOCRegister::REG_VOLTAGE_LIMIT:
484632 case SimpleFOCRegister::REG_CURRENT_LIMIT:
@@ -491,6 +639,12 @@ uint8_t SimpleFOCRegisters::sizeOfRegister(uint8_t reg){
491639 case SimpleFOCRegister::REG_INDUCTANCE:
492640 case SimpleFOCRegister::REG_TELEMETRY_DOWNSAMPLE:
493641 case SimpleFOCRegister::REG_ITERATIONS_SEC:
642+ case SimpleFOCRegister::REG_CURA_GAIN:
643+ case SimpleFOCRegister::REG_CURB_GAIN:
644+ case SimpleFOCRegister::REG_CURC_GAIN:
645+ case SimpleFOCRegister::REG_CURA_OFFSET:
646+ case SimpleFOCRegister::REG_CURB_OFFSET:
647+ case SimpleFOCRegister::REG_CURC_OFFSET:
494648 return 4 ;
495649 case SimpleFOCRegister::REG_SYS_TIME:
496650 return 4 ; // TODO how big is millis()? Same on all platforms?
@@ -521,7 +675,6 @@ uint8_t SimpleFOCRegisters::sizeOfRegister(uint8_t reg){
521675 else
522676 return 1 ;
523677 case SimpleFOCRegister::REG_DRIVER_ENABLE:
524- case SimpleFOCRegister::REG_REPORT: // size can vary, handled in Commander if used - may discontinue this feature
525678 case SimpleFOCRegister::REG_ENABLE_ALL: // write-only
526679 default : // unknown register or write only register (no output) or can't handle in superclass
527680 return 0 ;
0 commit comments