From a345b34dd094eeabfd7afda17a6c5c8d5dbde7e3 Mon Sep 17 00:00:00 2001 From: "REASEARCHER\\18383" <1633026436@qq.com> Date: Wed, 20 Aug 2025 15:57:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=BB=E5=9E=8B=E6=AD=A5=E8=BF=9B=EF=BC=8CDc?= =?UTF-8?q?Step=EF=BC=8C=E6=B0=B4=E5=B9=B3=E5=9E=82=E7=9B=B4=EF=BC=8C?= =?UTF-8?q?=E5=88=9D=E6=B5=8B=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Hyt2/APP/Device/Device_speed/speed_to_step.c | 10 +-- .../Device/device_Other/device_interrupt.c | 6 +- .../Device/device_Other/device_interrupt.h | 1 + Hyt2/BSP/Driver/tmc2160/tmc2160.c | 72 +++++++++++------ .../SYSTICK/gd32f4xx_it.c | 78 +++++++++++++------ 5 files changed, 116 insertions(+), 51 deletions(-) diff --git a/Hyt2/APP/Device/Device_speed/speed_to_step.c b/Hyt2/APP/Device/Device_speed/speed_to_step.c index 82c4e0c..17240cb 100644 --- a/Hyt2/APP/Device/Device_speed/speed_to_step.c +++ b/Hyt2/APP/Device/Device_speed/speed_to_step.c @@ -8,8 +8,8 @@ #ifdef PTZ_STEP_MOTOR #define DCSTEP_SPEED_LIMIT_HORI 3.3//19.8°以下不使用DCSTEP #define DCSTEP_SPEED_LIMIT_VERT 3.3//俯仰 -#define DCSTEP_HORI_EN 0 -#define DCSTEP_VERT_EN 0 +#define DCSTEP_HORI_EN 1 +#define DCSTEP_VERT_EN 1 static BSP_OS_SEM ptz_ftm_mutex;//共享资源锁 @@ -81,8 +81,8 @@ static void ptz_hori_step_speed_task() while(1) { -// if ( GetHoriDcoStatus() )//DC0输出高电平 -// { + if ( GetHoriDcoStatus() )//DC0输出高电平 + { if(g_ptz.hori_start_stop_set == PTZ_HORI_START) { g_ptz.hori_tmc2160.set_f = ptz_hori_step_v_to_f((g_ptz.hori_speed_set * PTZ_HORI_RATIO), g_ptz.hori_tmc2160.microstep_vlue);//g_ptz.hori_speed_set @@ -152,7 +152,7 @@ static void ptz_hori_step_speed_task() g_ptz.hori_speed_actual = 0; g_ptz.hori_tmc2160.f = 0; } -// } + } // else // { // if(GetDcstepPulseFlag()) diff --git a/Hyt2/APP/Device/device_Other/device_interrupt.c b/Hyt2/APP/Device/device_Other/device_interrupt.c index df14286..57017f9 100644 --- a/Hyt2/APP/Device/device_Other/device_interrupt.c +++ b/Hyt2/APP/Device/device_Other/device_interrupt.c @@ -11,12 +11,16 @@ #if DCSTEP_FUN_EN uint8_t g_dcStepVert = 1; - +uint8_t g_dcStepHori = 1; uint8_t GetVertDcoStatus(void) { return g_dcStepVert; } +uint8_t GetHoriDcoStatus(void) +{ + return g_dcStepVert; +} #endif /// @brief 外部中断初始化 diff --git a/Hyt2/APP/Device/device_Other/device_interrupt.h b/Hyt2/APP/Device/device_Other/device_interrupt.h index 8c79113..f59c94f 100644 --- a/Hyt2/APP/Device/device_Other/device_interrupt.h +++ b/Hyt2/APP/Device/device_Other/device_interrupt.h @@ -7,6 +7,7 @@ #if DCSTEP_FUN_EN uint8_t GetVertDcoStatus(void); +uint8_t GetHoriDcoStatus(void); #endif #ifdef PTZ_LIGHT_GEAR_L6235D_AS5047D diff --git a/Hyt2/BSP/Driver/tmc2160/tmc2160.c b/Hyt2/BSP/Driver/tmc2160/tmc2160.c index 2cf1b84..bed861c 100644 --- a/Hyt2/BSP/Driver/tmc2160/tmc2160.c +++ b/Hyt2/BSP/Driver/tmc2160/tmc2160.c @@ -163,26 +163,26 @@ void tmc2160_init() gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11); #if DCTEP_EN - /*水平DCSTEP功能引脚配置*/ - gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7);//PE10,DCEN - gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_8);//PE11,DCIN - gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_9);//PE9, DCO - gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7 | GPIO_PIN_8); - gpio_bit_set(GPIOE, GPIO_PIN_7);//使能水平驱动器DCSTEP - gpio_bit_set(GPIOE, GPIO_PIN_8);//使能水平驱动器DCIN - /*垂直DCSTEP功能引脚配置*/ - gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10);//PE10,DCEN - gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);//PE11,DCIN - gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_12);//PE12, DCO - gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10 | GPIO_PIN_11); - gpio_bit_set(GPIOE, GPIO_PIN_10);//使能垂直驱动器DCSTEP - gpio_bit_set(GPIOE, GPIO_PIN_11);//使能垂直驱动器DCIN - /*垂直DCO触发外部中断*/ - nvic_irq_enable(EXTI10_15_IRQn, 2U, 2U); - syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN12); - exti_init(EXTI_12, EXTI_INTERRUPT, EXTI_TRIG_FALLING); - exti_interrupt_flag_clear(EXTI_12); - /*垂直DCO定时器更新中断配置*/ + /*水平DCSTEP功能引脚配置*/ + gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7);//PE10,DCEN + gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_8);//PE11,DCIN + gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_9);//PE9, DCO + gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7 | GPIO_PIN_8); + gpio_bit_set(GPIOE, GPIO_PIN_7);//使能水平驱动器DCSTEP + gpio_bit_set(GPIOE, GPIO_PIN_8);//使能水平驱动器DCIN + /*垂直DCSTEP功能引脚配置*/ + gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10);//PE10,DCEN + gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);//PE11,DCIN + gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_12);//PE12, DCO + gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10 | GPIO_PIN_11); + gpio_bit_set(GPIOE, GPIO_PIN_10);//使能垂直驱动器DCSTEP + gpio_bit_set(GPIOE, GPIO_PIN_11);//使能垂直驱动器DCIN + /*垂直DCO触发外部中断*/ + nvic_irq_enable(EXTI10_15_IRQn, 2U, 2U); + syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN12); + exti_init(EXTI_12, EXTI_INTERRUPT, EXTI_TRIG_FALLING); + exti_interrupt_flag_clear(EXTI_12); + /*垂直DCO定时器更新中断配置*/ timer_parameter_struct timer_initpara;//定时器结构体 rcu_periph_clock_enable(RCU_TIMER7);//开启定时器时钟 @@ -206,6 +206,34 @@ void tmc2160_init() /* TIMER7 enable */ // timer_enable(TIMER7);//使能定时器 + + /*水平DCO触发外部中断*/ + nvic_irq_enable(EXTI5_9_IRQn, 2U, 3U); + syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN9); + exti_init(EXTI_9, EXTI_INTERRUPT, EXTI_TRIG_FALLING); + exti_interrupt_flag_clear(EXTI_9); + /*水平DCO定时器更新中断配置*/ + rcu_periph_clock_enable(RCU_TIMER4);//开启定时器时钟 + + timer_struct_para_init(&timer_initpara);//将定时器结构体内参数配置成默认参数 + timer_deinit(TIMER4); //复位定时器 + + /* TIMER1 configuration */ + //200M/20/1000 = 10K + timer_initpara.prescaler = 20-1;//预分频 + timer_initpara.alignedmode = TIMER_COUNTER_EDGE; //边缘对齐 + timer_initpara.counterdirection = TIMER_COUNTER_UP; //向上计数方式 + timer_initpara.period = 1000-1; //计数值 + timer_initpara.clockdivision = TIMER_CKDIV_DIV1; + timer_initpara.repetitioncounter = 0; //每次溢出都产生更新是件 + timer_init(TIMER4,&timer_initpara); + + timer_interrupt_enable(TIMER4,TIMER_INT_UP);//使能溢出中断 + + nvic_irq_enable(TIMER4_IRQn, 2u, 3u);//配置中断优先级 + + /* TIMER7 enable */ +// timer_enable(TIMER4);//使能定时器 #endif /* //为了不让驱动器的两个电容同时上电,驱动器初始化分别进行 @@ -575,7 +603,7 @@ char tmc2160_write_register(char choice, unsigned char mode, unsigned char data) buff[0] = TMC2160_CHOPCONF +0x80; buff[1] = tmc2160_chopconf_data(data); #ifdef PTZ_SUPER_LIGHT_WORM_STEP_TMC2160_AS5047D_24V - buff[2] = 0xec;//ed,,高4为被动快速衰减时间,可降低中程共振 + buff[2] = 0xed;//ed,,高4为被动快速衰减时间,可降低中程共振 buff[3] = 0x43;//03 buff[4] = 0x38;//C3 #endif @@ -612,7 +640,7 @@ char tmc2160_write_register(char choice, unsigned char mode, unsigned char data) buff[1] = 0x00; buff[2] = 0x00; buff[3] = 0x00; - buff[4] = 0x11; + buff[4] = 0x25; if(choice == TMC2160_HORI) { hori_regis.chop_conf = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]); diff --git a/Hyt2/GD32F4xx_Firmware_Library/SYSTICK/gd32f4xx_it.c b/Hyt2/GD32F4xx_Firmware_Library/SYSTICK/gd32f4xx_it.c index 2d8d165..3d93d27 100644 --- a/Hyt2/GD32F4xx_Firmware_Library/SYSTICK/gd32f4xx_it.c +++ b/Hyt2/GD32F4xx_Firmware_Library/SYSTICK/gd32f4xx_it.c @@ -37,10 +37,13 @@ OF SUCH DAMAGE. #include "bsp_os.h" #include "Usart.h" #include "device_interrupt.h" -#include "Timer.h" +//#include "Timer.h" +//#include "speed_to_step.h" +//#include "ptz_struct.h" #if DCSTEP_FUN_EN extern uint8_t g_dcStepVert; +extern uint8_t g_dcStepHori; #endif extern BSP_OS_SEM sem_enet_isr_recv; @@ -239,22 +242,23 @@ void EXTI5_9_IRQHandler(void) } if(RESET != exti_interrupt_flag_get(EXTI_9)) { -// /*function start*/ -// if (g_dcStepHori) -// { -// exti_init(EXTI_9, EXTI_INTERRUPT, EXTI_TRIG_RISING);//上升沿中断 -// timer_enable(TIMER7);//使能定时器 -// timer_counter_value_config(TIMER7, 0u); -// g_dcStepHori = 0; -// } -// else -// { -// exti_init(EXTI_9, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//下降沿中断 -// timer_disable(TIMER7);//失能定时器 -// timer_counter_value_config(TIMER7, 0u); -// g_dcStepHori = 1; -// } -// /*function end*/ + /*function start*/ + if ( !gpio_input_bit_get(GPIOE, GPIO_PIN_9) ) + { + exti_init(EXTI_9, EXTI_INTERRUPT, EXTI_TRIG_RISING);//上升沿中断 + timer_enable(TIMER12);//使能定时器 + timer_counter_value_config(TIMER12, 0u); + // ptz_hori_timer_stop(); + g_dcStepHori = 0; + } + else + { + exti_init(EXTI_9, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//下降沿中断 + timer_disable(TIMER12);//失能定时器 + timer_counter_value_config(TIMER12, 0u); + g_dcStepHori = 1; + } + /*function end*/ exti_interrupt_flag_clear(EXTI_9); } } @@ -286,12 +290,12 @@ void EXTI10_15_IRQHandler(void) if(RESET != exti_interrupt_flag_get(EXTI_12)) { /*function start*/ - if (g_dcStepVert) + if ( !gpio_input_bit_get(GPIOE, GPIO_PIN_12) ) { exti_init(EXTI_12, EXTI_INTERRUPT, EXTI_TRIG_RISING);//上升沿中断 timer_enable(TIMER7);//使能定时器 timer_counter_value_config(TIMER7, 0u); - ptz_vert_timer_stop(); +// ptz_vert_timer_stop(); g_dcStepVert = 0; } else @@ -299,7 +303,6 @@ void EXTI10_15_IRQHandler(void) exti_init(EXTI_12, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//下降沿中断 timer_disable(TIMER7);//失能定时器 timer_counter_value_config(TIMER7, 0u); - ptz_vert_timer_start(4000); g_dcStepVert = 1; } /*function end*/ @@ -366,7 +369,7 @@ void EXTI2_IRQHandler(void) \param[in] none \param[out] none \retval none - \note LH @2025.08.12 + \note LH @2025.08.12! */ void TIMER7_UP_TIMER12_IRQHandler(void) { @@ -383,9 +386,38 @@ void TIMER7_UP_TIMER12_IRQHandler(void) count = 0; timer_disable(TIMER7);//失能定时器 timer_counter_value_config(TIMER7, 0u); - gpio_bit_reset(GPIOD, GPIO_PIN_12); + gpio_bit_reset(GPIOD, GPIO_PIN_12); } - } + } /* clear TIMER interrupt flag */ timer_interrupt_flag_clear(TIMER7,TIMER_INT_UP); +} + +/*! + \brief TIM4 中断处理函数 + \param[in] none + \param[out] none + \retval none + \note LH @2025.08.20! +*/ +void TIMER4_IRQHandler(void) +{ + static uint16_t count2 = 0; + if(SET == timer_interrupt_flag_get(TIMER4,TIMER_INT_UP)) + { + count2 ++; + if ( count2 >= 10 ) + { + gpio_bit_set(GPIOC, GPIO_PIN_6); + } + else if( count2 >= 12 ) + { + count2 = 0; + timer_disable(TIMER4);//失能定时器 + timer_counter_value_config(TIMER4, 0u); + gpio_bit_reset(GPIOC, GPIO_PIN_6); + } + } + /* clear TIMER interrupt flag */ + timer_interrupt_flag_clear(TIMER4,TIMER_INT_UP); } \ No newline at end of file