475 lines
9.3 KiB
C
475 lines
9.3 KiB
C
![]() |
/*
|
|||
|
* fml_adc.c
|
|||
|
*
|
|||
|
* Created on: 2025骞<EFBFBD>4鏈<EFBFBD>7鏃<EFBFBD>
|
|||
|
* Author: 22332
|
|||
|
*/
|
|||
|
#include <stdio.h>
|
|||
|
#include "cola_init.h"
|
|||
|
#include "cola_os.h"
|
|||
|
#include "cola_device.h"
|
|||
|
#include "fml_adc.h"
|
|||
|
static task_t gadcTask;
|
|||
|
extern void logWrite(const char *fmt, ...);
|
|||
|
|
|||
|
static const cola_device_t *g_pDevadc = NULL;
|
|||
|
|
|||
|
uint16_t adc_temp_value[10];
|
|||
|
uint16_t adc_batt_value[10];
|
|||
|
|
|||
|
uint16_t V_battery_ad = 0;
|
|||
|
uint16_t adc_temp = 0;
|
|||
|
float V_battery_ad_3V3;
|
|||
|
uint16_t adc_filter(uint16_t *adc_values) {
|
|||
|
uint16_t sum = 0;
|
|||
|
uint16_t min, max;
|
|||
|
uint8_t i;
|
|||
|
|
|||
|
// 1. 采集10次ADC值(这里需要替换为实际的ADC读取函数)
|
|||
|
|
|||
|
// 2. 找出最大值和最小值
|
|||
|
min = max = adc_values[0];
|
|||
|
for (i = 1; i < 10; i++) {
|
|||
|
if (adc_values[i] < min) {
|
|||
|
min = adc_values[i];
|
|||
|
}
|
|||
|
if (adc_values[i] > max) {
|
|||
|
max = adc_values[i];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 3. 计算去掉最大最小值后的和
|
|||
|
uint8_t count = 0;
|
|||
|
for (i = 0; i < 10; i++) {
|
|||
|
if (adc_values[i] != min && adc_values[i] != max) {
|
|||
|
sum += adc_values[i];
|
|||
|
count++;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 处理所有值相同的情况(避免除以0)
|
|||
|
if (count == 0) {
|
|||
|
return adc_values[9]; // 如果所有值相同,直接返回平均值
|
|||
|
}
|
|||
|
|
|||
|
// 4. 计算平均值并返回
|
|||
|
return sum / count;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void fml_adc_read_polling(void *arg, uint32_t event)
|
|||
|
{
|
|||
|
static uint8_t i,j;
|
|||
|
adc_batt_value[i++] = cola_device_read(g_pDevadc,2,0,0);
|
|||
|
adc_temp_value[j++] = cola_device_read(g_pDevadc,3,0,0);
|
|||
|
if((i==10) &&(j==10))
|
|||
|
{
|
|||
|
V_battery_ad = adc_filter(adc_batt_value);
|
|||
|
adc_temp = adc_filter(adc_temp_value);
|
|||
|
i = j = 0;
|
|||
|
logWrite("V_battery_ad = %d\r\n",V_battery_ad);
|
|||
|
logWrite("adc_temp = %d\r\n",fml_adc_read_once_temp());
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void fml_adc_init(void)
|
|||
|
{
|
|||
|
g_pDevadc = cola_device_find("DEVICE_ADC");
|
|||
|
if(g_pDevadc)
|
|||
|
cola_device_open(g_pDevadc, 0);
|
|||
|
V_battery_ad = cola_device_read(g_pDevadc,2,0,0);
|
|||
|
adc_temp = cola_device_read(g_pDevadc,3,0,0);
|
|||
|
cola_timer_create(&gadcTask, fml_adc_read_polling, NULL);
|
|||
|
cola_timer_start(&gadcTask, EN_COLA_TIMER_ALWAYS, 100);
|
|||
|
}
|
|||
|
|
|||
|
uint8_t fml_adc_read_once_temp(void)
|
|||
|
{
|
|||
|
//V_temp_ad = cola_device_read(g_pDevadc,3,0,0);
|
|||
|
if(adc_temp<252)
|
|||
|
return 190;
|
|||
|
else if(adc_temp<257)
|
|||
|
return 189;
|
|||
|
else if(adc_temp<262)
|
|||
|
return 188;
|
|||
|
else if(adc_temp<267)
|
|||
|
return 187;
|
|||
|
else if(adc_temp<273)
|
|||
|
return 186;
|
|||
|
else if(adc_temp<278)
|
|||
|
return 185;
|
|||
|
else if(adc_temp<284)
|
|||
|
return 184;
|
|||
|
else if(adc_temp<289)
|
|||
|
return 183;
|
|||
|
else if(adc_temp<295)
|
|||
|
return 182;
|
|||
|
else if(adc_temp<301)
|
|||
|
return 181;
|
|||
|
else if(adc_temp<307)
|
|||
|
return 180;
|
|||
|
else if(adc_temp<313)
|
|||
|
return 179;
|
|||
|
else if(adc_temp<319)
|
|||
|
return 178;
|
|||
|
else if(adc_temp<326)
|
|||
|
return 177;
|
|||
|
else if(adc_temp<332)
|
|||
|
return 176;
|
|||
|
else if(adc_temp<339)
|
|||
|
return 175;
|
|||
|
else if(adc_temp<346)
|
|||
|
return 174;
|
|||
|
else if(adc_temp<353)
|
|||
|
return 173;
|
|||
|
else if(adc_temp<360)
|
|||
|
return 172;
|
|||
|
else if(adc_temp<368)
|
|||
|
return 171;
|
|||
|
else if(adc_temp<375)
|
|||
|
return 170;
|
|||
|
else if(adc_temp<383)
|
|||
|
return 169;
|
|||
|
else if(adc_temp<391)
|
|||
|
return 168;
|
|||
|
else if(adc_temp<399)
|
|||
|
return 167;
|
|||
|
else if(adc_temp<407)
|
|||
|
return 166;
|
|||
|
else if(adc_temp<416)
|
|||
|
return 165;
|
|||
|
else if(adc_temp<425)
|
|||
|
return 164;
|
|||
|
else if(adc_temp<433)
|
|||
|
return 163;
|
|||
|
else if(adc_temp<442)
|
|||
|
return 162;
|
|||
|
else if(adc_temp<452)
|
|||
|
return 161;
|
|||
|
else if(adc_temp<461)
|
|||
|
return 160;
|
|||
|
else if(adc_temp<471)
|
|||
|
return 159;
|
|||
|
else if(adc_temp<481)
|
|||
|
return 158;
|
|||
|
else if(adc_temp<491)
|
|||
|
return 157;
|
|||
|
else if(adc_temp<501)
|
|||
|
return 156;
|
|||
|
else if(adc_temp<512)
|
|||
|
return 155;
|
|||
|
else if(adc_temp<523)
|
|||
|
return 154;
|
|||
|
else if(adc_temp<534)
|
|||
|
return 153;
|
|||
|
else if(adc_temp<545)
|
|||
|
return 152;
|
|||
|
else if(adc_temp<557)
|
|||
|
return 151;
|
|||
|
else if(adc_temp<569)
|
|||
|
return 150;
|
|||
|
else if(adc_temp<581)
|
|||
|
return 149;
|
|||
|
else if(adc_temp<593)
|
|||
|
return 148;
|
|||
|
else if(adc_temp<606)
|
|||
|
return 147;
|
|||
|
else if(adc_temp<619)
|
|||
|
return 146;
|
|||
|
else if(adc_temp<632)
|
|||
|
return 145;
|
|||
|
else if(adc_temp<646)
|
|||
|
return 144;
|
|||
|
else if(adc_temp<660)
|
|||
|
return 143;
|
|||
|
else if(adc_temp<674)
|
|||
|
return 142;
|
|||
|
else if(adc_temp<688)
|
|||
|
return 141;
|
|||
|
else if(adc_temp<703)
|
|||
|
return 140;
|
|||
|
else if(adc_temp<718)
|
|||
|
return 139;
|
|||
|
else if(adc_temp<734)
|
|||
|
return 138;
|
|||
|
else if(adc_temp<750)
|
|||
|
return 137;
|
|||
|
else if(adc_temp<766)
|
|||
|
return 136;
|
|||
|
else if(adc_temp<782)
|
|||
|
return 135;
|
|||
|
else if(adc_temp<799)
|
|||
|
return 134;
|
|||
|
else if(adc_temp<816)
|
|||
|
return 133;
|
|||
|
else if(adc_temp<834)
|
|||
|
return 132;
|
|||
|
else if(adc_temp<852)
|
|||
|
return 131;
|
|||
|
else if(adc_temp<870)
|
|||
|
return 130;
|
|||
|
else if(adc_temp<889)
|
|||
|
return 129;
|
|||
|
else if(adc_temp<908)
|
|||
|
return 128;
|
|||
|
else if(adc_temp<927)
|
|||
|
return 127;
|
|||
|
else if(adc_temp<947)
|
|||
|
return 126;
|
|||
|
else if(adc_temp<967)
|
|||
|
return 125;
|
|||
|
else if(adc_temp<987)
|
|||
|
return 124;
|
|||
|
else if(adc_temp<1008)
|
|||
|
return 123;
|
|||
|
else if(adc_temp<1029)
|
|||
|
return 122;
|
|||
|
else if(adc_temp<1051)
|
|||
|
return 121;
|
|||
|
else if(adc_temp<1073)
|
|||
|
return 120;
|
|||
|
else if(adc_temp<1096)
|
|||
|
return 119;
|
|||
|
else if(adc_temp<1119)
|
|||
|
return 118;
|
|||
|
else if(adc_temp<1142)
|
|||
|
return 117;
|
|||
|
else if(adc_temp<1166)
|
|||
|
return 116;
|
|||
|
else if(adc_temp<1190)
|
|||
|
return 115;
|
|||
|
else if(adc_temp<1215)
|
|||
|
return 114;
|
|||
|
else if(adc_temp<1240)
|
|||
|
return 113;
|
|||
|
else if(adc_temp<1265)
|
|||
|
return 112;
|
|||
|
else if(adc_temp<1291)
|
|||
|
return 111;
|
|||
|
else if(adc_temp<1317)
|
|||
|
return 110;
|
|||
|
else if(adc_temp<1344)
|
|||
|
return 109;
|
|||
|
else if(adc_temp<1371)
|
|||
|
return 108;
|
|||
|
else if(adc_temp<1398)
|
|||
|
return 107;
|
|||
|
else if(adc_temp<1426)
|
|||
|
return 106;
|
|||
|
else if(adc_temp<1454)
|
|||
|
return 105;
|
|||
|
else if(adc_temp<1482)
|
|||
|
return 104;
|
|||
|
else if(adc_temp<1511)
|
|||
|
return 103;
|
|||
|
else if(adc_temp<1541)
|
|||
|
return 102;
|
|||
|
else if(adc_temp<1570)
|
|||
|
return 101;
|
|||
|
else if(adc_temp<1600)
|
|||
|
return 100;
|
|||
|
else if(adc_temp<1631)
|
|||
|
return 99;
|
|||
|
else if(adc_temp<1663)
|
|||
|
return 98;
|
|||
|
else if(adc_temp<1694)
|
|||
|
return 97;
|
|||
|
else if(adc_temp<1726)
|
|||
|
return 96;
|
|||
|
else if(adc_temp<1758)
|
|||
|
return 95;
|
|||
|
else if(adc_temp<1791)
|
|||
|
return 94;
|
|||
|
else if(adc_temp<1824)
|
|||
|
return 93;
|
|||
|
else if(adc_temp<1857)
|
|||
|
return 92;
|
|||
|
else if(adc_temp<1890)
|
|||
|
return 91;
|
|||
|
else if(adc_temp<1923)
|
|||
|
return 90;
|
|||
|
else if(adc_temp<1957)
|
|||
|
return 89;
|
|||
|
else if(adc_temp<1991)
|
|||
|
return 88;
|
|||
|
else if(adc_temp<2025)
|
|||
|
return 87;
|
|||
|
else if(adc_temp<2060)
|
|||
|
return 86;
|
|||
|
else if(adc_temp<2094)
|
|||
|
return 85;
|
|||
|
else if(adc_temp<2129)
|
|||
|
return 84;
|
|||
|
else if(adc_temp<2164)
|
|||
|
return 83;
|
|||
|
else if(adc_temp<2198)
|
|||
|
return 82;
|
|||
|
else if(adc_temp<2233)
|
|||
|
return 81;
|
|||
|
else if(adc_temp<2268)
|
|||
|
return 80;
|
|||
|
else if(adc_temp<2303)
|
|||
|
return 79;
|
|||
|
else if(adc_temp<2338)
|
|||
|
return 78;
|
|||
|
else if(adc_temp<2373)
|
|||
|
return 77;
|
|||
|
else if(adc_temp<2408)
|
|||
|
return 76;
|
|||
|
else if(adc_temp<2443)
|
|||
|
return 75;
|
|||
|
else if(adc_temp<2478)
|
|||
|
return 74;
|
|||
|
else if(adc_temp<2513)
|
|||
|
return 73;
|
|||
|
else if(adc_temp<2548)
|
|||
|
return 72;
|
|||
|
else if(adc_temp<2582)
|
|||
|
return 71;
|
|||
|
else if(adc_temp<2617)
|
|||
|
return 70;
|
|||
|
else if(adc_temp<2651)
|
|||
|
return 69;
|
|||
|
else if(adc_temp<2685)
|
|||
|
return 68;
|
|||
|
else if(adc_temp<2719)
|
|||
|
return 67;
|
|||
|
else if(adc_temp<2753)
|
|||
|
return 66;
|
|||
|
else if(adc_temp<2786)
|
|||
|
return 65;
|
|||
|
else if(adc_temp<2820)
|
|||
|
return 64;
|
|||
|
else if(adc_temp<2852)
|
|||
|
return 63;
|
|||
|
else if(adc_temp<2885)
|
|||
|
return 62;
|
|||
|
else if(adc_temp<2917)
|
|||
|
return 61;
|
|||
|
else if(adc_temp<2949)
|
|||
|
return 60;
|
|||
|
else if(adc_temp<2980)
|
|||
|
return 59;
|
|||
|
else if(adc_temp<3011)
|
|||
|
return 58;
|
|||
|
else if(adc_temp<3042)
|
|||
|
return 57;
|
|||
|
else if(adc_temp<3072)
|
|||
|
return 56;
|
|||
|
else if(adc_temp<3102)
|
|||
|
return 55;
|
|||
|
else if(adc_temp<3132)
|
|||
|
return 54;
|
|||
|
else if(adc_temp<3161)
|
|||
|
return 53;
|
|||
|
else if(adc_temp<3189)
|
|||
|
return 52;
|
|||
|
else if(adc_temp<3218)
|
|||
|
return 51;
|
|||
|
else if(adc_temp<3245)
|
|||
|
return 50;
|
|||
|
else if(adc_temp<3272)
|
|||
|
return 49;
|
|||
|
else if(adc_temp<3299)
|
|||
|
return 48;
|
|||
|
else if(adc_temp<3325)
|
|||
|
return 47;
|
|||
|
else if(adc_temp<3350)
|
|||
|
return 46;
|
|||
|
else if(adc_temp<3376)
|
|||
|
return 45;
|
|||
|
else if(adc_temp<3400)
|
|||
|
return 44;
|
|||
|
else if(adc_temp<3424)
|
|||
|
return 43;
|
|||
|
else if(adc_temp<3448)
|
|||
|
return 42;
|
|||
|
else if(adc_temp<3470)
|
|||
|
return 41;
|
|||
|
else if(adc_temp<3493)
|
|||
|
return 40;
|
|||
|
else if(adc_temp<3515)
|
|||
|
return 39;
|
|||
|
else if(adc_temp<3536)
|
|||
|
return 38;
|
|||
|
else if(adc_temp<3557)
|
|||
|
return 37;
|
|||
|
else if(adc_temp<3597)
|
|||
|
return 36;
|
|||
|
else if(adc_temp<3616)
|
|||
|
return 35;
|
|||
|
else if(adc_temp<3635)
|
|||
|
return 34;
|
|||
|
else if(adc_temp<3653)
|
|||
|
return 33;
|
|||
|
else if(adc_temp<3671)
|
|||
|
return 32;
|
|||
|
else if(adc_temp<3688)
|
|||
|
return 31;
|
|||
|
else if(adc_temp<3705)
|
|||
|
return 30;
|
|||
|
else if(adc_temp<3721)
|
|||
|
return 29;
|
|||
|
else if(adc_temp<3736)
|
|||
|
return 28;
|
|||
|
else if(adc_temp<3751)
|
|||
|
return 27;
|
|||
|
else if(adc_temp<3766)
|
|||
|
return 26;
|
|||
|
else if(adc_temp<3780)
|
|||
|
return 25;
|
|||
|
else if(adc_temp<3794)
|
|||
|
return 24;
|
|||
|
else if(adc_temp<3807)
|
|||
|
return 23;
|
|||
|
else if(adc_temp<3820)
|
|||
|
return 22;
|
|||
|
else if(adc_temp<3832)
|
|||
|
return 21;
|
|||
|
else if(adc_temp<3844)
|
|||
|
return 20;
|
|||
|
else if(adc_temp<3855)
|
|||
|
return 19;
|
|||
|
else if(adc_temp<3866)
|
|||
|
return 18;
|
|||
|
else if(adc_temp<3877)
|
|||
|
return 17;
|
|||
|
else if(adc_temp<3887)
|
|||
|
return 16;
|
|||
|
else if(adc_temp<3897)
|
|||
|
return 15;
|
|||
|
else if(adc_temp<3907)
|
|||
|
return 14;
|
|||
|
else if(adc_temp<3916)
|
|||
|
return 13;
|
|||
|
else if(adc_temp<3925)
|
|||
|
return 12;
|
|||
|
else if(adc_temp<3933)
|
|||
|
return 11;
|
|||
|
else if(adc_temp<3941)
|
|||
|
return 10;
|
|||
|
else if(adc_temp<3949)
|
|||
|
return 9;
|
|||
|
else if(adc_temp<3956)
|
|||
|
return 8;
|
|||
|
else if(adc_temp<3963)
|
|||
|
return 7;
|
|||
|
else if(adc_temp<3970)
|
|||
|
return 6;
|
|||
|
else if(adc_temp<3977)
|
|||
|
return 5;
|
|||
|
else if(adc_temp<3983)
|
|||
|
return 4;
|
|||
|
else if(adc_temp<3989)
|
|||
|
return 3;
|
|||
|
else if(adc_temp<3994)
|
|||
|
return 2;
|
|||
|
else if(adc_temp<4000)
|
|||
|
return 1;
|
|||
|
else
|
|||
|
return 0;
|
|||
|
}
|