From 02d17c179ca435bc9fae46d108557d204ba1c370 Mon Sep 17 00:00:00 2001
From: "REASEARCHER\\18383" <1633026436@qq.com>
Date: Mon, 18 Aug 2025 13:33:48 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E5=9E=8B=E6=97=A0=E5=88=B7=EF=BC=8C?=
=?UTF-8?q?=E5=8A=A0=E7=83=AD=E7=89=88=E6=9C=AC=E9=BD=BF=E8=BD=AE=E4=BC=A0?=
=?UTF-8?q?=E5=8A=A8=EF=BC=8C=E8=9C=97=E8=BD=AE=E8=9C=97=E6=9D=86=E4=BC=A0?=
=?UTF-8?q?=E5=8A=A8=E6=AF=9480=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=A6=82?=
=?UTF-8?q?=E4=B8=8B=E4=BF=AE=E6=94=B9{=E7=A3=81=E7=BC=96=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=E3=80=81=E7=94=B5=E6=9C=BA=E9=80=9F=E5=BA=A6=E8=AE=A1?=
=?UTF-8?q?=E7=AE=97=E4=BF=AE=E6=94=B9=E3=80=81=E7=94=B5=E6=9C=BA=E8=BF=87?=
=?UTF-8?q?=E6=B5=81=E4=BF=9D=E6=8A=A4=E4=BF=AE=E6=94=B9=E3=80=81485?=
=?UTF-8?q?=E8=AF=BB=E5=86=99=E5=BB=B6=E6=97=B6=E5=87=8F=E5=B0=8F=E3=80=81?=
=?UTF-8?q?=E9=A1=B6=E9=83=A8=E5=BC=80=E5=85=B3=E4=BF=9D=E5=AD=98=E3=80=81?=
=?UTF-8?q?=E5=8A=A0=E7=83=AD=E6=8E=A2=E5=A4=B4}=EF=BC=8C=E5=88=9D?=
=?UTF-8?q?=E5=A7=8B=E7=89=88=E6=9C=AC=E6=9C=AA=E5=AE=9E=E6=B5=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Hyt2/APP/Appcfg/app.c | 36 +-
Hyt2/APP/Common/ptz_default_value.h | 11 +-
.../Device/device_Other/device_adc_collect.c | 51 +-
Hyt2/APP/Device/device_Other/device_heat.c | 493 ++++++++++++++++++
Hyt2/APP/Device/device_Other/device_heat.h | 12 +
Hyt2/BSP/Driver/as5047d/as5047d.h | 2 +-
Hyt2/BSP/Driver/full_bridge/full_bridge.c | 8 +-
Hyt2/BSP/IAR/GD32F450xE.icf | 4 +-
Hyt2/PROJECT/OS2.ewp | 8 +-
Hyt2/PROJECT/OS2.ewt | 6 +
10 files changed, 577 insertions(+), 54 deletions(-)
create mode 100644 Hyt2/APP/Device/device_Other/device_heat.c
create mode 100644 Hyt2/APP/Device/device_Other/device_heat.h
diff --git a/Hyt2/APP/Appcfg/app.c b/Hyt2/APP/Appcfg/app.c
index ac40624..4303ac1 100644
--- a/Hyt2/APP/Appcfg/app.c
+++ b/Hyt2/APP/Appcfg/app.c
@@ -49,6 +49,7 @@
#include "Timer.h"
#include "systick.h"
#include "service_error_count.h"
+#include "device_heat.h"
void task_printf_init();
@@ -176,6 +177,7 @@ static void task_start (void *p_arg)
// term_printf("\n power off init \r\n\r\n");
//数据采集初始化电压、电流、温度
init_data_collect_module();
+ Init_ptz_heat_data_collect_task();
// term_printf("\n data collect init \r\n\r\n");
OSTimeDlyHMSM(0u, 0u, 1u, 0u);
@@ -195,7 +197,7 @@ static void task_start (void *p_arg)
// term_printf("\n angle init \r\n\r\n");
-// task_printf_init();
+ task_printf_init();
//自检模块初始化
@@ -268,21 +270,23 @@ int main (void)
*/
static void task_print()
{
- OS_TCB *p_tcb;
- OS_STK_DATA stkDat;
- p_tcb = &OSTCBTbl[0];
-
- char cpuusage = OSCPUUsage;
-
- term_printf(" Prio Used Free Per cpuusage TaskName\r\n");
- while(p_tcb != NULL)
- {
- OSTaskStkChk(p_tcb->OSTCBPrio, &stkDat);
- term_printf(" %2d %5d %5d %02d%% %d %s\r\n ",p_tcb->OSTCBPrio, stkDat.OSUsed, stkDat.OSFree, (stkDat.OSUsed * 100)/(stkDat.OSUsed + stkDat.OSFree), cpuusage, p_tcb->OSTCBTaskName);
- p_tcb = p_tcb->OSTCBPrev;
- }
- term_printf("\r\n");
- OSTimeDlyHMSM(0u, 0u, 1u, 0u);
+// OS_TCB *p_tcb;
+// OS_STK_DATA stkDat;
+// p_tcb = &OSTCBTbl[0];
+//
+// char cpuusage = OSCPUUsage;
+//
+// term_printf(" Prio Used Free Per cpuusage TaskName\r\n");
+// while(p_tcb != NULL)
+// {
+// OSTaskStkChk(p_tcb->OSTCBPrio, &stkDat);
+// term_printf(" %2d %5d %5d %02d%% %d %s\r\n ",p_tcb->OSTCBPrio, stkDat.OSUsed, stkDat.OSFree, (stkDat.OSUsed * 100)/(stkDat.OSUsed + stkDat.OSFree), cpuusage, p_tcb->OSTCBTaskName);
+// p_tcb = p_tcb->OSTCBPrev;
+// }
+// term_printf("\r\n");
+ ptz_uart_dev_send(uart_485_handle, TempInfoGet(),80 );
+
+ OSTimeDlyHMSM(0u, 0u, 10u, 0u);
}
static void task_print_task()
diff --git a/Hyt2/APP/Common/ptz_default_value.h b/Hyt2/APP/Common/ptz_default_value.h
index 0b4b671..2e96f9e 100644
--- a/Hyt2/APP/Common/ptz_default_value.h
+++ b/Hyt2/APP/Common/ptz_default_value.h
@@ -98,11 +98,12 @@
/**********************************************************/
///ű͵֮ļٱ
- #define PTZ_VERT_MOTOR_RATIO 75.0//(50.0 * (52.0 / 35.0))//20.0
+// #define PTZ_VERT_MOTOR_RATIO 75.0//(50.0 * (52.0 / 35.0))//20.0
+ #define PTZ_VERT_MOTOR_RATIO 35.15//(50.0 * (52.0 / 35.0))//20.0
///ų֮̋ļٱ
#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//4011.429//1080.0
///ֱģѹֵ
#define PTZ_VERT_VR_MAX 1999
///ֱģѹСֵ
@@ -114,11 +115,11 @@
///ֱСת
#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.74//2.7
///ֱ̨Сת
- #define PTZ_VERT_MIN_SPEED 0.07//0.1//0.15//0.5
+ #define PTZ_VERT_MIN_SPEED 0.15//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.7//2.0
//ż
diff --git a/Hyt2/APP/Device/device_Other/device_adc_collect.c b/Hyt2/APP/Device/device_Other/device_adc_collect.c
index 7008c18..e7259bf 100644
--- a/Hyt2/APP/Device/device_Other/device_adc_collect.c
+++ b/Hyt2/APP/Device/device_Other/device_adc_collect.c
@@ -350,7 +350,7 @@ static void Ntc_value()//ADC1
float H_temp_f,V_temp_f;//ʼ¶,¶
short int H_temp,V_temp;//¶,¶
- adc_software_trigger_enable(ADC1,ADC_INSERTED_CHANNEL);
+ adc_software_trigger_enable(ADC1,ADC_REGULAR_INSERTED_CHANNEL);
asm ("nop");
asm ("nop");
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);
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 ++;
if(adc0_num >= 5)
@@ -495,7 +496,7 @@ static void ptz_temperature_collect_tmp75_task()
//ɼ
static char ptz_data_collect_task()
{
- int i=0,j=0;
+// int i=0,j=0;
while(1)
{
@@ -510,30 +511,30 @@ static char ptz_data_collect_task()
V_ADC0_Phase_current();
}
- if(j >= 100)
- {
- j=0;
- //̨Լرգɼ
-#ifndef PTZ_NO_SELF_CHECK
- ptz_Voltage_collect_adc1_task();
-#endif
- OSTimeDlyHMSM(0u, 0u, 0u, 2u);
- ptz_Current_collect_adc1_task();
-// OSTimeDlyHMSM(0u, 0u, 0u, 50u);
- }
-
- if(i >= 3000)
- {//¶ȲɼƵ
- ptz_temperature_collect_tmp75_task();
- //·¶Ȳɼ
- Ntc_value();
- i=0;
- }
+// if(j >= 100)
+// {
+// j=0;
+// //̨Լرգɼ
+//#ifndef PTZ_NO_SELF_CHECK
+// ptz_Voltage_collect_adc1_task();
+//#endif
+// OSTimeDlyHMSM(0u, 0u, 0u, 2u);
+// ptz_Current_collect_adc1_task();
+//// OSTimeDlyHMSM(0u, 0u, 0u, 50u);
+// }
+//
+// if(i >= 3000)
+// {//¶ȲɼƵ
+// ptz_temperature_collect_tmp75_task();
+// //·¶Ȳɼ
+// Ntc_value();
+// i=0;
+// }
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
- i++;
- j++;
+// i++;
+// j++;
}
}
@@ -569,7 +570,7 @@ static void creat_task_data_collect(void)
void init_data_collect_module(void)
{
//#ifndef PTZ_NO_SELF_CHECK
- ADC1_Init();//ADɼųʼ
+// ADC1_Init();//ADɼųʼ
//#endif
ADC2_Init();//ADɼųʼ
ADC0_Init();//ADɼųʼ
diff --git a/Hyt2/APP/Device/device_Other/device_heat.c b/Hyt2/APP/Device/device_Other/device_heat.c
new file mode 100644
index 0000000..89a7fef
--- /dev/null
+++ b/Hyt2/APP/Device/device_Other/device_heat.c
@@ -0,0 +1,493 @@
+#include "stdio.h"
+#include "device_heat.h"
+#include "gd32f4xx.h"
+#include "ptz_struct.h"
+#include "agent_hyt.h"
+#include "pdebug.h"
+#include "cpu.h"
+#include "tmp75.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 < -25 || g_ptz.V_boad_temp < -25
+ || m_heatData.ext_ntc1 < -25 || m_heatData.ext_ntc2 < -25) {
+ startHeat();
+ }
+ else if (g_ptz.H_boad_temp > -15 && g_ptz.V_boad_temp > -15
+ && m_heatData.ext_ntc1 > -15 && m_heatData.ext_ntc2 > -15) {
+ closeHeat();
+ }
+}
+
+
+//温度采集
+static void ptz_temperature_collect_tmp75_task()
+{
+ static float tmp75[5];
+ static unsigned char tmp75_num;
+ float curtmp75;
+ float tem;
+ int j,k;
+ tmp75[tmp75_num] = tmp75_read_temp();
+ tmp75_num ++;
+ if(tmp75_num >= 5)
+ {
+ tmp75_num = 0;
+ for(j = 0; j < 5-1; j++)//采样值由小到大排列
+ {
+ for(k = 0; k < 5-j-1; k++)
+ {
+ if(tmp75[k] > tmp75[k+1])
+ {
+ tem = tmp75[k];
+ tmp75[k] = tmp75[k+1];
+ tmp75[k+1] = tem;
+ }
+ }
+ }
+ for(uint8_t i = 1; i < 5 - 1; i++)
+ {
+ curtmp75 = curtmp75 + tmp75[i];//去掉一个最大值和一个最小值
+ }
+ curtmp75 = curtmp75 / ((float)(5 - 2));
+ g_ptz.temperature = curtmp75;
+ memset(tmp75,0,sizeof(tmp75));
+// pdebug(DEBUG_LEVEL_INFO,"get ptz Temperature: %.3f℃",g_ptz.temperature);
+ }
+
+}
+
+/*!
+ \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_temperature_collect_tmp75_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();
+}
+
+static char g_str[80];
+char* TempInfoGet(void)
+{
+ /*加热*/
+ if ( gpio_input_bit_get(HEAT_PORT, HEAT_PIN) )
+ {
+ sprintf(g_str, "extTemp1 = %.2f, extTemp2 = %.2f,heating!\r\nH_Temp = %.2f, V_Temp = %.2f\r\n\r\n", m_heatData.ext_ntc1, m_heatData.ext_ntc2, g_ptz.H_boad_temp, g_ptz.V_boad_temp);
+ }
+ else
+ {
+ sprintf(g_str, "extTemp1 = %.2f, extTemp2 = %.2f,Noheating!\r\nH_Temp = %.2f, V_Temp = %.2f\r\n\r\n", m_heatData.ext_ntc1, m_heatData.ext_ntc2, g_ptz.H_boad_temp, g_ptz.V_boad_temp);
+ }
+ return &g_str[0];
+}
+
+
+
diff --git a/Hyt2/APP/Device/device_Other/device_heat.h b/Hyt2/APP/Device/device_Other/device_heat.h
new file mode 100644
index 0000000..fda8076
--- /dev/null
+++ b/Hyt2/APP/Device/device_Other/device_heat.h
@@ -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();
+char* TempInfoGet(void);
+
+#endif
diff --git a/Hyt2/BSP/Driver/as5047d/as5047d.h b/Hyt2/BSP/Driver/as5047d/as5047d.h
index b0074c1..5c4f24a 100644
--- a/Hyt2/BSP/Driver/as5047d/as5047d.h
+++ b/Hyt2/BSP/Driver/as5047d/as5047d.h
@@ -2,7 +2,7 @@
#define __AS5047D_H_
#include "gd32f4xx.h"
-//#define TMR3109 1
+#define TMR3109 1
#if !(AS5047) && !(TMR3109)
#define AS5047
diff --git a/Hyt2/BSP/Driver/full_bridge/full_bridge.c b/Hyt2/BSP/Driver/full_bridge/full_bridge.c
index dda1723..e503915 100644
--- a/Hyt2/BSP/Driver/full_bridge/full_bridge.c
+++ b/Hyt2/BSP/Driver/full_bridge/full_bridge.c
@@ -370,9 +370,9 @@ void h_bldc_six_step()
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]();
+ }else{//ת
+ h_six_step_commu[H_Hall_state.Hall_value -1]();
}
@@ -397,9 +397,9 @@ void v_bldc_six_step()
{
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]();
+ }else{//ת
+ v_six_step_commu[V_Hall_state.Hall_value -1]();
}
diff --git a/Hyt2/BSP/IAR/GD32F450xE.icf b/Hyt2/BSP/IAR/GD32F450xE.icf
index 67e4732..3074568 100644
--- a/Hyt2/BSP/IAR/GD32F450xE.icf
+++ b/Hyt2/BSP/IAR/GD32F450xE.icf
@@ -2,9 +2,9 @@
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
-define symbol __ICFEDIT_intvec_start__ = 0x08010000;
+define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
-define symbol __ICFEDIT_region_ROM_start__ = 0x08010000;
+define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;
define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__ = 0x2002FFFF;
diff --git a/Hyt2/PROJECT/OS2.ewp b/Hyt2/PROJECT/OS2.ewp
index 9560210..ac274ae 100644
--- a/Hyt2/PROJECT/OS2.ewp
+++ b/Hyt2/PROJECT/OS2.ewp
@@ -825,7 +825,7 @@