Browse Source

feature:1.完成Adc采集电池电压任务,低电量报警

pcb_v2
Zhangwen 3 months ago
parent
commit
a43fe6d4b6
  1. 3
      .vscode/settings.json
  2. 18
      keilp/cc_as_stc02_ps5ws.uvprojx
  3. 2
      source/app/app_config.c
  4. 4
      source/app/app_config.h
  5. 28
      source/app/main.c
  6. 70
      source/app/task_adc.c
  7. 12
      source/app/task_adc.h
  8. 7
      source/app/task_appstatus.c
  9. 3
      source/app/task_w600.h
  10. 2
      source/bsp/bsp_WT2605B.c
  11. 2
      source/bsp/bsp_WT2605B.h

3
.vscode/settings.json

@ -85,6 +85,7 @@
"task_pen_head.h": "c",
"setjmp.h": "c",
"algorithm": "c",
"task_w600_ptc.h": "c"
"task_w600_ptc.h": "c",
"task_adc.h": "c"
}
}

18
keilp/cc_as_stc02_ps5ws.uvprojx

@ -399,14 +399,19 @@
<FilePath>..\source\app\app_eeprom.c</FilePath>
</File>
<File>
<FileName>msp_adc.c</FileName>
<FileName>task_game.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\msp_adc.c</FilePath>
<FilePath>..\source\app\task_game.c</FilePath>
</File>
<File>
<FileName>task_game.c</FileName>
<FileName>task_w600_ptc.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_game.c</FilePath>
<FilePath>..\source\app\task_w600_ptc.c</FilePath>
</File>
<File>
<FileName>task_adc.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_adc.c</FilePath>
</File>
</Files>
</Group>
@ -493,6 +498,11 @@
<FileType>1</FileType>
<FilePath>..\source\msp\msp_eeprom.c</FilePath>
</File>
<File>
<FileName>msp_adc.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\msp_adc.c</FilePath>
</File>
</Files>
</Group>
<Group>

2
source/app/app_config.c

@ -18,7 +18,7 @@ void L3_param_init(void)
G.tail[0] = TAIL0;
G.tail[1] = TAIL1;
G.bat_percent = 0;
G.Vin = 0;
G.volume = 0x15;
//U8 i;

4
source/app/app_config.h

@ -107,8 +107,8 @@ typedef struct global_param
U8 head[2];
U8 tail[2];
// 电量百分比
U8 bat_percent;
// 电
U16 Vin;
// 喇叭音量
U8 volume;
//调试模式

28
source/app/main.c

@ -105,12 +105,14 @@ void main(void)
{
s_nos_tick.t1s_heartbeat = 0;//置0清空
L0_uart0_uc('.');
// L0_uart0_sendstr("ADC = ");
// L0_uart0_us(L1_ADC_Read(12));
L0_uart0_sendstr("ADC = ");
L0_uart0_ushex(_s_task_adc.adc_val[_s_task_adc.index]);
L0_uart0_0d0a();
L0_uart0_sendstr("Vin = ");
L0_uart0_ushex(G.Vin);
// L2_WT2605B_Broadcast(&audio_tcp_noplan);
}
// 游戏任务
L3_task_game_handler(&_s_task_game);
// if (ts_oid.ok == 1)
// {
@ -133,25 +135,25 @@ void main(void)
// 系统状态任务
L3_task_appstatus_handler(&_s_task_appstatus);
// 系统状态测试任务
// L3_task_AppTest_handler(&_s_task_apptest);
// 按键状态任务
L3_task_keystatus_handler(&_s_task_keystatus);
// adc任务
L3_task_Adc_handler(&_s_task_adc);
// OID和WIFI任务
// WIFI任务
if (R.app_status != POW_OFF)
{
// OID数据采集
L1_Oid_readoid();
// WIFI数据解析
L3_uart2_wifi_parse();
L2_task_W600_flow_handle(&_s_task_w600_para);
// 游戏任务
L3_task_game_handler(&_s_task_game);
// adc任务
L3_task_Adc_handler(&_s_task_adc);
}
// 系统状态测试任务
// L3_task_AppTest_handler(&_s_task_apptest);
#if 0
if(s_uart0_rec.ok)

70
source/app/task_adc.c

