94 lines
2.6 KiB
C
94 lines
2.6 KiB
C
///
|
|
/// @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();
|
|
}
|
|
|
|
|