key_process.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "os/os_task.h"
  2. #include "bsp/gpio.h"
  3. #include "bsp/bsp.h"
  4. #include "os/os_task.h"
  5. #include "libs/logger.h"
  6. #include "libs/utils.h"
  7. #include "foc/commands.h"
  8. #include "foc/core/PMSM_FOC_Core.h"
  9. #define KEY_START 0
  10. #define KEY_STOP 1
  11. #define KEY_FUNC 2
  12. static u8 key_value[3];
  13. static float foc_current = 0.0f;
  14. static u8 ctrl_mode = CTRL_MODE_OPEN;
  15. static float max_speed = 2000;
  16. static u32 key_task(void *p) {
  17. foc_cmd_body_t foc_cmd;
  18. u8 cmd_data[16];
  19. foc_cmd.data = cmd_data;
  20. int value = gpio_startkey_value();
  21. if (value != key_value[KEY_START]) {
  22. if (value) {
  23. foc_current = 0.0f;
  24. ctrl_mode = CTRL_MODE_OPEN;
  25. foc_cmd.cmd = Foc_Start_Motor;
  26. if (PMSM_FOC_Is_Start()) {
  27. cmd_data[0] = Foc_Stop;
  28. }else {
  29. cmd_data[0] = Foc_Start;
  30. }
  31. foc_send_command(&foc_cmd);
  32. }
  33. key_value[KEY_START] = value;
  34. }
  35. value = gpio_stopkey_value();
  36. if (value != key_value[KEY_STOP]) {
  37. if (value) {
  38. if (foc_current < 2.0f) {
  39. foc_current += 0.1f;
  40. }
  41. PMSM_FOC_Set_Torque(foc_current);
  42. }
  43. key_value[KEY_STOP] = value;
  44. }
  45. value = gpio_funckey_value();
  46. if (value != key_value[KEY_FUNC]) {
  47. if (value) {
  48. if (ctrl_mode == CTRL_MODE_OPEN) {
  49. ctrl_mode = CTRL_MODE_TRQ;
  50. }else {
  51. ctrl_mode = CTRL_MODE_OPEN;
  52. }
  53. PMSM_FOC_SetCtrlMode(ctrl_mode);
  54. PMSM_FOC_SpeedLimit(max_speed);
  55. //max_speed += 10;
  56. }
  57. key_value[KEY_FUNC] = value;
  58. }
  59. return 0;
  60. }
  61. void key_init(void) {
  62. key_value[KEY_START] = gpio_startkey_value();
  63. key_value[KEY_STOP] = gpio_stopkey_value();
  64. key_value[KEY_FUNC] = gpio_funckey_value();
  65. shark_task_create(key_task, NULL);
  66. }