can_foc_msg.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "libs/utils.h"
  2. #include "prot/can_message.h"
  3. #include "prot/can_foc_msg.h"
  4. #include "foc/commands.h"
  5. void can_report_speed(u8 can, s16 rpm) {
  6. u8 data[6];
  7. encoder_can_key(data, CMD_2_CAN_KEY(Foc_Report_Speed));
  8. encode_s16(data + 2, rpm);
  9. can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
  10. }
  11. void can_report_power(u8 can, s16 rpm, s16 vDC, s16 iDC) {
  12. u8 data[8];
  13. encoder_can_key(data, CMD_2_CAN_KEY(Foc_Report_Power));
  14. encode_s16(data + 2, rpm);
  15. encode_s16(data + 4, vDC);
  16. encode_s16(data + 6, iDC);
  17. can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
  18. }
  19. void can_report_phase_current(u8 can, float iA, float iB, float iC) {
  20. u8 data[14];
  21. encoder_can_key(data, CMD_2_CAN_KEY(Foc_Report_Phase_Current));
  22. encode_float(data + 2, iA);
  23. encode_float(data + 6, iB);
  24. encode_float(data + 10, iC);
  25. can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
  26. }
  27. void can_report_phase_voltage(u8 can, float vA, float vB, float vC) {
  28. u8 data[14];
  29. encoder_can_key(data, CMD_2_CAN_KEY(Foc_Report_Phase_Vol));
  30. encode_float(data + 2, vA);
  31. encode_float(data + 6, vB);
  32. encode_float(data + 10, vC);
  33. can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
  34. }
  35. void can_report_dq_current(u8 can, float id, float iq) {
  36. u8 data[10];
  37. encoder_can_key(data, CMD_2_CAN_KEY(Foc_Report_Dq_Current));
  38. encode_float(data + 2, id);
  39. encode_float(data + 6, iq);
  40. can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
  41. }
  42. void can_response_hall_offset(u8 can, int offset) {
  43. u8 data[7];
  44. encoder_can_key(data, CMD_2_CAN_KEY(Foc_Cali_Hall_Offset));
  45. encode_u8(data + 2, 1);
  46. encode_u32(data + 3, offset);
  47. can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
  48. }