|
|
@@ -2,6 +2,7 @@
|
|
|
#include "prot/can_message.h"
|
|
|
#include "prot/can_foc_msg.h"
|
|
|
#include "foc/commands.h"
|
|
|
+#include "foc/samples.h"
|
|
|
#include "foc/core/PMSM_FOC_Core.h"
|
|
|
|
|
|
void can_report_speed(u8 can, s16 rpm) {
|
|
|
@@ -11,8 +12,11 @@ void can_report_speed(u8 can, s16 rpm) {
|
|
|
can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
|
|
|
}
|
|
|
|
|
|
-void can_report_power(u8 can, s16 rpm, float vDC, float iDC) {
|
|
|
+void can_report_power(u8 can) {
|
|
|
u8 data[8];
|
|
|
+ s16 rpm = (s16)PMSM_FOC_GetSpeed();
|
|
|
+ float vDC = PMSM_FOC_GetVbusVoltage();
|
|
|
+ float iDC = PMSM_FOC_GetVbusCurrent();
|
|
|
s16 v = (s16)(vDC * 10.0f);
|
|
|
s16 i = (s16)(iDC * 10.0f);
|
|
|
encoder_can_key(data, CMD_2_CAN_KEY(Foc_Report_Power));
|
|
|
@@ -23,28 +27,31 @@ void can_report_power(u8 can, s16 rpm, float vDC, float iDC) {
|
|
|
}
|
|
|
|
|
|
|
|
|
-void can_report_phase_current(u8 can, float iA, float iB, float iC) {
|
|
|
+void can_report_phase_current(u8 can) {
|
|
|
u8 data[14];
|
|
|
encoder_can_key(data, CMD_2_CAN_KEY(Foc_Report_Phase_Current));
|
|
|
- encode_float(data + 2, iA);
|
|
|
- encode_float(data + 6, iB);
|
|
|
- encode_float(data + 10, iC);
|
|
|
+ encode_float(data + 2, PMSM_FOC_Get()->in.s_iABCFilter[0]);
|
|
|
+ encode_float(data + 6, PMSM_FOC_Get()->in.s_iABCFilter[1]);
|
|
|
+ encode_float(data + 10, PMSM_FOC_Get()->in.s_iABCFilter[2]);
|
|
|
can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
|
|
|
}
|
|
|
|
|
|
-void can_report_phase_voltage(u8 can, float vA, float vB, float vC) {
|
|
|
+void can_report_phase_voltage(u8 can) {
|
|
|
u8 data[14];
|
|
|
+ float s_vABC[3];
|
|
|
+ get_phase_vols(s_vABC);
|
|
|
encoder_can_key(data, CMD_2_CAN_KEY(Foc_Report_Phase_Vol));
|
|
|
- encode_float(data + 2, vA);
|
|
|
- encode_float(data + 6, vB);
|
|
|
- encode_float(data + 10, vC);
|
|
|
+ encode_float(data + 2, s_vABC[0]);
|
|
|
+ encode_float(data + 6, s_vABC[1]);
|
|
|
+ encode_float(data + 10, s_vABC[2]);
|
|
|
can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
-void can_report_dq_current(u8 can, float id, float iq) {
|
|
|
+void can_report_dq_current(u8 can) {
|
|
|
u8 data[10];
|
|
|
encoder_can_key(data, CMD_2_CAN_KEY(Foc_Report_Dq_Current));
|
|
|
+ float id = PMSM_FOC_GetDQCurrent()->d;
|
|
|
+ float iq = PMSM_FOC_GetDQCurrent()->q;
|
|
|
encode_float(data + 2, id);
|
|
|
encode_float(data + 6, iq);
|
|
|
can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
|
|
|
@@ -69,3 +76,12 @@ void can_report_pid_value(u8 can, u8 id) {
|
|
|
encode_float(data + 11, kb);
|
|
|
can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
|
|
|
}
|
|
|
+
|
|
|
+void can_report_foc_status(u8 can) {
|
|
|
+ u8 data[8];
|
|
|
+ encoder_can_key(data, CMD_2_CAN_KEY(Foc_Report_Status));
|
|
|
+ PMSM_FOC_GetRunningStatus(data+2);
|
|
|
+ u32 errMask = PMSM_FOC_GetCriticalError();
|
|
|
+ encode_u32(data + 3, errMask);
|
|
|
+ can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
|
|
|
+}
|