diff --git a/Project/HC32F460/MDK/HC32F460.uvoptx b/Project/HC32F460/MDK/HC32F460.uvoptx
index 40c03b3..b524d80 100644
--- a/Project/HC32F460/MDK/HC32F460.uvoptx
+++ b/Project/HC32F460/MDK/HC32F460.uvoptx
@@ -101,7 +101,9 @@
0
0
1
- 2
+ 0
+ 0
+ 4
@@ -112,13 +114,23 @@
- BIN\CMSIS_AGDI.dll
+ Segger\JL2CM3.dll
+
+ 0
+ JL2CM3
+ -U2147483647 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K.FLM -FS00 -FL080000 -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FF1HC32F460_otp.FLM -FS13000C00 -FL13FC -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM)
+
+
+ 0
+ UL2CM3
+ UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD1FFF8000 -FF0HC32F460_512K -FF1HC32F460_otp -FL080000 -FL13FC -FS00 -FS13000C00 -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM)
+
0
CMSIS_AGDI
- -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)
+ UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD1FFF8000 -FF0HC32F460_512K -FF1HC32F460_otp -FL080000 -FL13FC -FS00 -FS13000C00 -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM)
0
@@ -138,20 +150,27 @@
0
DLGUARM
-
-
-
- 0
- JL2CM3
- -U4294967295 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8027 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -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
- UL2CM3
- UL2CM3(-S0 -C0 -P0 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K -FS00 -FL080000 -FF1HC32F460_otp -FS13000C00 -FL13FC -FP0($$Device:HC32F460JEUA$FlashARM\HC32F460_512K.FLM) -FP1($$Device:HC32F460JEUA$FlashARM\HC32F460_otp.FLM))
+ –?
-
+
+
+ 0
+ 0
+ 57
+ 1
+ 30944
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ ..\source\Module\dc_motor\dc_motor.c
+
+ \\BombSensor\../source/Module/dc_motor/dc_motor.c\57
+
+
0
@@ -238,6 +257,11 @@
1
KeyBSta
+
+ 17
+ 1
+ DcMotorDispEn
+
0
@@ -283,6 +307,7 @@
1
+ 0
0
2
5000000
@@ -370,6 +395,8 @@
0
0
1
+ 0
+ 0
-1
@@ -1031,7 +1058,7 @@
3
49
1
- 0
+ 1
0
0
..\source\User\Src\Debug.c
diff --git a/Project/HC32F460/MDK/HC32F460.uvprojx b/Project/HC32F460/MDK/HC32F460.uvprojx
index ef55ad3..71ebd23 100644
--- a/Project/HC32F460/MDK/HC32F460.uvprojx
+++ b/Project/HC32F460/MDK/HC32F460.uvprojx
@@ -10,20 +10,20 @@
Debug
0x4
ARM-ADS
- 5060528::V5.06 update 5 (build 528)::ARMCC
+ 5060750::V5.06 update 6 (build 750)::.\ARMCC
0
- HC32F460JEUA
+ HC32F460JETA
HDSC
HDSC.HC32F460.1.0.11
https://raw.githubusercontent.com/hdscmcu/pack/master/
IRAM(0x1FFF8000,0x2F000) IRAM2(0x200F0000,0x1000) IROM(0x00000000,0x80000) IROM2(0x03000C00,0x003FC) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE
- UL2CM3(-S0 -C0 -P0 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K -FS00 -FL080000 -FF1HC32F460_otp -FS13000C00 -FL13FC -FP0($$Device:HC32F460JEUA$FlashARM\HC32F460_512K.FLM) -FP1($$Device:HC32F460JEUA$FlashARM\HC32F460_otp.FLM))
+ UL2CM3(-S0 -C0 -P0 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K -FS00 -FL080000 -FF1HC32F460_otp -FS13000C00 -FL13FC -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM))
0
- $$Device:HC32F460JEUA$Device\Include\HC32F460JEUA.h
+ $$Device:HC32F460JETA$Device\Include\HC32F460JETA.h
@@ -33,7 +33,7 @@
- $$Device:HC32F460JEUA$SVD\HDSC_HC32F460JEUA.svd
+ $$Device:HC32F460JETA$SVD\HC32F460JETA.svd
1
0
@@ -138,7 +138,7 @@
1
BIN\UL2CM3.DLL
- "" ()
+
@@ -183,7 +183,9 @@
1
0
0
- 1
+ 2
+ 0
+ 0
1
1
8
@@ -324,6 +326,7 @@
0
0
1
+ 0
0
3
3
@@ -349,7 +352,7 @@
0
0
0
- 0
+ 4
@@ -858,6 +861,8 @@
0
0
1
+ 0
+ 0
1
1
8
@@ -998,6 +1003,7 @@
0
0
1
+ 0
0
0
0
@@ -1023,7 +1029,7 @@
0
0
0
- 0
+ 4
@@ -1359,8 +1365,8 @@
-
-
+
+
@@ -1370,4 +1376,19 @@
+
+
+
+ <Project Info>
+
+
+
+
+
+ 0
+ 1
+
+
+
+
diff --git a/Project/HC32F460/MDK/RTE/_Debug/RTE_Components.h b/Project/HC32F460/MDK/RTE/_Debug/RTE_Components.h
index c0360b3..74af911 100644
--- a/Project/HC32F460/MDK/RTE/_Debug/RTE_Components.h
+++ b/Project/HC32F460/MDK/RTE/_Debug/RTE_Components.h
@@ -1,6 +1,6 @@
/*
- * Auto generated Run-Time-Environment Component Configuration File
+ * Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
* Project: 'HC32F460'
@@ -14,7 +14,8 @@
/*
* Define the Device Header File:
*/
-#define CMSIS_device_header "HC32F460JEUA.h"
+#define CMSIS_device_header "HC32F460JETA.h"
+
#endif /* RTE_COMPONENTS_H */
diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.c b/Project/HC32F460/source/Module/dc_motor/dc_motor.c
index 18f1913..442cf72 100644
--- a/Project/HC32F460/source/Module/dc_motor/dc_motor.c
+++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.c
@@ -14,7 +14,7 @@ volatile uint16_t g_accelTimer = 0;
static uint16_t accelCounter = 0;
-static uint8_t DcMotorDispEn = true;
+static uint8_t DcMotorDispEn = false;
#define DCMOTOR_DBG_LOG(...) { if(DcMotorDispEn) DBG_LOG(__VA_ARGS__);}
#define DCMOTOR_DBG_ARRAY(ARRAY, SIZE) { if(DcMotorDispEn) {DBG_ARRAY(ARRAY,SIZE)}}
@@ -25,12 +25,174 @@ void DCMOTORDBGOnOff(uint8_t OnOff)
{
DcMotorDispEn = OnOff;
if(OnOff)
- DBG_LOG("\r\nKey Display Enable!\r\n");
+ DBG_LOG("\r\nDcMotor Display Enable!\r\n");
else
- DBG_LOG("\r\nKey Display Disable!\r\n");
+ DBG_LOG("\r\nDcMotor Display Disable!\r\n");
}
+
+/* Timer4 CNT */
+#define TIMER4_UNIT (M4_TMR41)
+#define TIMER4_CNT_CYCLE_VAL (10000u) /* Timer4 counter cycle value */
+
+/* Timer4 OCO */
+#define TIMER4_OCO_HIGH_CH (Timer4OcoOuh) /* only Timer4OcoOuh Timer4OcoOvh Timer4OcoOwh */
+
+/* Timer4 PWM */
+#define TIMER4_PWM_CH (Timer4PwmU) /* only Timer4PwmU Timer4PwmV Timer4PwmW */
+
+/* Define port and pin for Timer4Pwm */
+#define TIMER4_PWM_H_PORT (PortA) /* TIM4_1_OUH_B:PE9 TIM4_1_OVH_B:PE11 TIM4_1_OWH_B:PE13 */
+#define TIMER4_PWM_H_PIN (Pin08)
+#define TIMER4_PWM_L_PORT (PortB) /* TIM4_1_OUL_B:PE8 TIM4_1_OVL_B:PE10 TIM4_1_OWL_B:PE12 */
+#define TIMER4_PWM_L_PIN (Pin13)
+
+
+
+
+
+
+void Timer41_Init(uint8_t dir)
+{
+ uint8_t E_OC_Port = 0;
+ uint8_t E_PWM_OS = 0;
+
+ stc_timer4_cnt_init_t stcCntInit;
+ stc_timer4_oco_init_t stcOcoInit;
+ stc_timer4_pwm_init_t stcPwmInit;
+ stc_oco_low_ch_compare_mode_t stcLowChCmpMode;
+ stc_oco_high_ch_compare_mode_t stcHighChCmpMode;
+ uint16_t u8OcoOccrVal = TIMER4_CNT_CYCLE_VAL/10u;
+ en_timer4_oco_ch_t enOcoLowCh = (en_timer4_oco_ch_t)(TIMER4_OCO_HIGH_CH + 1);
+
+ /* Clear structures */
+ MEM_ZERO_STRUCT(stcCntInit);
+ MEM_ZERO_STRUCT(stcOcoInit);
+ MEM_ZERO_STRUCT(stcLowChCmpMode);
+ MEM_ZERO_STRUCT(stcHighChCmpMode);
+ MEM_ZERO_STRUCT(stcPwmInit);
+
+ if(dir == 0)
+ {
+ E_OC_Port = OcPortLevelLow;
+ E_PWM_OS = PwmHReversePwmLHold;
+ }
+ else
+ {
+ E_OC_Port = OcPortLevelHigh;
+ E_PWM_OS = PwmHReversePwmLHold;
+ }
+
+
+ /* Enable peripheral clock */
+ PWC_Fcg2PeriphClockCmd(PWC_FCG2_PERIPH_TIM41 | PWC_FCG2_PERIPH_TIM42 | PWC_FCG2_PERIPH_TIM43, Enable);
+
+ /* Timer4 CNT : Initialize CNT configuration structure */
+ stcCntInit.enBufferCmd = Disable;
+ stcCntInit.enClk = Timer4CntPclk;
+ stcCntInit.enClkDiv = Timer4CntPclkDiv4; /* CNT clock divide */
+ stcCntInit.u16Cycle = TIMER4_CNT_CYCLE_VAL;
+ stcCntInit.enCntMode = Timer4CntTriangularWave;
+ stcCntInit.enZeroIntCmd = Disable;
+ stcCntInit.enPeakIntCmd = Disable;
+ stcCntInit.enZeroIntMsk = Timer4CntIntMask1;
+ stcCntInit.enPeakIntMsk = Timer4CntIntMask1;
+ TIMER4_CNT_Init(TIMER4_UNIT, &stcCntInit); /* Initialize CNT */
+
+ /* Timer4 OCO : Initialize OCO configuration structure */
+ stcOcoInit.enOccrBufMode = OccrBufTrsfByCntZero;
+ stcOcoInit.enOcmrBufMode = OcmrBufTrsfByCntZero;
+ stcOcoInit.enPortLevel = E_OC_Port; /*Êä³öµÍµçƽµ½OC¶Ë¿Ú*/
+ stcOcoInit.enOcoIntCmd = Disable;
+ TIMER4_OCO_Init(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, &stcOcoInit); /* Initialize OCO high channel */
+ TIMER4_OCO_Init(TIMER4_UNIT, enOcoLowCh, &stcOcoInit); /* Initialize OCO low channel */
+
+ if (!(TIMER4_OCO_HIGH_CH % 2))
+ {
+ /* ocmr[15:0] = 0x0FFF */
+ stcHighChCmpMode.enCntZeroMatchOpState = OcoOpOutputReverse;
+ stcHighChCmpMode.enCntZeroNotMatchOpState = OcoOpOutputHold;
+ stcHighChCmpMode.enCntUpCntMatchOpState = OcoOpOutputReverse;
+ stcHighChCmpMode.enCntPeakMatchOpState = OcoOpOutputReverse;
+ stcHighChCmpMode.enCntPeakNotMatchOpState = OcoOpOutputHold;
+ stcHighChCmpMode.enCntDownCntMatchOpState = OcoOpOutputReverse;
+
+ stcHighChCmpMode.enCntZeroMatchOcfState = OcoOcfSet;
+ stcHighChCmpMode.enCntUpCntMatchOcfState = OcoOcfSet;
+ stcHighChCmpMode.enCntPeakMatchOcfState = OcoOcfSet;
+ stcHighChCmpMode.enCntDownCntMatchOcfState = OcoOcfSet;
+
+ stcHighChCmpMode.enMatchConditionExtendCmd = Disable;
+
+ TIMER4_OCO_SetHighChCompareMode(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, &stcHighChCmpMode); /* Set OCO high channel compare mode */
+ }
+
+ /*************Timer4 OCO ocmr1[31:0] = 0x0FF0 0FFF*****************************/
+ if (enOcoLowCh % 2)
+ {
+ /* OCMR[31:0] Ox 0FF0 0FFF 0000 1111 1111 0000 0000 1111 1111 1111 */
+ stcLowChCmpMode.enCntZeroLowMatchHighMatchLowChOpState = OcoOpOutputReverse; /* bit[27:26] 11 */
+ stcLowChCmpMode.enCntZeroLowMatchHighNotMatchLowChOpState = OcoOpOutputReverse; /* bit[11:10] 11 */
+ stcLowChCmpMode.enCntZeroLowNotMatchHighMatchLowChOpState = OcoOpOutputHold; /* bit[31:30] 00 */
+ stcLowChCmpMode.enCntZeroLowNotMatchHighNotMatchLowChOpState = OcoOpOutputHold; /* bit[15:14] 00 */
+
+ stcLowChCmpMode.enCntUpCntLowMatchHighMatchLowChOpState = OcoOpOutputReverse; /* bit[25:24] 11 */
+ stcLowChCmpMode.enCntUpCntLowMatchHighNotMatchLowChOpState = OcoOpOutputReverse; /* bit[9:8] 11 */
+ stcLowChCmpMode.enCntUpCntLowNotMatchHighMatchLowChOpState = OcoOpOutputHold; /* bit[19:18] 00 */
+
+ stcLowChCmpMode.enCntPeakLowMatchHighMatchLowChOpState = OcoOpOutputReverse; /* bit[23:22] 11 */
+ stcLowChCmpMode.enCntPeakLowMatchHighNotMatchLowChOpState = OcoOpOutputReverse; /* bit[7:6] 11 */
+ stcLowChCmpMode.enCntPeakLowNotMatchHighMatchLowChOpState = OcoOpOutputHold; /* bit[29:28] 00 */
+ stcLowChCmpMode.enCntPeakLowNotMatchHighNotMatchLowChOpState = OcoOpOutputHold; /* bit[13:12] 00 */
+
+ stcLowChCmpMode.enCntDownLowMatchHighMatchLowChOpState = OcoOpOutputReverse; /* bit[21:20] 11 */
+ stcLowChCmpMode.enCntDownLowMatchHighNotMatchLowChOpState = OcoOpOutputReverse; /* bit[5:4] 11 */
+ stcLowChCmpMode.enCntDownLowNotMatchHighMatchLowChOpState = OcoOpOutputHold; /* bit[17:16] 00 */
+
+ stcLowChCmpMode.enCntZeroMatchOcfState = OcoOcfSet; /* bit[3] 1 */
+ stcLowChCmpMode.enCntUpCntMatchOcfState = OcoOcfSet; /* bit[2] 1 */
+ stcLowChCmpMode.enCntPeakMatchOcfState = OcoOcfSet; /* bit[1] 1 */
+ stcLowChCmpMode.enCntDownCntMatchOcfState = OcoOcfSet; /* bit[0] 1 */
+
+ TIMER4_OCO_SetLowChCompareMode(TIMER4_UNIT, enOcoLowCh, &stcLowChCmpMode); /* Set OCO low channel compare mode */
+ }
+
+ /* Set OCO compare value */
+ TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, u8OcoOccrVal);
+ TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, u8OcoOccrVal);
+
+ /* Enable OCO */
+ if(dir == 0)
+ {
+// TIMER4_OCO_OutputCompareCmd(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, Enable);
+ TIMER4_OCO_OutputCompareCmd(TIMER4_UNIT, enOcoLowCh, Enable);
+ }
+ else
+ {
+ TIMER4_OCO_OutputCompareCmd(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, Enable);
+ }
+
+ /* Initialize PWM I/O */
+ PORT_SetFunc(TIMER4_PWM_H_PORT, TIMER4_PWM_H_PIN, Func_Tim4, Disable);
+ PORT_SetFunc(TIMER4_PWM_L_PORT, TIMER4_PWM_L_PIN, Func_Tim4, Disable);
+
+ /* Timer4 PWM: Initialize PWM configuration structure */
+ stcPwmInit.enRtIntMaskCmd = Enable;
+ stcPwmInit.enClkDiv = PwmPlckDiv1;
+ stcPwmInit.enOutputState = E_PWM_OS; /*Êä³öPWMHÐźŲ»¸Ä±äµçƽ£¬Êä³öPWMLÐźŷ´×ª*/
+ stcPwmInit.enMode = PwmThroughMode;
+ TIMER4_PWM_Init(TIMER4_UNIT, TIMER4_PWM_CH, &stcPwmInit); /* Initialize timer4 pwm */
+
+ /* Clear && Start CNT */
+ TIMER4_CNT_ClearCountVal(TIMER4_UNIT);
+ TIMER4_CNT_Start(TIMER4_UNIT);
+
+}
+
+
+
+
void Timer61A_Init(void)
{
uint16_t u16Period;
@@ -225,7 +387,13 @@ void dcmotor_start(void)
*/
void dcmotor_stop(void)
{
+ #if(TIMER == TIMER6)
Timer6_StopCount(M4_TMR61);
+ #endif
+ #if(TIMER == TIMER4)
+
+ TIMER4_CNT_Stop(TIMER4_UNIT);
+ #endif
}
/**
@@ -236,6 +404,7 @@ void dcmotor_stop(void)
*/
void dcmotor_dir(uint8_t para)
{
+ #if(TIMER == TIMER6)
Timer6_StopCount(M4_TMR61);
Timer6_DeInit(M4_TMR61);
@@ -252,7 +421,21 @@ void dcmotor_dir(uint8_t para)
}
dcmotor_start();
Timer6_StartCount(M4_TMR61);
+ #endif
+ #if(TIMER == TIMER4)
+ if (para == 0) /* Õýת */
+ {
+
+
+ Timer41_Init(1);
+
+ }
+ else if (para == 1) /* ·´×ª */
+ {
+ Timer41_Init(0);
+ }
+ #endif
}
/**
@@ -266,23 +449,47 @@ void dcmotor_speed(uint16_t para)
if (g_motorSpeed == 0) {
g_motorDirection = DIR_STOPPED;
+ #if(TIMER == TIMER6)
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, g_motorSpeed);
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, g_motorSpeed);
+ #endif
+
+ #if(TIMER == TIMER4)
+ TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, TIMER4_CNT_CYCLE_VAL - g_motorSpeed); //Õýת
+ TIMER4_OCO_WriteOccr(TIMER4_UNIT, Timer4OcoOul, TIMER4_CNT_CYCLE_VAL - g_motorSpeed); //·´×ª
+ #endif
dcmotor_stop();
return;
}
if(Motor_GetDirection() == DIR_REVERSE) //·´×ª
{
+ #if(TIMER == TIMER6)
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, g_motorSpeed); //Set General Compare RegisterA Value
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareC, g_motorSpeed); //Set General Compare RegisterC Value as buffer register of GCMAR
- DBG_LOG("REVERSE\tnewSpeed = %d\r\n", g_motorSpeed);
+ #endif
+
+ #if(TIMER == TIMER4)
+// TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, TIMER4_CNT_CYCLE_VAL - g_motorSpeed); //Õýת
+// TIMER4_OCO_WriteOccr(TIMER4_UNIT, Timer4OcoOul, TIMER4_CNT_CYCLE_VAL - g_motorSpeed); //·´×ª
+ TIMER4_OCO_WriteOccr(TIMER4_UNIT, Timer4OcoOul, g_motorSpeed); //·´×ª
+
+ #endif
+
+ DCMOTOR_DBG_LOG("REVERSE\tnewSpeed = %d\r\n", g_motorSpeed);
}
else if(Motor_GetDirection() == DIR_FORWARD) //Õýת
{
+ #if(TIMER == TIMER6)
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, 10000-g_motorSpeed); //Set General Compare RegisterA Value
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareC, 10000-g_motorSpeed); //Set General Compare RegisterC Value as buffer register of GCMAR
- DBG_LOG("FORWARD\tnewSpeed = %d\r\n", g_motorSpeed);
+ #endif
+
+ #if(TIMER == TIMER4)
+ TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, g_motorSpeed); //Õýת
+// TIMER4_OCO_WriteOccr(TIMER4_UNIT, Timer4OcoOul, TIMER4_CNT_CYCLE_VAL - g_motorSpeed); //·´×ª
+ #endif
+ DCMOTOR_DBG_LOG("FORWARD\tnewSpeed = %d\r\n", g_motorSpeed);
}
}
@@ -306,13 +513,25 @@ void motor_pwm_set(float para)
{
g_motorDirection = DIR_FORWARD;
dcmotor_dir(0); /* Õýת */
+ #if(TIMER == TIMER6)
dcmotor_speed(10000-val);
+ #endif
+
+ #if(TIMER == TIMER4)
+ dcmotor_speed(val);
+ #endif
}
else
{
g_motorDirection = DIR_REVERSE;
dcmotor_dir(1); /* ·´×ª */
+ #if(TIMER == TIMER6)
dcmotor_speed(-val);
+ #endif
+
+ #if(TIMER == TIMER4)
+ dcmotor_speed(-val);
+ #endif
}
DCMOTOR_DBG_LOG("dcmotor_speed:%d\r\n", val);
}
@@ -335,21 +554,10 @@ 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;
- }
}
// »ñÈ¡µç»úµ±Ç°·½Ïò
@@ -399,11 +607,13 @@ void Dcmotor1msRoutine(void)
-
+uint8_t KeyASta;
+uint8_t KeyBSta;
+uint8_t RunSta;
void DcmotorLoopHandler(void)
{
-#if(1)
+#if(0)
if((RunSta == false) && (KeyASta == true) && (KeyBSta == false))
@@ -427,7 +637,7 @@ void DcmotorLoopHandler(void)
{
RunSta = true;
Timer61B_Init();
- g_motorSpeed = 9500;
+ g_motorSpeed = MAX_SPEED;
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, g_motorSpeed);
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareC, g_motorSpeed);
Timer6_StartCount(M4_TMR61);
@@ -439,7 +649,7 @@ void DcmotorLoopHandler(void)
{
RunSta = true;
Timer61A_Init();
- g_motorSpeed = 9500;
+ g_motorSpeed = MAX_SPEED;
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, g_motorSpeed);
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareC, g_motorSpeed);
Timer6_StartCount(M4_TMR61);
@@ -455,7 +665,7 @@ void DcmotorLoopHandler(void)
#endif
-#if(0)
+#if(1)
if((RunSta == false) && (KeyASta == true) && (KeyBSta == false))
@@ -501,6 +711,8 @@ void DcmotorLoopHandler(void)
// Motor_SetSpeed(ACCEL_STEP); // ³õʼËÙ¶È
// motor_pwm_set(ACCEL_STEP);
dcmotor_speed(ACCEL_STEP);
+ TIMER4_CNT_ClearCountVal(TIMER4_UNIT);
+ TIMER4_CNT_Start(TIMER4_UNIT);
}
break;
@@ -560,3 +772,9 @@ void DcmotorLoopHandler(void)
#endif
}
+
+
+
+
+
+
diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.h b/Project/HC32F460/source/Module/dc_motor/dc_motor.h
index f868e8d..9543ddb 100644
--- a/Project/HC32F460/source/Module/dc_motor/dc_motor.h
+++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.h
@@ -5,12 +5,16 @@
#include "hc32_ddl.h"
+#define TIMER4 0
+#define TIMER6 1
+
+#define TIMER TIMER4
// µç»ú¿ØÖƲÎÊý
#define PWM_PERIOD TIM_PERIOD // PWMÖÜÆÚÖµ (ARR)
#define MAX_SPEED 9900 // ×î´óËÙ¶È(PWMÕ¼¿Õ±È)
#define ACCEL_STEP 100 // ¼ÓËÙ²½½øÖµ
#define DECEL_STEP 100 // ¼õËÙ²½½øÖµ
-#define ACCEL_INTERVAL 5 // ¼Ó¼õËÙ¼ä¸ô(ms)
+#define ACCEL_INTERVAL 2 // ¼Ó¼õËÙ¼ä¸ô(ms)
@@ -74,19 +78,3 @@ void DcmotorLoopHandler(void);
#endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Project/HC32F460/source/User/Inc/ddl_config.h b/Project/HC32F460/source/User/Inc/ddl_config.h
index 16efb04..0dee384 100644
--- a/Project/HC32F460/source/User/Inc/ddl_config.h
+++ b/Project/HC32F460/source/User/Inc/ddl_config.h
@@ -93,10 +93,10 @@ extern "C"
#define DDL_SRAM_ENABLE (DDL_ON)
#define DDL_SWDT_ENABLE (DDL_ON)
#define DDL_TIMER0_ENABLE (DDL_OFF)
-#define DDL_TIMER4_CNT_ENABLE (DDL_OFF)
+#define DDL_TIMER4_CNT_ENABLE (DDL_ON)
#define DDL_TIMER4_EMB_ENABLE (DDL_OFF)
-#define DDL_TIMER4_OCO_ENABLE (DDL_OFF)
-#define DDL_TIMER4_PWM_ENABLE (DDL_OFF)
+#define DDL_TIMER4_OCO_ENABLE (DDL_ON)
+#define DDL_TIMER4_PWM_ENABLE (DDL_ON)
#define DDL_TIMER4_SEVT_ENABLE (DDL_OFF)
#define DDL_TIMER6_ENABLE (DDL_ON)
#define DDL_TIMERA_ENABLE (DDL_OFF)
diff --git a/Project/HC32F460/source/User/Src/Debug.c b/Project/HC32F460/source/User/Src/Debug.c
index c001e4c..6309eb9 100644
--- a/Project/HC32F460/source/User/Src/Debug.c
+++ b/Project/HC32F460/source/User/Src/Debug.c
@@ -7,6 +7,7 @@
#include "Debug.h"
#include "main.h"
#include "bsp.h"
+#include "dc_motor.h"
#if (USE_DEBUG != 0)
#define DEBUG_CMD_CNT 8
@@ -213,6 +214,7 @@ void DebugCmdHelp(int argc, char *argv[])
DBG_LOG("Debug Cmd:\r\n\
disp task on/off -->Open the task display.\r\n\
help\
+ dcmotor\
");
}
@@ -265,13 +267,49 @@ void DebugCmdHelp(int argc, char *argv[])
// TimeSync(num);
//}
+extern uint8_t KeyASta;
+extern uint8_t KeyBSta;
+extern uint8_t RunSta;
+void MotorSwitch(int argc, char *argv[])
+{
+ // Èç¹û²ÎÊý¸öÊýСÓÚ2£¬Ôò·µ»Ø
+ if(argc < 2)
+ return;
+ // Èç¹ûµÚÒ»¸ö²ÎÊýΪ£¿£¬Ôò´òÓ¡°ïÖúÐÅÏ¢
+ if(strcmp(argv[1], "?") == 0)
+ {
+ DBG_LOG("DCMotor Cmd:\r\n\
+ motor F/R/S -->Turn the motor on or off.\r\n");
+ return;
+ }
+ // Èç¹ûµÚÒ»¸ö²ÎÊýΪon£¬Ôò¿ªÆôSonarWork
+ if(strcmp(argv[1], "R") == 0)
+ {
+ KeyASta = true;
+ Motor_Control(MOTOR_CMD_REVERSE);
+ DBG_LOG("Motor FORWARD\r\n");
+ }
+ // Èç¹ûµÚÒ»¸ö²ÎÊýΪoff£¬Ôò¹Ø±ÕSonarWork
+ else if(strcmp(argv[1], "F") == 0)
+ {
+ KeyBSta = true;
+ Motor_Control(MOTOR_CMD_FORWARD);
+ DBG_LOG("Motor REVERSE\r\n");
+ }
+ else if(strcmp(argv[1], "S") == 0)
+ {
+ KeyASta = false;
+ KeyBSta = false;
+ Motor_Control(MOTOR_CMD_STOP);
+ DBG_LOG("Motor OFF\r\n");
+ }
+}
const DBGFunType DebugFun[DEBUG_CMD_CNT] = {
"help", DebugCmdHelp,
-// "TimeSync", (void*)TimeSync,
-// "SetTime", SetTime,
+ "motor", MotorSwitch,
};
#endif