From 1b9253b0dc0088889bbf6b8aef187e4d7c7ea958 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B7=E5=BA=8A=E5=B0=B1=E7=8A=AF=E5=9B=B0?=
<11730503+psx123456@user.noreply.gitee.com>
Date: Mon, 14 Oct 2024 15:22:50 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=B5=E6=B5=81=E9=87=87?=
=?UTF-8?q?=E9=9B=86=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=80=BB=E8=83=BD=E9=87=8F?=
=?UTF-8?q?=E8=AE=A1=E7=AE=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.cproject | 2 +
.settings/language.settings.xml | 2 +-
App/inc/collect_Conversion.h | 11 +
App/inc/sl_protocol.h | 2 +
App/inc/task.h | 2 +
App/src/collect_Conversion.c | 48 +-
App/src/mppt_control.c | 3 +-
App/src/task.c | 15 +-
Drivers/RingQueue2/ring_queue2.c | 91 +
Drivers/RingQueue2/ring_queue2.h | 44 +
Hardware/src/adc.c | 2 +-
Hardware/src/tim.c | 13 +-
obj/App/src/collect_Conversion.d | 7 +-
obj/App/src/collect_Conversion.o | Bin 42908 -> 51360 bytes
obj/App/src/inflash.o | Bin 24468 -> 24584 bytes
obj/App/src/mppt_control.d | 8 +-
obj/App/src/mppt_control.o | Bin 74556 -> 75136 bytes
obj/App/src/sl_protocol.o | Bin 115956 -> 116076 bytes
obj/App/src/subdir.mk | 2 +-
obj/App/src/task.d | 5 +-
obj/App/src/task.o | Bin 117588 -> 120428 bytes
obj/Core/subdir.mk | 2 +-
obj/Debug/subdir.mk | 2 +-
obj/Drivers/RingQueue/subdir.mk | 2 +-
obj/Drivers/RingQueue2/ring_queue2.d | 4 +
obj/Drivers/RingQueue2/ring_queue2.o | Bin 0 -> 18400 bytes
obj/Drivers/RingQueue2/subdir.mk | 21 +
obj/Drivers/TimeSliceOffset/subdir.mk | 2 +-
obj/Hardware/src/adc.o | Bin 23696 -> 23696 bytes
obj/Hardware/src/gpio.o | Bin 44584 -> 44584 bytes
obj/Hardware/src/subdir.mk | 2 +-
obj/Hardware/src/tim.d | 14 +-
obj/Hardware/src/tim.o | Bin 47248 -> 53040 bytes
obj/Peripheral/src/subdir.mk | 2 +-
obj/User/main.o | Bin 17592 -> 17592 bytes
obj/User/subdir.mk | 2 +-
obj/makefile | 1 +
obj/mppt_Nos_V0.4.bin | Bin 36960 -> 37760 bytes
obj/mppt_Nos_V0.4.elf | Bin 369660 -> 382704 bytes
obj/mppt_Nos_V0.4.hex | 3954 ++---
obj/mppt_Nos_V0.4.lst | 20418 ++++++++++++------------
obj/mppt_Nos_V0.4.map | 1324 +-
obj/sources.mk | 1 +
43 files changed, 13319 insertions(+), 12689 deletions(-)
create mode 100644 Drivers/RingQueue2/ring_queue2.c
create mode 100644 Drivers/RingQueue2/ring_queue2.h
create mode 100644 obj/Drivers/RingQueue2/ring_queue2.d
create mode 100644 obj/Drivers/RingQueue2/ring_queue2.o
create mode 100644 obj/Drivers/RingQueue2/subdir.mk
diff --git a/.cproject b/.cproject
index f5042a1..80231f8 100644
--- a/.cproject
+++ b/.cproject
@@ -71,6 +71,7 @@
+
@@ -150,4 +151,5 @@
+
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index b8e2615..82daac9 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/App/inc/collect_Conversion.h b/App/inc/collect_Conversion.h
index 5bbec20..a46b35d 100644
--- a/App/inc/collect_Conversion.h
+++ b/App/inc/collect_Conversion.h
@@ -10,6 +10,16 @@
#include "debug.h"
#include "adc.h"
+#include "ring_queue2.h"
+
+#define adcBuffSize 100
+typedef struct _ADC_DATA{
+ RingQueue2 RQCHG_CURR;
+ RingQueue2 RQDSG_CURR;
+ int32_t total_CHG_CURR; /* 充电电流adc之和 */
+ int32_t total_DSG_CURR; /* 放电电流adc之和 */
+}ADC_DATA;
+extern ADC_DATA g_adcData;
float get_CHG_CURR(void);
float get_PV_VOLT_OUT(void);
@@ -18,5 +28,6 @@ float get_PV1_VOLT_IN(void);
float get_PV_VOLT_IN1(void);
float get_MOSFET_Temper(void);
float get_PV2_VOLT_IN(void);
+void currBuffInit(void);
#endif /* APP_INC_COLLECT_CONVERSION_H_ */
diff --git a/App/inc/sl_protocol.h b/App/inc/sl_protocol.h
index 27da218..9ccbd50 100644
--- a/App/inc/sl_protocol.h
+++ b/App/inc/sl_protocol.h
@@ -233,6 +233,8 @@ typedef struct _SL_Mppt_para{
float_t HighSideMos_Temperature; /* 高端mos的温度 */
uint16_t DischargMos_State; /* 放电mos的状态 */
uint16_t MPPT_Mode; /* 工作模式 */
+ float_t inPower; /* 总充电电量 */
+ float_t outPower; /* 总消耗电量 */
}SL_Mppt_para;
extern SL_Mppt_para g_Mppt_Para;
diff --git a/App/inc/task.h b/App/inc/task.h
index 44f2e83..038ce67 100644
--- a/App/inc/task.h
+++ b/App/inc/task.h
@@ -13,6 +13,8 @@
#include "uart_dev.h"
#include "math.h"
+
+
//extern uint8_t g_interruptNum;
void stop_mpptWork(void);
void start_mpptWork(void);
diff --git a/App/src/collect_Conversion.c b/App/src/collect_Conversion.c
index 384ff33..a23599e 100644
--- a/App/src/collect_Conversion.c
+++ b/App/src/collect_Conversion.c
@@ -129,6 +129,10 @@ const uint16_t mosTemperADC[mosTemperADCLen] = {
336 /* 100 ℃ */
};
+ADC_DATA g_adcData;
+static uint16_t CHG_buff[adcBuffSize];
+static uint16_t DSG_buff[adcBuffSize];
+
static uint16_t get_adc(uint8_t ADC_Channel);
static uint16_t get_aftercalculationAdc(uint8_t ADC_Channel);
@@ -144,7 +148,7 @@ uint16_t get_aftercalculationAdc(uint8_t ADC_Channel)
return middleAverageFilter(ADC_Channel);
}
-#define N 6
+#define N 4
/**
* @brief 中位值平均滤波
* @param ADC_Channel ADC通道
@@ -172,11 +176,11 @@ uint16_t middleAverageFilter(uint8_t ADC_Channel)
}
}
}
- for(i = 2; i < N-2; ++i)
+ for(i = 1; i < N-1; ++i)
{
sum += value_buf[i];
}
- return sum/(N-4);
+ return sum/(N-2);
}
/**
@@ -221,7 +225,16 @@ float get_CHG_CURR(void)
uint16_t I_ADC;
// I_ADC = Get_ConversionVal(get_adc(CHG_CURR));
+ OutRingQueue2(&g_adcData.RQCHG_CURR, &I_ADC);
+ g_adcData.total_CHG_CURR -= I_ADC;
+
I_ADC = get_aftercalculationAdc(CHG_CURR);
+ InRingQueue2(&g_adcData.RQCHG_CURR, I_ADC);
+ g_adcData.total_CHG_CURR += I_ADC;
+
+ I_ADC = g_adcData.total_CHG_CURR / (adcBuffSize - 1);
+
+
// I_ADC = get_adc(CHG_CURR);
// I = (float)(I_ADC) / 4095 * 3.3 * P_CHG_CURR * 2;
@@ -276,9 +289,21 @@ float get_DSG_CURR(void)
uint16_t I_ADC;
// I_ADC = Get_ConversionVal(get_adc(DSG_CURR));
- I_ADC = get_aftercalculationAdc(DSG_CURR);
+// I_ADC = get_aftercalculationAdc(DSG_CURR);
// I_ADC = get_adc(DSG_CURR);
+
+ OutRingQueue2(&g_adcData.RQDSG_CURR, &I_ADC);
+ g_adcData.total_DSG_CURR -= I_ADC;
+
+ I_ADC = get_aftercalculationAdc(DSG_CURR);
+ InRingQueue2(&g_adcData.RQDSG_CURR, I_ADC);
+ g_adcData.total_DSG_CURR += I_ADC;
+
+ I_ADC = g_adcData.total_DSG_CURR / (adcBuffSize - 1);
+
+
+
// I = (float)(I_ADC) / 4095 * 3.3 * P_DSG_CURR * 2;
I = (float)(I_ADC) / 4095 * 2.5 * P_DSG_CURR;
@@ -415,6 +440,19 @@ float get_PV2_VOLT_IN(void)
return V;
}
-
+void currBuffInit(void)
+{
+ InitRingQueue2(&g_adcData.RQCHG_CURR, CHG_buff, adcBuffSize);
+ InitRingQueue2(&g_adcData.RQDSG_CURR, DSG_buff, adcBuffSize);
+
+ while (InRingQueue2(&g_adcData.RQCHG_CURR, 0) != -2);
+ while (InRingQueue2(&g_adcData.RQDSG_CURR, 0) != -2);
+
+ g_adcData.total_CHG_CURR = 0;
+ g_adcData.total_DSG_CURR = 0;
+
+ printf("%d \n", RingQueueLength2(&g_adcData.RQCHG_CURR));
+ printf("%d \n", RingQueueLength2(&g_adcData.RQDSG_CURR));
+}
diff --git a/App/src/mppt_control.c b/App/src/mppt_control.c
index 5747cf6..8461103 100644
--- a/App/src/mppt_control.c
+++ b/App/src/mppt_control.c
@@ -836,8 +836,7 @@ void test(void)
// g_Mppt_Para.Discharg_Current = get_capturedata(get_DSG_CURR);
// g_Mppt_Para.Output_Voltage = get_capturedata(get_PV_VOLT_OUT);
// g_Mppt_Para.Battery_Voltage = g_Mppt_Para.Output_Voltage;
- g_Mppt_Para.Charg_Current = get_CHG_CURR();
- g_Mppt_Para.Discharg_Current = get_DSG_CURR();
+
g_Mppt_Para.Output_Voltage = get_PV_VOLT_OUT();
g_Mppt_Para.Input_Voltage = get_PV1_VOLT_IN();
diff --git a/App/src/task.c b/App/src/task.c
index 81074f3..531f62f 100644
--- a/App/src/task.c
+++ b/App/src/task.c
@@ -133,6 +133,14 @@ void Task_RunLED(void)
sprintf(buffer, " excessiveLoadFlag : %d \n", excessiveLoadFlag);
uart_dev_write(g_bat485_uart3_handle, buffer, sizeof(buffer));
+ memset(buffer, 0, sizeof(buffer));
+ sprintf(buffer, " inPower : %d \n", (int)(g_Mppt_Para.inPower));
+ uart_dev_write(g_bat485_uart3_handle, buffer, sizeof(buffer));
+
+ memset(buffer, 0, sizeof(buffer));
+ sprintf(buffer, " outPower : %d \n", (int)(g_Mppt_Para.outPower));
+ uart_dev_write(g_bat485_uart3_handle, buffer, sizeof(buffer));
+
memset(buffer, 0, sizeof(buffer));
sprintf(buffer, " 0.没有工作; 1.涓流模式; 2.恒流模式; 3.恒压模式; 4.浮充模式; 5.没有电池 : %d \n", g_Mppt_Para.MPPT_Mode);
uart_dev_write(g_bat485_uart3_handle, buffer, sizeof(buffer));
@@ -140,7 +148,6 @@ void Task_RunLED(void)
uart_dev_write(g_bat485_uart3_handle, " \n", sizeof(" \n"));
-
// printf("vout : %d/100 \n", (int)(get_capturedata(get_PV_VOLT_OUT) * 100));
// get_CHG_CURR();
@@ -809,7 +816,6 @@ void task_Init(void)
*/
void hardware_Init(void)
{
- TIM2_Init(1);
uart_dev_init();
PWM_TIM_Configuration();
// TIM_SetCompare4(TIM4, 0);
@@ -826,7 +832,10 @@ void hardware_Init(void)
// uart_dev_write(g_bat485_uart3_handle, " hello world \n", sizeof(" hello world \n"));
- TIM3_Init(10);
+ TIM3_Init(1);
// TIM_Cmd(TIM3, ENABLE); //TIM3使能
+
+ currBuffInit();
+ TIM2_Init(1);
}
diff --git a/Drivers/RingQueue2/ring_queue2.c b/Drivers/RingQueue2/ring_queue2.c
new file mode 100644
index 0000000..ce27fa3
--- /dev/null
+++ b/Drivers/RingQueue2/ring_queue2.c
@@ -0,0 +1,91 @@
+/*
+ * ring_queue.c
+ *
+ * Created on: 2024年6月21日
+ * Author: psx
+ */
+
+
+//循环队列
+#include
+#include
+#include "ring_queue2.h"
+
+//#define RING_QUEUE_DEBUG
+
+//#ifdef RING_QUEUE_DEBUG
+//#define //rq_debug term_printf
+//#else
+//void rq_debug(const char *fmt, ...){};
+//#endif
+
+#define RQ_OK 1
+#define RQ_ERROR 0
+#define RQ_OVERFLOW -2
+
+//初始化队列
+int InitRingQueue2(RingQueue2 *q, RQ_ElementType2 *buff, int size)
+{
+ q->elems = buff;
+ q->size = size;
+ q->front=q->rear=0;
+ return RQ_OK;
+}
+
+//遍历队列,
+//消费者使用,故对生产者可能修改的rear先读取缓存
+int ShowRingQueue2(RingQueue2 *q)
+{
+ //int i;
+ int rear = q->rear;
+
+ if(q->front == rear)
+ {
+ //rq_debug("队列为空\n");
+ return RQ_ERROR;
+ }
+ //rq_debug("队列中的元素为:\n");
+ //for(i=((q->front)%q->size); i != rear; i=((i+1)%q->size))
+ //rq_debug(" %c\n",q->elems[i]);
+
+ //rq_debug("\n");
+ //rq_debug("队首元素为%c\n",q->elems[q->front]);
+ //rq_debug("队尾元素为%c\n",q->elems[rear - 1]);
+ return RQ_OK;
+}
+
+//向队尾插入元素e
+int InRingQueue2(RingQueue2 *q,RQ_ElementType2 e)
+{
+ if(RingQueueFull2(q))
+ {
+ //rq_debug("空间不足\n");
+ return(RQ_OVERFLOW);
+ }
+ q->elems[q->rear] = e;
+ q->rear = (q->rear+1) % q->size;
+ //rq_debug("rear = %d\n",q->rear);
+ return RQ_OK;
+}
+
+//从队首取回并删除元素
+int OutRingQueue2(RingQueue2 *q, RQ_ElementType2 *e)
+{
+ if(RingQueueEmpty2(q))
+ {
+ //rq_debug("队列为空\n");
+ return RQ_ERROR;
+ }
+ *e = q->elems[q->front];
+ //rq_debug("被删除的队首元素为%c\n",q->elems[q->front]);
+ q->front = (q->front+1) % q->size;
+ return RQ_OK;
+}
+
+//队列中的元素个数
+int RingQueueLength2(RingQueue2 *q)
+{
+ return ((q->rear - q->front) + q->size) % q->size;
+}
+
+
diff --git a/Drivers/RingQueue2/ring_queue2.h b/Drivers/RingQueue2/ring_queue2.h
new file mode 100644
index 0000000..fa3ae9c
--- /dev/null
+++ b/Drivers/RingQueue2/ring_queue2.h
@@ -0,0 +1,44 @@
+/*
+ * ring_queue.h
+ *
+ * Created on: 2024年6月21日
+ * Author: psx
+ */
+
+#ifndef DRIVERS_RINGQUEUE_RING_QUEUE2_H_
+#define DRIVERS_RINGQUEUE_RING_QUEUE2_H_
+
+
+//#define RING_QUEUE_DEBUG //定义本宏会打印RingQueue的调试信息
+
+//typedef unsigned char RQ_ElementType2;//元素类型
+typedef uint16_t RQ_ElementType2;//元素类型
+
+typedef struct _ring_queue2
+{
+ RQ_ElementType2 *elems;
+ int size;
+ volatile int front, rear;
+}RingQueue2;
+
+//初始化队列,需传入保存队列状态的结构q,队列使用的buffer和buffer大小
+int InitRingQueue2(RingQueue2 *q, RQ_ElementType2 *buff, int size);
+
+#define RingQueueFull2(q) (((q)->rear+1) % (q)->size == (q)->front)
+#define RingQueueEmpty2(q) ((q)->front == (q)->rear)
+
+//遍历队列,
+//消费者使用,故对生产者可能修改的rear先读取缓存
+int ShowRingQueue2(RingQueue2 *q);
+
+//向队尾插入元素e
+int InRingQueue2(RingQueue2 *q,RQ_ElementType2 e);
+
+//从队首删除元素
+int OutRingQueue2(RingQueue2 *q, RQ_ElementType2 *e);
+
+//队列中的元素个数
+int RingQueueLength2(RingQueue2 *q);
+
+
+#endif /* DRIVERS_RINGQUEUE_RING_QUEUE_H_ */
diff --git a/Hardware/src/adc.c b/Hardware/src/adc.c
index 47fae23..067eb95 100644
--- a/Hardware/src/adc.c
+++ b/Hardware/src/adc.c
@@ -13,7 +13,7 @@ void ADC_all_Init(void)
RCC_PB2PeriphClockCmd(RCC_PB2Periph_ADC1, ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div2);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; //PA1~7对应ADC通道1~7
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6; //PA1~7对应ADC通道1~7
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
diff --git a/Hardware/src/tim.c b/Hardware/src/tim.c
index 68cd54d..2c53a88 100644
--- a/Hardware/src/tim.c
+++ b/Hardware/src/tim.c
@@ -10,6 +10,8 @@
#include "pwm.h"
#include "mppt_control.h"
#include "task.h"
+#include "collect_Conversion.h"
+#include "sl_protocol.h"
void TIM3_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void TIM2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
@@ -23,7 +25,7 @@ void TIM3_Init(uint16_t delay_ms)
/* 分频系数 */
uint16_t psc = (SystemCoreClock / 10000) - 1;
/* 周期数 */
- uint16_t arr = delay_ms * 1 - 1;
+ uint16_t arr = delay_ms * 10 - 1;
TIM3_Int_Init(arr, psc);
}
@@ -103,9 +105,12 @@ void TIM2_IRQHandler(void)
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { //检查TIM2中断是否发生。
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除TIM1的中断挂起位。
TimeSliceOffset_Produce();
-// if (outputAgainFlag == 1) {
-// outputAgainFlag = 0;
-// }
+
+ g_Mppt_Para.Charg_Current = get_CHG_CURR();
+ g_Mppt_Para.Discharg_Current = get_DSG_CURR();
+
+ g_Mppt_Para.inPower += g_Mppt_Para.Charg_Current * g_Mppt_Para.Output_Voltage;
+ g_Mppt_Para.outPower += g_Mppt_Para.Discharg_Current * g_Mppt_Para.Output_Voltage;
}
}
diff --git a/obj/App/src/collect_Conversion.d b/obj/App/src/collect_Conversion.d
index a5984d7..131ffc8 100644
--- a/obj/App/src/collect_Conversion.d
+++ b/obj/App/src/collect_Conversion.d
@@ -26,8 +26,9 @@ App/src/collect_Conversion.o: ../App/src/collect_Conversion.c \
D:\psx\MPPT\git\Peripheral\inc/ch32l103_misc.h \
D:\psx\MPPT\git\Peripheral\inc/ch32l103_lptim.h \
D:\psx\MPPT\git\Peripheral\inc/ch32l103_opa.h \
- D:\psx\MPPT\git\Hardware\inc/adc.h D:\psx\MPPT\git\Hardware\inc/gpio.h \
- D:\psx\MPPT\git\App\inc/uart_dev.h \
+ D:\psx\MPPT\git\Hardware\inc/adc.h \
+ D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h \
+ D:\psx\MPPT\git\Hardware\inc/gpio.h D:\psx\MPPT\git\App\inc/uart_dev.h \
D:\psx\MPPT\git\Drivers\RingQueue/ring_queue.h \
D:\psx\MPPT\git\Hardware\inc/rs485.h
@@ -91,6 +92,8 @@ D:\psx\MPPT\git\Peripheral\inc/ch32l103_opa.h:
D:\psx\MPPT\git\Hardware\inc/adc.h:
+D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h:
+
D:\psx\MPPT\git\Hardware\inc/gpio.h:
D:\psx\MPPT\git\App\inc/uart_dev.h:
diff --git a/obj/App/src/collect_Conversion.o b/obj/App/src/collect_Conversion.o
index 1626abaf8afb85f9601ecf1ce69356803216bc5e..ca1dbf59378e4af987e0063c50c312959af45a3b 100644
GIT binary patch
literal 51360
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
diff --git a/obj/App/src/inflash.o b/obj/App/src/inflash.o
index 3878df825cbbc3dee888d7facf41f88845a9fc2b..bdb1f7d2d1f9c83388633d60e467b23f683ff6a6 100644
GIT binary patch
delta 2756
zcmaKue{54#6vyxBwo*2_@d{M3F}kgD-Jo56t&BlnFvei8j=}gLV_o?nzZ7Xi5kfL*
zOh|+X2**hLWAQH&L?UVh{bLF-0ivM@27iz^i5iR;Hi!hHAq>xX_ucMo7;n<|KHu*-
z_r7!Ay}7S%oP}4T*Bw`Jqu|1l67Ie5Q{0H3OX!D
zTB=|T1gfCZVhf2W9In8h^TT!DQ-bVW`*`n9{;zkmz+1?VkhN5mt6KEIgDEUHJ$BUA
z?QMx&8+W7@lw^S|vGYZ#noD;<>TKCVn>N$Nm2h*4H|cr|(^KP6jXtjnzQU;2rTsNZ
z59=9!&~+Pjd+W6?Os)fjxQc17AI{)I>bDk)eSVmQQMz8kZl4PVvB&4q22FjAQlA@`
z_Ql~4`l=I9i9OXxxQ@kszjkc&&=Wf>LX5|lKLIvO`_IB%JQ#?>LF^Csp#Y16E@;46
z!FuS$?x3smglRUf&;nXbBOM^U2|uGA=dmy7hd#82>R~5FLoT?8&xH;{4?Ya}wVS3f
z)@2LPgtNjfxR0@L0*Wym_G@0#sNYe>J7}+oYo|>8Cgce50(RHDt+`FPyUAUPzK9Ew
z7>y*fYo;FGQ0#9^NA76jOg+|Hh4=;2)9ST_CigJ8tyo;^N`7p5qbJDy+%#f}^et1o
zm-I#Y$>tR2iJR%EN?*>z*s+OkNgpzztbZhZmsUeIr?_bqNu}tXFK$!9J$fCoImLa_
zla!j9i+!+44c?J
zES@d);;rfa-!h$!GOvN5;Qf0
z_1k>?rpIf@ZfRf6wywhjD_f@N*IH$U@as8c5Wzp^xF>OlGDCro0`8*st;OKnzNBLv
z9W_P^8+ST1g=4++nU&A0@7N%HX5|x#{~E`^{zjS4tny2U3%Aon2t3>{rFoM~X(Fvs
zmJzE*F)P1=xNx(~XI6d}anWY9%=5!$49#1R+$wX(&gAgkQspqKz76afH83l`mHlVr
zILyjlNvvvMRzBBLWYp$(ytq_u@j>h`LICx6PXuEE@p0)%pY-B1oC8RVX;^S63i`<_b^8#?EgJ>@oZSQ-^<;m&=?%<`t5Q
z@`+bUcA412yh{30nV*szVqQ(m^Pi>!F*oRtNqpqeUlHA-|27#eU^ZSmpFPkibIO>h
zphwiIOzdMeCPqiQfSAnZBO|R)B6l!eHGd@35-_VJDB&Dq?fKkQdxBZ*
z3Bt^q)+Z(lno7sk&;w|12{6`}t5bt=LC}0AO=a9?LT%*N}T
z?wsR|LR2Ee-0(X-8S}s{jMDWA?xgD(?1_0Sfi}DltAO9IpRD6Jq03{jj>Fkq74&Ci
zW0%MJKF!sZi$}Z4sKe%`({3To(OFYOwXDUucu`LI3?UkEb=+;~
J?7+Qo=f5Z0W5)mh
delta 2404
zcmZXWdu-EH6vxjgYuUou@$1}+Ep%JS>U3S#b_0rua}Ni@u?+@u8(Yhihp5^95yJ>c
z6BCIO!;EJ!Vib*uF$2*^(L{p|UDV772})FqiUtya@JbN1!HDPd{(jxvyvc4p-}AV?
zd+w`y<~WW|;`61L{a)E9Vrk+K-dlpIww$U(5~cDgm&h2>?vkz`
zaX9Dwg^5Q?ZJ5|m_9P}Qm;aM#gfqn_EgxRwevFcL$FPEWt33D_jZ}GztMgOtRKz9j
zH_}8^z44J|btAwuC94AX4psU+*h8)U09Mfm_fs^%mMb*v_ZWX_IWKU|_muRnL61jH8ql3gFii3Dx6f8VPyu1KJ-N!{?|n957C6IfEGh_tN&T
z2hY=Jco_32$q~ic{J!Ieaf;N&jJLGBJUhT+G*SDS;nrezvbBSH>pVC_BXz^Zl$P-g
z`+lcn-8I9eWjy2nI7P{&^~N&II>y!(YF*}u|E8_zLAHL$f2!p}g1MDPwe+#HPb`@*
z#d@FV75x?K>%7{k<-@nL;$83~>l<9HYNpL_m>vm1MS(j-A70-{Sy$l&p&H;!
zr2YA@igkwe!L_XK(foZf;7rSeO|0)o8!}<*EPn<(PIZw$e3xmJsk(XEd$p*AY
zvtW5*=ZanSdBI48Zq{F+Kkmz|2(hoNYkklP5$JA{)b6%)UJdyh$}vox4c?Mk6&b3j
zu^^pWM`H~?^Z9YdXsEHEXcNB}-1vEeaEjDsx(De1dt=Hg4$JFic0Wuf8&?)>R^ArP
zyH31=RNYj7Td2KR`e;*t`+ZF-i?;oLG}%`k?P^njHCm%Knw(SjBeb}=plFNA?bf_~
z%*Ezc5?hA>6IFQ20T`B^t{F
zv4`zazr0V_tAhA9IL$f2=CaF0#Xc2NF3c0U&8<>nzpz=EymPow#mjxNs+S{VRWBU3
zsxOovbE)M;wYEUm+JaJvG51~`DeFuKTW5kX{jpSG=7i)vTjTRl0aRO@o4W1RpfV$D
zPF(67TEPEc^!9h)dYa(=2}<^N;SyRi;I+3k^9w;c2E2HZ_7C`QfIj8EpDuF$3K>zK
z?N|q`h*t2A>tNJ}wKU46%WgWtrrmTV>T`^9t$$^aBUX-ksWRrn*Q$4_c_-;vg
diff --git a/obj/App/src/mppt_control.d b/obj/App/src/mppt_control.d
index b8a64c0..c94ff2f 100644
--- a/obj/App/src/mppt_control.d
+++ b/obj/App/src/mppt_control.d
@@ -27,8 +27,10 @@ App/src/mppt_control.o: ../App/src/mppt_control.c \
D:\psx\MPPT\git\Peripheral\inc/ch32l103_lptim.h \
D:\psx\MPPT\git\Peripheral\inc/ch32l103_opa.h \
D:\psx\MPPT\git\App\inc/collect_Conversion.h \
- D:\psx\MPPT\git\Hardware\inc/adc.h D:\psx\MPPT\git\Hardware\inc/pwm.h \
- D:\psx\MPPT\git\App\inc/inflash.h D:\psx\MPPT\git\Hardware\inc/gpio.h \
+ D:\psx\MPPT\git\Hardware\inc/adc.h \
+ D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h \
+ D:\psx\MPPT\git\Hardware\inc/pwm.h D:\psx\MPPT\git\App\inc/inflash.h \
+ D:\psx\MPPT\git\Hardware\inc/gpio.h \
D:\psx\MPPT\git\App\inc/sl_protocol.h D:\psx\MPPT\git\App\inc/uart_dev.h \
D:\psx\MPPT\git\Drivers\RingQueue/ring_queue.h \
D:\psx\MPPT\git\Hardware\inc/rs485.h D:\psx\MPPT\git\App\inc/task.h \
@@ -97,6 +99,8 @@ D:\psx\MPPT\git\App\inc/collect_Conversion.h:
D:\psx\MPPT\git\Hardware\inc/adc.h:
+D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h:
+
D:\psx\MPPT\git\Hardware\inc/pwm.h:
D:\psx\MPPT\git\App\inc/inflash.h:
diff --git a/obj/App/src/mppt_control.o b/obj/App/src/mppt_control.o
index 8d6ff9298c13a5aa25615724cc9a1c2d1764a291..7a133bd24502615d078641aac006b52e84a85341 100644
GIT binary patch
literal 75136
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