e_ctrl.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. u16 dec_time; //降速时间
  15. bool hw_brake;
  16. bool is_ebrake;
  17. u32 brake_ts;//检测到刹车开始时间
  18. e_Ramp current;
  19. e_Ramp torque;
  20. e_Ramp speed;
  21. u16 ebrk_shadow;
  22. u16 accl_shadow;
  23. u16 dec_shadow;
  24. float ebrake_current;
  25. float current_shadow;
  26. float torque_shadow;
  27. float speed_shadow;
  28. bool is_ebrake_shadow;
  29. }e_Ctrl;
  30. static void eRamp_init(e_Ramp *r) {
  31. r->start = 0;
  32. r->target = 0;
  33. r->interpolation = 0;
  34. r->step_val = 0;
  35. }
  36. static void eRamp_set_target(e_Ramp *r, float target) {
  37. r->target = target;
  38. }
  39. static void eRamp_set_step(e_Ramp *r, float step) {
  40. r->step_val = step;
  41. }
  42. static void eRamp_running(e_Ramp *r) {
  43. float target = r->interpolation + r->step_val;
  44. if (r->step_val < 0) {
  45. if (target < r->target) {
  46. target = r->target;
  47. }
  48. }else {
  49. if (target > r->target) {
  50. target = r->target;
  51. }
  52. }
  53. r->interpolation = target;
  54. }
  55. static float eRamp_get_intepolation(e_Ramp *r) {
  56. return r->interpolation;
  57. }
  58. static float eRamp_get_target(e_Ramp *r) {
  59. return r->target;
  60. }
  61. void eCtrl_init(u16 accl_time, u16 dec_time);
  62. void eCtrl_set_ebrk_time(u16 ebrk_time);
  63. void eCtrl_brake_signal(bool hw_brake);
  64. bool eCtrl_is_eBrk_enabled(void);
  65. void eCtrl_set_TgtCurrent(float c);
  66. void eCtrl_set_TgtTorque(float t);
  67. void eCtrl_set_TgtSpeed(float s);
  68. bool eCtrl_enable_eBrake(bool enable);
  69. float eCtrl_get_RefSpeed(void);
  70. float eCtrl_get_RefCurrent(void);
  71. float eCtrl_get_RefTorque(void);
  72. float eCtrl_get_FinalSpeed(void);
  73. float eCtrl_get_FinalCurrent(void);
  74. float eCtrl_get_FinalTorque(void);
  75. void eCtrl_Running(void);
  76. #endif /* EBRAKE_CTRL_H__ */