e_ctrl.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #ifndef EBRAKE_CTRL_H__
  2. #define EBRAKE_CTRL_H__
  3. #include "os/os_types.h"
  4. #include "foc/core/ramp_ctrl.h"
  5. typedef struct {
  6. float start;
  7. float target;
  8. float interpolation;
  9. float step_val;
  10. }e_Ramp;
  11. typedef struct {
  12. u16 ebrk_time; //能量回收,时间越短,刹车性能或者回收越好
  13. u16 accl_time; //加速时间(ms),时间越短,加速性能越好
  14. bool hw_brake;
  15. u64 brake_ts;//检测到刹车开始时间
  16. e_Ramp torque;
  17. e_Ramp speed;
  18. u16 ebrk_shadow;
  19. u16 accl_shadow;
  20. float torque_shadow;
  21. float speed_shadow;
  22. }e_Ctrl;
  23. static void eRamp_init(e_Ramp *r) {
  24. r->start = 0;
  25. r->target = 0;
  26. r->interpolation = 0;
  27. r->step_val = 0;
  28. }
  29. static void eRamp_set_target(e_Ramp *r, float target) {
  30. r->target = target;
  31. }
  32. static void eRamp_set_step(e_Ramp *r, float step) {
  33. r->step_val = step;
  34. }
  35. static void eRamp_running(e_Ramp *r) {
  36. float target = r->interpolation + r->step_val;
  37. if (r->step_val < 0) {
  38. if (target < r->target) {
  39. target = r->target;
  40. }
  41. }else {
  42. if (target > r->target) {
  43. target = r->target;
  44. }
  45. }
  46. r->interpolation = target;
  47. }
  48. static float eRamp_get_intepolation(e_Ramp *r) {
  49. return r->interpolation;
  50. }
  51. static float eRamp_get_target(e_Ramp *r) {
  52. return r->target;
  53. }
  54. void eCtrl_init(u16 ebrk_time, u16 accl_time);
  55. void eCtrl_set_accl_brk(u16 accl_time, u16 ebrk_time);
  56. void eCtrl_brake_signal(bool hw_brake);
  57. void eCtrl_set_TrqCurrent(float c);
  58. void eCtrl_set_TargetSpeed(float s);
  59. float eCtrl_get_RefSpd(void);
  60. float eCtrl_get_RefTorque(void);
  61. float eCtrl_get_FinalSpd(void);
  62. float eCtrl_get_FinalTorque(void);
  63. void eCtrl_Running(void);
  64. #endif /* EBRAKE_CTRL_H__ */