key_process.c 1.8 KB

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