MW22-02A/APP/Device/device_Other/device_interrupt.c

710 lines
21 KiB
C
Raw Normal View History

2025-05-21 01:55:40 +00:00
#include "device_photoelectricswitch.h"
#include "device_interrupt.h"
#include "ptz_struct.h"
#include "l6235d.h"
#include "rotate_bldc.h"
#include "rotate_step.h"
#include "speed_to_bldc.h"
#include "gd32f4xx_it.h"
#include "ptz_type_select.h"
#include "get_angle.h"
/// @brief <20>ⲿ<EFBFBD>жϳ<D0B6>ʼ<EFBFBD><CABC>
/// @param[in] usart_periph:EXTI_IRQ_init
/// @return none
/// @note <20>޸<EFBFBD><DEB8><EFBFBD>־
/// LH<4C><48>2022-05-25
void EXTI_IRQ_init()
{
#ifdef L6235D
/*HALL<4C>жϣ<D0B6>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>PD13-H1,PD14-H2,PD15-H3<48><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱPC6-H1,PC7-H2,PC8-H3*/
nvic_irq_enable(EXTI10_15_IRQn, 3U, 3U);//ˮƽ<CBAE><C6BD>һ<EFBFBD><D2BB><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>10-15
nvic_irq_enable(EXTI5_9_IRQn, 3U, 2U);//<2F><>ֱ<EFBFBD><D6B1>һ<EFBFBD><D2BB><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>5-9
//<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
syscfg_exti_line_config(EXTI_SOURCE_GPIOD, EXTI_SOURCE_PIN13);
syscfg_exti_line_config(EXTI_SOURCE_GPIOD, EXTI_SOURCE_PIN14);
syscfg_exti_line_config(EXTI_SOURCE_GPIOD, EXTI_SOURCE_PIN15);
syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN6);
syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN7);
syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN8);
//<2F>ⲿ<EFBFBD>ж<EFBFBD><D0B6>߳<EFBFBD>ʼ<EFBFBD><CABC>
exti_init(EXTI_6, EXTI_INTERRUPT, EXTI_TRIG_RISING);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
exti_init(EXTI_7, EXTI_INTERRUPT, EXTI_TRIG_RISING);
exti_init(EXTI_8, EXTI_INTERRUPT, EXTI_TRIG_RISING);
exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_RISING);
exti_init(EXTI_14, EXTI_INTERRUPT, EXTI_TRIG_RISING);
exti_init(EXTI_15, EXTI_INTERRUPT, EXTI_TRIG_RISING);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
exti_interrupt_flag_clear(EXTI_6);
exti_interrupt_flag_clear(EXTI_7);
exti_interrupt_flag_clear(EXTI_8);
exti_interrupt_flag_clear(EXTI_13);
exti_interrupt_flag_clear(EXTI_14);
exti_interrupt_flag_clear(EXTI_15);
BSP_IntVectSet(39,EXTI5_9_IRQHandler);
BSP_IntEn(39);
BSP_IntVectSet(56,EXTI10_15_IRQHandler);
BSP_IntEn(56);
#endif
/*<2A><><EFBFBD><EFBFBD><E7BFAA><EFBFBD>ж<EFBFBD>PB0-SW1<57><31>PB1-SW2<57><32>PB2-SW3*/
nvic_irq_enable(EXTI0_IRQn, 2U, 0U);//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><E7BFAA>SW1
nvic_irq_enable(EXTI1_IRQn, 2U, 1U);//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><E7BFAA>SW2
nvic_irq_enable(EXTI2_IRQn, 2U, 2U);//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><E7BFAA>SW3
syscfg_exti_line_config(EXTI_SOURCE_GPIOB, EXTI_SOURCE_PIN0);
syscfg_exti_line_config(EXTI_SOURCE_GPIOB, EXTI_SOURCE_PIN1);
syscfg_exti_line_config(EXTI_SOURCE_GPIOB, EXTI_SOURCE_PIN2);
//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><E7BFAA>SW1
#ifdef PTZ_SW1_DOWN_FALL_UPDATE
exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//<2F>½<EFBFBD><C2BD><EFBFBD><EFBFBD>ж<EFBFBD>
#endif
#ifdef PTZ_SW1_UP_RISE_UPDATE
exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_BOTH);//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#endif
//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><E7BFAA>SW2
exti_init(EXTI_1, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//<2F>½<EFBFBD><C2BD><EFBFBD><EFBFBD>ж<EFBFBD>
//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><E7BFAA>SW3
#ifdef PTZ_SW3_LEFT_RISE_UPDATE
exti_init(EXTI_2, EXTI_INTERRUPT, EXTI_TRIG_BOTH);//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#else
exti_init(EXTI_2, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//<2F>½<EFBFBD><C2BD><EFBFBD><EFBFBD>ж<EFBFBD>
#endif
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
exti_interrupt_flag_clear(EXTI_0);
exti_interrupt_flag_clear(EXTI_1);
exti_interrupt_flag_clear(EXTI_2);
BSP_IntVectSet(22,EXTI0_IRQHandler);
BSP_IntEn(22);
BSP_IntVectSet(23,EXTI1_IRQHandler);
BSP_IntEn(23);
BSP_IntVectSet(24,EXTI2_IRQHandler);
BSP_IntEn(24);
}
/// @brief <20><><EFBFBD><EFBFBD><E7BFAA><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// @param[in] sw_linex:EXTI_X<5F><58><EFBFBD>ⲿ<EFBFBD>ж<EFBFBD><D0B6>ߺ<EFBFBD>EXTI_X<5F><58>
/// @return none
/// @note <20>޸<EFBFBD><DEB8><EFBFBD>־
/// LH<4C><48>2022-05-26
void ptz_SW_IRQHandler(exti_line_enum sw_linex)
{
#ifdef PTZ_NO_SELF_CHECK
if(g_ptz.Voltage > SWITCH_IRQ_V)
{
switch(sw_linex)
{
case EXTI_0://<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><E7BFAA>SW1
#ifdef PTZ_PHOTOELECTRIC_SWITCH
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_UP)//<2F><><EFBFBD><EFBFBD><E7BFAA><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>̨ת<CCA8><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>ң<EFBFBD><D2A3>£<EFBFBD><C2A3><EFBFBD>ֹͣ״̬
{
if(PS_VERT_SW1_READ == PS_HIGH)
{
g_ptz.vert_ps_sw1_up_rise ++;
}
}
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_DOWN)
{
if(PS_VERT_SW1_READ == PS_LOW)
{
g_ptz.vert_ps_sw1_down_fall ++;
}
}
#endif
break;
case EXTI_1://<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><E7BFAA>SW2
#ifdef PTZ_PHOTOELECTRIC_SWITCH
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_UP)
{
if(PS_VERT_SW2_READ == PS_LOW)
{
g_ptz.vert_ps_sw2_up_fall ++;
}
}
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_DOWN)
{
if(PS_VERT_SW2_READ == PS_HIGH)
{
g_ptz.vert_ps_sw2_down_rise ++;
}
}
#endif
break;
case EXTI_2://ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><E7BFAA>SW3
#ifdef PTZ_PHOTOELECTRIC_SWITCH
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
if(PS_HORI_SW3_READ == PS_LOW)
{
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
{
g_ptz.hori_ps_sw3_right_fall ++;
}
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT)
{
g_ptz.hori_ps_sw3_left_fall ++;
}
}
if(PS_HORI_SW3_READ == PS_HIGH)
{
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
{
g_ptz.hori_ps_sw3_right_rise ++;
}
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT)
{
g_ptz.hori_ps_sw3_left_rise ++;
}
}
#endif
break;
default:break;
}
}
#else
switch(sw_linex)
{
case EXTI_0://<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><E7BFAA>SW1
#ifdef PTZ_PHOTOELECTRIC_SWITCH
#ifdef CLK_50M
asm("nop");
asm("nop");
#else
asm("nop");
asm("nop");
asm("nop");
asm("nop");
#endif
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_UP)
{
if(PS_VERT_SW1_READ == PS_HIGH)
{
g_ptz.vert_ps_sw1_up_rise ++;
}
}
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_DOWN)
{
if(PS_VERT_SW1_READ == PS_LOW)
{
g_ptz.vert_ps_sw1_down_fall ++;
}
}
#endif
break;
case EXTI_1://<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><E7BFAA>SW2
#ifdef PTZ_PHOTOELECTRIC_SWITCH
#ifdef CLK_50M
asm("nop");
asm("nop");
#else
asm("nop");
asm("nop");
asm("nop");
asm("nop");
#endif
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_UP)
{
if(PS_VERT_SW2_READ == PS_LOW)
{
g_ptz.vert_ps_sw2_up_fall ++;
}
}
if(g_ptz.vert_direction_actual == PTZ_VERT_DIR_DOWN)
{
if(PS_VERT_SW2_READ == PS_HIGH)
{
g_ptz.vert_ps_sw2_down_rise ++;
}
}
#endif
break;
case EXTI_2://ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><E7BFAA>SW3
#ifdef PTZ_PHOTOELECTRIC_SWITCH
#ifdef CLK_50M
asm("nop");
asm("nop");
#else
asm("nop");
asm("nop");
asm("nop");
asm("nop");
#endif
if(PS_HORI_SW3_READ == PS_LOW)
{
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
{
g_ptz.hori_ps_sw3_right_fall ++;
}
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT)
{
g_ptz.hori_ps_sw3_left_fall ++;
}
}
if(PS_HORI_SW3_READ == PS_HIGH)
{
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_RIGHT)
{
g_ptz.hori_ps_sw3_right_rise ++;
}
if(g_ptz.hori_direction_actual == PTZ_HORI_DIR_LEFT)
{
g_ptz.hori_ps_sw3_left_rise ++;
}
}
#endif
break;
default:break;
}
#endif
}
/// @brief ˮƽHALL<4C>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// @param[in] hall_linex:EXTI_X<5F><58><EFBFBD>ⲿHALL<4C>ж<EFBFBD><D0B6>ߺ<EFBFBD>EXTI_X<5F><58>
/// @return none
/// @note <20>޸<EFBFBD><DEB8><EFBFBD>־
/// LH<4C><48>2022-05-26
void ptz_H_HALL_IRQHandler(exti_line_enum hall_linex)
{
#ifdef PTZ_BLDC_MOTOR
#ifdef PTZ_L6235D_HALL_FEEDBACK
switch(hall_linex)
{
case EXTI_13://ˮƽHALL-1
g_ptz.hori_l6235d.l6235d_hall_state_actual = L6235D_HALL_H1;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
//g_ptz.hori_l6235d.l6235d_hall_state_save[g_ptz.hori_l6235d.l6235d_satae_save_count] = L6235D_HALL_H1;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// g_ptz.hori_l6235d.l6235d_satae_save_count ++;
// if(g_ptz.hori_l6235d.l6235d_satae_save_count >= L6235D_HALL_SAVE_NUM)
// {
// g_ptz.hori_l6235d.l6235d_satae_save_count = 0;
// }
//<2F><><EFBFBD><EFBFBD>H1<48><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.hori_l6235d.l6235d_hall_h1_count++;
#ifdef PTZ_PID_HALL_SPEED
g_ptz.hori_pid.hall_h1_count ++;
#endif
// g_ptz.hori_l6235d.l6235d_hall_h123_count++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if(g_ptz.hori_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE)
// {
// g_ptz.hori_l6235d.l6235d_hall_h123_count = 0;
// }
//<2F>жϵ<D0B6><CFB5><EFBFBD>ʵ<EFBFBD><CAB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨ʵ<CCA8>ʵ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(g_ptz.hori_l6235d.l6235d_hall_state_actual != 0 && g_ptz.hori_l6235d.l6235d_hall_state_last != 0)
{
if(g_ptz.hori_l6235d.l6235d_hall_state_actual == L6235D_HALL_H1 &&
g_ptz.hori_l6235d.l6235d_hall_state_last == L6235D_HALL_H2)//<2F>жϷ<D0B6><CFB7><EFBFBD>
{
#ifdef PTZ_HALL_DIR
if(g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
{
g_ptz.hori_direction_actual = PTZ_HORI_DIR_RIGHT;
}
#endif
g_ptz.hori_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_FWD;
}
if(g_ptz.hori_l6235d.l6235d_hall_state_actual == L6235D_HALL_H1 &&
g_ptz.hori_l6235d.l6235d_hall_state_last == L6235D_HALL_H3)
{
#ifdef PTZ_HALL_DIR
if(g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
{
g_ptz.hori_direction_actual = PTZ_HORI_DIR_LEFT;
}
#endif
g_ptz.hori_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_REV;
}
}
g_ptz.hori_l6235d.l6235d_hall_state_last = g_ptz.hori_l6235d.l6235d_hall_state_actual;
break;
case EXTI_14://ˮƽHALL-2
g_ptz.hori_l6235d.l6235d_hall_state_actual = L6235D_HALL_H2;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
//g_ptz.hori_l6235d.l6235d_hall_state_save[g_ptz.hori_l6235d.l6235d_satae_save_count] = L6235D_HALL_H2;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// g_ptz.hori_l6235d.l6235d_satae_save_count ++;
// if(g_ptz.hori_l6235d.l6235d_satae_save_count >= L6235D_HALL_SAVE_NUM)
// {
// g_ptz.hori_l6235d.l6235d_satae_save_count = 0;
// }
//<2F><><EFBFBD><EFBFBD>H2<48><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.hori_l6235d.l6235d_hall_h2_count++;
#ifdef PTZ_PID_HALL_SPEED
g_ptz.hori_pid.hall_h2_count ++;
#endif
// g_ptz.hori_l6235d.l6235d_hall_h123_count++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if(g_ptz.hori_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE)
// {
// g_ptz.hori_l6235d.l6235d_hall_h123_count = 0;
// }
//<2F>жϵ<D0B6><CFB5><EFBFBD>ʵ<EFBFBD><CAB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨ʵ<CCA8>ʵ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(g_ptz.hori_l6235d.l6235d_hall_state_actual != 0 && g_ptz.hori_l6235d.l6235d_hall_state_last != 0)
{
if(g_ptz.hori_l6235d.l6235d_hall_state_actual == L6235D_HALL_H2 &&
g_ptz.hori_l6235d.l6235d_hall_state_last == L6235D_HALL_H3)//<2F>жϷ<D0B6><CFB7><EFBFBD>
{
#ifdef PTZ_HALL_DIR
if(g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
{
g_ptz.hori_direction_actual = PTZ_HORI_DIR_RIGHT;
}
#endif
g_ptz.hori_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_FWD;
}
if(g_ptz.hori_l6235d.l6235d_hall_state_actual == L6235D_HALL_H2 &&
g_ptz.hori_l6235d.l6235d_hall_state_last == L6235D_HALL_H1)
{
#ifdef PTZ_HALL_DIR
if(g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
{
g_ptz.hori_direction_actual = PTZ_HORI_DIR_LEFT;
}
#endif
g_ptz.hori_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_REV;
}
}
g_ptz.hori_l6235d.l6235d_hall_state_last = g_ptz.hori_l6235d.l6235d_hall_state_actual;
break;
case EXTI_15://ˮƽHALL-3
g_ptz.hori_l6235d.l6235d_hall_state_actual = L6235D_HALL_H3;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
//g_ptz.hori_l6235d.l6235d_hall_state_save[g_ptz.hori_l6235d.l6235d_satae_save_count] = L6235D_HALL_H3;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// g_ptz.hori_l6235d.l6235d_satae_save_count ++;
// if(g_ptz.hori_l6235d.l6235d_satae_save_count >= L6235D_HALL_SAVE_NUM)
// {
// g_ptz.hori_l6235d.l6235d_satae_save_count = 0;
// }
//<2F><><EFBFBD><EFBFBD>H3<48><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.hori_l6235d.l6235d_hall_h3_count++;
#ifdef PTZ_PID_HALL_SPEED
g_ptz.hori_pid.hall_h3_count ++;
#endif
// g_ptz.hori_l6235d.l6235d_hall_h123_count++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if(g_ptz.hori_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE)
// {
// g_ptz.hori_l6235d.l6235d_hall_h123_count = 0;
// }
//<2F>жϵ<D0B6><CFB5><EFBFBD>ʵ<EFBFBD><CAB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨ʵ<CCA8>ʵ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(g_ptz.hori_l6235d.l6235d_hall_state_actual != 0 && g_ptz.hori_l6235d.l6235d_hall_state_last != 0)
{
if(g_ptz.hori_l6235d.l6235d_hall_state_actual == L6235D_HALL_H3 &&
g_ptz.hori_l6235d.l6235d_hall_state_last == L6235D_HALL_H1)//<2F>жϷ<D0B6><CFB7><EFBFBD>
{
#ifdef PTZ_HALL_DIR
if(g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
{
g_ptz.hori_direction_actual = PTZ_HORI_DIR_RIGHT;
}
#endif
g_ptz.hori_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_FWD;
}
if(g_ptz.hori_l6235d.l6235d_hall_state_actual == L6235D_HALL_H3 &&
g_ptz.hori_l6235d.l6235d_hall_state_last == L6235D_HALL_H2)
{
#ifdef PTZ_HALL_DIR
if(g_ptz.hori_start_stop_set == PTZ_HORI_STOP)
{
g_ptz.hori_direction_actual = PTZ_HORI_DIR_LEFT;
}
#endif
g_ptz.hori_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_REV;
}
}
g_ptz.hori_l6235d.l6235d_hall_state_last = g_ptz.hori_l6235d.l6235d_hall_state_actual;
break;
default:break;
}
#endif
#endif
}
/// @brief <20><>ֱHALL<4C>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// @param[in] hall_linex:EXTI_X<5F><58><EFBFBD>ⲿHALL<4C>ж<EFBFBD><D0B6>ߺ<EFBFBD>EXTI_X<5F><58>
/// @return none
/// @note <20>޸<EFBFBD><DEB8><EFBFBD>־
/// LH<4C><48>2022-05-26
void ptz_V_HALL_IRQHandler(exti_line_enum hall_linex)
{
#ifdef PTZ_BLDC_MOTOR
#ifdef PTZ_L6235D_HALL_FEEDBACK
switch(hall_linex)
{
case EXTI_6://<2F><>ֱHALL-1
g_ptz.vert_l6235d.l6235d_hall_state_actual = L6235D_HALL_H1;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
//g_ptz.vert_l6235d.l6235d_hall_state_save[g_ptz.vert_l6235d.l6235d_satae_save_count] = L6235D_HALL_H1;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// g_ptz.vert_l6235d.l6235d_satae_save_count ++;
// if(g_ptz.vert_l6235d.l6235d_satae_save_count >= L6235D_HALL_SAVE_NUM)
// {
// g_ptz.vert_l6235d.l6235d_satae_save_count = 0;
// }
//<2F><><EFBFBD><EFBFBD>H1<48><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.vert_l6235d.l6235d_hall_h1_count++;
#ifdef PTZ_PID_HALL_SPEED
g_ptz.vert_pid.hall_h1_count ++;
#endif
// g_ptz.vert_l6235d.l6235d_hall_h123_count++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if(g_ptz.vert_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE)
// {
// g_ptz.vert_l6235d.l6235d_hall_h123_count = 0;
// }
//<2F>жϵ<D0B6><CFB5><EFBFBD>ʵ<EFBFBD><CAB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨ʵ<CCA8>ʵ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(g_ptz.vert_l6235d.l6235d_hall_state_actual != 0 && g_ptz.vert_l6235d.l6235d_hall_state_last != 0)
{
if(g_ptz.vert_l6235d.l6235d_hall_state_actual == L6235D_HALL_H1 &&
g_ptz.vert_l6235d.l6235d_hall_state_last == L6235D_HALL_H2)//<2F>жϷ<D0B6><CFB7><EFBFBD>
{
#ifdef PTZ_HALL_DIR
if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
g_ptz.vert_direction_actual = PTZ_VERT_DIR_UP;
}
#endif
g_ptz.vert_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_FWD;
}
if(g_ptz.vert_l6235d.l6235d_hall_state_actual == L6235D_HALL_H1 &&
g_ptz.vert_l6235d.l6235d_hall_state_last == L6235D_HALL_H3)
{
#ifdef PTZ_HALL_DIR
if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
g_ptz.vert_direction_actual = PTZ_VERT_DIR_DOWN;
}
#endif
g_ptz.vert_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_REV;
}
}
g_ptz.vert_l6235d.l6235d_hall_state_last = g_ptz.vert_l6235d.l6235d_hall_state_actual;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef PTZ_ELECTRIC_STABLE_ON
if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
g_ptz.vert_electric_stable.stop_hall_count ++;
}
else
{
g_ptz.vert_electric_stable.stop_hall_count = 0;
}
#endif
break;
case EXTI_7://<2F><>ֱHALL-2
g_ptz.vert_l6235d.l6235d_hall_state_actual = L6235D_HALL_H2;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
//g_ptz.vert_l6235d.l6235d_hall_state_save[g_ptz.vert_l6235d.l6235d_satae_save_count] = L6235D_HALL_H2;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// g_ptz.vert_l6235d.l6235d_satae_save_count ++;
// if(g_ptz.vert_l6235d.l6235d_satae_save_count >= L6235D_HALL_SAVE_NUM)
// {
// g_ptz.vert_l6235d.l6235d_satae_save_count = 0;
// }
//<2F><><EFBFBD><EFBFBD>H2<48><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.vert_l6235d.l6235d_hall_h2_count++;
#ifdef PTZ_PID_HALL_SPEED
g_ptz.vert_pid.hall_h2_count ++;
#endif
// g_ptz.vert_l6235d.l6235d_hall_h123_count++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if(g_ptz.vert_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE)
// {
// g_ptz.vert_l6235d.l6235d_hall_h123_count = 0;
// }
//<2F>жϵ<D0B6><CFB5><EFBFBD>ʵ<EFBFBD><CAB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨ʵ<CCA8>ʵ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(g_ptz.vert_l6235d.l6235d_hall_state_actual != 0 && g_ptz.vert_l6235d.l6235d_hall_state_last != 0)
{
if(g_ptz.vert_l6235d.l6235d_hall_state_actual == L6235D_HALL_H2 &&
g_ptz.vert_l6235d.l6235d_hall_state_last == L6235D_HALL_H3)//<2F>жϷ<D0B6><CFB7><EFBFBD>
{
#ifdef PTZ_HALL_DIR
if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
g_ptz.vert_direction_actual = PTZ_VERT_DIR_UP;
}
#endif
g_ptz.vert_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_FWD;
}
if(g_ptz.vert_l6235d.l6235d_hall_state_actual == L6235D_HALL_H2 &&
g_ptz.vert_l6235d.l6235d_hall_state_last == L6235D_HALL_H1)
{
#ifdef PTZ_HALL_DIR
if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
g_ptz.vert_direction_actual = PTZ_VERT_DIR_DOWN;
}
#endif
g_ptz.vert_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_REV;
}
}
g_ptz.vert_l6235d.l6235d_hall_state_last = g_ptz.vert_l6235d.l6235d_hall_state_actual;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef PTZ_ELECTRIC_STABLE_ON
if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
g_ptz.vert_electric_stable.stop_hall_count ++;
}
else
{
g_ptz.vert_electric_stable.stop_hall_count = 0;
}
#endif
break;
case EXTI_8://<2F><>ֱHALL-3
g_ptz.vert_l6235d.l6235d_hall_state_actual = L6235D_HALL_H3;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
//g_ptz.vert_l6235d.l6235d_hall_state_save[g_ptz.vert_l6235d.l6235d_satae_save_count] = L6235D_HALL_H3;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// g_ptz.vert_l6235d.l6235d_satae_save_count ++;
// if(g_ptz.vert_l6235d.l6235d_satae_save_count >= L6235D_HALL_SAVE_NUM)
// {
// g_ptz.vert_l6235d.l6235d_satae_save_count = 0;
// }
//<2F><><EFBFBD><EFBFBD>H3<48><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_ptz.vert_l6235d.l6235d_hall_h3_count++;
#ifdef PTZ_PID_HALL_SPEED
g_ptz.vert_pid.hall_h3_count ++;
#endif
// g_ptz.vert_l6235d.l6235d_hall_h123_count++;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if(g_ptz.vert_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE)
// {
// g_ptz.vert_l6235d.l6235d_hall_h123_count = 0;
// }
//<2F>жϵ<D0B6><CFB5><EFBFBD>ʵ<EFBFBD><CAB5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨ʵ<CCA8>ʵ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(g_ptz.vert_l6235d.l6235d_hall_state_actual != 0 && g_ptz.vert_l6235d.l6235d_hall_state_last != 0)
{
if(g_ptz.vert_l6235d.l6235d_hall_state_actual == L6235D_HALL_H3 &&
g_ptz.vert_l6235d.l6235d_hall_state_last == L6235D_HALL_H1)//<2F>жϷ<D0B6><CFB7><EFBFBD>
{
#ifdef PTZ_HALL_DIR
if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
g_ptz.vert_direction_actual = PTZ_VERT_DIR_UP;
}
#endif
g_ptz.vert_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_FWD;
}
if(g_ptz.vert_l6235d.l6235d_hall_state_actual == L6235D_HALL_H3 &&
g_ptz.vert_l6235d.l6235d_hall_state_last == L6235D_HALL_H2)
{
#ifdef PTZ_HALL_DIR
if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
g_ptz.vert_direction_actual = PTZ_VERT_DIR_DOWN;
}
#endif
g_ptz.vert_l6235d.l6235d_motor_dir_actual = L6235D_MOTOR_DIR_REV;
}
}
g_ptz.vert_l6235d.l6235d_hall_state_last = g_ptz.vert_l6235d.l6235d_hall_state_actual;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef PTZ_ELECTRIC_STABLE_ON
if(g_ptz.vert_start_stop_set == PTZ_VERT_STOP)
{
g_ptz.vert_electric_stable.stop_hall_count ++;
}
else
{
g_ptz.vert_electric_stable.stop_hall_count = 0;
}
break;
#endif
default:break;
}
#endif
#endif
}