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