/// /// @file device_dipswitch.c /// @function 继电器初始化 /// @author ypc /// @date 2019-05-25 /// @note v1.0 2019-05-25 /// v2.0 2022-03-22 /// #include "device_relay.h" #include "ptz_header_file.h" #include "service_selfcheck.h" #include "service_statusmonitor.h" #include "ptz_type_select.h" ///继电器初始化 void init_relay_module() { #ifdef PTZ_MOTOR_RELAY gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_9); gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_9); PTZ_MOTOR_RELAY_OFF; g_ptz.ptz_motor_relay_state = PTZ_RELAY_OFF; #endif } ///云台继电器打开 void ptz_motor_relay_on() { #ifdef PTZ_MOTOR_RELAY PTZ_MOTOR_RELAY_ON; g_ptz.ptz_motor_relay_state = PTZ_RELAY_ON; #endif //继电器打开后需要对驱动器重新初始化 //关闭云台自检任务 if(g_ptz.vert_self_check != PTZ_VERT_SELF_CHECK_END) { OSTaskDel(TASK_VERT_SELF_CHECK_PRIO); } if(g_ptz.hori_self_check != PTZ_HORI_SELF_CHECK_END) { OSTaskDel(TASK_HORI_SELF_CHECK_PRIO); } g_ptz.hori_self_check = PTZ_HORI_SELF_CHECK_END; g_ptz.vert_self_check = PTZ_VERT_SELF_CHECK_END; //关闭所有自动扫描任务 OSTaskDel(TASK_AREA_SCAN_PRIO); OSTaskDel(TASK_PRESET_BIT_SCAN_PRIO); //关闭故障检测任务 OSTaskDel(TASK_FAULT_DETECT_PRIO); //将所有故障清除 g_ptz.fault_detect.hori_rotate_fault = NO_FAULT;//水平转动故障 清除 g_ptz.fault_detect.vert_rotate_fault = NO_FAULT;//垂直转动故障 清除 g_ptz.fault_detect.hori_hall_fault = NO_FAULT;//水平电机霍尔故障 清除 g_ptz.fault_detect.vert_hall_fault = NO_FAULT;//垂直电机霍尔故障 清除 g_ptz.fault_detect.temperature_fault = NO_FAULT;//温度异常 清除 g_ptz.fault_detect.voltage_fault = NO_FAULT;//电压异常 清除 g_ptz.fault_detect.electric_current_fault = NO_FAULT;//电流异常 清除 g_ptz.fault_detect.fault = NO_FAULT;//故障总标志, 清除 //刹车停转所有电机 ptz_sem_post_stop_mutex();//释放启停共享资源所 OSTimeDlyHMSM(0u, 0u, 0u, 20u);//等待一段时间 g_ptz.vert_angleP.angle_allow_max = 60.0; g_ptz.vert_angleP.angle_allow_min = -60.0; ptz_hori_stop(PTZ_HORI_STOP_TIME); ptz_vert_stop(PTZ_VERT_STOP_TIME); //软件关闭区域扫描 g_area_scan.state = AREA_SCAN_CLOSE_A; //关闭预置位扫描 g_preset_bit_scan.state = PRESET_BIT_SCAN_CLOSE_A; #ifdef TMC2160 tmc2160_init(); #endif } ///云台继电器关闭 void ptz_motor_relay_off() { #ifdef PTZ_MOTOR_RELAY PTZ_MOTOR_RELAY_OFF; g_ptz.ptz_motor_relay_state = PTZ_RELAY_OFF; #endif //重新创建被删除的任务 init_area_scan_module(); init_preset_bit_scan_module(); init_status_monitor_module(); }