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++;