#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 外部中断初始化 /// @param[in] usart_periph:EXTI_IRQ_init /// @return none /// @note 修改日志 /// LH于2022-05-25 void EXTI_IRQ_init() { #ifdef L6235D /*HALL中断,水平——PD13-H1,PD14-H2,PD15-H3,,垂直PC6-H1,PC7-H2,PC8-H3*/ nvic_irq_enable(EXTI10_15_IRQn, 3U, 3U);//水平,一个中断函数,中断线10-15 nvic_irq_enable(EXTI5_9_IRQn, 3U, 2U);//垂直,一个中断函数,中断线5-9 //对应引脚配置外部中断线 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); //外部中断线初始化 exti_init(EXTI_6, EXTI_INTERRUPT, EXTI_TRIG_RISING);//上升沿中断 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); //清除标志位 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 /*光电开关中断PB0-SW1,PB1-SW2,PB2-SW3*/ nvic_irq_enable(EXTI0_IRQn, 2U, 0U);//垂直光电开关SW1 nvic_irq_enable(EXTI1_IRQn, 2U, 1U);//垂直光电开关SW2 nvic_irq_enable(EXTI2_IRQn, 2U, 2U);//水平光电开关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); //垂直光电开关SW1 #ifdef PTZ_SW1_DOWN_FALL_UPDATE exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//下降沿中断 #endif #ifdef PTZ_SW1_UP_RISE_UPDATE exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_BOTH);//边沿中断 #endif //垂直光电开关SW2 exti_init(EXTI_1, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//下降沿中断 //水平光电开关SW3 #ifdef PTZ_SW3_LEFT_RISE_UPDATE exti_init(EXTI_2, EXTI_INTERRUPT, EXTI_TRIG_BOTH);//边沿中断 #else exti_init(EXTI_2, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//下降沿中断 #endif //清除标志位 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 光电开关中断处理函数 /// @param[in] sw_linex:EXTI_X(外部中断线号EXTI_X) /// @return none /// @note 修改日志 /// LH于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://垂直光电开关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)//光电开关中断增加条件限制,云台转向分三种状态:左(上)、右(下)、停止状态 { 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://垂直光电开关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://水平光电开关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://垂直光电开关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://垂直光电开关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://水平光电开关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中断处理函数 /// @param[in] hall_linex:EXTI_X(外部HALL中断线号EXTI_X) /// @return none /// @note 修改日志 /// LH于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;//当前霍尔状态 //保存霍尔状态 //g_ptz.hori_l6235d.l6235d_hall_state_save[g_ptz.hori_l6235d.l6235d_satae_save_count] = L6235D_HALL_H1; //霍尔总数计数 // 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; // } //霍尔H1单独计数 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++;//霍尔总数计数 // if(g_ptz.hori_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE) // { // g_ptz.hori_l6235d.l6235d_hall_h123_count = 0; // } //判断电机实际转动方向,不是云台实际的转动方向 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)//判断方向 { #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;//当前霍尔状态 //保存霍尔状态 //g_ptz.hori_l6235d.l6235d_hall_state_save[g_ptz.hori_l6235d.l6235d_satae_save_count] = L6235D_HALL_H2; //霍尔总数计数 // 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; // } //霍尔H2单独计数 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++;//霍尔总数计数 // if(g_ptz.hori_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE) // { // g_ptz.hori_l6235d.l6235d_hall_h123_count = 0; // } //判断电机实际转动方向,不是云台实际的转动方向 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)//判断方向 { #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;//当前霍尔状态 //保存霍尔状态 //g_ptz.hori_l6235d.l6235d_hall_state_save[g_ptz.hori_l6235d.l6235d_satae_save_count] = L6235D_HALL_H3; //霍尔总数计数 // 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; // } //霍尔H3单独计数 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++;//霍尔总数计数 // if(g_ptz.hori_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE) // { // g_ptz.hori_l6235d.l6235d_hall_h123_count = 0; // } //判断电机实际转动方向,不是云台实际的转动方向 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)//判断方向 { #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 垂直HALL中断处理函数 /// @param[in] hall_linex:EXTI_X(外部HALL中断线号EXTI_X) /// @return none /// @note 修改日志 /// LH于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://垂直HALL-1 g_ptz.vert_l6235d.l6235d_hall_state_actual = L6235D_HALL_H1;//当前霍尔状态 //保存霍尔状态 //g_ptz.vert_l6235d.l6235d_hall_state_save[g_ptz.vert_l6235d.l6235d_satae_save_count] = L6235D_HALL_H1; //霍尔总数计数 // 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; // } //霍尔H1单独计数 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++;//霍尔总数计数 // if(g_ptz.vert_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE) // { // g_ptz.vert_l6235d.l6235d_hall_h123_count = 0; // } //判断电机实际转动方向,不是云台实际的转动方向 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)//判断方向 { #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; //电子自锁 #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://垂直HALL-2 g_ptz.vert_l6235d.l6235d_hall_state_actual = L6235D_HALL_H2;//当前霍尔状态 //保存霍尔状态 //g_ptz.vert_l6235d.l6235d_hall_state_save[g_ptz.vert_l6235d.l6235d_satae_save_count] = L6235D_HALL_H2; //霍尔总数计数 // 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; // } //霍尔H2单独计数 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++;//霍尔总数计数 // if(g_ptz.vert_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE) // { // g_ptz.vert_l6235d.l6235d_hall_h123_count = 0; // } //判断电机实际转动方向,不是云台实际的转动方向 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)//判断方向 { #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; //电子自锁 #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://垂直HALL-3 g_ptz.vert_l6235d.l6235d_hall_state_actual = L6235D_HALL_H3;//当前霍尔状态 //保存霍尔状态 //g_ptz.vert_l6235d.l6235d_hall_state_save[g_ptz.vert_l6235d.l6235d_satae_save_count] = L6235D_HALL_H3; //霍尔总数计数 // 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; // } //霍尔H3单独计数 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++;//霍尔总数计数 // if(g_ptz.vert_l6235d.l6235d_hall_h123_count >= UNSIGNED_INT_MAX_VALUE) // { // g_ptz.vert_l6235d.l6235d_hall_h123_count = 0; // } //判断电机实际转动方向,不是云台实际的转动方向 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)//判断方向 { #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; //电子自锁 #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 }