From 66ca2c80046285d64bdf58d6cc506654ac99df70 Mon Sep 17 00:00:00 2001 From: cui635 Date: Tue, 16 Sep 2025 11:22:16 +0800 Subject: [PATCH 1/5] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9PWM=E9=A2=91?= =?UTF-8?q?=E7=8E=87=EF=BC=8C=E8=A7=A3=E5=86=B3=E7=94=B5=E6=9C=BA=E4=BD=8E?= =?UTF-8?q?=E9=80=9F=E5=90=AF=E5=81=9C=E6=97=B6=E7=9A=84=E9=AB=98=E9=A2=91?= =?UTF-8?q?=E5=99=AA=E9=9F=B3=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/HC32F460/source/Module/dc_motor/dc_motor.c | 2 +- Project/HC32F460/source/Module/dc_motor/dc_motor.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.c b/Project/HC32F460/source/Module/dc_motor/dc_motor.c index 442cf72..cd67c6a 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.c +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.c @@ -34,7 +34,7 @@ void DCMOTORDBGOnOff(uint8_t OnOff) /* Timer4 CNT */ #define TIMER4_UNIT (M4_TMR41) -#define TIMER4_CNT_CYCLE_VAL (10000u) /* Timer4 counter cycle value */ +#define TIMER4_CNT_CYCLE_VAL (500u) /* Timer4 counter cycle value */ /* Timer4 OCO */ #define TIMER4_OCO_HIGH_CH (Timer4OcoOuh) /* only Timer4OcoOuh Timer4OcoOvh Timer4OcoOwh */ diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.h b/Project/HC32F460/source/Module/dc_motor/dc_motor.h index 9543ddb..d7e319c 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.h +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.h @@ -11,10 +11,10 @@ #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 2 // ¼Ó¼õËÙ¼ä¸ô(ms) +#define MAX_SPEED 480 // ×î´óËÙ¶È(PWMÕ¼¿Õ±È) +#define ACCEL_STEP 10 // ¼ÓËÙ²½½øÖµ +#define DECEL_STEP 10 // ¼õËÙ²½½øÖµ +#define ACCEL_INTERVAL 10 // ¼Ó¼õËÙ¼ä¸ô(ms) From b2c97d6a783cffb65a39c839084c89d6e38eb937 Mon Sep 17 00:00:00 2001 From: cui635 Date: Sun, 12 Oct 2025 19:59:47 +0800 Subject: [PATCH 2/5] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E5=BC=95?= =?UTF-8?q?=E8=84=9A=E5=AE=9A=E4=B9=89=E9=80=82=E9=85=8D=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=EF=BC=88V2.1=EF=BC=89=E7=94=B5=E8=B7=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MDK/.vscode/c_cpp_properties.json | 42 +++++++--------- .../HC32F460/MDK/.vscode/keil-assistant.log | 14 ++++++ Project/HC32F460/MDK/HC32F460.uvoptx | 36 ++++++++++++-- .../source/Module/dc_motor/dc_motor.c | 48 +++++++++++++------ .../source/Module/dc_motor/dc_motor.h | 21 ++++++-- Project/HC32F460/source/User/Src/bsp.c | 3 +- 6 files changed, 115 insertions(+), 49 deletions(-) diff --git a/Project/HC32F460/MDK/.vscode/c_cpp_properties.json b/Project/HC32F460/MDK/.vscode/c_cpp_properties.json index efcaf70..1c9fea8 100644 --- a/Project/HC32F460/MDK/.vscode/c_cpp_properties.json +++ b/Project/HC32F460/MDK/.vscode/c_cpp_properties.json @@ -3,19 +3,16 @@ { "name": "Debug", "includePath": [ - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\driver\\inc", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\mcu\\common", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\User\\Inc", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\Debug", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\SDCard", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\FatFS\\source", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\LIS2HH12", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\RS485", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\mcu\\common", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\User\\Inc", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\User\\Src", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\driver\\src", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\driver\\inc", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\Module\\CS1237", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\Module\\dc_motor", "C:\\Keil_v5\\ARM\\ARMCC\\include", "C:\\Keil_v5\\ARM\\ARMCC\\include\\rw", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\MDK", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\User\\Src", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\driver\\src" + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\MDK" ], "defines": [ "__DEBUG", @@ -100,21 +97,18 @@ { "name": "Release", "includePath": [ - "d:\\CUI\\Electronics\\SynologyDrive\\mcu\\common", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source", - "d:\\CUI\\Electronics\\SynologyDrive\\driver\\inc", - "d:\\CUI\\Electronics\\SynologyDrive\\bsp\\ev_hc32f460_lqfp100_v2", + "d:\\CUI\\SynologyDrive\\JOB\\mcu\\common", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source", + "d:\\CUI\\SynologyDrive\\JOB\\driver\\inc", + "d:\\CUI\\SynologyDrive\\JOB\\bsp\\ev_hc32f460_lqfp100_v2", "C:\\Keil_v5\\ARM\\ARMCC\\include", "C:\\Keil_v5\\ARM\\ARMCC\\include\\rw", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\MDK", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\mcu\\common", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\User\\Src", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\driver\\src", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\Debug", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\SDCard", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\FatFS\\source", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\LIS2HH12", - "d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\RS485" + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\MDK", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\mcu\\common", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\driver\\src", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\User\\Src", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\Module\\CS1237", + "d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\Module\\dc_motor" ], "defines": [ "HC32F460", diff --git a/Project/HC32F460/MDK/.vscode/keil-assistant.log b/Project/HC32F460/MDK/.vscode/keil-assistant.log index 139626a..eba32ca 100644 --- a/Project/HC32F460/MDK/.vscode/keil-assistant.log +++ b/Project/HC32F460/MDK/.vscode/keil-assistant.log @@ -20,3 +20,17 @@ [info] Log at : 2024/6/12|17:35:35|GMT+0800 +[info] Log at : 2025/9/17|09:28:29|GMT+0800 + +[info] Log at : 2025/9/17|09:28:37|GMT+0800 + +[info] Log at : 2025/9/17|11:25:21|GMT+0800 + +[info] Log at : 2025/9/17|11:30:43|GMT+0800 + +[info] Log at : 2025/9/18|09:27:20|GMT+0800 + +[info] project closed: HC32F460 +[info] Log at : 2025/9/19|10:56:08|GMT+0800 + +[info] project closed: HC32F460 diff --git a/Project/HC32F460/MDK/HC32F460.uvoptx b/Project/HC32F460/MDK/HC32F460.uvoptx index b524d80..cc6c46f 100644 --- a/Project/HC32F460/MDK/HC32F460.uvoptx +++ b/Project/HC32F460/MDK/HC32F460.uvoptx @@ -150,16 +150,16 @@ 0 DLGUARM - –? + 0 0 - 57 + 71 1 -
30944
+
17972
0 0 0 @@ -168,7 +168,23 @@ 1 ..\source\Module\dc_motor\dc_motor.c - \\BombSensor\../source/Module/dc_motor/dc_motor.c\57 + \\BombSensor\../source/Module/dc_motor/dc_motor.c\71 +
+ + 1 + 0 + 747 + 1 +
6022
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\source\Module\dc_motor\dc_motor.c + + \\BombSensor\../source/Module/dc_motor/dc_motor.c\747
@@ -262,6 +278,16 @@ 1 DcMotorDispEn + + 18 + 1 + newSpeed,0x0A + + + 19 + 1 + g_motorSpeed,0x0A + 0 @@ -1058,7 +1084,7 @@ 3 49 1 - 1 + 0 0 0 ..\source\User\Src\Debug.c diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.c b/Project/HC32F460/source/Module/dc_motor/dc_motor.c index cd67c6a..3683051 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.c +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.c @@ -30,8 +30,8 @@ void DCMOTORDBGOnOff(uint8_t OnOff) DBG_LOG("\r\nDcMotor Display Disable!\r\n"); } - - +#if(MCU == HC32F460JETA) +#if(0) //¾É°æ±¾PCB /* Timer4 CNT */ #define TIMER4_UNIT (M4_TMR41) #define TIMER4_CNT_CYCLE_VAL (500u) /* Timer4 counter cycle value */ @@ -47,10 +47,24 @@ void DCMOTORDBGOnOff(uint8_t OnOff) #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) +#endif +#if(1) //V2.1°æ±¾PCB +/* Timer4 CNT */ +#define TIMER4_UNIT (M4_TMR41) +#define TIMER4_CNT_CYCLE_VAL (500u) /* Timer4 counter cycle value */ +/* Timer4 OCO */ +#define TIMER4_OCO_HIGH_CH (Timer4OcoOvh) /* only Timer4OcoOuh Timer4OcoOvh Timer4OcoOwh */ +/* Timer4 PWM */ +#define TIMER4_PWM_CH (Timer4PwmV) /* only Timer4PwmU Timer4PwmV Timer4PwmW */ +#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 (Pin09) +#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 (Pin14) +#endif void Timer41_Init(uint8_t dir) @@ -86,7 +100,7 @@ void Timer41_Init(uint8_t dir) /* Enable peripheral clock */ - PWC_Fcg2PeriphClockCmd(PWC_FCG2_PERIPH_TIM41 | PWC_FCG2_PERIPH_TIM42 | PWC_FCG2_PERIPH_TIM43, Enable); + PWC_Fcg2PeriphClockCmd(PWC_FCG2_PERIPH_TIM41, Enable); /* Timer4 CNT : Initialize CNT configuration structure */ stcCntInit.enBufferCmd = Disable; @@ -178,10 +192,14 @@ void Timer41_Init(uint8_t dir) 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; + //¼ÆÊýʱÖÓ·ÖÆµ + stcPwmInit.enClkDiv = PwmPlckDiv1; /*Â˲¨¼ÆÊýÆ÷ºÍËÀÇø¼ÆÊýÆ÷µÄ¼ÆÊýʱÖÓ·ÖÆµ*/ + //PWMÊä³ö¼«ÐÔ¿ØÖÆ + stcPwmInit.enOutputState = E_PWM_OS; /*Êä³öPWMHÐźŲ»¸Ä±äµçƽ£¬Êä³öPWMLÐźŷ´×ª*/ + //PWMÊä³öģʽ + stcPwmInit.enMode = PwmThroughMode; /*ֱͨģʽ*/ TIMER4_PWM_Init(TIMER4_UNIT, TIMER4_PWM_CH, &stcPwmInit); /* Initialize timer4 pwm */ /* Clear && Start CNT */ @@ -360,14 +378,14 @@ void dcmotor_init(void) PORT_Init(SHUTDOWN1_GPIO_Port, SHUTDOWN1_Pin, &stcPortInit); PORT_SetBits(SHUTDOWN1_GPIO_Port, SHUTDOWN1_Pin); - PORT_Init(PortA, Pin03, &stcPortInit); - PORT_SetBits(PortA, Pin03); - /* SDÀ­µÍ£¬¹Ø±ÕÊä³ö */ - - dcmotor_stop(); /* Í£Ö¹µç»ú */ - dcmotor_dir(0); /* ÉèÖÃÕýת */ - dcmotor_speed(0); /* ËÙ¶ÈÉèÖÃΪ0 */ - dcmotor_start(); /* ¿ªÆôµç»ú */ +// PORT_Init(PortA, Pin03, &stcPortInit); +// PORT_SetBits(PortA, Pin03); +// /* SDÀ­µÍ£¬¹Ø±ÕÊä³ö */ +// +// dcmotor_stop(); /* Í£Ö¹µç»ú */ +// dcmotor_dir(0); /* ÉèÖÃÕýת */ +// dcmotor_speed(0); /* ËÙ¶ÈÉèÖÃΪ0 */ +// dcmotor_start(); /* ¿ªÆôµç»ú */ } /** @@ -493,6 +511,8 @@ void dcmotor_speed(uint16_t para) } } +#endif + /** * @brief µç»ú¿ØÖÆ * @param para: pwm±È½ÏÖµ ,ÕýÊýµç»úΪÕýת£¬¸ºÊýΪ·´×ª diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.h b/Project/HC32F460/source/Module/dc_motor/dc_motor.h index d7e319c..e310e0f 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.h +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.h @@ -2,19 +2,29 @@ #ifndef __DCMOTOR_H #define __DCMOTOR_H -#include "hc32_ddl.h" +#define HC32F170 (0u) //HC32F170JATA +#define HC32L170 (1u) //HC32L170JATA +#define HC32F460JETA (2u) //HC32F460JETA + +#define MCU HC32F460JETA + +#if(MCU == HC32F460JETA) +#include "hc32_ddl.h" + #define TIMER4 0 #define TIMER6 1 -#define TIMER TIMER4 +#define TIMER TIMER4 //HC32F460µ¥Æ¬»úPWMÊä³ö¿ØÖƶ¨Ê±Æ÷Ñ¡Ôñ +#endif + // µç»ú¿ØÖƲÎÊý #define PWM_PERIOD TIM_PERIOD // PWMÖÜÆÚÖµ (ARR) #define MAX_SPEED 480 // ×î´óËÙ¶È(PWMÕ¼¿Õ±È) #define ACCEL_STEP 10 // ¼ÓËÙ²½½øÖµ #define DECEL_STEP 10 // ¼õËÙ²½½øÖµ -#define ACCEL_INTERVAL 10 // ¼Ó¼õËÙ¼ä¸ô(ms) +#define ACCEL_INTERVAL 2 // ¼Ó¼õËÙ¼ä¸ô(ms) @@ -46,17 +56,18 @@ typedef enum { /* Í£Ö¹Òý½Å²Ù×÷ºê¶¨Òå * ´ËÒý½Å¿ØÖÆHÇÅÊÇ·ñÉúЧÒÔ´ïµ½¿ªÆôºÍ¹Ø±Õµç»úµÄЧ¹û */ -#define SHUTDOWN1_Pin Pin12 +#define SHUTDOWN1_Pin Pin07 #define SHUTDOWN1_GPIO_Port PortB //#define SHUTDOWN2_Pin GPIO_PIN_2 //#define SHUTDOWN2_GPIO_Port GPIOF #define SHUTDOWN_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOF_CLK_ENABLE(); }while(0) /* PF¿ÚʱÖÓʹÄÜ */ +#if(MCU == HC32F460JETA) /* µç»úÍ£Ö¹Òý½Å¶¨Òå ÕâÀïĬÈÏÊǽӿÚ1 */ #define ENABLE_MOTOR PORT_SetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin) #define DISABLE_MOTOR PORT_ResetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin) - +#endif /******************************************************************************************/ void dcmotor_init(void); /* Ö±Á÷ÓÐË¢µç»ú³õʼ»¯ */ diff --git a/Project/HC32F460/source/User/Src/bsp.c b/Project/HC32F460/source/User/Src/bsp.c index 3673cbb..9e17a81 100644 --- a/Project/HC32F460/source/User/Src/bsp.c +++ b/Project/HC32F460/source/User/Src/bsp.c @@ -8,6 +8,7 @@ #include "CS1237_RIGHTUP.h" #include "CS1237_RIGHTLOW.h" +#include "dc_motor.h" #define SPI_MASTER_MODE #define SPI3_MASTER_MODE @@ -1357,7 +1358,7 @@ void BSP_Init(void) //SdioInit(); //Spi_Config(); // Spi3_Config(); - + dcmotor_init(); //Adc1_Config(); //Dma_Config(); //FeedDog(); From 3ccc65158c19a439abc6901a2f09e3a37a1f631d Mon Sep 17 00:00:00 2001 From: cui635 Date: Thu, 16 Oct 2025 15:32:55 +0800 Subject: [PATCH 3/5] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E7=94=B5?= =?UTF-8?q?=E5=8E=8B=E7=94=B5=E6=B5=81=E6=B8=A9=E5=BA=A6=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/HC32F460/MDK/HC32F460.uvoptx | 40 +-- .../source/Module/dc_motor/dc_motor.c | 252 +++++++++++++++++- .../source/Module/dc_motor/dc_motor.h | 64 +++++ Project/HC32F460/source/User/Inc/bsp.h | 4 +- Project/HC32F460/source/User/Src/bsp.c | 4 +- Project/HC32F460/source/User/Src/main.c | 2 + 6 files changed, 327 insertions(+), 39 deletions(-) diff --git a/Project/HC32F460/MDK/HC32F460.uvoptx b/Project/HC32F460/MDK/HC32F460.uvoptx index cc6c46f..2ee0cb8 100644 --- a/Project/HC32F460/MDK/HC32F460.uvoptx +++ b/Project/HC32F460/MDK/HC32F460.uvoptx @@ -153,40 +153,7 @@ - - - 0 - 0 - 71 - 1 -
17972
- 0 - 0 - 0 - 0 - 0 - 1 - ..\source\Module\dc_motor\dc_motor.c - - \\BombSensor\../source/Module/dc_motor/dc_motor.c\71 -
- - 1 - 0 - 747 - 1 -
6022
- 0 - 0 - 0 - 0 - 0 - 1 - ..\source\Module\dc_motor\dc_motor.c - - \\BombSensor\../source/Module/dc_motor/dc_motor.c\747 -
-
+ 0 @@ -288,6 +255,11 @@ 1 g_motorSpeed,0x0A + + 20 + 1 + g_adc_val,0x0A + 0 diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.c b/Project/HC32F460/source/Module/dc_motor/dc_motor.c index 3683051..1b5fee1 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.c +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.c @@ -1,7 +1,11 @@ #include "dc_motor.h" #include "hc32_ddl.h" #include "Debug.h" +#include "math.h" +#define ADC_CH_NUM 3 /* ÐèҪת»»µÄͨµÀÊýÄ¿ */ +#define ADC_COLL 100 /* µ¥²É¼¯´ÎÊý */ +#define ADC_SUM ADC_CH_NUM * ADC_COLL /* ×ܲɼ¯´ÎÊý */ // È«¾Ö±äÁ¿ @@ -67,6 +71,252 @@ void DCMOTORDBGOnOff(uint8_t OnOff) #endif +extern uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL]; +uint16_t init_adc_val; +uint16_t AdcInitCnt = 0; + + +#define Adc 0.80566 //3.3/4096=0.00080566 //ADC·Ö±æÂÊ +#define ADC_CH_NUM 3 +uint16_t g_adc_val[ADC_CH_NUM]; + + +/************************************* µÚ¶þ²¿·Ö µçѹµçÁ÷ζȲɼ¯ **********************************************/ + +/* + Rt = Rp *exp(B*(1/T1-1/T2)) + + Rt ÊÇÈÈÃôµç×èÔÚT1ζÈϵÄ×èÖµ£» + RpÊÇÈÈÃôµç×èÔÚT2³£ÎÂÏÂµÄ±ê³Æ×èÖµ£» + expÊÇeµÄn´Î·½£¬eÊÇ×ÔÈ»³£Êý£¬¾ÍÊÇ×ÔÈ»¶ÔÊýµÄµ×Êý£¬½üËÆµÈÓÚ 2.7182818£» + BÖµÊÇÈÈÃôµç×èµÄÖØÒª²ÎÊý£¬½Ì³ÌÖÐÓõ½µÄÈÈÃôµç×èBֵΪ3380£» + ÕâÀïT1ºÍT2Ö¸µÄÊÇ¿ª¶ûÎÄζȣ¬T2Êdz£ÎÂ25¡æ£¬¼´(273.15+25)K + T1¾ÍÊÇËùÇóµÄÎÂ¶È +*/ + +const float Rp = 10000.0f; /* 10K */ +const float T2 = (273.15f + 25.0f); /* T2 */ +const float Bx = 3380.0f; /* B */ +const float Ka = 273.15f; + +/** + * @brief ¼ÆËãζÈÖµ + * @param para: ζȲɼ¯¶ÔÓ¦ADCͨµÀµÄÖµ£¨ÒÑÂ˲¨£© + * @note ¼ÆËãζȷÖΪÁ½²½£º + 1.¸ù¾ÝADC²É¼¯µ½µÄÖµ¼ÆË㵱ǰ¶ÔÓ¦µÄRt + 2.¸ù¾ÝRt¼ÆËã¶ÔÓ¦µÄζÈÖµ + * @retval ζÈÖµ + */ +float get_temp(uint16_t para) +{ + float Rt; + float temp; + + /* + µÚÒ»²½£º + Rt = 3.3 * 4700 / VTEMP - 4700 ,ÆäÖÐVTEMP¾ÍÊÇζȼì²âͨµÀ²É¼¯»ØÀ´µÄµçѹֵ,VTEMP = ADCÖµ* 3.3/4096 + ÓÉ´ËÎÒÃÇ¿ÉÒÔ¼ÆËã³öµ±Ç°RtµÄÖµ£ºRt = 3.3f * 4700.0f / (para * 3.3f / 4096.0f ) - 4700.0f; + */ + + Rt = 3.3f * 4700.0f / (para * 3.3f / 4096.0f ) - 4700.0f; /* ¸ù¾Ýµ±Ç°ADCÖµ¼ÆËã³öRtµÄÖµ */ + + /* + µÚ¶þ²½£º + ¸ù¾Ýµ±Ç°RtµÄÖµÀ´¼ÆËã¶ÔӦζÈÖµ£ºRt = Rp *exp(B*(1/T1-1/T2)) + */ + + temp = Rt / Rp; /* ½â³öexp(B*(1/T1-1/T2)) £¬¼´temp = exp(B*(1/T1-1/T2)) */ + temp = log(temp); /* ½â³öB*(1/T1-1/T2) £¬¼´temp = B*(1/T1-1/T2) */ + temp /= Bx; /* ½â³ö1/T1-1/T2 £¬¼´temp = 1/T1-1/T2 */ + temp += (1.0f / T2); /* ½â³ö1/T1 £¬¼´temp = 1/T1 */ + temp = 1.0f / (temp); /* ½â³öT1 £¬¼´temp = T1 */ + temp -= Ka; /* ¼ÆËãT1¶ÔÓ¦µÄÉãÊÏ¶È */ + return temp; /* ·µ»ØÎ¶ÈÖµ */ +} + +/** + * @brief ¼ÆËãADCµÄƽ¾ùÖµ£¨Â˲¨£© + * @param * p £º´æ·ÅADCÖµµÄÖ¸ÕëµØÖ· + * @note ´Ëº¯Êý¶Ôµçѹ¡¢Î¶ȡ¢µçÁ÷¶ÔÓ¦µÄADCÖµ½øÐÐÂ˲¨£¬ + * p[0]-p[2]¶ÔÓ¦µÄ·Ö±ðÊǵçѹ¡¢Î¶Ⱥ͵çÁ÷ + * @retval ÎÞ + */ +void calc_adc_val(uint16_t * p) +{ + uint32_t temp[3] = {0,0,0}; + int i; + for(i=0;i= 1; i--) /* ðÅÝÅÅÐò*/ + { + for (j = 0; j < (i - 1); j++) + { + if (speed_arr[j] > speed_arr[j + 1]) /* ÊýÖµ±È½Ï */ + { + temp = speed_arr[j]; /* ÊýÖµ»»Î» */ + speed_arr[j] = speed_arr[j + 1]; + speed_arr[j + 1] = temp; + } + } + } + + temp = 0.0; + + for (i = 2; i < 8; i++) /* È¥³ýÁ½±ß¸ßµÍÊý¾Ý */ + { + temp += speed_arr[i]; /* ½«ÖмäÊýÖµÀÛ¼Ó */ + } + + temp = (float)(temp / 6); /*ÇóËÙ¶ÈÆ½¾ùÖµ*/ + + /* Ò»½×µÍͨÂ˲¨ + * ¹«Ê½Îª£ºY(n)= qX(n) + (1-q)Y(n-1) + * ÆäÖÐX(n)Ϊ±¾´Î²ÉÑùÖµ£»Y(n-1)ΪÉÏ´ÎÂ˲¨Êä³öÖµ£»Y(n)Ϊ±¾´ÎÂ˲¨Êä³öÖµ£¬qΪÂ˲¨ÏµÊý + * qֵԽСÔòÉÏÒ»´ÎÊä³ö¶Ô±¾´ÎÊä³öÓ°ÏìÔ½´ó£¬ÕûÌåÇúÏßԽƽÎÈ£¬µ«ÊǶÔÓÚËٶȱ仯µÄÏìÓ¦Ò²»áÔ½Âý + */ + g_motor_data.speed = (float)( ((float)0.48 * temp) + (g_motor_data.speed * (float)0.52) ); + k = 0; + } + sp_count = 0; + } + sp_count ++; +} + + + +/***************************************************************************************** +* º¯ÊýÃû³Æ: Adc1mSRoutine +* ¹¦ÄÜÃèÊö: Adc 1ºÁÃë·þÎñº¯Êý +* ²Î Êý: ÎÞ +* ·µ »Ø Öµ: ÎÞ +*****************************************************************************************/ +bool AdcInitStatus = false; //ADC³õʼ»¯×´Ì¬±ê־λ +bool AdcInitSta = false; //ADCµçÁ÷µçѹ²É¼¯³õʼ»¯±ê־λ +uint16_t AdcDly = 0; //ADC²ÉÑù¶¨Ê±¼ÆÊý +void Adc1mSRoutine(void) +{ + if(AdcInitStatus == false) + AdcInitStatus = true; + if(AdcInitSta == true) + { + ADC_Start(); + + } + + if(AdcDly > 0) + AdcDly--; +} + + +/***************************************************************************************** +* º¯ÊýÃû³Æ: AdcLoopHander +* ¹¦ÄÜÃèÊö: AdcÖ÷Ñ­»·º¯Êý +* ²Î Êý: ÎÞ +* ·µ »Ø Öµ: ÎÞ +*****************************************************************************************/ +void AdcLoopHander(void) +{ + float temp_c = 0.0; + //¿ª»úµÈ´ýµçÁ÷Êý¾ÝÎȶ¨£¬²É¼¯Îȶ¨µçÁ÷ֵΪ³õʼֵ + if((AdcInitStatus == true) && (AdcInitSta == false)) + { + AdcInitCnt++; + + ADC_Start(); + while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete); + init_adc_val += m_au16Adc1SaValue[2u]; /* ÏÖÔÚµÄÖµºÍÉÏÒ»´Î´æ´¢µÄÖµÏà¼Ó */ + init_adc_val /= 2; /* ȡƽ¾ùÖµ */ + if(AdcInitCnt < 1000) + { + AdcInitStatus = false; + return; + } + else + { + DCMOTOR_DBG_LOG("init_adc_val %d.\n", init_adc_val); + AdcInitSta = true; + } + } + //¼ÆËãADC²ÉÑùÖµ²¢Â˲¨ + if(AdcDly == 0) + { + float BatVoltage = 0; + AdcDly = 1000; + if(AdcInitSta == true) + { + while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete); + DMA_Cmd(M4_DMA1, Disable); + calc_adc_val(g_adc_val); /* ¼ÆËãADCµÄƽ¾ùÖµ */ + + DCMOTOR_DBG_LOG("ADC1_IN1 value %d.\t Temp:%.1fC \r\n", g_adc_val[0u], get_temp((float)g_adc_val[0]*Adc)); + DCMOTOR_DBG_LOG("ADC2_IN2 value %d.\t Valtage:%.1fV \r\n", g_adc_val[1u], (float)g_adc_val[1]*ADC2VBUS); + temp_c = (g_adc_val[2]-init_adc_val)*ADC2CURT; + DCMOTOR_DBG_LOG("ADC3_IN3 value %d.\t Current:%.1fmA \r\n", g_adc_val[2u], temp_c); + + g_motor_data.current = (float)((g_motor_data.current * (float)0.60) + ((float)0.40 * temp_c)); /* Ò»½×µÍͨÂ˲¨ */ + if (g_motor_data.current <= 20) /* ¹ýÂ˵ô΢Èõ¸¡¶¯µçÁ÷ */ + { + g_motor_data.current = 0.0; + } + DCMOTOR_DBG_LOG("\t\t\t g_motor_data.current:%.1fmA \r\n", g_adc_val[2u], g_motor_data.current); + DMA_Cmd(M4_DMA1, Enable); + } + } +} + + + + void Timer41_Init(uint8_t dir) { uint8_t E_OC_Port = 0; @@ -373,7 +623,7 @@ void dcmotor_init(void) stcPortInit.enPinMode = Pin_Mode_Out; stcPortInit.enPinOType = Pin_OType_Cmos; stcPortInit.enPinDrv = Pin_Drv_H; - stcPortInit.enPullUp = Disable; + stcPortInit.enPullUp = Enable; PORT_Init(SHUTDOWN1_GPIO_Port, SHUTDOWN1_Pin, &stcPortInit); PORT_SetBits(SHUTDOWN1_GPIO_Port, SHUTDOWN1_Pin); diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.h b/Project/HC32F460/source/Module/dc_motor/dc_motor.h index e310e0f..356fc81 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.h +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.h @@ -53,6 +53,29 @@ typedef enum { +/************************************* µÚÒ»²¿·Ö µçѹµçÁ÷ζȲɼ¯ ******************************/ + +/* µçÁ÷¼ÆË㹫ʽ£º + * I=£¨×îÖÕÊä³öµçѹ-³õʼ²Î¿¼µçѹ£©/£¨6*0.02£©A + * ADCֵת»»Îªµçѹֵ£ºµçѹ=ADCÖµ*3.3/4096£¬ÕâÀïµçѹµ¥Î»ÎªV£¬ÎÒÃÇ»»Ëã³ÉmV,4096/1000=4.096£¬ºóÃæ¾ÍÖ±½ÓËã³öΪmA + * ÕûºÏ¹«Ê½¿ÉÒԵóöµçÁ÷ I= £¨µ±Ç°ADCÖµ-³õʼ²Î¿¼ADCÖµ£©* £¨3.3 / 4.096 / 0.12£© + */ +#define ADC2CURT (float)(3.3f / 4.096f / 0.12f) + +/* µçѹ¼ÆË㹫ʽ£º + * V_POWER = V_BUS * 25 + * ADCֵת»»Îªµçѹֵ£ºµçѹ=ADCÖµ*3.3/4096 + * ÕûºÏ¹«Ê½¿ÉÒԵóöµçѹV_POWER= ADCÖµ *£¨3.3f * 25 / 4096£© + */ +#define ADC2VBUS (float)(3.3f * 25 / 4096) + + + + +/*****************************************************************************************************/ + + + /* Í£Ö¹Òý½Å²Ù×÷ºê¶¨Òå * ´ËÒý½Å¿ØÖÆHÇÅÊÇ·ñÉúЧÒÔ´ïµ½¿ªÆôºÍ¹Ø±Õµç»úµÄЧ¹û */ @@ -70,6 +93,40 @@ typedef enum { #endif /******************************************************************************************/ +/* ±àÂëÆ÷²ÎÊý½á¹¹Ìå */ +typedef struct +{ + int encode_old; /* ÉÏÒ»´Î¼ÆÊýÖµ */ + int encode_now; /* µ±Ç°¼ÆÊýÖµ */ + float speed; /* ±àÂëÆ÷ËÙ¶È */ +} ENCODE_TypeDef; + +extern ENCODE_TypeDef g_encode; /* ±àÂëÆ÷²ÎÊý±äÁ¿ */ + + +/************************************* µÚÈý²¿·Ö ±àÂëÆ÷²âËÙ ****************************************************/ + +#define ROTO_RATIO 44 /* ÏßÊý*±¶ÆµÏµÊý£¬¼´11*4=44 */ +#define REDUCTION_RATIO 30 /* ¼õËÙ±È30:1 */ + +/* µç»ú²ÎÊý½á¹¹Ìå */ +typedef struct +{ + uint8_t state; /*µç»ú״̬*/ + float current; /*µç»úµçÁ÷*/ + float volatage; /*µç»úµçѹ*/ + float power; /*µç»ú¹¦ÂÊ*/ + float speed; /*µç»úʵ¼ÊËÙ¶È*/ + float location; /*µç»úλÖÃ*/ + int32_t motor_pwm; /*ÉèÖñȽÏÖµ´óС */ +} Motor_TypeDef; + +extern Motor_TypeDef g_motor_data; /*µç»ú²ÎÊý±äÁ¿*/ + +/*********************************************************************************************************************/ + + + void dcmotor_init(void); /* Ö±Á÷ÓÐË¢µç»ú³õʼ»¯ */ void dcmotor_start(void); /* ¿ªÆôµç»ú */ void dcmotor_stop(void); /* ¹Ø±Õµç»ú */ @@ -78,6 +135,13 @@ void dcmotor_speed(uint16_t para); /* void motor_pwm_set(float para); /* µç»ú¿ØÖÆ */ +float get_temp(uint16_t para); +void AdcLoopHander(void); +void Adc1mSRoutine(void); +void Adc_Init(void); +void calc_adc_val(uint16_t * p); + +void Encoder (void); MotorDirection Motor_GetDirection(void);/* »ñÈ¡µç»úת¶¯·½Ïò */ diff --git a/Project/HC32F460/source/User/Inc/bsp.h b/Project/HC32F460/source/User/Inc/bsp.h index 30818ae..3dcf34c 100644 --- a/Project/HC32F460/source/User/Inc/bsp.h +++ b/Project/HC32F460/source/User/Inc/bsp.h @@ -11,12 +11,12 @@ /*Ä£¿éÆôÓÃÓë¹Ø±Õ*/ #define USE_DEBUG 1 //DEBUG¿ª¹Ø£¬0¡¢¹Ø±Õ£¬1¡¢ÆôÓà -#define USE_AD 0 //AD»ñȡѡÔñ£¬0¡¢¹Ø±Õ£¬1¡¢ÆôÓà +#define USE_AD 1 //AD»ñȡѡÔñ£¬0¡¢¹Ø±Õ£¬1¡¢ÆôÓà #define USE_WDT 0 //¿´ÃŹ·Ñ¡Ôñ£¬0¡¢¹Ø±Õ£¬1ÆôÓà #define USE_EXFALSE 0 //ÍⲿFALSE´æ´¢Ñ¡Ôñ£¬0¡¢¹Ø±Õ£¬1¡¢ÆôÓà #define USE_RTC 0 //RTCʱÖÓ¿ª¹Ø£¬0¡¢¹Ø±Õ£¬1¡¢¿ªÆô #define USE_LPTIM0 0 //LPTIM0¿ª¹Ø£¬0¡¢¹Ø±Õ£¬1¡¢¿ªÆô -#define USE_DMA 0 //DMA¿ª¹Ø£¬0¡¢¹Ø±Õ£¬1¡¢¿ªÆô +#define USE_DMA 1 //DMA¿ª¹Ø£¬0¡¢¹Ø±Õ£¬1¡¢¿ªÆô #define USE_RS485 0 //RS485¿ª¹Ø£¬0¡¢¹Ø±Õ£¬1¡¢ÆôÓà #define USE_I2C1 0 //I2C1¿ª¹Ø£¬0¡¢¹Ø±Õ£¬1¡¢ÆôÓà #define USE_SPI1 0 //SPI1¿ª¹Ø£¬0¡¢¹Ø±Õ£¬1¡¢ÆôÓà diff --git a/Project/HC32F460/source/User/Src/bsp.c b/Project/HC32F460/source/User/Src/bsp.c index 9e17a81..ba80f24 100644 --- a/Project/HC32F460/source/User/Src/bsp.c +++ b/Project/HC32F460/source/User/Src/bsp.c @@ -1359,8 +1359,8 @@ void BSP_Init(void) //Spi_Config(); // Spi3_Config(); dcmotor_init(); - //Adc1_Config(); - //Dma_Config(); + Adc1_Config(); + Dma_Config(); //FeedDog(); SysTick_Init(1000u); SysTick_Delay(1000); diff --git a/Project/HC32F460/source/User/Src/main.c b/Project/HC32F460/source/User/Src/main.c index 79183d7..b88fe35 100644 --- a/Project/HC32F460/source/User/Src/main.c +++ b/Project/HC32F460/source/User/Src/main.c @@ -596,6 +596,7 @@ int main(void) RIGHTLOW_CS1237DataLoopCollect(); ReadLoopHandler(); DcmotorLoopHandler(); + AdcLoopHander(); AppLoopHandler(); } } @@ -616,6 +617,7 @@ void SysTick_IrqHandler(void) RIGHTUP_CS12371mSRoutine(); RIGHTLOW_CS12371mSRoutine(); Dcmotor1msRoutine(); + Adc1mSRoutine(); } /***************************************************************************************** From 4050527cdf6e7e8b2a10feb1533c6bd2e4ab65ba Mon Sep 17 00:00:00 2001 From: cui635 Date: Thu, 16 Oct 2025 17:22:59 +0800 Subject: [PATCH 4/5] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9ADC=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E5=8F=8ADMA=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E5=8F=82=E6=95=B0=EF=BC=8C=E8=B0=83=E6=95=B4=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=97=B6=E7=AD=89=E5=BE=85=E7=94=B5=E6=B5=81=E7=A8=B3=E5=AE=9A?= =?UTF-8?q?=E9=87=87=E5=88=9D=E5=A7=8B=E7=94=B5=E6=B5=81=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/HC32F460/MDK/HC32F460.uvoptx | 35 ++++++++++------- .../source/Module/dc_motor/dc_motor.c | 39 +++++++++++-------- .../source/Module/dc_motor/dc_motor.h | 4 ++ Project/HC32F460/source/User/Src/bsp.c | 18 ++++----- Project/HC32F460/source/User/Src/main.c | 1 + 5 files changed, 58 insertions(+), 39 deletions(-) diff --git a/Project/HC32F460/MDK/HC32F460.uvoptx b/Project/HC32F460/MDK/HC32F460.uvoptx index 2ee0cb8..29df438 100644 --- a/Project/HC32F460/MDK/HC32F460.uvoptx +++ b/Project/HC32F460/MDK/HC32F460.uvoptx @@ -153,7 +153,24 @@ - + + + 0 + 0 + 291 + 1 +
4146
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\source\Module\dc_motor\dc_motor.c + + \\BombSensor\../source/Module/dc_motor/dc_motor.c\291 +
+
0 @@ -248,17 +265,7 @@ 18 1 - newSpeed,0x0A - - - 19 - 1 - g_motorSpeed,0x0A - - - 20 - 1 - g_adc_val,0x0A + g_motor_data @@ -266,8 +273,8 @@ 0 - 0 - 1 + 1 + 0 0 0 0 diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.c b/Project/HC32F460/source/Module/dc_motor/dc_motor.c index 1b5fee1..84d81f1 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.c +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.c @@ -3,9 +3,6 @@ #include "Debug.h" #include "math.h" -#define ADC_CH_NUM 3 /* ÐèҪת»»µÄͨµÀÊýÄ¿ */ -#define ADC_COLL 100 /* µ¥²É¼¯´ÎÊý */ -#define ADC_SUM ADC_CH_NUM * ADC_COLL /* ×ܲɼ¯´ÎÊý */ // È«¾Ö±äÁ¿ @@ -71,15 +68,15 @@ void DCMOTORDBGOnOff(uint8_t OnOff) #endif -extern uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL]; + uint16_t init_adc_val; uint16_t AdcInitCnt = 0; #define Adc 0.80566 //3.3/4096=0.00080566 //ADC·Ö±æÂÊ -#define ADC_CH_NUM 3 -uint16_t g_adc_val[ADC_CH_NUM]; +uint16_t g_adc_val[ADC_CH_NUM]; +extern uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL]; /************************************* µÚ¶þ²¿·Ö µçѹµçÁ÷ζȲɼ¯ **********************************************/ @@ -241,7 +238,7 @@ void speed_computer(int32_t encode_now, uint8_t ms) * ·µ »Ø Öµ: ÎÞ *****************************************************************************************/ bool AdcInitStatus = false; //ADC³õʼ»¯×´Ì¬±ê־λ -bool AdcInitSta = false; //ADCµçÁ÷µçѹ²É¼¯³õʼ»¯±ê־λ +volatile bool AdcInitSta = false; //ADCµçÁ÷µçѹ²É¼¯³õʼ»¯±ê־λ uint16_t AdcDly = 0; //ADC²ÉÑù¶¨Ê±¼ÆÊý void Adc1mSRoutine(void) { @@ -266,16 +263,15 @@ void Adc1mSRoutine(void) *****************************************************************************************/ void AdcLoopHander(void) { + uint32_t temp = 0; + int i; float temp_c = 0.0; - //¿ª»úµÈ´ýµçÁ÷Êý¾ÝÎȶ¨£¬²É¼¯Îȶ¨µçÁ÷ֵΪ³õʼֵ + //¿ª»úµÈ´ýµçÁ÷Êý¾ÝÎȶ¨1Ã룬²É¼¯Îȶ¨µçÁ÷ֵΪ³õʼֵ if((AdcInitStatus == true) && (AdcInitSta == false)) { - AdcInitCnt++; - ADC_Start(); - while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete); - init_adc_val += m_au16Adc1SaValue[2u]; /* ÏÖÔÚµÄÖµºÍÉÏÒ»´Î´æ´¢µÄÖµÏà¼Ó */ - init_adc_val /= 2; /* ȡƽ¾ùÖµ */ + + AdcInitCnt++; if(AdcInitCnt < 1000) { AdcInitStatus = false; @@ -283,6 +279,15 @@ void AdcLoopHander(void) } else { + while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete); + for(i=0;i 0) + { + init_adc_val /= 2; /* ȡƽ¾ùÖµ */ + } + } DCMOTOR_DBG_LOG("init_adc_val %d.\n", init_adc_val); AdcInitSta = true; } @@ -292,7 +297,7 @@ void AdcLoopHander(void) { float BatVoltage = 0; AdcDly = 1000; - if(AdcInitSta == true) + if(AdcInitSta != false) { while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete); DMA_Cmd(M4_DMA1, Disable); @@ -303,12 +308,14 @@ void AdcLoopHander(void) temp_c = (g_adc_val[2]-init_adc_val)*ADC2CURT; DCMOTOR_DBG_LOG("ADC3_IN3 value %d.\t Current:%.1fmA \r\n", g_adc_val[2u], temp_c); +// g_motor_data.current = temp_c; + g_motor_data.current = (float)((g_motor_data.current * (float)0.60) + ((float)0.40 * temp_c)); /* Ò»½×µÍͨÂ˲¨ */ - if (g_motor_data.current <= 20) /* ¹ýÂ˵ô΢Èõ¸¡¶¯µçÁ÷ */ + if (abs(g_motor_data.current) <= 20) /* ¹ýÂ˵ô΢Èõ¸¡¶¯µçÁ÷ */ { g_motor_data.current = 0.0; } - DCMOTOR_DBG_LOG("\t\t\t g_motor_data.current:%.1fmA \r\n", g_adc_val[2u], g_motor_data.current); + DCMOTOR_DBG_LOG("\t\t\t g_motor_data.current:%.1fmA \r\n", g_motor_data.current); DMA_Cmd(M4_DMA1, Enable); } } diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.h b/Project/HC32F460/source/Module/dc_motor/dc_motor.h index 356fc81..5e749a8 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.h +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.h @@ -2,6 +2,10 @@ #ifndef __DCMOTOR_H #define __DCMOTOR_H +#define ADC_CH_NUM 3 /* ÐèҪת»»µÄͨµÀÊýÄ¿ */ +#define ADC_COLL 100 /* µ¥²É¼¯´ÎÊý */ +#define ADC_SUM ADC_CH_NUM * ADC_COLL /* ×ܲɼ¯´ÎÊý */ + #define HC32F170 (0u) //HC32F170JATA diff --git a/Project/HC32F460/source/User/Src/bsp.c b/Project/HC32F460/source/User/Src/bsp.c index ba80f24..69237cc 100644 --- a/Project/HC32F460/source/User/Src/bsp.c +++ b/Project/HC32F460/source/User/Src/bsp.c @@ -17,7 +17,7 @@ static void SystemClockConfig(void); -uint16_t m_au16Adc1SaValue[4]; +uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL]; void FlashWrite(uint32_t *wData, uint32_t wLen) { @@ -1163,15 +1163,15 @@ static void AdcSetChannelPinMode(uint32_t u32Channel) static void AdcChannelConfig(void) { stc_adc_ch_cfg_t stcChCfg; - uint8_t au8Adc1SaSampTime[4] = {255, 255, 255, 255}; + uint8_t au8Adc1SaSampTime[3] = {2255, 255, 255}; MEM_ZERO_STRUCT(stcChCfg); - stcChCfg.u32Channel = ADC1_CH0 | ADC1_CH1 | ADC1_CH2 | ADC1_CH3; + stcChCfg.u32Channel = ADC1_CH1 | ADC1_CH2 | ADC1_CH3; stcChCfg.u8Sequence = ADC_SEQ_A; stcChCfg.pu8SampTime = au8Adc1SaSampTime; - AdcSetChannelPinMode(ADC1_CH0); +// AdcSetChannelPinMode(ADC1_CH0); AdcSetChannelPinMode(ADC1_CH1); AdcSetChannelPinMode(ADC1_CH2); AdcSetChannelPinMode(ADC1_CH3); @@ -1210,12 +1210,12 @@ static void AdcDmaConfig(void) MEM_ZERO_STRUCT(stcDmaCfg); - stcDmaCfg.u16BlockSize = 4; + stcDmaCfg.u16BlockSize = 3; stcDmaCfg.u16TransferCnt = 0u; - stcDmaCfg.u32SrcAddr = (uint32_t)(&M4_ADC1->DR0); + stcDmaCfg.u32SrcAddr = (uint32_t)(&M4_ADC1->DR1); stcDmaCfg.u32DesAddr = (uint32_t)(m_au16Adc1SaValue); - stcDmaCfg.u16DesRptSize = 4; - stcDmaCfg.u16SrcRptSize = 4; + stcDmaCfg.u16DesRptSize = ADC_SUM; + stcDmaCfg.u16SrcRptSize = 3; stcDmaCfg.u32DmaLlp = 0u; stcDmaCfg.stcSrcNseqCfg.u16Cnt = 0u; stcDmaCfg.stcSrcNseqCfg.u32Offset = 0u; @@ -1228,7 +1228,7 @@ static void AdcDmaConfig(void) stcDmaCfg.stcDmaChCfg.enSrcNseqEn = Disable; stcDmaCfg.stcDmaChCfg.enDesNseqEn = Disable; stcDmaCfg.stcDmaChCfg.enTrnWidth = Dma16Bit; - stcDmaCfg.stcDmaChCfg.enLlpEn = Disable; + stcDmaCfg.stcDmaChCfg.enLlpEn = Enable; /* Enable DMA interrupt. */ stcDmaCfg.stcDmaChCfg.enIntEn = Enable; diff --git a/Project/HC32F460/source/User/Src/main.c b/Project/HC32F460/source/User/Src/main.c index b88fe35..256a9db 100644 --- a/Project/HC32F460/source/User/Src/main.c +++ b/Project/HC32F460/source/User/Src/main.c @@ -640,5 +640,6 @@ void RtcPeriod_IrqCallback(void) void ADC_DMA_CallBack(void) { + } From 00c12ac88903447dbcea64a414ec052572512770 Mon Sep 17 00:00:00 2001 From: cui635 Date: Thu, 16 Oct 2025 17:36:57 +0800 Subject: [PATCH 5/5] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E7=94=B5=E6=9C=BA=E8=BF=90=E8=A1=8C=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=9A=84=E5=A4=96=E9=83=A8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=87=BD=E6=95=B0=EF=BC=88get=5Fcurrent=E3=80=81get=5Fvolatage?= =?UTF-8?q?=E3=80=81get=5FTemperature=E3=80=81get=5Fspeed=E3=80=81get=5Flo?= =?UTF-8?q?cation=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/HC32F460/MDK/HC32F460.uvoptx | 16 ++++++ .../source/Module/dc_motor/dc_motor.c | 56 ++++++++++++++++++- .../source/Module/dc_motor/dc_motor.h | 8 ++- 3 files changed, 77 insertions(+), 3 deletions(-) diff --git a/Project/HC32F460/MDK/HC32F460.uvoptx b/Project/HC32F460/MDK/HC32F460.uvoptx index 29df438..60ea73e 100644 --- a/Project/HC32F460/MDK/HC32F460.uvoptx +++ b/Project/HC32F460/MDK/HC32F460.uvoptx @@ -170,6 +170,22 @@ \\BombSensor\../source/Module/dc_motor/dc_motor.c\291 + + 1 + 0 + 343 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + ..\source\Module\dc_motor\dc_motor.c + + +
diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.c b/Project/HC32F460/source/Module/dc_motor/dc_motor.c index 84d81f1..f2e52ca 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.c +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.c @@ -229,6 +229,60 @@ void speed_computer(int32_t encode_now, uint8_t ms) sp_count ++; } +/***************************************************************************************** +* º¯ÊýÃû³Æ: get_current +* ¹¦ÄÜÃèÊö: »ñÈ¡¹¤×÷µçÁ÷º¯Êý +* ²Î Êý: ÎÞ +* ·µ »Ø Öµ: µçÁ÷Öµ +*****************************************************************************************/ +float get_current(void) +{ + return g_motor_data.current; /* ·µ»Ø¹¤×÷µçÁ÷Öµ */ +} + +/***************************************************************************************** +* º¯ÊýÃû³Æ: get_volatage +* ¹¦ÄÜÃèÊö: »ñÈ¡¹¤×÷µçѹº¯Êý +* ²Î Êý: ÎÞ +* ·µ »Ø Öµ: µçѹֵ +*****************************************************************************************/ +float get_volatage(void) +{ + return g_motor_data.volatage; /* ·µ»Ø¹¤×÷µçѹֵ */ +} + +/***************************************************************************************** +* º¯ÊýÃû³Æ: get_Temperature +* ¹¦ÄÜÃèÊö: »ñÈ¡¹¤×÷ζȺ¯Êý +* ²Î Êý: ÎÞ +* ·µ »Ø Öµ: ζÈÖµ +*****************************************************************************************/ +float get_Temperature(void) +{ + return g_motor_data.current; /* ·µ»Ø¹¤×÷ζÈÖµ */ +} + +/***************************************************************************************** +* º¯ÊýÃû³Æ: get_speed +* ¹¦ÄÜÃèÊö: »ñÈ¡µç»úʵ¼ÊתËÙÖµº¯Êý +* ²Î Êý: ÎÞ +* ·µ »Ø Öµ: µçѹֵ +*****************************************************************************************/ +float get_speed(void) +{ + return g_motor_data.speed; /* ·µ»Øµç»úʵ¼ÊתËÙÖµ */ +} + +/***************************************************************************************** +* º¯ÊýÃû³Æ: get_location +* ¹¦ÄÜÃèÊö: »ñÈ¡µç»úʵ¼ÊλÖú¯Êý +* ²Î Êý: ÎÞ +* ·µ »Ø Öµ: µçѹֵ +*****************************************************************************************/ +float get_location(void) +{ + return g_motor_data.speed; /* ·µ»Øµç»úʵ¼ÊλÖà */ +} /***************************************************************************************** @@ -247,9 +301,7 @@ void Adc1mSRoutine(void) if(AdcInitSta == true) { ADC_Start(); - } - if(AdcDly > 0) AdcDly--; } diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.h b/Project/HC32F460/source/Module/dc_motor/dc_motor.h index 5e749a8..c90de41 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.h +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.h @@ -147,13 +147,19 @@ void calc_adc_val(uint16_t * p); void Encoder (void); - +//Íⲿµ÷Óýӿں¯Êý MotorDirection Motor_GetDirection(void);/* »ñÈ¡µç»úת¶¯·½Ïò */ void Motor_Control(MotorCommand cmd); /* µç»ú¿ØÖÆ */ void Dcmotor1msRoutine(void); void DcmotorLoopHandler(void); +float get_current(void); /* »ñÈ¡¹¤×÷µçÁ÷ */ +float get_volatage(void); /* »ñÈ¡¹¤×÷µçѹ */ +float get_Temperature(void); /* »ñÈ¡¹¤×÷ÎÂ¶È */ +float get_speed(void); /* »ñÈ¡µç»úתËÙ */ +float get_location(void); /* »ñÈ¡µç»úλÖà */ + #endif