From f296a8eb480a83a48288b300daa8fb1b7340c3c8 Mon Sep 17 00:00:00 2001
From: YuanHongbin <975559679@qq.com>
Date: Mon, 15 Sep 2025 15:15:26 +0800
Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Project/HC32F460/MDK/HC32F460.uvoptx | 18 +-
Project/HC32F460/MDK/HC32F460.uvprojx | 8 +-
.../source/Module/dc_motor/dc_motor.c | 21 +-
Project/HC32F460/source/User/Inc/main.h | 10 +-
Project/HC32F460/source/User/Src/main.c | 238 +++++++++---------
5 files changed, 165 insertions(+), 130 deletions(-)
diff --git a/Project/HC32F460/MDK/HC32F460.uvoptx b/Project/HC32F460/MDK/HC32F460.uvoptx
index 2db777c..40c03b3 100644
--- a/Project/HC32F460/MDK/HC32F460.uvoptx
+++ b/Project/HC32F460/MDK/HC32F460.uvoptx
@@ -118,7 +118,7 @@
0
CMSIS_AGDI
- -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K.FLM -FS00 -FL080000 -FP0($$Device:HC32F460JEUA$FlashARM\HC32F460_512K.FLM) -FF1HC32F460_otp.FLM -FS13000C00 -FL13FC -FP1($$Device:HC32F460JEUA$FlashARM\HC32F460_otp.FLM)
+ -X"Any" -UAny -O206 -S9 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K.FLM -FS00 -FL080000 -FP0($$Device:HC32F460JEUA$FlashARM\HC32F460_512K.FLM) -FF1HC32F460_otp.FLM -FS13000C00 -FL13FC -FP1($$Device:HC32F460JEUA$FlashARM\HC32F460_otp.FLM)
0
@@ -228,6 +228,16 @@
1
RightDiffSum,0x0A
+
+ 15
+ 1
+ KeyASta
+
+
+ 16
+ 1
+ KeyBSta
+
0
@@ -275,7 +285,7 @@
1
0
2
- 1000000
+ 5000000
@@ -441,7 +451,7 @@
1
2
1
- 1
+ 0
0
0
..\..\..\mcu\common\system_hc32f460.c
@@ -453,7 +463,7 @@
driver
- 1
+ 0
0
0
0
diff --git a/Project/HC32F460/MDK/HC32F460.uvprojx b/Project/HC32F460/MDK/HC32F460.uvprojx
index 4fcfdad..ef55ad3 100644
--- a/Project/HC32F460/MDK/HC32F460.uvprojx
+++ b/Project/HC32F460/MDK/HC32F460.uvprojx
@@ -320,13 +320,13 @@
0
0
0
- 0
+ 2
0
0
1
0
3
- 5
+ 3
1
1
0
@@ -1359,8 +1359,8 @@
-
-
+
+
diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.c b/Project/HC32F460/source/Module/dc_motor/dc_motor.c
index f1d056d..18f1913 100644
--- a/Project/HC32F460/source/Module/dc_motor/dc_motor.c
+++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.c
@@ -335,10 +335,21 @@ void Motor_SetDirection(uint8_t dir) {
}
-
+uint8_t KeyASta;
+uint8_t KeyBSta;
+uint8_t RunSta;
// 电机控制接口
void Motor_Control(MotorCommand cmd) {
g_motorCmd = cmd;
+ if(cmd == MOTOR_CMD_REVERSE)
+ KeyASta =true;
+ else if(cmd == MOTOR_CMD_FORWARD)
+ KeyBSta = true;
+ else
+ {
+ KeyASta = false;
+ KeyBSta = false;
+ }
}
// 获取电机当前方向
@@ -388,9 +399,7 @@ void Dcmotor1msRoutine(void)
-uint8_t KeyASta;
-uint8_t KeyBSta;
-uint8_t RunSta;
+
void DcmotorLoopHandler(void)
{
@@ -418,7 +427,7 @@ void DcmotorLoopHandler(void)
{
RunSta = true;
Timer61B_Init();
- g_motorSpeed = 8000;
+ g_motorSpeed = 9500;
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, g_motorSpeed);
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareC, g_motorSpeed);
Timer6_StartCount(M4_TMR61);
@@ -430,7 +439,7 @@ void DcmotorLoopHandler(void)
{
RunSta = true;
Timer61A_Init();
- g_motorSpeed = 8000;
+ g_motorSpeed = 9500;
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, g_motorSpeed);
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareC, g_motorSpeed);
Timer6_StartCount(M4_TMR61);
diff --git a/Project/HC32F460/source/User/Inc/main.h b/Project/HC32F460/source/User/Inc/main.h
index 6c4fae2..6e94e63 100644
--- a/Project/HC32F460/source/User/Inc/main.h
+++ b/Project/HC32F460/source/User/Inc/main.h
@@ -9,8 +9,15 @@
#define OSC_CNT 40
-#define SLOPE_CNT 30
+#define SLOPE_CNT 20
+#define STOP_TIME_MS 500
+#define RUN_TIME_MS 10
+
+#define BDC_STOP() Motor_Control(MOTOR_CMD_STOP)
+#define BDC_UP() Motor_Control(MOTOR_CMD_FORWARD)
+#define BDC_DOWN() Motor_Control(MOTOR_CMD_REVERSE)
+
typedef struct{
int32_t Slope_VPT;
@@ -66,6 +73,7 @@ typedef struct {
uint32_t Read1mSDelayCnt;
uint32_t Uart1Delay1mSCnt;
uint32_t StopCollDelay1mSCnt;
+ uint32_t RunCollDelay1mSCnt;
uint32_t EvenRunDelay1mSCnt;
uint8_t FeedDogDlyCnt;
diff --git a/Project/HC32F460/source/User/Src/main.c b/Project/HC32F460/source/User/Src/main.c
index 029679b..79183d7 100644
--- a/Project/HC32F460/source/User/Src/main.c
+++ b/Project/HC32F460/source/User/Src/main.c
@@ -147,18 +147,19 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& (App.LeftLowCS1237_SlopeArray[0] >= App.ADTrack.Slope_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] >= App.ADTrack.Slope_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] >= App.ADTrack.Slope_VPT))
- || ((Olu_diff1 >= App.ADTrack.LeftUpVPT)
- && (Olu_diff2 >= App.ADTrack.LeftUpVPT)
- && (Olu_diff3 >= App.ADTrack.LeftUpVPT)
- && (Oll_diff1 <= -App.ADTrack.LeftLowVPT)
- && (Oll_diff2 <= -App.ADTrack.LeftLowVPT)
- && (Oll_diff3 <= -App.ADTrack.LeftLowVPT)))
+// || ((Olu_diff1 >= App.ADTrack.LeftUpVPT)
+// && (Olu_diff2 >= App.ADTrack.LeftUpVPT)
+// && (Olu_diff3 >= App.ADTrack.LeftUpVPT)
+// && (Oll_diff1 <= -App.ADTrack.LeftLowVPT)
+// && (Oll_diff2 <= -App.ADTrack.LeftLowVPT)
+// && (Oll_diff3 <= -App.ADTrack.LeftLowVPT))
+ )
{
- //BDC_UP();
- Motor_Control(MOTOR_CMD_FORWARD);
+ BDC_UP();
App.UpFlag = true;
App.StopFlag = false;
App.DownFlag = false;
+ App.RunCollDelay1mSCnt = RUN_TIME_MS;
}
else if(((App.LeftUpCS1237_SlopeArray[0] >= App.ADTrack.Slope_VPT)
&& (App.LeftUpCS1237_SlopeArray[1] >= App.ADTrack.Slope_VPT)
@@ -166,18 +167,19 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& (App.LeftLowCS1237_SlopeArray[0] <= -App.ADTrack.Slope_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] <= -App.ADTrack.Slope_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] <= -App.ADTrack.Slope_VPT))
- || ((Olu_diff1 <= -App.ADTrack.LeftUpVPT)
- && (Olu_diff1 <= -App.ADTrack.LeftUpVPT)
- && (Olu_diff1 <= -App.ADTrack.LeftUpVPT)
- && (Oll_diff1 >= App.ADTrack.LeftLowVPT)
- && (Oll_diff1 >= App.ADTrack.LeftLowVPT)
- && (Oll_diff1 >= App.ADTrack.LeftLowVPT)))
+// || ((Olu_diff1 <= -App.ADTrack.LeftUpVPT)
+// && (Olu_diff1 <= -App.ADTrack.LeftUpVPT)
+// && (Olu_diff1 <= -App.ADTrack.LeftUpVPT)
+// && (Oll_diff1 >= App.ADTrack.LeftLowVPT)
+// && (Oll_diff1 >= App.ADTrack.LeftLowVPT)
+// && (Oll_diff1 >= App.ADTrack.LeftLowVPT))
+ )
{
- //BDC_DOWN();
- Motor_Control(MOTOR_CMD_REVERSE);
+ BDC_DOWN();
App.DownFlag = true;
App.StopFlag = false;
App.UpFlag = false;
+ App.RunCollDelay1mSCnt = RUN_TIME_MS;
}
}
else if(LeftSlopeSum < RightSlopeSum && LeftDiffSum < RightDiffSum)
@@ -189,18 +191,19 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& (App.RightLowCS1237_SlopeArray[0] >= App.ADTrack.Slope_VPT)
&& (App.RightLowCS1237_SlopeArray[1] >= App.ADTrack.Slope_VPT)
&& (App.RightLowCS1237_SlopeArray[2] >= App.ADTrack.Slope_VPT))
- || ((Oru_diff1 >= App.ADTrack.RightUpVPT)
- && (Oru_diff2 >= App.ADTrack.RightUpVPT)
- && (Oru_diff3 >= App.ADTrack.RightUpVPT)
- && (Orl_diff1 <= -App.ADTrack.RightLowVPT)
- && (Orl_diff2 <= -App.ADTrack.RightLowVPT)
- && (Orl_diff3 <= -App.ADTrack.RightLowVPT)))
+// || ((Oru_diff1 >= App.ADTrack.RightUpVPT)
+// && (Oru_diff2 >= App.ADTrack.RightUpVPT)
+// && (Oru_diff3 >= App.ADTrack.RightUpVPT)
+// && (Orl_diff1 <= -App.ADTrack.RightLowVPT)
+// && (Orl_diff2 <= -App.ADTrack.RightLowVPT)
+// && (Orl_diff3 <= -App.ADTrack.RightLowVPT))
+ )
{
- //BDC_UP();
- Motor_Control(MOTOR_CMD_FORWARD);
+ BDC_UP();
App.UpFlag = true;
App.StopFlag = false;
App.DownFlag = false;
+ App.RunCollDelay1mSCnt = RUN_TIME_MS;
}
else if(((App.RightUpCS1237_SlopeArray[0] >= App.ADTrack.Slope_VPT)
&& (App.RightUpCS1237_SlopeArray[1] >= App.ADTrack.Slope_VPT)
@@ -208,117 +211,120 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& (App.RightLowCS1237_SlopeArray[0] <= -App.ADTrack.Slope_VPT)
&& (App.RightLowCS1237_SlopeArray[1] <= -App.ADTrack.Slope_VPT)
&& (App.RightLowCS1237_SlopeArray[2] <= -App.ADTrack.Slope_VPT))
- || ((Oru_diff1 <= -App.ADTrack.RightUpVPT)
- && (Oru_diff2 <= -App.ADTrack.RightUpVPT)
- && (Oru_diff3 <= -App.ADTrack.RightUpVPT)
- && (Orl_diff1 >= App.ADTrack.RightLowVPT)
- && (Orl_diff2 >= App.ADTrack.RightLowVPT)
- && (Orl_diff3 >= App.ADTrack.RightLowVPT)))
+// || ((Oru_diff1 <= -App.ADTrack.RightUpVPT)
+// && (Oru_diff2 <= -App.ADTrack.RightUpVPT)
+// && (Oru_diff3 <= -App.ADTrack.RightUpVPT)
+// && (Orl_diff1 >= App.ADTrack.RightLowVPT)
+// && (Orl_diff2 >= App.ADTrack.RightLowVPT)
+// && (Orl_diff3 >= App.ADTrack.RightLowVPT))
+ )
{
- //BDC_DOWN();
- Motor_Control(MOTOR_CMD_REVERSE);
+ BDC_DOWN();
App.DownFlag = true;
App.StopFlag = false;
App.UpFlag = false;
+ App.RunCollDelay1mSCnt = RUN_TIME_MS;
}
}
}
}
else if(App.DownFlag == true)
{
- if(App.LeftRunFalg == true)
+ if(App.RunCollDelay1mSCnt <= 0)
{
- if(lu_slope < -App.ADTrack.Slope_VPT
- && ll_slope > App.ADTrack.Slope_VPT)
+ if(App.LeftRunFalg == true)
{
- //BDC_STOP();
- Motor_Control(MOTOR_CMD_STOP);
- App.StopFlag = true;
- App.DownFlag = false;
- App.UpFlag = false;
- App.StopCollDelay1mSCnt = 1000;
+ if(lu_slope < -App.ADTrack.Slope_VPT
+ && ll_slope > App.ADTrack.Slope_VPT)
+ {
+ BDC_STOP();
+ App.StopFlag = true;
+ App.DownFlag = false;
+ App.UpFlag = false;
+ App.StopCollDelay1mSCnt = STOP_TIME_MS;
+ }
+ else if(Olu_diff1 > -(App.ADTrack.LeftUpVPT / 2)
+ && Oll_diff1 < (App.ADTrack.LeftLowVPT / 2))
+ {
+ BDC_STOP();
+ App.StopFlag = true;
+ App.DownFlag = false;
+ App.UpFlag = false;
+ App.StopCollDelay1mSCnt = STOP_TIME_MS;
+ }
}
- else if(Olu_diff1 > -(App.ADTrack.LeftUpVPT / 2)
- && Oll_diff1 < (App.ADTrack.LeftLowVPT / 2))
+ else if(App.RightRunFalg == true)
{
- //BDC_STOP();
- Motor_Control(MOTOR_CMD_STOP);
- App.StopFlag = true;
- App.DownFlag = false;
- App.UpFlag = false;
- App.StopCollDelay1mSCnt = 1000;
- }
- }
- else if(App.RightRunFalg == true)
- {
- if(ru_slope < -App.ADTrack.Slope_VPT
- && rl_slope > App.ADTrack.Slope_VPT)
- {
- //BDC_STOP();
- Motor_Control(MOTOR_CMD_STOP);
- App.StopFlag = true;
- App.DownFlag = false;
- App.UpFlag = false;
- App.StopCollDelay1mSCnt = 1000;
- }
- else if(Oru_diff1 > -(App.ADTrack.RightUpVPT / 2)
- && Orl_diff1 < (App.ADTrack.RightLowVPT / 2))
- {
- //BDC_STOP();
- Motor_Control(MOTOR_CMD_STOP);
- App.StopFlag = true;
- App.DownFlag = false;
- App.UpFlag = false;
- App.StopCollDelay1mSCnt = 1000;
+ if(ru_slope < -App.ADTrack.Slope_VPT
+ //&& rl_slope > App.ADTrack.Slope_VPT
+ )
+ {
+ BDC_STOP();
+ App.StopFlag = true;
+ App.DownFlag = false;
+ App.UpFlag = false;
+ App.StopCollDelay1mSCnt = STOP_TIME_MS;
+ }
+// else if(Oru_diff1 > -(App.ADTrack.RightUpVPT / 2)
+// //&& Orl_diff1 < (App.ADTrack.RightLowVPT / 2)
+// )
+// {
+// BDC_STOP();
+// App.StopFlag = true;
+// App.DownFlag = false;
+// App.UpFlag = false;
+// App.StopCollDelay1mSCnt = STOP_TIME_MS;
+// }
}
}
}
else if(App.UpFlag == true)
{
- if(App.LeftRunFalg == true)
+ if(App.RunCollDelay1mSCnt <= 0)
{
- if(lu_slope > App.ADTrack.Slope_VPT
- && ll_slope < -App.ADTrack.Slope_VPT)
+ if(App.LeftRunFalg == true)
{
- //BDC_STOP();
- Motor_Control(MOTOR_CMD_STOP);
+ if(lu_slope > App.ADTrack.Slope_VPT
+ && ll_slope < -App.ADTrack.Slope_VPT)
+ {
+ BDC_STOP();
App.StopFlag = true;
App.DownFlag = false;
App.UpFlag = false;
- App.StopCollDelay1mSCnt = 1000;
+ App.StopCollDelay1mSCnt = STOP_TIME_MS;
+ }
+ else if(Olu_diff1 < (App.ADTrack.LeftUpVPT / 2)
+ && Oll_diff1 > -(App.ADTrack.LeftLowVPT / 2))
+ {
+ BDC_STOP();
+ App.StopFlag = true;
+ App.DownFlag = false;
+ App.UpFlag = false;
+ App.StopCollDelay1mSCnt = STOP_TIME_MS;
+ }
}
- else if(Olu_diff1 < (App.ADTrack.LeftUpVPT / 2)
- && Oll_diff1 > -(App.ADTrack.LeftLowVPT / 2))
+ else if(App.RightRunFalg == true)
{
- //BDC_STOP();
- Motor_Control(MOTOR_CMD_STOP);
- App.StopFlag = true;
- App.DownFlag = false;
- App.UpFlag = false;
- App.StopCollDelay1mSCnt = 1000;
- }
- }
- else if(App.RightRunFalg == true)
- {
- if(ru_slope > App.ADTrack.Slope_VPT
- && rl_slope < -App.ADTrack.Slope_VPT)
- {
- //BDC_STOP();
- Motor_Control(MOTOR_CMD_STOP);
- App.StopFlag = true;
- App.DownFlag = false;
- App.UpFlag = false;
- App.StopCollDelay1mSCnt = 1000;
- }
- else if(Oru_diff1 < (App.ADTrack.RightUpVPT / 2)
- && Orl_diff1 > -(App.ADTrack.RightLowVPT / 2))
- {
- //BDC_STOP();
- Motor_Control(MOTOR_CMD_STOP);
- App.StopFlag = true;
- App.DownFlag = false;
- App.UpFlag = false;
- App.StopCollDelay1mSCnt = 1000;
+ if(ru_slope > App.ADTrack.Slope_VPT
+ //&& rl_slope < -App.ADTrack.Slope_VPT
+ )
+ {
+ BDC_STOP();
+ App.StopFlag = true;
+ App.DownFlag = false;
+ App.UpFlag = false;
+ App.StopCollDelay1mSCnt = STOP_TIME_MS;
+ }
+// else if(Oru_diff1 < (App.ADTrack.RightUpVPT / 2)
+// && Orl_diff1 > -(App.ADTrack.RightLowVPT / 2)
+// )
+// {
+// BDC_STOP();
+// App.StopFlag = true;
+// App.DownFlag = false;
+// App.UpFlag = false;
+// App.StopCollDelay1mSCnt = STOP_TIME_MS;
+// }
}
}
}
@@ -521,18 +527,18 @@ static void AppLoopHandler(void)
case APP_STATUS_WAIT:{
if(App.TD1mSDelayCnt <= 0)
- {
+ {
App.WaitFlag = true;
App.UpFlag = false;
App.DownFlag = false;
App.StopFlag = true;
App.EvenRunning = false;
- App.ADTrack.Slope_VPT = 1000;
- App.ADTrack.LeftUpVPT = 20000;
- App.ADTrack.LeftLowVPT = 20000;
- App.ADTrack.RightUpVPT = 20000;
- App.ADTrack.RightLowVPT = 20000;
+ App.ADTrack.Slope_VPT = 1500;
+ App.ADTrack.LeftUpVPT = 10000;
+ App.ADTrack.LeftLowVPT = 10000;
+ App.ADTrack.RightUpVPT = 10000;
+ App.ADTrack.RightLowVPT = 10000;
App.ADTrack.LeftUp_Org_AdZero = App.LeftUpCS1237_TrendArray[0];
App.ADTrack.LeftLow_Org_AdZero = App.LeftLowCS1237_TrendArray[0];
@@ -558,6 +564,8 @@ static void App1mSRoutine(void)
App.Uart1Delay1mSCnt--;
if(App.StopCollDelay1mSCnt > 0)
App.StopCollDelay1mSCnt--;
+ if(App.RunCollDelay1mSCnt > 0)
+ App.RunCollDelay1mSCnt--;
if(App.EvenRunning == true)
App.EvenRunDelay1mSCnt++;