医美代码重构
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.9 KiB

  1. #include "motor_drive.h"
  2. #include "driver/uart.h"
  3. #include "esp_log.h"
  4. #define MOTOR_DRIVE "MOTOR_DRIVE"
  5. #define uart_num UART_NUM_1
  6. #define tx_io_num 23
  7. #define rx_io_num 22
  8. #define buffer_size 128
  9. #define uart_read_time_ms 200
  10. #define MOTOR_ID 0X01
  11. static motor_t *motor_init_structer;
  12. void motor_init(motor_t *motor) {
  13. motor_init_structer = motor;
  14. uart_config_t uart_config = {
  15. .baud_rate = 115200,
  16. .data_bits = UART_DATA_8_BITS,
  17. .parity = UART_PARITY_DISABLE,
  18. .stop_bits = UART_STOP_BITS_1,
  19. .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
  20. .source_clk = UART_SCLK_APB,
  21. };
  22. ESP_ERROR_CHECK(uart_driver_install(uart_num, buffer_size * 2, 0, 0, NULL, 0));
  23. ESP_ERROR_CHECK(uart_param_config(uart_num, &uart_config));
  24. ESP_ERROR_CHECK(uart_set_pin(uart_num, tx_io_num, rx_io_num, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
  25. return;
  26. }
  27. void motor_set_zero_point() { return; }
  28. /**
  29. * @brief 0->360
  30. *
  31. * @return uint32_t
  32. */
  33. uint32_t motor_get_position_degree() { return 0; }
  34. /**
  35. * @brief
  36. */
  37. void motor_run_to_postion(int potion) { return; }
  38. void motor_reg_event_cb(motor_on_event_t onevent) { return; }
  39. double motor_drive_read_encoder() {
  40. size_t encoder_buffer_size = 5;
  41. uint8_t buffer[5] = {0X3E, 0X90, MOTOR_ID, 0X00, 0XCF};
  42. uint16_t encoder_data = 0;
  43. // Send cmd
  44. uart_flush(uart_num);
  45. uart_write_bytes(uart_num, (const char *)buffer, encoder_buffer_size);
  46. encoder_buffer_size = 0;
  47. memset(buffer, 0, sizeof(uint8_t) * 5);
  48. // Wait receive
  49. encoder_buffer_size = uart_read_bytes(uart_num, buffer, 12, uart_read_time_ms / portTICK_RATE_MS);
  50. if (encoder_buffer_size != 12 || buffer[0] != 0X3E) {
  51. ESP_LOGW(MOTOR_DRIVE, "encoder size:%d,buffer[0] = 0X%x", encoder_buffer_size, buffer[0]);
  52. return -1.0;
  53. }
  54. encoder_data = buffer[5] + (buffer[6] << 8);
  55. return ((double)encoder_data / 100.0);
  56. }