Compare commits
4 Commits
Author | SHA1 | Date |
---|---|---|
|
8ac2a3efbe | |
|
284f3ec2a6 | |
|
5aceb95bcf | |
|
9d5b77c9e1 |
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Win32",
|
||||||
|
"includePath": [
|
||||||
|
"${workspaceFolder}/**"
|
||||||
|
],
|
||||||
|
"defines": [
|
||||||
|
"_DEBUG",
|
||||||
|
"UNICODE",
|
||||||
|
"_UNICODE"
|
||||||
|
],
|
||||||
|
"compilerPath": "C:\\MinGW\\bin\\gcc.exe",
|
||||||
|
"cStandard": "c11",
|
||||||
|
"cppStandard": "gnu++14",
|
||||||
|
"intelliSenseMode": "windows-gcc-x86"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": 4
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"w25q128.h": "c",
|
||||||
|
"device_adc_collect.h": "c",
|
||||||
|
"ptz_struct.h": "c",
|
||||||
|
"agent_hyt.h": "c",
|
||||||
|
"device_heat.h": "c"
|
||||||
|
}
|
||||||
|
}
|
|
@ -50,6 +50,9 @@
|
||||||
#include "systick.h"
|
#include "systick.h"
|
||||||
#include "service_error_count.h"
|
#include "service_error_count.h"
|
||||||
|
|
||||||
|
#include "device_heat.h"
|
||||||
|
|
||||||
|
|
||||||
void task_printf_init();
|
void task_printf_init();
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -176,6 +179,7 @@ static void task_start (void *p_arg)
|
||||||
// term_printf("\n power off init \r\n\r\n");
|
// term_printf("\n power off init \r\n\r\n");
|
||||||
//数据采集初始化电压、电流、温度
|
//数据采集初始化电压、电流、温度
|
||||||
init_data_collect_module();
|
init_data_collect_module();
|
||||||
|
Init_ptz_heat_data_collect_task();
|
||||||
// term_printf("\n data collect init \r\n\r\n");
|
// term_printf("\n data collect init \r\n\r\n");
|
||||||
OSTimeDlyHMSM(0u, 0u, 1u, 0u);
|
OSTimeDlyHMSM(0u, 0u, 1u, 0u);
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
#ifdef PTZ_MEDIUM_WORM_L6235D_AS5047D
|
#ifdef PTZ_MEDIUM_WORM_L6235D_AS5047D
|
||||||
///*******************************标准云台******************************/
|
///*******************************标准云台******************************/
|
||||||
///水平电机减速比
|
///水平电机减速比
|
||||||
#define PTZ_HORI_MOTOR_RATIO 25.0//(25.0 * 1.5)//20
|
#define PTZ_HORI_MOTOR_RATIO 25.0 // 25.0 //(25.0 * 1.5)//20
|
||||||
///水平大齿轮减速比
|
///水平大齿轮减速比
|
||||||
#define PTZ_HORI_BIG_GEAR_RATIO 80.0//62.0
|
#define PTZ_HORI_BIG_GEAR_RATIO 80.0//62.0
|
||||||
///水平总减速比
|
///水平总减速比
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
///水平电机最小转速
|
///水平电机最小转速
|
||||||
#define PTZ_HORI_MOTOR_MIN_SPEED 400.0//600.0
|
#define PTZ_HORI_MOTOR_MIN_SPEED 400.0//600.0
|
||||||
///水平云台最大转速
|
///水平云台最大转速
|
||||||
#define PTZ_HORI_MAX_SPEED 1.5//1.29//2.4
|
#define PTZ_HORI_MAX_SPEED 1.5 //1.5//1.29//2.4
|
||||||
///水平云台最小转速
|
///水平云台最小转速
|
||||||
#define PTZ_HORI_MIN_SPEED 0.2//0.3//0.26//0.4
|
#define PTZ_HORI_MIN_SPEED 0.2//0.3//0.26//0.4
|
||||||
///水平云台默认最佳速度
|
///水平云台默认最佳速度
|
||||||
|
@ -98,11 +98,11 @@
|
||||||
/**********************************************************/
|
/**********************************************************/
|
||||||
|
|
||||||
///磁编码器和电机之间的减速比
|
///磁编码器和电机之间的减速比
|
||||||
#define PTZ_VERT_MOTOR_RATIO 75.0//(50.0 * (52.0 / 35.0))//20.0
|
#define PTZ_VERT_MOTOR_RATIO 35.15 //75.0//(50.0 * (52.0 / 35.0))//20.0
|
||||||
///磁编码器与云台轴之间的减速比
|
///磁编码器与云台轴之间的减速比
|
||||||
#define PTZ_VERT_BIG_GEAR_RATIO 80.0//54.00
|
#define PTZ_VERT_BIG_GEAR_RATIO 80.0//54.00
|
||||||
///垂直总减速比
|
///垂直总减速比
|
||||||
#define PTZ_VERT_RATIO 6000.0//4011.429//1080.0
|
#define PTZ_VERT_RATIO 2812.0 //6000.0//4011.429//1080.0
|
||||||
///垂直电机调速模拟电压最大值
|
///垂直电机调速模拟电压最大值
|
||||||
#define PTZ_VERT_VR_MAX 1999
|
#define PTZ_VERT_VR_MAX 1999
|
||||||
///垂直电机调速模拟电压最小值
|
///垂直电机调速模拟电压最小值
|
||||||
|
@ -114,11 +114,11 @@
|
||||||
///垂直电机最小转速
|
///垂直电机最小转速
|
||||||
#define PTZ_VERT_MOTOR_MIN_SPEED 400.0//600.0
|
#define PTZ_VERT_MOTOR_MIN_SPEED 400.0//600.0
|
||||||
///垂直云台最大转速
|
///垂直云台最大转速
|
||||||
#define PTZ_VERT_MAX_SPEED 0.5//0.74//2.7
|
#define PTZ_VERT_MAX_SPEED 1.0 //0.5//0.74//2.7
|
||||||
///垂直云台最小转速
|
///垂直云台最小转速
|
||||||
#define PTZ_VERT_MIN_SPEED 0.07//0.1//0.15//0.5
|
#define PTZ_VERT_MIN_SPEED 0.15 //0.07//0.1//0.15//0.5
|
||||||
///垂直云台默认最佳速度
|
///垂直云台默认最佳速度
|
||||||
#define PTZ_VERT_BEST_SPEED 0.4//0.7//2.0
|
#define PTZ_VERT_BEST_SPEED 0.75 //0.4//0.7//2.0
|
||||||
|
|
||||||
|
|
||||||
//电机磁极对数
|
//电机磁极对数
|
||||||
|
|
|
@ -549,12 +549,22 @@ static void ptz_hori_pid_task()
|
||||||
g_ptz.hori_pid.hall_h123_count = g_ptz.hori_pid.hall_h1_count +
|
g_ptz.hori_pid.hall_h123_count = g_ptz.hori_pid.hall_h1_count +
|
||||||
g_ptz.hori_pid.hall_h2_count +
|
g_ptz.hori_pid.hall_h2_count +
|
||||||
g_ptz.hori_pid.hall_h3_count;
|
g_ptz.hori_pid.hall_h3_count;
|
||||||
|
static uint32_t time, lastTime, horiTime;
|
||||||
|
time = OSTimeGet();
|
||||||
|
horiTime = time - lastTime;
|
||||||
|
if (horiTime < 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
lastTime = time;
|
||||||
|
|
||||||
if(g_ptz.hori_pid.hall_h123_count >= 2)
|
if(g_ptz.hori_pid.hall_h123_count >= 2)
|
||||||
{
|
{
|
||||||
|
// g_ptz.hori_pid.hall_h123_motor_speed =
|
||||||
|
// 60000.0 * (float)(g_ptz.hori_pid.hall_h123_count/* - 1*/) /
|
||||||
|
// (float)PTZ_HORI_PID_T / PTZ_HORI_ONE_CYCLE_HALL_NUM;
|
||||||
g_ptz.hori_pid.hall_h123_motor_speed =
|
g_ptz.hori_pid.hall_h123_motor_speed =
|
||||||
60000.0 * (float)(g_ptz.hori_pid.hall_h123_count/* - 1*/) /
|
60000.0 * (float)(g_ptz.hori_pid.hall_h123_count/* - 1*/) /
|
||||||
(float)PTZ_HORI_PID_T / PTZ_HORI_ONE_CYCLE_HALL_NUM;
|
(float)horiTime / PTZ_HORI_ONE_CYCLE_HALL_NUM;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1190,15 +1200,27 @@ static void ptz_vert_pid_task()
|
||||||
g_ptz.vert_pid.hall_h123_count = g_ptz.vert_pid.hall_h1_count +
|
g_ptz.vert_pid.hall_h123_count = g_ptz.vert_pid.hall_h1_count +
|
||||||
g_ptz.vert_pid.hall_h2_count +
|
g_ptz.vert_pid.hall_h2_count +
|
||||||
g_ptz.vert_pid.hall_h3_count;
|
g_ptz.vert_pid.hall_h3_count;
|
||||||
|
static uint32_t time, lastTime, vertTime;
|
||||||
|
time = OSTimeGet();
|
||||||
|
vertTime = time - lastTime;
|
||||||
|
if (vertTime < 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
lastTime = time;
|
||||||
|
|
||||||
if(g_ptz.vert_pid.hall_h123_count >= 2)
|
if(g_ptz.vert_pid.hall_h123_count >= 2)
|
||||||
{
|
{
|
||||||
|
// g_ptz.vert_pid.hall_h123_motor_speed =
|
||||||
|
// 60000.0 * (float)(g_ptz.vert_pid.hall_h123_count /*-1*/) /
|
||||||
|
// (float)PTZ_VERT_PID_T / PTZ_VERT_ONE_CYCLE_HALL_NUM;
|
||||||
|
|
||||||
g_ptz.vert_pid.hall_h123_motor_speed =
|
g_ptz.vert_pid.hall_h123_motor_speed =
|
||||||
60000.0 * (float)(g_ptz.vert_pid.hall_h123_count /*-1*/) /
|
60000.0 * (float)(g_ptz.vert_pid.hall_h123_count /*-1*/) /
|
||||||
(float)PTZ_VERT_PID_T / PTZ_VERT_ONE_CYCLE_HALL_NUM;
|
(float)vertTime / PTZ_VERT_ONE_CYCLE_HALL_NUM;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
g_ptz.vert_motor_speed_hall_actual = g_ptz.vert_pid.hall_h123_motor_speed;
|
g_ptz.vert_motor_speed_hall_actual = g_ptz.vert_pid.hall_h123_motor_speed;
|
||||||
|
|
||||||
/* ********************************** */
|
/* ********************************** */
|
||||||
|
|
|
@ -350,7 +350,7 @@ static void Ntc_value()//ADC1
|
||||||
float H_temp_f,V_temp_f;//놓迦侊똑,역랑匡侊똑
|
float H_temp_f,V_temp_f;//놓迦侊똑,역랑匡侊똑
|
||||||
short int H_temp,V_temp;//시攣侊똑,<2C>幹侊똑
|
short int H_temp,V_temp;//시攣侊똑,<2C>幹侊똑
|
||||||
|
|
||||||
adc_software_trigger_enable(ADC1,ADC_INSERTED_CHANNEL);
|
adc_software_trigger_enable(ADC1, ADC_REGULAR_INSERTED_CHANNEL);
|
||||||
asm ("nop");
|
asm ("nop");
|
||||||
asm ("nop");
|
asm ("nop");
|
||||||
H_temp_f = Ntc_temp(ADC_IDATA2(ADC1));
|
H_temp_f = Ntc_temp(ADC_IDATA2(ADC1));
|
||||||
|
@ -424,7 +424,8 @@ static void ptz_Current_collect_adc1_task()
|
||||||
adc_software_trigger_enable(ADC1,ADC_INSERTED_CHANNEL);
|
adc_software_trigger_enable(ADC1,ADC_INSERTED_CHANNEL);
|
||||||
value_I = ADC_IDATA0(ADC1);
|
value_I = ADC_IDATA0(ADC1);
|
||||||
|
|
||||||
adc1_i[adc0_num] = (((float)value_I / 4096.0 * 3.3)-3.3/2) / 0.132;//(float)value_I;//
|
// adc1_i[adc0_num] = (((float)value_I / 4096.0 * 3.3)-3.3/2) / 0.132;//(float)value_I;//
|
||||||
|
adc1_i[adc0_num] = ((float)value_I / 4096.0 * 3.3) / 0.25;//(float)value_I;//
|
||||||
|
|
||||||
adc0_num ++;
|
adc0_num ++;
|
||||||
if(adc0_num >= 5)
|
if(adc0_num >= 5)
|
||||||
|
@ -495,7 +496,7 @@ static void ptz_temperature_collect_tmp75_task()
|
||||||
//꽃섞훨蛟
|
//꽃섞훨蛟
|
||||||
static char ptz_data_collect_task()
|
static char ptz_data_collect_task()
|
||||||
{
|
{
|
||||||
int i=0,j=0;
|
// int i=0,j=0;
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -510,30 +511,30 @@ static char ptz_data_collect_task()
|
||||||
V_ADC0_Phase_current();
|
V_ADC0_Phase_current();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(j >= 100)
|
// if(j >= 100)
|
||||||
{
|
// {
|
||||||
j=0;
|
// j=0;
|
||||||
//云台不自检关闭,打开采集任务
|
// //云台不自检关闭,打开采集任务
|
||||||
#ifndef PTZ_NO_SELF_CHECK
|
// #ifndef PTZ_NO_SELF_CHECK
|
||||||
ptz_Voltage_collect_adc1_task();
|
// ptz_Voltage_collect_adc1_task();
|
||||||
#endif
|
// #endif
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 2u);
|
// OSTimeDlyHMSM(0u, 0u, 0u, 2u);
|
||||||
ptz_Current_collect_adc1_task();
|
// ptz_Current_collect_adc1_task();
|
||||||
// OSTimeDlyHMSM(0u, 0u, 0u, 50u);
|
// // OSTimeDlyHMSM(0u, 0u, 0u, 50u);
|
||||||
}
|
// }
|
||||||
|
|
||||||
if(i >= 3000)
|
// if(i >= 3000)
|
||||||
{//降低温度采集频率
|
// {//降低温度采集频率
|
||||||
ptz_temperature_collect_tmp75_task();
|
// ptz_temperature_collect_tmp75_task();
|
||||||
//驱动电路温度采集
|
// //驱动电路温度采集
|
||||||
Ntc_value();
|
// Ntc_value();
|
||||||
i=0;
|
// i=0;
|
||||||
}
|
// }
|
||||||
|
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
|
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
|
||||||
|
|
||||||
i++;
|
// i++;
|
||||||
j++;
|
// j++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,7 +570,7 @@ static void creat_task_data_collect(void)
|
||||||
void init_data_collect_module(void)
|
void init_data_collect_module(void)
|
||||||
{
|
{
|
||||||
//#ifndef PTZ_NO_SELF_CHECK
|
//#ifndef PTZ_NO_SELF_CHECK
|
||||||
ADC1_Init();//AD采集引脚初始化
|
// ADC1_Init();//AD采集引脚初始化
|
||||||
//#endif
|
//#endif
|
||||||
ADC2_Init();//AD꽃섞多신놓迦뺏
|
ADC2_Init();//AD꽃섞多신놓迦뺏
|
||||||
ADC0_Init();//AD꽃섞多신놓迦뺏
|
ADC0_Init();//AD꽃섞多신놓迦뺏
|
||||||
|
|
|
@ -58,7 +58,6 @@ void vert_dac1_data_out(unsigned short int data)
|
||||||
dac_data_set(DAC1, DAC_ALIGN_12B_R, buff);
|
dac_data_set(DAC1, DAC_ALIGN_12B_R, buff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,441 @@
|
||||||
|
|
||||||
|
#include "device_heat.h"
|
||||||
|
#include "gd32f4xx.h"
|
||||||
|
#include "ptz_struct.h"
|
||||||
|
#include "agent_hyt.h"
|
||||||
|
#include "pdebug.h"
|
||||||
|
#include "cpu.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 温度采集使用的ADC1
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define HC4051_S0_PIN GPIO_PIN_14
|
||||||
|
#define HC4051_S0_PORT GPIOB
|
||||||
|
#define HC4051_S1_PIN GPIO_PIN_15
|
||||||
|
#define HC4051_S1_PORT GPIOB
|
||||||
|
|
||||||
|
#define HEAT_PIN GPIO_PIN_12
|
||||||
|
#define HEAT_PORT GPIOA
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define R_constant 10.0 //千欧姆——分压电阻值
|
||||||
|
|
||||||
|
// #define R_25 10000.0//热敏电阻常温下的电阻值
|
||||||
|
|
||||||
|
// #define Ntc_B 3435.0//常量B
|
||||||
|
|
||||||
|
// #define Kelvin_temp 273.15+25//常温——开尔文温度
|
||||||
|
//NTC电流
|
||||||
|
static float Ntc_current(uint16_t data)
|
||||||
|
{
|
||||||
|
static float curr;
|
||||||
|
curr = ((float)data / 4096.0 * 3.3)/R_constant;
|
||||||
|
return curr;
|
||||||
|
|
||||||
|
}
|
||||||
|
//NTC电压
|
||||||
|
static float Ntc_voltage(uint16_t data)
|
||||||
|
{
|
||||||
|
static float voltage;
|
||||||
|
voltage = 3.3 - ((float)data / 4096.0 * 3.3);
|
||||||
|
return voltage;
|
||||||
|
}
|
||||||
|
//NTC电阻
|
||||||
|
static float Ntc_resis(uint16_t data)
|
||||||
|
{
|
||||||
|
static float resis,curr,voltage;
|
||||||
|
curr = Ntc_current(data);
|
||||||
|
voltage = Ntc_voltage(data);
|
||||||
|
resis = voltage / curr * 1000.0;//因为电流值放大了1000倍
|
||||||
|
return resis;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief ADC1初始化,电压,电流,NTC温度采集
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
\note LH @2022.07.21
|
||||||
|
*/
|
||||||
|
void ADC1_Init()
|
||||||
|
{
|
||||||
|
//配置引脚时钟
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOC);
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOB);
|
||||||
|
//引脚复用,PC2——电压ADC1-CH12,PC3——电流ADC1-CH13
|
||||||
|
gpio_mode_set(GPIOC,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO_PIN_2);
|
||||||
|
gpio_mode_set(GPIOC,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO_PIN_3);
|
||||||
|
/* H_NTC-PB0 ,V_NTC-PB1 */
|
||||||
|
// gpio_mode_set(GPIOB,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO_PIN_0);
|
||||||
|
gpio_mode_set(GPIOB,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO_PIN_1);
|
||||||
|
|
||||||
|
rcu_periph_clock_enable(RCU_ADC1);
|
||||||
|
//总线时钟20分频=6MHZ
|
||||||
|
adc_clock_config(ADC_ADCCK_PCLK2_DIV4);
|
||||||
|
/***********************************************/
|
||||||
|
|
||||||
|
//对齐方式 ADC_INSERTED_CHANNEL
|
||||||
|
adc_data_alignment_config(ADC1,ADC_DATAALIGN_RIGHT);
|
||||||
|
//扫描模式
|
||||||
|
adc_special_function_config(ADC1,ADC_SCAN_MODE,ENABLE);
|
||||||
|
//外部触发关闭
|
||||||
|
adc_external_trigger_config(ADC1,ADC_REGULAR_CHANNEL,DISABLE);
|
||||||
|
//采集通道数
|
||||||
|
adc_channel_length_config(ADC1,ADC_INSERTED_CHANNEL, 3);
|
||||||
|
|
||||||
|
//通道注入顺序
|
||||||
|
adc_inserted_channel_config(ADC1, 0, ADC_CHANNEL_13, ADC_SAMPLETIME_480);//电流
|
||||||
|
adc_inserted_channel_config(ADC1, 1, ADC_CHANNEL_12, ADC_SAMPLETIME_480);//电压
|
||||||
|
adc_inserted_channel_config(ADC1, 2, ADC_CHANNEL_9, ADC_SAMPLETIME_480);
|
||||||
|
|
||||||
|
adc_enable(ADC1);
|
||||||
|
|
||||||
|
adc_calibration_enable(ADC1);
|
||||||
|
|
||||||
|
|
||||||
|
/* 初始化分时复用IO */
|
||||||
|
gpio_mode_set(HC4051_S0_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, HC4051_S0_PIN);
|
||||||
|
gpio_output_options_set(HC4051_S0_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, HC4051_S0_PIN);
|
||||||
|
gpio_mode_set(HC4051_S1_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, HC4051_S1_PIN);
|
||||||
|
gpio_output_options_set(HC4051_S1_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, HC4051_S1_PIN);
|
||||||
|
|
||||||
|
/* 初始化加热引脚 */
|
||||||
|
gpio_mode_set(HEAT_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, HEAT_PIN);
|
||||||
|
gpio_output_options_set(HEAT_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, HEAT_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief 初始化分时复用控制引脚和加热使能引脚
|
||||||
|
\param[in] none
|
||||||
|
\param[out] none
|
||||||
|
\retval none
|
||||||
|
\note psx @2025.07.31
|
||||||
|
*/
|
||||||
|
void heat_Init()
|
||||||
|
{
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOB);
|
||||||
|
|
||||||
|
/* 初始化分时复用IO */
|
||||||
|
gpio_mode_set(HC4051_S0_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, HC4051_S0_PIN);
|
||||||
|
gpio_output_options_set(HC4051_S0_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, HC4051_S0_PIN);
|
||||||
|
gpio_mode_set(HC4051_S1_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, HC4051_S1_PIN);
|
||||||
|
gpio_output_options_set(HC4051_S1_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, HC4051_S1_PIN);
|
||||||
|
gpio_bit_reset(HC4051_S0_PORT, HC4051_S0_PIN);
|
||||||
|
gpio_bit_reset(HC4051_S1_PORT, HC4051_S1_PIN);
|
||||||
|
|
||||||
|
/* 初始化加热引脚 */
|
||||||
|
gpio_mode_set(HEAT_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, HEAT_PIN);
|
||||||
|
gpio_output_options_set(HEAT_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, HEAT_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief 分时复用温度采集选择为H_NTC
|
||||||
|
*/
|
||||||
|
static void choose_H_NTC(void)
|
||||||
|
{
|
||||||
|
gpio_bit_reset(HC4051_S0_PORT, HC4051_S0_PIN);
|
||||||
|
gpio_bit_reset(HC4051_S1_PORT, HC4051_S1_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief 分时复用温度采集选择为V_NTC
|
||||||
|
*/
|
||||||
|
static void choose_V_NTC(void)
|
||||||
|
{
|
||||||
|
gpio_bit_set(HC4051_S0_PORT, HC4051_S0_PIN);
|
||||||
|
gpio_bit_reset(HC4051_S1_PORT, HC4051_S1_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief 分时复用温度采集选择为EXT_NTC1
|
||||||
|
*/
|
||||||
|
static void choose_EXT_NTC1(void)
|
||||||
|
{
|
||||||
|
gpio_bit_reset(HC4051_S0_PORT, HC4051_S0_PIN);
|
||||||
|
gpio_bit_set(HC4051_S1_PORT, HC4051_S1_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief 分时复用温度采集选择为EXT_NTC2
|
||||||
|
*/
|
||||||
|
static void choose_EXT_NTC2(void)
|
||||||
|
{
|
||||||
|
gpio_bit_set(HC4051_S0_PORT, HC4051_S0_PIN);
|
||||||
|
gpio_bit_set(HC4051_S1_PORT, HC4051_S1_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef void(*pctr) (void);
|
||||||
|
pctr choose_ntc_func[4] = {&choose_H_NTC, &choose_V_NTC, &choose_EXT_NTC1, &choose_EXT_NTC2};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief 启动加热
|
||||||
|
*/
|
||||||
|
static void startHeat()
|
||||||
|
{
|
||||||
|
gpio_bit_set(HEAT_PORT, HEAT_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief 关闭加热
|
||||||
|
*/
|
||||||
|
static void closeHeat()
|
||||||
|
{
|
||||||
|
gpio_bit_reset(HEAT_PORT, HEAT_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
//电压采集
|
||||||
|
static void ptz_Voltage_collect_adc1_task()
|
||||||
|
{
|
||||||
|
static uint32_t adc1_v[5];
|
||||||
|
static unsigned char adc1_num;
|
||||||
|
int j,k;
|
||||||
|
float tem;
|
||||||
|
float curadc1;
|
||||||
|
uint16_t value_V;
|
||||||
|
|
||||||
|
adc1_v[adc1_num] = ADC_IDATA1(ADC1);
|
||||||
|
|
||||||
|
// adc1_v[adc1_num] = (float)value_V / 4096.0 * 11 *3.3;//(float)value_V;//
|
||||||
|
adc1_num++;
|
||||||
|
if (adc1_num >= 5) {
|
||||||
|
adc1_num = 0;
|
||||||
|
for (j = 0; j < 5-1; j++) {//采样值由小到大排列
|
||||||
|
for (k = 0; k < 5-j-1; k++) {
|
||||||
|
if (adc1_v[k] > adc1_v[k+1]) {
|
||||||
|
tem = adc1_v[k];
|
||||||
|
adc1_v[k] = adc1_v[k+1];
|
||||||
|
adc1_v[k+1] = tem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (uint8_t i = 1; i < 5 - 1; i++) {
|
||||||
|
curadc1 = curadc1 + adc1_v[i];
|
||||||
|
}
|
||||||
|
curadc1 = curadc1 /((float)(5 - 2));//去掉一个最大值和一个最小值求平均值
|
||||||
|
g_ptz.Voltage = (float)curadc1 / 4096.0 * 11 *3.3;;
|
||||||
|
memset(adc1_v,0,sizeof(adc1_v));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//电流采集
|
||||||
|
static void ptz_Current_collect_adc1_task()
|
||||||
|
{
|
||||||
|
static uint32_t adc1_i[5];
|
||||||
|
static unsigned char adc1_num;
|
||||||
|
int j,k;
|
||||||
|
float tem;
|
||||||
|
float curadc0;
|
||||||
|
uint16_t value_I;
|
||||||
|
|
||||||
|
adc1_i[adc1_num] = ADC_IDATA0(ADC1);
|
||||||
|
|
||||||
|
adc1_num ++;
|
||||||
|
if (adc1_num >= 5) {
|
||||||
|
adc1_num = 0;
|
||||||
|
for (j = 0; j < 5-1; j++) {//采样值由小到大排列
|
||||||
|
for (k = 0; k < 5-j-1; k++) {
|
||||||
|
if (adc1_i[k] > adc1_i[k+1]) {
|
||||||
|
tem = adc1_i[k];
|
||||||
|
adc1_i[k] = adc1_i[k+1];
|
||||||
|
adc1_i[k+1] = tem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (uint8_t i = 1; i < 5 - 1; i++) {
|
||||||
|
curadc0 = curadc0 + adc1_i[i];
|
||||||
|
}
|
||||||
|
curadc0 = curadc0 /((float)(5 - 2));//去掉一个最大值和一个最小值求平均值
|
||||||
|
g_ptz.electric_current = ((float)curadc0 / 4096.0 * 3.3) / 0.25;
|
||||||
|
|
||||||
|
// memset(adc1_i, 0, sizeof(adc1_i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct _heat_data {
|
||||||
|
float ext_ntc1;
|
||||||
|
float ext_ntc2;
|
||||||
|
float ntcT;
|
||||||
|
} heat_data;
|
||||||
|
heat_data m_heatData;
|
||||||
|
|
||||||
|
//NTC温度计算,开尔文温度
|
||||||
|
static float Ntc_temp(uint16_t adc_data, float Ntc_B)
|
||||||
|
{
|
||||||
|
float R_ntc;//实际电阻
|
||||||
|
double temp,K,j,l,m;//实际温度
|
||||||
|
R_ntc = Ntc_resis(adc_data);
|
||||||
|
K = R_ntc/10000.0;
|
||||||
|
j = log(K);//log e为底数
|
||||||
|
l = j / Ntc_B;
|
||||||
|
m = 1.0 /298.15;
|
||||||
|
temp = 1/(l+m);
|
||||||
|
// temp = 1/(j / Ntc_B + 1/Kelvin_temp);
|
||||||
|
return (float)temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
//温度采集并加热
|
||||||
|
static void ptz_heat_collect_adc1_task()
|
||||||
|
{
|
||||||
|
static uint32_t adc1_T[4][5];
|
||||||
|
static uint8_t adc1_num = 0;
|
||||||
|
static uint8_t ntc_num = 0;
|
||||||
|
|
||||||
|
adc1_T[ntc_num][adc1_num] = ADC_IDATA2(ADC1);
|
||||||
|
|
||||||
|
if (++ntc_num < 4) {
|
||||||
|
choose_ntc_func[ntc_num]();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ntc_num = 0;
|
||||||
|
choose_ntc_func[ntc_num]();
|
||||||
|
if (++adc1_num < 5) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
adc1_num = 0;
|
||||||
|
|
||||||
|
uint32_t temp;
|
||||||
|
uint32_t adc_data = 0;
|
||||||
|
|
||||||
|
/* 采集H_NTC温度 */
|
||||||
|
for (int j = 0; j < 5-1; j++) {//采样值由小到大排列
|
||||||
|
for (int k = 0; k < 5-j-1; k++) {
|
||||||
|
if (adc1_T[0][k] > adc1_T[0][k+1]) {
|
||||||
|
temp = adc1_T[0][k];
|
||||||
|
adc1_T[0][k] = adc1_T[0][k+1];
|
||||||
|
adc1_T[0][k+1] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(uint8_t i = 1; i < 5 - 1; i++) {
|
||||||
|
adc_data += adc1_T[0][i];
|
||||||
|
}
|
||||||
|
adc_data = adc_data / 3;
|
||||||
|
g_ptz.H_boad_temp = (short int)(Ntc_temp(adc_data, 3450.0f) - 273.15 + 0.5);
|
||||||
|
adc_data = 0;
|
||||||
|
|
||||||
|
/* 采集V_NTC温度 */
|
||||||
|
for (int j = 0; j < 5-1; j++) {
|
||||||
|
for (int k = 0; k < 5-j-1; k++) {
|
||||||
|
if (adc1_T[1][k] > adc1_T[1][k+1]) {
|
||||||
|
temp = adc1_T[1][k];
|
||||||
|
adc1_T[1][k] = adc1_T[1][k+1];
|
||||||
|
adc1_T[1][k+1] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(uint8_t i = 1; i < 5 - 1; i++) {
|
||||||
|
adc_data += adc1_T[1][i];
|
||||||
|
}
|
||||||
|
adc_data = adc_data / 3;
|
||||||
|
g_ptz.V_boad_temp = (short int)(Ntc_temp(adc_data, 3450.0f) - 273.15 + 0.5);
|
||||||
|
adc_data = 0;
|
||||||
|
|
||||||
|
/* 采集EXT_NTC1温度 */
|
||||||
|
for (int j = 0; j < 5-1; j++) {
|
||||||
|
for (int k = 0; k < 5-j-1; k++) {
|
||||||
|
if (adc1_T[2][k] > adc1_T[2][k+1]) {
|
||||||
|
temp = adc1_T[2][k];
|
||||||
|
adc1_T[2][k] = adc1_T[2][k+1];
|
||||||
|
adc1_T[2][k+1] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(uint8_t i = 1; i < 5 - 1; i++) {
|
||||||
|
adc_data += adc1_T[2][i];
|
||||||
|
}
|
||||||
|
adc_data = adc_data / 3;
|
||||||
|
m_heatData.ext_ntc1 = (short int)(Ntc_temp(adc_data, 3950.0f) - 273.15 + 0.5);
|
||||||
|
adc_data = 0;
|
||||||
|
|
||||||
|
/* 采集EXT_NTC2温度 */
|
||||||
|
for (int j = 0; j < 5-1; j++) {
|
||||||
|
for (int k = 0; k < 5-j-1; k++) {
|
||||||
|
if (adc1_T[3][k] > adc1_T[3][k+1]) {
|
||||||
|
temp = adc1_T[3][k];
|
||||||
|
adc1_T[3][k] = adc1_T[3][k+1];
|
||||||
|
adc1_T[3][k+1] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(uint8_t i = 1; i < 5 - 1; i++) {
|
||||||
|
adc_data += adc1_T[3][i];
|
||||||
|
}
|
||||||
|
adc_data = adc_data / 3;
|
||||||
|
m_heatData.ext_ntc2 = (short int)(Ntc_temp(adc_data, 3950.0f) - 273.15 + 0.5);
|
||||||
|
adc_data = 0;
|
||||||
|
|
||||||
|
//判定是否需要加热
|
||||||
|
if (g_ptz.H_boad_temp < -20 || g_ptz.V_boad_temp < -20
|
||||||
|
|| m_heatData.ext_ntc1 < -20 || m_heatData.ext_ntc2 < -20) {
|
||||||
|
startHeat();
|
||||||
|
}
|
||||||
|
else if (g_ptz.H_boad_temp > -10 && g_ptz.V_boad_temp > -10
|
||||||
|
&& m_heatData.ext_ntc1 > -10 && m_heatData.ext_ntc2 > -10) {
|
||||||
|
closeHeat();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief 采集并加热任务
|
||||||
|
*/
|
||||||
|
static char ptz_heat_data_collect_task()
|
||||||
|
{
|
||||||
|
static uint16_t ntc_num = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
adc_software_trigger_enable(ADC1, ADC_INSERTED_CHANNEL);
|
||||||
|
// OSTimeDlyHMSM(0u, 0u, 0u, 1u);
|
||||||
|
while (!adc_flag_get(ADC1, ADC_FLAG_EOC)) {
|
||||||
|
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
|
||||||
|
}
|
||||||
|
adc_flag_clear(ADC1, ADC_FLAG_EOC);
|
||||||
|
|
||||||
|
ptz_Voltage_collect_adc1_task();
|
||||||
|
ptz_Current_collect_adc1_task();
|
||||||
|
ptz_heat_collect_adc1_task();
|
||||||
|
|
||||||
|
OSTimeDlyHMSM(0u, 0u, 0u, 100u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static OS_STK task_heat_data_collect_stk[TASK_PTZ_HEAT_DATA_COLLECT_STK_SIZE];
|
||||||
|
static void creat_heat_task_data_collect(void)
|
||||||
|
{
|
||||||
|
CPU_INT08U task_err;
|
||||||
|
CPU_INT08U name_err;
|
||||||
|
|
||||||
|
task_err = OSTaskCreateExt((void (*)(void *)) ptz_heat_data_collect_task,
|
||||||
|
(void *) 0,
|
||||||
|
(OS_STK *)&task_heat_data_collect_stk[TASK_PTZ_HEAT_DATA_COLLECT_STK_SIZE - 1],
|
||||||
|
(INT8U ) TASK_PTZ_HEAT_DATA_COLLECT_PRIO,
|
||||||
|
(INT16U ) TASK_PTZ_HEAT_DATA_COLLECT_PRIO,
|
||||||
|
(OS_STK *)&task_heat_data_collect_stk[0],
|
||||||
|
(INT32U ) TASK_PTZ_HEAT_DATA_COLLECT_STK_SIZE,
|
||||||
|
(void *) 0,
|
||||||
|
(INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));
|
||||||
|
#if (OS_TASK_NAME_EN > 0)
|
||||||
|
OSTaskNameSet(TASK_PTZ_HEAT_DATA_COLLECT_PRIO, "ptz_heat_data_collect_task", &name_err);
|
||||||
|
#endif
|
||||||
|
if ((task_err == OS_ERR_NONE) && (name_err == OS_ERR_NONE)) {
|
||||||
|
pdebug(DEBUG_LEVEL_INFO,"create ptz_heat_data_collect_task success\r\n");
|
||||||
|
} else {
|
||||||
|
pdebug(DEBUG_LEVEL_FATAL,"create ptz_heat_data_collect_task failed\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Init_ptz_heat_data_collect_task()
|
||||||
|
{
|
||||||
|
ADC1_Init();
|
||||||
|
heat_Init();
|
||||||
|
creat_heat_task_data_collect();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
#ifndef __DEVICE_HEAD_H_
|
||||||
|
#define __DEVICE_HEAD_H_
|
||||||
|
|
||||||
|
|
||||||
|
#define TASK_PTZ_HEAT_DATA_COLLECT_PRIO 52u
|
||||||
|
#define TASK_PTZ_HEAT_DATA_COLLECT_STK_SIZE 200u
|
||||||
|
|
||||||
|
|
||||||
|
void Init_ptz_heat_data_collect_task();
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -13,6 +13,10 @@ static char ptz_temp_volt_current_fault_detect_task()
|
||||||
{//只报故障,不做响应
|
{//只报故障,不做响应
|
||||||
static unsigned short int time_ms;
|
static unsigned short int time_ms;
|
||||||
|
|
||||||
|
static unsigned char hori_fault;
|
||||||
|
static unsigned char vert_fault;
|
||||||
|
|
||||||
|
|
||||||
time_ms ++;
|
time_ms ++;
|
||||||
if(time_ms < 50)
|
if(time_ms < 50)
|
||||||
{
|
{
|
||||||
|
@ -20,17 +24,33 @@ static char ptz_temp_volt_current_fault_detect_task()
|
||||||
if(H_ADC_Collect.Phase_curr_V >= PHASE_CURRENT ||H_ADC_Collect.Phase_curr_U >= PHASE_CURRENT ||H_ADC_Collect.Phase_curr_W >= PHASE_CURRENT )
|
if(H_ADC_Collect.Phase_curr_V >= PHASE_CURRENT ||H_ADC_Collect.Phase_curr_U >= PHASE_CURRENT ||H_ADC_Collect.Phase_curr_W >= PHASE_CURRENT )
|
||||||
{//堵转检测,防止电机堵转烧坏,结合电机卡死故障监测,与云台工作电流监测。
|
{//堵转检测,防止电机堵转烧坏,结合电机卡死故障监测,与云台工作电流监测。
|
||||||
|
|
||||||
|
if (g_ptz.fault_detect.Phase_curr_H != FAULT) {
|
||||||
|
hori_fault++;
|
||||||
|
if (hori_fault >= 10) {
|
||||||
g_ptz.fault_detect.Phase_curr_H = FAULT;//水平电机相电流过大,报警
|
g_ptz.fault_detect.Phase_curr_H = FAULT;//水平电机相电流过大,报警
|
||||||
|
|
||||||
ptz_hori_stop(PTZ_HORI_STOP_TIME);
|
ptz_hori_stop(PTZ_HORI_STOP_TIME);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hori_fault = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if(V_ADC_Collect.Phase_curr_V >= PHASE_CURRENT ||V_ADC_Collect.Phase_curr_U >= PHASE_CURRENT ||V_ADC_Collect.Phase_curr_W >= PHASE_CURRENT )
|
if(V_ADC_Collect.Phase_curr_V >= PHASE_CURRENT ||V_ADC_Collect.Phase_curr_U >= PHASE_CURRENT ||V_ADC_Collect.Phase_curr_W >= PHASE_CURRENT )
|
||||||
{//堵转检测,防止电机堵转烧坏,结合电机卡死故障监测,与云台工作电流监测。
|
{//堵转检测,防止电机堵转烧坏,结合电机卡死故障监测,与云台工作电流监测。
|
||||||
|
|
||||||
|
if (g_ptz.fault_detect.Phase_curr_V != FAULT) {
|
||||||
|
vert_fault++;
|
||||||
|
if (vert_fault >= 10) {
|
||||||
g_ptz.fault_detect.Phase_curr_V = FAULT;//垂直电机相电流过大,报警
|
g_ptz.fault_detect.Phase_curr_V = FAULT;//垂直电机相电流过大,报警
|
||||||
|
|
||||||
ptz_vert_stop(PTZ_VERT_STOP_TIME);
|
ptz_vert_stop(PTZ_VERT_STOP_TIME);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
vert_fault = 0;
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
static BSP_OS_SEM ptz_hori_get_angle_mutex;//共享资源锁
|
static BSP_OS_SEM ptz_hori_get_angle_mutex;//共享资源锁
|
||||||
static BSP_OS_SEM ptz_vert_get_angle_mutex;
|
static BSP_OS_SEM ptz_vert_get_angle_mutex;
|
||||||
|
|
||||||
|
#ifdef AS5047
|
||||||
|
|
||||||
static void as5047d_delay_nop(int as5047d_delay_time);
|
static void as5047d_delay_nop(int as5047d_delay_time);
|
||||||
static unsigned int as5047d_Parity_bit_even(unsigned int package);
|
static unsigned int as5047d_Parity_bit_even(unsigned int package);
|
||||||
|
@ -931,8 +932,6 @@ As5047DJudgeReceivePackage as5047d_vert_judge_receive_package_a(unsigned int pac
|
||||||
return temp1;
|
return temp1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//新的读取角度方式
|
//新的读取角度方式
|
||||||
float as5047d_vert_get_angle_a()
|
float as5047d_vert_get_angle_a()
|
||||||
{
|
{
|
||||||
|
@ -962,4 +961,298 @@ float as5047d_vert_get_angle_a()
|
||||||
/********************************************************************************/
|
/********************************************************************************/
|
||||||
/********************************************************************************/
|
/********************************************************************************/
|
||||||
/********************************************************************************/
|
/********************************************************************************/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef TMR3109
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief tmr3109初始化
|
||||||
|
* @param
|
||||||
|
* @retval
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void tmr3109_init(void)
|
||||||
|
{
|
||||||
|
//总线时钟使能
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOC);
|
||||||
|
rcu_periph_clock_enable(RCU_GPIOD);
|
||||||
|
//水平PC10--CLK,PC12--MOSI
|
||||||
|
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10| GPIO_PIN_12);
|
||||||
|
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_10| GPIO_PIN_12);
|
||||||
|
//PA15--CS
|
||||||
|
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_15);
|
||||||
|
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_15);
|
||||||
|
//PC11--MISO
|
||||||
|
gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
|
||||||
|
|
||||||
|
TMR3109_HORI_CSN_DISABLE;
|
||||||
|
TMR3109_HORI_CLK_LOW;
|
||||||
|
TMR3109_HORI_MOSI_LOW;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//垂直PD0--CS,PD1--CLK,PD3--MOSI
|
||||||
|
gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0| GPIO_PIN_1| GPIO_PIN_3);
|
||||||
|
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_0| GPIO_PIN_1| GPIO_PIN_3);
|
||||||
|
//PD2--MISO
|
||||||
|
gpio_mode_set(GPIOD, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_2);
|
||||||
|
|
||||||
|
TMR3109_VERT_CSN_DISABLE;
|
||||||
|
TMR3109_VERT_CLK_LOW;
|
||||||
|
TMR3109_VERT_MOSI_LOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief tmr3109短延时函数,用于tmr3109的SPI通信短延时
|
||||||
|
* @param delay_time 短延时时间长短
|
||||||
|
* @retval
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void tmr3109_delay_nop(int delay_time)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < delay_time; i ++)
|
||||||
|
{
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 将数据进行打包发送
|
||||||
|
* @param Op_code 功能码
|
||||||
|
* address 地址码
|
||||||
|
* idleBit 空闲码
|
||||||
|
* dataBit 数据位
|
||||||
|
* @retval 打包的数据
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
unsigned int tmr3109_command_type(unsigned char Op_code, unsigned char address, unsigned char idleBit, unsigned short dataBit)
|
||||||
|
{
|
||||||
|
return (unsigned int)((Op_code << 29) | (address << 21) | (idleBit << 16) | dataBit);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 校验tmr3109角度数据
|
||||||
|
* @param data 读取到的角度信息
|
||||||
|
* @retval crc 校验后的值
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
// 多项式掩码 (x^4 + x^3 + x^2 + 1) -> 0b1101
|
||||||
|
#define CRC_POLY 0x0D
|
||||||
|
static unsigned char check_tmr3109_angle(unsigned int data_24bit)
|
||||||
|
{
|
||||||
|
unsigned char crc = 0x03; // 初始值 0011
|
||||||
|
|
||||||
|
uint8_t feedback;
|
||||||
|
|
||||||
|
// 处理 24 位数据 (MSB first)
|
||||||
|
for (int i = 23; i >= 0; i--) {
|
||||||
|
// 获取当前位 (从最高位开始)
|
||||||
|
uint8_t bit = (data_24bit >> i) & 0x01;
|
||||||
|
|
||||||
|
// 计算反馈值 = CRC最高位 XOR 输入位
|
||||||
|
feedback = (crc >> 3) ^ bit;
|
||||||
|
|
||||||
|
// 左移寄存器 (丢弃最高位)
|
||||||
|
crc = (crc << 1) & 0x0F;
|
||||||
|
|
||||||
|
// 当反馈为1时,异或多项式
|
||||||
|
if (feedback) {
|
||||||
|
crc ^= CRC_POLY; // 异或多项式掩码 1101
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 将数据发送发送到水平磁编
|
||||||
|
* @param package 要发送的数据
|
||||||
|
* @retval 读取到的数据
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
unsigned int tmr3109_hori_send_package(unsigned int package)
|
||||||
|
{
|
||||||
|
unsigned int temp = 0;
|
||||||
|
unsigned int temp1 = 0;
|
||||||
|
unsigned int temp2 = 0;
|
||||||
|
|
||||||
|
TMR3109_HORI_CLK_LOW;
|
||||||
|
TMR3109_HORI_MOSI_LOW;
|
||||||
|
|
||||||
|
tmr3109_delay_nop(2);
|
||||||
|
for(int i = 31; i >= 0; i--)
|
||||||
|
{
|
||||||
|
TMR3109_HORI_CLK_LOW;
|
||||||
|
tmr3109_delay_nop(2);
|
||||||
|
temp = package & (1 << i);
|
||||||
|
if(temp != 0) {
|
||||||
|
TMR3109_HORI_MOSI_HIGH;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TMR3109_HORI_MOSI_LOW;
|
||||||
|
}
|
||||||
|
tmr3109_delay_nop(2);
|
||||||
|
|
||||||
|
TMR3109_HORI_CLK_HIGH;
|
||||||
|
tmr3109_delay_nop(2);
|
||||||
|
|
||||||
|
temp1 = TMR3109_HORI_MISO_READ;
|
||||||
|
temp2 = temp2 | (temp1 << i);
|
||||||
|
|
||||||
|
temp1 = 0;
|
||||||
|
temp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TMR3109_HORI_CLK_LOW;
|
||||||
|
TMR3109_HORI_MOSI_LOW;
|
||||||
|
|
||||||
|
return temp2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static volatile float vert_tmr3109_angle_actual;
|
||||||
|
static volatile float hori_tmr3109_angle_actual;
|
||||||
|
/**
|
||||||
|
* @brief 读取水平转子的位置
|
||||||
|
* @param
|
||||||
|
* @retval 位置
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
float read_horiTmr3109Angle(void)
|
||||||
|
{
|
||||||
|
static float proportion = 360.0f / 8388608.0f;
|
||||||
|
static unsigned int temp;
|
||||||
|
static float angle;
|
||||||
|
// static unsigned int temp1;
|
||||||
|
|
||||||
|
|
||||||
|
// BSP_OS_SemWait(&ptz_hori_get_angle_mutex, 0u);
|
||||||
|
// TMR3109_HORI_CSN_DISABLE;
|
||||||
|
// tmr3109_delay_nop(4);
|
||||||
|
TMR3109_HORI_CSN_ENABLE;
|
||||||
|
tmr3109_delay_nop(20);
|
||||||
|
|
||||||
|
temp = tmr3109_hori_send_package(tmr3109_command_type(0b011, 0, 0, 0));
|
||||||
|
|
||||||
|
TMR3109_HORI_CSN_DISABLE;
|
||||||
|
|
||||||
|
if (check_tmr3109_angle((temp >> 5) & 0b11111111111111111111111) == ((temp >> 1) & 0x0F)) {
|
||||||
|
//crc校验成功
|
||||||
|
// pdebug(DEBUG_LEVEL_DEBUG, "crc check success\n");
|
||||||
|
angle = (float)((temp >> 5) & 0b11111111111111111111111) * proportion;
|
||||||
|
hori_tmr3109_angle_actual = 360.0 - angle;
|
||||||
|
// BSP_OS_SemPost(&ptz_hori_get_angle_mutex);
|
||||||
|
return hori_tmr3109_angle_actual;
|
||||||
|
}
|
||||||
|
|
||||||
|
// BSP_OS_SemPost(&ptz_hori_get_angle_mutex);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 将数据发送发送到俯仰磁编
|
||||||
|
* @param package 要发送的数据
|
||||||
|
* @retval 读取到的数据
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
unsigned int tmr3109_vert_send_package(unsigned int package)
|
||||||
|
{
|
||||||
|
unsigned int temp = 0;
|
||||||
|
unsigned int temp1 = 0;
|
||||||
|
unsigned int temp2 = 0;
|
||||||
|
|
||||||
|
TMR3109_VERT_CLK_LOW;
|
||||||
|
TMR3109_VERT_MOSI_LOW;
|
||||||
|
|
||||||
|
tmr3109_delay_nop(2);
|
||||||
|
for(int i = 31; i >= 0; i--)
|
||||||
|
{
|
||||||
|
TMR3109_VERT_CLK_LOW;
|
||||||
|
tmr3109_delay_nop(2);
|
||||||
|
temp = package & (1 << i);
|
||||||
|
if(temp != 0) {
|
||||||
|
TMR3109_VERT_MOSI_HIGH;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TMR3109_VERT_MOSI_LOW;
|
||||||
|
}
|
||||||
|
tmr3109_delay_nop(2);
|
||||||
|
|
||||||
|
TMR3109_VERT_CLK_HIGH;
|
||||||
|
tmr3109_delay_nop(2);
|
||||||
|
|
||||||
|
temp1 = TMR3109_VERT_MISO_READ;
|
||||||
|
temp2 = temp2 | (temp1 << i);
|
||||||
|
|
||||||
|
temp1 = 0;
|
||||||
|
temp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TMR3109_VERT_CLK_LOW;
|
||||||
|
TMR3109_VERT_MOSI_LOW;
|
||||||
|
|
||||||
|
return temp2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 读取俯仰转子的位置
|
||||||
|
* @param
|
||||||
|
* @retval 位置
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
float read_vertTmr3109Angle(void)
|
||||||
|
{
|
||||||
|
static float proportion = 360.0f / 8388608.0f;
|
||||||
|
static unsigned int temp;
|
||||||
|
static float angle;
|
||||||
|
// static unsigned int temp1;
|
||||||
|
|
||||||
|
// BSP_OS_SemWait(&ptz_vert_get_angle_mutex, 0u);
|
||||||
|
TMR3109_VERT_CSN_ENABLE;
|
||||||
|
tmr3109_delay_nop(20);
|
||||||
|
|
||||||
|
temp = tmr3109_vert_send_package(tmr3109_command_type(0b011, 0, 0, 0));
|
||||||
|
|
||||||
|
TMR3109_VERT_CSN_DISABLE;
|
||||||
|
|
||||||
|
if (check_tmr3109_angle((temp >> 5) & 0b11111111111111111111111) == ((temp >> 1) & 0x0F)) {
|
||||||
|
//crc校验成功
|
||||||
|
// pdebug(DEBUG_LEVEL_DEBUG, "crc check success\n");
|
||||||
|
angle = (float)((temp >> 5) & 0b11111111111111111111111) * proportion;
|
||||||
|
vert_tmr3109_angle_actual = (360.0 - angle);
|
||||||
|
|
||||||
|
// BSP_OS_SemPost(&ptz_vert_get_angle_mutex);
|
||||||
|
return vert_tmr3109_angle_actual;
|
||||||
|
}
|
||||||
|
|
||||||
|
// BSP_OS_SemPost(&ptz_vert_get_angle_mutex);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void as5047d_init()
|
||||||
|
{
|
||||||
|
tmr3109_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
float as5047d_hori_get_angle_a()
|
||||||
|
{
|
||||||
|
return read_horiTmr3109Angle();
|
||||||
|
}
|
||||||
|
|
||||||
|
float as5047d_vert_get_angle_a()
|
||||||
|
{
|
||||||
|
return read_vertTmr3109Angle();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,13 @@
|
||||||
#define __AS5047D_H_
|
#define __AS5047D_H_
|
||||||
#include "gd32f4xx.h"
|
#include "gd32f4xx.h"
|
||||||
|
|
||||||
|
#define TMR3109 1
|
||||||
|
|
||||||
|
#if !(AS5047) && !(TMR3109)
|
||||||
|
#define AS5047
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef AS5047
|
||||||
///水平AS5047D端口
|
///水平AS5047D端口
|
||||||
///CSn
|
///CSn
|
||||||
///将AS5047D_HORI的CSn引脚置为高电平
|
///将AS5047D_HORI的CSn引脚置为高电平
|
||||||
|
@ -167,3 +174,106 @@ unsigned int as5047d_vert_read_data_a();
|
||||||
unsigned int as5047d_hori_read_data_a();
|
unsigned int as5047d_hori_read_data_a();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef TMR3109
|
||||||
|
|
||||||
|
#define AS5047D_DIR_FWD 1 //磁编码器正向转动
|
||||||
|
#define AS5047D_DIR_REV 0 //磁编码器反向转动
|
||||||
|
|
||||||
|
///用于保存对接收数据的判断结果
|
||||||
|
///
|
||||||
|
///用于保存对接收数据的判断结果,并且详细保存出错的具体原因
|
||||||
|
///_master表示as5047d对接收到的指令判断的结果,_slave表示K60对as5047d返回的数据包判断结果
|
||||||
|
typedef struct _As5047DJudgeReceivePackage_
|
||||||
|
{
|
||||||
|
///接收到的数据包
|
||||||
|
unsigned int package;
|
||||||
|
|
||||||
|
///k60对AS5047D回复的数据进行判断
|
||||||
|
///判断接收的数据包效验码是否正确,1错误,0正常
|
||||||
|
unsigned char parity_error_package;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///AS5047D对接收到的K60指令进行判断,指令有错时的回复结果
|
||||||
|
///数据Error flag(EF)位,
|
||||||
|
unsigned char error_flag_command;
|
||||||
|
///校验错误,1错误,0正常
|
||||||
|
unsigned char parity_error_command;
|
||||||
|
///命令无效,1错误,0正常
|
||||||
|
unsigned char command_invalid_command;
|
||||||
|
///帧错误,1错误,0正常
|
||||||
|
unsigned char framing_error_command;
|
||||||
|
|
||||||
|
|
||||||
|
///数据操作是否成功,0不成功,1成功.即判断写入或者读取数据是否成功
|
||||||
|
unsigned char Operation_Result;
|
||||||
|
|
||||||
|
}As5047DJudgeReceivePackage;
|
||||||
|
|
||||||
|
///水平TMR3109端口
|
||||||
|
///CSn
|
||||||
|
///将TMR3109_HORI的CSn引脚置为高电平
|
||||||
|
#define TMR3109_HORI_CSN_DISABLE (gpio_bit_set(GPIOA,GPIO_PIN_15))
|
||||||
|
///将TMR3109_HORI的CSn引脚置为低电平
|
||||||
|
#define TMR3109_HORI_CSN_ENABLE (gpio_bit_reset(GPIOA,GPIO_PIN_15))
|
||||||
|
|
||||||
|
///CLK
|
||||||
|
///将TMR3109_HORI的CLK引脚置为高电平
|
||||||
|
#define TMR3109_HORI_CLK_HIGH (gpio_bit_set(GPIOC,GPIO_PIN_10))
|
||||||
|
///将TMR3109_HORI的CLK引脚置为低电平
|
||||||
|
#define TMR3109_HORI_CLK_LOW (gpio_bit_reset(GPIOC,GPIO_PIN_10))
|
||||||
|
|
||||||
|
///MISO
|
||||||
|
///TMR3109_HORI的MISO引脚相连的引脚的电平值
|
||||||
|
#define TMR3109_HORI_MISO_READ (gpio_input_bit_get(GPIOC,GPIO_PIN_11))
|
||||||
|
|
||||||
|
///MOSI
|
||||||
|
///将TMR3109_HORI的MOSI引脚置为高电平
|
||||||
|
#define TMR3109_HORI_MOSI_HIGH (gpio_bit_set(GPIOC,GPIO_PIN_12))
|
||||||
|
///将TMR3109_HORI的MOSI引脚置为低电平
|
||||||
|
#define TMR3109_HORI_MOSI_LOW (gpio_bit_reset(GPIOC,GPIO_PIN_12))
|
||||||
|
|
||||||
|
///垂直TMR3109端口
|
||||||
|
///垂直TMR3109_VERT芯片引脚控制
|
||||||
|
///CSn
|
||||||
|
///将TMR3109_VERT的CSn引脚置为高电平
|
||||||
|
#define TMR3109_VERT_CSN_DISABLE (gpio_bit_set(GPIOD,GPIO_PIN_0))
|
||||||
|
///将TMR3109_VERT的CSn引脚置为低电平
|
||||||
|
#define TMR3109_VERT_CSN_ENABLE (gpio_bit_reset(GPIOD,GPIO_PIN_0))
|
||||||
|
|
||||||
|
///CLK
|
||||||
|
///将TMR3109_VERT的CLK引脚置为高电平
|
||||||
|
#define TMR3109_VERT_CLK_HIGH (gpio_bit_set(GPIOD,GPIO_PIN_1))
|
||||||
|
///将TMR3109_VERT的CLK引脚置为低电平
|
||||||
|
#define TMR3109_VERT_CLK_LOW (gpio_bit_reset(GPIOD,GPIO_PIN_1))
|
||||||
|
|
||||||
|
///MISO
|
||||||
|
///读取与TMR3109_VERT的MISO引脚相连的引脚的电平值
|
||||||
|
#define TMR3109_VERT_MISO_READ (gpio_input_bit_get(GPIOD,GPIO_PIN_2))
|
||||||
|
|
||||||
|
///MOSI
|
||||||
|
///将TMR3109_VERT的MOSI引脚置为高电平
|
||||||
|
#define TMR3109_VERT_MOSI_HIGH (gpio_bit_set(GPIOD,GPIO_PIN_3))
|
||||||
|
///将TMR3109_VERT的MOSI引脚置为低电平
|
||||||
|
#define TMR3109_VERT_MOSI_LOW (gpio_bit_reset(GPIOD,GPIO_PIN_3))
|
||||||
|
|
||||||
|
/* Op_code对应的功能码 */
|
||||||
|
//写EEPROM操作
|
||||||
|
#define Write_ee 0b001
|
||||||
|
//写寄存器操作
|
||||||
|
#define Write_register 0b101
|
||||||
|
//读寄存器操作
|
||||||
|
#define Read_register 0b110
|
||||||
|
//模式切换操作
|
||||||
|
#define Change_mode 0b111
|
||||||
|
//读角度值操作
|
||||||
|
#define Read_angle 0b011
|
||||||
|
|
||||||
|
void as5047d_init();
|
||||||
|
float as5047d_hori_get_angle_a();
|
||||||
|
float as5047d_vert_get_angle_a();
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -360,21 +360,21 @@ void h_bldc_six_step()
|
||||||
H_Hall_state.Hall_value = h_hall_senser_value_get();
|
H_Hall_state.Hall_value = h_hall_senser_value_get();
|
||||||
if((H_Hall_state.Hall_value <= 6)&&(H_Hall_state.Hall_value >= 1))
|
if((H_Hall_state.Hall_value <= 6)&&(H_Hall_state.Hall_value >= 1))
|
||||||
{
|
{
|
||||||
// if(g_ptz.hori_direction_set == PTZ_HORI_DIR_RIGHT)
|
|
||||||
// {//电机正转- 1
|
|
||||||
// h_six_step_commu[(7-H_Hall_state.Hall_value) -1]();
|
|
||||||
// }else{//电机反转
|
|
||||||
// h_six_step_commu[H_Hall_state.Hall_value -1]();
|
|
||||||
// }
|
|
||||||
//直齿云台转向
|
|
||||||
if(g_ptz.hori_direction_set == PTZ_HORI_DIR_RIGHT)
|
if(g_ptz.hori_direction_set == PTZ_HORI_DIR_RIGHT)
|
||||||
{//电机正转- 1
|
{//电机正转- 1
|
||||||
|
|
||||||
h_six_step_commu[H_Hall_state.Hall_value -1]();
|
|
||||||
}else{//电机反转
|
|
||||||
h_six_step_commu[(7-H_Hall_state.Hall_value) -1]();
|
h_six_step_commu[(7-H_Hall_state.Hall_value) -1]();
|
||||||
|
}else{//电机反转
|
||||||
|
h_six_step_commu[H_Hall_state.Hall_value -1]();
|
||||||
}
|
}
|
||||||
|
//直齿云台转向
|
||||||
|
// if(g_ptz.hori_direction_set == PTZ_HORI_DIR_RIGHT)
|
||||||
|
// {//电机正转- 1
|
||||||
|
|
||||||
|
// h_six_step_commu[H_Hall_state.Hall_value -1]();
|
||||||
|
// }else{//电机反转
|
||||||
|
// h_six_step_commu[(7-H_Hall_state.Hall_value) -1]();
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -395,11 +395,17 @@ void v_bldc_six_step()
|
||||||
V_Hall_state.Hall_value = v_hall_senser_value_get();
|
V_Hall_state.Hall_value = v_hall_senser_value_get();
|
||||||
if((V_Hall_state.Hall_value <= 6)&&(V_Hall_state.Hall_value >= 1))
|
if((V_Hall_state.Hall_value <= 6)&&(V_Hall_state.Hall_value >= 1))
|
||||||
{
|
{
|
||||||
|
// if(g_ptz.vert_direction_set == PTZ_VERT_DIR_UP)
|
||||||
|
// {//电机正转- 1
|
||||||
|
// v_six_step_commu[V_Hall_state.Hall_value -1]();
|
||||||
|
// }else{//电机反转
|
||||||
|
// v_six_step_commu[(7-V_Hall_state.Hall_value) -1]();
|
||||||
|
// }
|
||||||
if(g_ptz.vert_direction_set == PTZ_VERT_DIR_UP)
|
if(g_ptz.vert_direction_set == PTZ_VERT_DIR_UP)
|
||||||
{//电机正转- 1
|
{//电机正转- 1
|
||||||
v_six_step_commu[V_Hall_state.Hall_value -1]();
|
|
||||||
}else{//电机反转
|
|
||||||
v_six_step_commu[(7-V_Hall_state.Hall_value) -1]();
|
v_six_step_commu[(7-V_Hall_state.Hall_value) -1]();
|
||||||
|
}else{//电机反转
|
||||||
|
v_six_step_commu[V_Hall_state.Hall_value -1]();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -420,7 +426,6 @@ void v_bldc_six_step()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief none 垂直方向调速,自锁
|
\brief none 垂直方向调速,自锁
|
||||||
\param[in] none
|
\param[in] none
|
||||||
|
|
|
@ -237,7 +237,7 @@ void ptz_uart_dev_send(device_handle device, void *data, int len)
|
||||||
if(device == uart_485_handle)
|
if(device == uart_485_handle)
|
||||||
{
|
{
|
||||||
PTZ_UART_485_TX;
|
PTZ_UART_485_TX;
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
|
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
|
||||||
|
|
||||||
for (int i = 0; i<len; i++)
|
for (int i = 0; i<len; i++)
|
||||||
{
|
{
|
||||||
|
@ -254,7 +254,7 @@ void ptz_uart_dev_send(device_handle device, void *data, int len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
|
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
|
||||||
PTZ_UART_485_RX;
|
PTZ_UART_485_RX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -825,7 +825,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfFile</name>
|
<name>IlinkIcfFile</name>
|
||||||
<state>D:\psx\Pan-Tilt\1.software\HY\6.0 MW22-01A\BSP\IAR\GD32F450xE_APP.icf</state>
|
<state>D:\psx\Pan-Tilt\1.software\HY\6.0 MW22-01A\BSP\IAR\GD32F450xE.icf</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfFileSlave</name>
|
<name>IlinkIcfFileSlave</name>
|
||||||
|
@ -2368,6 +2368,9 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\APP\Device\device_Other\device_dac_out.h</name>
|
<name>$PROJ_DIR$\..\APP\Device\device_Other\device_dac_out.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\APP\Device\device_Other\device_heat.c</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\APP\Device\device_Other\device_heatresistor.c</name>
|
<name>$PROJ_DIR$\..\APP\Device\device_Other\device_heatresistor.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
|
@ -2945,6 +2945,9 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\APP\Device\device_Other\device_dac_out.h</name>
|
<name>$PROJ_DIR$\..\APP\Device\device_Other\device_dac_out.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\APP\Device\device_Other\device_heat.c</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\APP\Device\device_Other\device_heatresistor.c</name>
|
<name>$PROJ_DIR$\..\APP\Device\device_Other\device_heatresistor.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
Loading…
Reference in New Issue