|
|
@@ -3,12 +3,38 @@
|
|
|
#include "prot/can_message.h"
|
|
|
#include "prot/can_foc_msg.h"
|
|
|
#include "foc/samples.h"
|
|
|
+#include "foc/motor/current.h"
|
|
|
#include "libs/utils.h"
|
|
|
#include "libs/logger.h"
|
|
|
#include "os/os_task.h"
|
|
|
|
|
|
static u8 factory_mode = 0;
|
|
|
|
|
|
+static void stop_pwm_adc(void);
|
|
|
+
|
|
|
+static bool start_pwm_adc(void) {
|
|
|
+ pwm_turn_on_low_side();
|
|
|
+ delay_ms(10);
|
|
|
+ phase_current_offset_calibrate();
|
|
|
+ pwm_start();
|
|
|
+ delay_us(10); //wait for ebrake error
|
|
|
+ adc_start_convert();
|
|
|
+ phase_current_calibrate_wait();
|
|
|
+ if (phase_curr_offset_check()) {
|
|
|
+ stop_pwm_adc();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+static void stop_pwm_adc(void) {
|
|
|
+ u32 mask = cpu_enter_critical();
|
|
|
+ adc_stop_convert();
|
|
|
+ pwm_stop();
|
|
|
+ pwm_up_enable(true);
|
|
|
+ cpu_exit_critical(mask);
|
|
|
+}
|
|
|
+
|
|
|
void can_process_factory_message(can_message_t *can_message){
|
|
|
uint8_t response[32];
|
|
|
uint8_t rsplen;
|
|
|
@@ -28,7 +54,7 @@ void can_process_factory_message(can_message_t *can_message){
|
|
|
u8 item = decode_u8(can_message->data);
|
|
|
if (item == 1) { //3相驱动测试
|
|
|
u8 mask = decode_u8((u8 *)can_message->data + 1);
|
|
|
- pwm_3phase_sides(mask);
|
|
|
+ pwm_3phase_sides(false, mask);
|
|
|
}else if (item == 2) {//获取所有电压的采集值
|
|
|
can_response_vols(can_message->src, can_message->key);
|
|
|
return;
|
|
|
@@ -61,6 +87,18 @@ void can_process_factory_message(can_message_t *can_message){
|
|
|
encode_u16(response + 7, uvw_total[2]/20);
|
|
|
gpio_phase_u_detect(false);
|
|
|
rsplen += 6;
|
|
|
+ }else if (item == 5) { //phase current test
|
|
|
+ u8 start = decode_u8((u8 *)can_message->data + 1);
|
|
|
+ if (start) {
|
|
|
+ pwm_3phase_sides(true, 0); //use pwm output, disable timer break in
|
|
|
+ if (!start_pwm_adc()) {
|
|
|
+ response[2] = 1;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ stop_pwm_adc();
|
|
|
+ pwm_3phase_init();
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
}
|