Prechádzať zdrojové kódy

debug

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 rokov pred
rodič
commit
be9ea247f4

+ 1 - 1
Applications/bsp/pwm.c

@@ -108,7 +108,7 @@ static void _init_pwm_timer(void) {
     timer_initpara.prescaler        = 0;
     timer_initpara.alignedmode      = TIMER_COUNTER_CENTER_UP;
 	timer_initpara.counterdirection  = TIMER_COUNTER_UP;
-    timer_initpara.period          = half_period-1;
+    timer_initpara.period          = half_period;
     timer_initpara.clockdivision    = TIMER_CKDIV_DIV1;
     timer_initpara.repetitioncounter = 1;
     timer_init(timer,&timer_initpara);

+ 5 - 7
Applications/foc/core/PMSM_FOC_Core.c

@@ -152,14 +152,12 @@ void PMSM_FOC_Schedule(void) {
 
 	SVM_Duty_Fix(&vAB, _gFOC_Ctrl.in.s_vDC, FOC_PWM_Half_Period, &_gFOC_Ctrl.out);
 
-	//u32 sp = phase_current_point(&_gFOC_Ctrl.out.n_Sector , _gFOC_Ctrl.out.n_Duty, _gFOC_Ctrl.out.n_lowDuty, _gFOC_Ctrl.out.n_midDuty);
-	//_gFOC_Ctrl.out.n_Sample1 = sp & 0xFFFF;
-	//_gFOC_Ctrl.out.n_Sample2 = (sp>>16) & 0xFFFF;
-	//pwm_update_duty(_gFOC_Ctrl.out.n_Duty[0], _gFOC_Ctrl.out.n_Duty[1], _gFOC_Ctrl.out.n_Duty[2]);
-	//pwm_update_duty(FOC_PWM_Half_Period, FOC_PWM_Half_Period, FOC_PWM_Half_Period);
-	//pwm_update_sample(sp&0xFFFF, (sp>>16)&0xFFFF, _gFOC_Ctrl.out.n_Sector);
+	phase_current_point(&_gFOC_Ctrl.out);
+
+	pwm_update_duty(_gFOC_Ctrl.out.n_Duty[0], _gFOC_Ctrl.out.n_Duty[1], _gFOC_Ctrl.out.n_Duty[2]);
+	pwm_update_sample(_gFOC_Ctrl.out.n_Sample1, _gFOC_Ctrl.out.n_Sample2, _gFOC_Ctrl.out.n_Sector);
+
 	plot_3data16(_gFOC_Ctrl.in.s_iABC[0], _gFOC_Ctrl.in.s_iABC[1], _gFOC_Ctrl.in.s_iABC[2]);
-	//plot_1data16(_gFOC_Ctrl.in.s_iABC[2]);
 }
 
 void PMSM_FOC_LogDebug(void) {

+ 16 - 20
Applications/foc/motor/current.c

@@ -120,44 +120,40 @@ void phase_current_get(s16 *iABC){
 }
 
 
-u32 phase_current_point(u8 *sector, u16 *duty, u16 low, u16 midle){
+void phase_current_point(void *p){
+	FOC_OutP *out = p;
 	current_samp_t *cs = &g_cs;
-	phase_time_t *time = &cs->time;
-	u32 low_side_low_duty = FOC_PWM_Half_Period - low;
-	u32 low_side_mid_duty = FOC_PWM_Half_Period - midle;
-	cs->sector = *sector;
-	time->Samp_p1 = FOC_PWM_Half_Period + 1;
-	time->Samp_p2 = FOC_PWM_Half_Period + 1;
+	u32 low_side_low_duty = FOC_PWM_Half_Period - out->n_lowDuty;
+	u32 low_side_mid_duty = FOC_PWM_Half_Period - out->n_midDuty;
+	cs->sector = out->n_Sector;
+	out->n_Sample1 = FOC_PWM_Half_Period + 1;
+	out->n_Sample2 = FOC_PWM_Half_Period + 1;
 	/*底边开mos的时间是2倍的 low_side_low_duty(一个周期)*/
 	if (low_side_low_duty * 2 >= TSampleMIN) { //可以采样
 		if (low_side_low_duty >= (TADC + TDead)) {//可以在pwm的中心点采样
-			time->Samp_p1 = FOC_PWM_Half_Period - 1;
+			out->n_Sample1 = FOC_PWM_Half_Period - 1;
 			cs->sector = SECTOR_1;
 		}else {
-			u32 Samp_p = low + TSampleBefore;
+			u32 Samp_p = out->n_lowDuty + TSampleBefore;
 			if (Samp_p >= FOC_PWM_Half_Period) { //需要在pwm中心点过后采样,需要配置PWM0模式
-				time->Samp_p2 = ( 2u * FOC_PWM_Half_Period ) - Samp_p - (uint16_t) 1;
+				out->n_Sample2 = ( 2u * FOC_PWM_Half_Period ) - Samp_p - (uint16_t) 1;
 			}else {
-				time->Samp_p1 = Samp_p;
+				out->n_Sample1 = Samp_p;
 			}
 		}
 	}else if (low_side_mid_duty * 2 >= TSampleMIN){
 		if (low_side_mid_duty >= (TADC + TDead)) {//可以在pwm的中心点采样
-			time->Samp_p1 = FOC_PWM_Half_Period - 1;
+			out->n_Sample1 = FOC_PWM_Half_Period - 1;
 		}else {
-			u32 Samp_p = midle + TSampleBefore;
+			u32 Samp_p = out->n_midDuty + TSampleBefore;
 			if (Samp_p >= FOC_PWM_Half_Period) { //需要在pwm中心点过后采样,需要配置PWM0模式
-				time->Samp_p2 = ( 2u * FOC_PWM_Half_Period ) - Samp_p - (uint16_t) 1;
+				out->n_Sample2 = ( 2u * FOC_PWM_Half_Period ) - Samp_p - (uint16_t) 1;
 			}else {
-				time->Samp_p1 = Samp_p;
+				out->n_Sample1 = Samp_p;
 			}
 		}
-	}else {
-		time->three_shunts_flags = 1; //means do'nt use the sample current
-		time->Samp_p1 = FOC_PWM_Half_Period - 1;//dumy trigger
 	}
-	*sector = cs->sector;
-	return (time->Samp_p1 | time->Samp_p2<<16);
+	out->n_Sector = cs->sector;
 }
 
 

+ 1 - 1
Applications/foc/motor/current.h

@@ -48,7 +48,7 @@ typedef struct current_sample {
 void phase_current_init(void);
 void phase_current_get(s16 *iABC);
 bool phase_current_offset(void);
-u32 phase_current_point(u8 *sector, u16 *duty, u16 low, u16 midle);
+void phase_current_point(void *);
 void phase_current_adc_triger(void);
 void phase_current_start_cali(void);
 #endif /* _PHASE_CURRENT_H__ */

+ 6 - 0
Project/GD32_DEMO.uvoptx

@@ -120,6 +120,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGUARM</Key>
+          <Name>0</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -169,6 +170,11 @@
           <WinNumber>1</WinNumber>
           <ItemText>g_meas_timeup,0x0A</ItemText>
         </Ww>
+        <Ww>
+          <count>4</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>_gFOC_Ctrl,0x0A</ItemText>
+        </Ww>
       </WatchWindow1>
       <Tracepoint>
         <THDelay>0</THDelay>