controller.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * Copyright (c) 2019, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2019-08-26 sogwms The first version
  9. */
  10. #ifndef __CONTROLLER_H__
  11. #define __CONTROLLER_H__
  12. #include <rtthread.h>
  13. struct controller_pid_param
  14. {
  15. float kp;
  16. float ki;
  17. float kd;
  18. };
  19. struct controller_param
  20. {
  21. union
  22. {
  23. struct controller_pid_param pid;
  24. } data;
  25. };
  26. typedef struct controller_param *controller_param_t;
  27. struct controller
  28. {
  29. float target;
  30. float output;
  31. rt_uint16_t sample_time; // unit:ms
  32. int enable;
  33. rt_err_t (*update)(void *controller, float current_point);
  34. rt_err_t (*reset)(void *controller);
  35. rt_err_t (*destroy)(void *controller);
  36. rt_err_t (*set_param)(void *controller, controller_param_t param);
  37. rt_err_t (*get_param)(void *controller, controller_param_t param);
  38. };
  39. typedef struct controller *controller_t;
  40. controller_t controller_create(rt_size_t size, rt_uint16_t sample_time);
  41. rt_err_t controller_update(controller_t controller, float current_point);
  42. rt_err_t controller_destroy(controller_t controller);
  43. rt_err_t controller_enable(controller_t controller);
  44. rt_err_t controller_disable(controller_t controller);
  45. rt_err_t controller_reset(controller_t controller);
  46. rt_err_t controller_set_target(controller_t controller, rt_int16_t target);
  47. rt_err_t controller_set_sample_time(controller_t controller, rt_uint16_t sample_time);
  48. rt_err_t controller_set_param(controller_t controller, controller_param_t param);
  49. rt_err_t controller_get_param(controller_t controller, controller_param_t param);
  50. #endif // __CONTROLLER_H__