key_process.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 float target_speed = 2000;
  17. static u32 key_task(void *p) {
  18. foc_cmd_body_t foc_cmd;
  19. u8 cmd_data[16];
  20. foc_cmd.data = cmd_data;
  21. int value = gpio_startkey_value();
  22. if (value != key_value[KEY_START]) {
  23. if (value) {
  24. foc_current = 0.0f;
  25. ctrl_mode = CTRL_MODE_OPEN;
  26. foc_cmd.cmd = Foc_Start_Motor;
  27. if (PMSM_FOC_Is_Start()) {
  28. PMSM_FOC_Set_Torque(foc_current);
  29. PMSM_FOC_Set_Speed(0.0f);
  30. }else {
  31. cmd_data[0] = Foc_Start;
  32. foc_send_command(&foc_cmd);
  33. }
  34. }
  35. key_value[KEY_START] = value;
  36. }
  37. value = gpio_stopkey_value();
  38. if (value != key_value[KEY_STOP]) {
  39. if (value) {
  40. if (foc_current < 5.0f) {
  41. foc_current += 1.0f;
  42. }
  43. target_speed = 1000.0f;
  44. PMSM_FOC_SpeedLimit(max_speed);
  45. PMSM_FOC_Set_Speed(max_speed);
  46. PMSM_FOC_Set_Torque(foc_current);
  47. ctrl_mode = CTRL_MODE_TRQ;
  48. PMSM_FOC_SetCtrlMode(ctrl_mode);
  49. }
  50. key_value[KEY_STOP] = value;
  51. }
  52. value = gpio_funckey_value();
  53. if (value != key_value[KEY_FUNC]) {
  54. if (value) {
  55. if (ctrl_mode == CTRL_MODE_TRQ) {
  56. ctrl_mode = CTRL_MODE_SPD;
  57. PMSM_FOC_SetCtrlMode(ctrl_mode);
  58. }else if(ctrl_mode == CTRL_MODE_SPD){
  59. //ctrl_mode = CTRL_MODE_TRQ;
  60. //PMSM_FOC_EnableCruise(false);
  61. PMSM_FOC_SpeedLimit(10000);
  62. target_speed += 1000;
  63. PMSM_FOC_Set_Speed(target_speed);
  64. }else {
  65. //ctrl_mode = CTRL_MODE_TRQ;
  66. }
  67. //PMSM_FOC_SpeedLimit(max_speed);
  68. //max_speed += 1000;
  69. }
  70. key_value[KEY_FUNC] = value;
  71. }
  72. return 0;
  73. }
  74. void key_init(void) {
  75. key_value[KEY_START] = gpio_startkey_value();
  76. key_value[KEY_STOP] = gpio_stopkey_value();
  77. key_value[KEY_FUNC] = gpio_funckey_value();
  78. shark_task_create(key_task, NULL);
  79. }