@ -2,6 +2,7 @@
#include "../msp/msp_adc.h"
#include "../app/app_config.h"
#include "../msp/uart0.h"
#include "../bsp/bsp_WT2605B.h"
@ -13,50 +14,81 @@ void L3_task_Adc_init(void)
L1_task_init(&_s_task_adc.task);
_s_task_adc.index = 0;
_s_task_adc.SUM = 0;
_s_task_adc.LowPower_Flag = 0;
_s_task_adc.LowPower_Count = 0;
L3_task_s_go(_s_task_adc,D_task_init);
}
#define D_task_ADC_READ 0x50
#define D_task_ADC_COUNT 0x51
#define D_task_LOWPOWER_DETECT 0x52
void L3_task_Adc_handler(S_TASK_ADC *s)
{
TTSS_Task_init()
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms);
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms);
TTSS_Task_step(D_task_ADC_READ)
s->adc_val[_s_task_adc.index] = L1_ADC_Read(12);
s->SUM += s->adc_val[_s_task_adc.index++];
if (_s_task_adc.index >= 10)
{
_s_task_adc.index = 0;
L2_task_go_Tdelay(D_task_ADC_COUNT,D_Tdelay_300ms);
L2_task_go_Tdelay(D_task_ADC_COUNT,D_Tdelay_100ms);
}
else
{
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms);
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms);
}
TTSS_Task_step(D_task_ADC_COUNT)
// U8 i;
// 计算平均值
U16 Aver = s->SUM / ADC_NUM;
s->Aver = s->SUM / ADC_NUM;
// L0_uart0_sendstr("s->SUM = ");
// L0_uart0_ulhex(s->SUM);
// L0_uart0_0d0a();
// L0_uart0_sendstr("s->Aver = ");
// L0_uart0_ushex(s->Aver);
s->SUM = 0;
// s->Variance = 0;
// 计算方差
U8 i;
FP32 Variance = 0;
for(i = 0; i < ADC_NUM; i++)
{
Variance += (s->adc_val[i] - Aver) * (s->adc_val[i] - Aver);
}
Variance /= ADC_NUM;
// // 方差合格,计算电量,放到G,不合格丢弃
// if ((U16)(Variance*10) < 2)
// for(i = 0; i < ADC_NUM; i++)
// {
// Vin = (Aver / 0x1000) * 3.3;
// Percent = Vin / 4.2
// S16 diff = s->adc_val[i] - s->Aver;
// s->Variance += diff >= 0 ? diff : -diff;
// }
Aver = 0;
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms);
// s->Variance /= ADC_NUM;
// if (s->Variance <= 200)
// {
// s->Vin = (s->Aver / 0x1000) * 33;
// }
// 分压 0.5
s->Vin = (s->Aver * 33 * 2) / 0x1000;
G.Vin = s->Vin;
L2_task_go_Tdelay(D_task_LOWPOWER_DETECT,D_Tdelay_100ms);
TTSS_Task_step(D_task_LOWPOWER_DETECT)
if (s->LowPower_Flag == 0)
{
if (s->Vin < Alarm_Vol)
{
s->LowPower_Count ++;
if (s->LowPower_Count > Count_Max)
{
L0_uart0_sendstr("s->Aver = ");
s->LowPower_Flag = 1;
// 语音提醒
L2_WT2605B_Broadcast(&audio_low_power);
s->LowPower_Count = 0;
}
}
else
{
s->LowPower_Count = 0;
}
}
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms);
TTSS_Task_end();
}

12
source/app/task_adc.h

@ -17,13 +17,23 @@
#include "../ctask/task.h"
#define ADC_NUM 10
//电压:3.65v 剩余容量:10%
#define Alarm_Vol 45
// 最大次数
#define Count_Max 5
typedef struct _s_task_adc
{
TS_task task;
U16 adc_val[ADC_NUM];
U8 index;
U16 SUM;
U32 SUM;
U32 Aver;
U32 Variance;
U16 Vin;
U8 LowPower_Flag;
// 计数
U8 LowPower_Count;
}S_TASK_ADC;
extern S_TASK_ADC _s_task_adc;

7
source/app/task_appstatus.c

@ -18,6 +18,8 @@
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../bsp/bsp_led.h"
#include "../app/task_game.h"
#include "../app/task_Adc.h"
#include "../app/task_w600.h"
#include "../bsp/bsp_wifi.h"
@ -83,6 +85,11 @@ void L3_task_appstatus_handler(S_TASK_APPSTATUS *s)
L2_OID_WIFI_Open();
//wifi任务初始化
L3_task_W600_flow_init(W600_ST);
// Adc任务初始化
L3_task_Adc_init();
// game任务初始化
L3_task_game_init();
}
else if (s->status == WIFI_CONFIG)

3
source/app/task_w600.h

@ -110,9 +110,6 @@ struct _s_task_W600_Para
U8 Recieve_QueryAck_Flag;
// 发送提交标志 1发送提交 0不发送提交
U8 Send_Submit_Flag;
};
extern struct _s_task_W600_Para _s_task_w600_para;

2
source/bsp/bsp_WT2605B.c

@ -29,6 +29,8 @@ TS_SPEECH_AUDIO audio_tcp_shulte = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x39,0x9
TS_SPEECH_AUDIO audio_tcp_complete = {0x7E,0x07,0xA3,0x54,0x30,0x32,0x30,0x90,0xEF}; //T020恭喜你,今天所有训练任务已完成
TS_SPEECH_AUDIO audio_tcp_noplan = {0x7E,0x07,0xA3,0x54,0x30,0x32,0x31,0x91,0xEF}; //T021今天暂无训练任务,可以进行自由训练哦
TS_SPEECH_AUDIO audio_low_power = {0x7E,0x07,0xA3,0x54,0x30,0x32,0x32,0x92,0xEF}; //T022
TS_SPEECH_VOLUME volume_control = {0x7E,0x04,0xAE,0x1E,0xD0,0xEF}; //音量控制

2
source/bsp/bsp_WT2605B.h

@ -49,6 +49,8 @@ extern TS_SPEECH_AUDIO audio_tcp_shulte;
extern TS_SPEECH_AUDIO audio_tcp_complete;
extern TS_SPEECH_AUDIO audio_tcp_noplan;
extern TS_SPEECH_AUDIO audio_low_power;
extern TS_SPEECH_VOLUME volume_control;
extern void L2_WT2605B_init();

Loading…
Cancel
Save