538 lines
20 KiB
C
538 lines
20 KiB
C
|
|
|
|||
|
|
|
|||
|
|
/* USER CODE BEGIN Header */
|
|||
|
|
/**
|
|||
|
|
******************************************************************************
|
|||
|
|
* @file adc_sample.c
|
|||
|
|
* @author Motor Control SDK Team, Yuwell Software XiangenWang
|
|||
|
|
* @brief Voice Recognition Module Initialization Section,
|
|||
|
|
including peripheral initialization and message node insertion, etc.
|
|||
|
|
* @version 1.0
|
|||
|
|
* @changelog version 1.0 <EFBFBD><EFBFBD>ʼ<EFBFBD>汾 2025.12.01
|
|||
|
|
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>в<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
******************************************************************************
|
|||
|
|
* @attention
|
|||
|
|
*
|
|||
|
|
* <h2><center>© Copyright (c) 2025 Yuwell Software Danyang.Jiangsu.China.
|
|||
|
|
* All rights reserved.</center></h2>
|
|||
|
|
*
|
|||
|
|
* Redistribution and use in source and binary forms, with or without
|
|||
|
|
* modification, are permitted, provided that the following conditions are met:
|
|||
|
|
*
|
|||
|
|
* 1. Redistribution of source code must retain the above copyright notice,
|
|||
|
|
* this list of conditions and the following disclaimer.
|
|||
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|||
|
|
* this list of conditions and the following disclaimer in the documentation
|
|||
|
|
* and/or other materials provided with the distribution.
|
|||
|
|
* 3. Neither the name of Yuwell Software nor the names of other
|
|||
|
|
* contributors to this software may be used to endorse or promote products
|
|||
|
|
* derived from this software without specific written permission.
|
|||
|
|
* 4. This software, including modifications and/or derivative works of this
|
|||
|
|
* software, must execute solely and exclusively on microcontroller or
|
|||
|
|
* microprocessor devices manufactured by or for Yuwell Software.
|
|||
|
|
* 5. Redistribution and use of this software other than as permitted under
|
|||
|
|
* this license is void and will automatically terminate your rights under
|
|||
|
|
* this license.
|
|||
|
|
*
|
|||
|
|
* THIS SOFTWARE IS PROVIDED BY Yuwell Software AND CONTRIBUTORS "AS IS"
|
|||
|
|
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
|||
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|||
|
|
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
|||
|
|
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
|||
|
|
* SHALL Yuwell Software OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|||
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|||
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|||
|
|
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|||
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|||
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|||
|
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
|
*
|
|||
|
|
******************************************************************************
|
|||
|
|
*/
|
|||
|
|
/* USER CODE END Header */
|
|||
|
|
#include "adc_sample.h"
|
|||
|
|
#include <stdint.h>
|
|||
|
|
|
|||
|
|
|
|||
|
|
static uint16_t adc_result[ADC_SAMPLE_COUNT] = {0, 0, 0, 0, 0};
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD>¶<EFBFBD>-<EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>ֵӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0~120<EFBFBD>棩
|
|||
|
|
* @param NONE
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* 1.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>Ӧ0<EFBFBD>棬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><EFBFBD>Ӧn<EFBFBD>棬ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>120<EFBFBD><EFBFBD>Ӧ120<EFBFBD><EFBFBD>
|
|||
|
|
* 2.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ŵ<EFBFBD>10000<EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>100k<EFBFBD><EFBFBD><EFBFBD>洢Ϊ1000000<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>0.0001k<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* 3.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴΪNTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٷ<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.11.25
|
|||
|
|
*/
|
|||
|
|
static const uint32_t ntc_res_standard[] = {
|
|||
|
|
3270195, //0<><30>: 327.0195k<EFBFBD><EFBFBD> <20><> 3270195 (<28><>10000)
|
|||
|
|
3107640, //1<><31>: 310.7640k<EFBFBD><EFBFBD>
|
|||
|
|
2954121, //2<><32>: 295.4121k<EFBFBD><EFBFBD>
|
|||
|
|
2809084, //3<><33>: 280.9084k<EFBFBD><EFBFBD>
|
|||
|
|
2672014, //4<><34>: 267.2014k<EFBFBD><EFBFBD>
|
|||
|
|
2542428, //5<><35>: 254.2428k<EFBFBD><EFBFBD>
|
|||
|
|
2419877, //6<><36>: 241.9877k<EFBFBD><EFBFBD>
|
|||
|
|
2303940, //7<><37>: 230.3940k<EFBFBD><EFBFBD>
|
|||
|
|
2194224, //8<><38>: 219.4224k<EFBFBD><EFBFBD>
|
|||
|
|
2090361, //9<><39>: 209.0361k<EFBFBD><EFBFBD>
|
|||
|
|
1992007, //10<31><30>: 199.2007k<EFBFBD><EFBFBD>
|
|||
|
|
1898841, //11<31><31>: 189.8841k<EFBFBD><EFBFBD>
|
|||
|
|
1810559, //12<31><32>: 181.0559k<EFBFBD><EFBFBD>
|
|||
|
|
1726881, //13<31><33>: 172.6881k<EFBFBD><EFBFBD>
|
|||
|
|
1647540, //14<31><34>: 164.7540k<EFBFBD><EFBFBD>
|
|||
|
|
1572290, //15<31><35>: 157.2290k<EFBFBD><EFBFBD>
|
|||
|
|
1500898, //16<31><36>: 150.0898k<EFBFBD><EFBFBD>
|
|||
|
|
1433144, //17<31><37>: 143.3144k<EFBFBD><EFBFBD>
|
|||
|
|
1368825, //18<31><38>: 136.8825k<EFBFBD><EFBFBD>
|
|||
|
|
1307749, //19<31><39>: 130.7749k<EFBFBD><EFBFBD>
|
|||
|
|
1249734, //20<32><30>: 124.9734k<EFBFBD><EFBFBD>
|
|||
|
|
1194612, //21<32><31>: 119.4612k<EFBFBD><EFBFBD>
|
|||
|
|
1142223, //22<32><32>: 114.2223k<EFBFBD><EFBFBD>
|
|||
|
|
1092417, //23<32><33>: 109.2417k<EFBFBD><EFBFBD>
|
|||
|
|
1045053, //24<32><34>: 104.5053k<EFBFBD><EFBFBD>
|
|||
|
|
1000000, //25<32><35>: 100.0000k<EFBFBD><EFBFBD>
|
|||
|
|
957132, //26<32><36>: 95.7132k<EFBFBD><EFBFBD>
|
|||
|
|
916333, //27<32><37>: 91.6333k<EFBFBD><EFBFBD>
|
|||
|
|
877492, //28<32><38>: 87.7492k<EFBFBD><EFBFBD>
|
|||
|
|
840505, //29<32><39>: 84.0505k<EFBFBD><EFBFBD>
|
|||
|
|
805274, //30<33><30>: 80.5274k<EFBFBD><EFBFBD>
|
|||
|
|
771707, //31<33><31>: 77.1707k<EFBFBD><EFBFBD>
|
|||
|
|
739717, //32<33><32>: 73.9717k<EFBFBD><EFBFBD>
|
|||
|
|
709222, //33<33><33>: 70.9222k<EFBFBD><EFBFBD>
|
|||
|
|
680144, //34<33><34>: 68.0144k<EFBFBD><EFBFBD>
|
|||
|
|
652411, //35<33><35>: 65.2411k<EFBFBD><EFBFBD>
|
|||
|
|
625954, //36<33><36>: 62.5954k<EFBFBD><EFBFBD>
|
|||
|
|
600707, //37<33><37>: 60.0707k<EFBFBD><EFBFBD>
|
|||
|
|
576610, //38<33><38>: 57.6610k<EFBFBD><EFBFBD>
|
|||
|
|
553604, //39<33><39>: 55.3604k<EFBFBD><EFBFBD>
|
|||
|
|
531635, //40<34><30>: 53.1635k<EFBFBD><EFBFBD>
|
|||
|
|
510651, //41<34><31>: 51.0651k<EFBFBD><EFBFBD>
|
|||
|
|
490602, //42<34><32>: 49.0602k<EFBFBD><EFBFBD>
|
|||
|
|
471443, //43<34><33>: 47.1443k<EFBFBD><EFBFBD>
|
|||
|
|
453130, //44<34><34>: 45.3130k<EFBFBD><EFBFBD>
|
|||
|
|
435621, //45<34><35>: 43.5621k<EFBFBD><EFBFBD>
|
|||
|
|
418878, //46<34><36>: 41.8878k<EFBFBD><EFBFBD>
|
|||
|
|
402862, //47<34><37>: 40.2862k<EFBFBD><EFBFBD>
|
|||
|
|
387539, //48<34><38>: 38.7539k<EFBFBD><EFBFBD>
|
|||
|
|
372876, //49<34><39>: 37.2876k<EFBFBD><EFBFBD>
|
|||
|
|
358842, //50<35><30>: 35.8842k<EFBFBD><EFBFBD>
|
|||
|
|
345405, //51<35><31>: 34.5405k<EFBFBD><EFBFBD>
|
|||
|
|
332538, //52<35><32>: 33.2538k<EFBFBD><EFBFBD>
|
|||
|
|
320214, //53<35><33>: 32.0214k<EFBFBD><EFBFBD>
|
|||
|
|
308408, //54<35><34>: 30.8408k<EFBFBD><EFBFBD>
|
|||
|
|
297096, //55<35><35>: 29.7096k<EFBFBD><EFBFBD>
|
|||
|
|
286253, //56<35><36>: 28.6253k<EFBFBD><EFBFBD>
|
|||
|
|
275860, //57<35><37>: 27.5860k<EFBFBD><EFBFBD>
|
|||
|
|
265895, //58<35><38>: 26.5895k<EFBFBD><EFBFBD>
|
|||
|
|
256338, //59<35><39>: 25.6338k<EFBFBD><EFBFBD>
|
|||
|
|
247171, //60<36><30>: 24.7171k<EFBFBD><EFBFBD>
|
|||
|
|
238376, //61<36><31>: 23.8376k<EFBFBD><EFBFBD>
|
|||
|
|
229937, //62<36><32>: 22.9937k<EFBFBD><EFBFBD>
|
|||
|
|
221836, //63<36><33>: 22.1836k<EFBFBD><EFBFBD>
|
|||
|
|
214061, //64<36><34>: 21.4061k<EFBFBD><EFBFBD>
|
|||
|
|
206594, //65<36><35>: 20.6594k<EFBFBD><EFBFBD>
|
|||
|
|
199424, //66<36><36>: 19.9424k<EFBFBD><EFBFBD>
|
|||
|
|
192537, //67<36><37>: 19.2537k<EFBFBD><EFBFBD>
|
|||
|
|
185920, //68<36><38>: 18.5920k<EFBFBD><EFBFBD>
|
|||
|
|
179562, //69<36><39>: 17.9562k<EFBFBD><EFBFBD>
|
|||
|
|
173452, //70<37><30>: 17.3452k<EFBFBD><EFBFBD>
|
|||
|
|
167578, //71<37><31>: 16.7578k<EFBFBD><EFBFBD>
|
|||
|
|
161930, //72<37><32>: 16.1930k<EFBFBD><EFBFBD>
|
|||
|
|
156499, //73<37><33>: 15.6499k<EFBFBD><EFBFBD>
|
|||
|
|
151276, //74<37><34>: 15.1276k<EFBFBD><EFBFBD>
|
|||
|
|
146251, //75<37><35>: 14.6251k<EFBFBD><EFBFBD>
|
|||
|
|
141417, //76<37><36>: 14.1417k<EFBFBD><EFBFBD>
|
|||
|
|
136764, //77<37><37>: 13.6764k<EFBFBD><EFBFBD>
|
|||
|
|
132286, //78<37><38>: 13.2286k<EFBFBD><EFBFBD>
|
|||
|
|
127976, //79<37><39>: 12.7976k<EFBFBD><EFBFBD>
|
|||
|
|
123825, //80<38><30>: 12.3825k<EFBFBD><EFBFBD>
|
|||
|
|
119828, //81<38><31>: 11.9828k<EFBFBD><EFBFBD>
|
|||
|
|
115978, //82<38><32>: 11.5978k<EFBFBD><EFBFBD>
|
|||
|
|
112270, //83<38><33>: 11.2270k<EFBFBD><EFBFBD>
|
|||
|
|
108697, //84<38><34>: 10.8697k<EFBFBD><EFBFBD>
|
|||
|
|
105254, //85<38><35>: 10.5254k<EFBFBD><EFBFBD>
|
|||
|
|
101935, //86<38><36>: 10.1935k<EFBFBD><EFBFBD>
|
|||
|
|
98736, //87<38><37>: 9.8736k<EFBFBD><EFBFBD>
|
|||
|
|
95652, //88<38><38>: 9.5652k<EFBFBD><EFBFBD>
|
|||
|
|
92678, //89<38><39>: 9.2678k<EFBFBD><EFBFBD>
|
|||
|
|
89809, //90<39><30>: 8.9809k<EFBFBD><EFBFBD>
|
|||
|
|
87042, //91<39><31>: 8.7042k<EFBFBD><EFBFBD>
|
|||
|
|
84373, //92<39><32>: 8.4373k<EFBFBD><EFBFBD>
|
|||
|
|
81797, //93<39><33>: 8.1797k<EFBFBD><EFBFBD>
|
|||
|
|
79312, //94<39><34>: 7.9312k<EFBFBD><EFBFBD>
|
|||
|
|
76912, //95<39><35>: 7.6912k<EFBFBD><EFBFBD>
|
|||
|
|
74596, //96<39><36>: 7.4596k<EFBFBD><EFBFBD>
|
|||
|
|
72360, //97<39><37>: 7.2360k<EFBFBD><EFBFBD>
|
|||
|
|
70201, //98<39><38>: 7.0201k<EFBFBD><EFBFBD>
|
|||
|
|
68115, //99<39><39>: 6.8115k<EFBFBD><EFBFBD>
|
|||
|
|
66101, //100<30><30>: 6.6101k<EFBFBD><EFBFBD>
|
|||
|
|
64155, //101<30><31>: 6.4155k<EFBFBD><EFBFBD>
|
|||
|
|
62274, //102<30><32>: 6.2274k<EFBFBD><EFBFBD>
|
|||
|
|
60457, //103<30><33>: 6.0457k<EFBFBD><EFBFBD>
|
|||
|
|
58701, //104<30><34>: 5.8701k<EFBFBD><EFBFBD>
|
|||
|
|
57003, //105<30><35>: 5.7003k<EFBFBD><EFBFBD>
|
|||
|
|
55362, //106<30><36>: 5.5362k<EFBFBD><EFBFBD>
|
|||
|
|
53775, //107<30><37>: 5.3775k<EFBFBD><EFBFBD>
|
|||
|
|
52240, //108<30><38>: 5.2240k<EFBFBD><EFBFBD>
|
|||
|
|
50755, //109<30><39>: 5.0755k<EFBFBD><EFBFBD>
|
|||
|
|
49319, //110<31><30>: 4.9319k<EFBFBD><EFBFBD>
|
|||
|
|
47930, //111<31><31>: 4.7930k<EFBFBD><EFBFBD>
|
|||
|
|
46586, //112<31><32>: 4.6586k<EFBFBD><EFBFBD>
|
|||
|
|
45285, //113<31><33>: 4.5285k<EFBFBD><EFBFBD>
|
|||
|
|
44026, //114<31><34>: 4.4026k<EFBFBD><EFBFBD>
|
|||
|
|
42807, //115<31><35>: 4.2807k<EFBFBD><EFBFBD>
|
|||
|
|
41627, //116<31><36>: 4.1627k<EFBFBD><EFBFBD>
|
|||
|
|
40484, //117<31><37>: 4.0484k<EFBFBD><EFBFBD>
|
|||
|
|
39378, //118<31><38>: 3.9378k<EFBFBD><EFBFBD>
|
|||
|
|
38306, //119<31><39>: 3.8306k<EFBFBD><EFBFBD>
|
|||
|
|
37268 //120<32><30>: 3.7268k<EFBFBD><EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief ȫ<EFBFBD>ֺ궨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param NONE
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* 1.TEMP_MIN/TEMP_MAX<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶ȼ<EFBFBD><EFBFBD>ⷶΧ0~120<EFBFBD><EFBFBD>
|
|||
|
|
* 2.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ŵ<EFBFBD>10000<EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.11.25
|
|||
|
|
*/
|
|||
|
|
#define TEMP_MIN 0
|
|||
|
|
#define TEMP_MAX 120
|
|||
|
|
#define ARRAY_LEN (sizeof(ntc_res_standard)/sizeof(ntc_res_standard[0]))
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD>NTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>
|
|||
|
|
* @param ntc_res: NTC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>1000<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100k<EFBFBD><EFBFBD>=100000<EFBFBD><EFBFBD>
|
|||
|
|
* @retval <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>棩
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* 1.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD>ֵ<EFBFBD>㷨<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* 2.<EFBFBD><EFBFBD>ֵǰ<EFBFBD>Ŵ<EFBFBD>1000<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㾫<EFBFBD><EFBFBD>
|
|||
|
|
* 3.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶ȷ<EFBFBD>Χʱ<EFBFBD><EFBFBD><EFBFBD>ر߽<EFBFBD>ֵ<EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>120<EFBFBD>棩
|
|||
|
|
* 4.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ<EFBFBD><EFBFBD>1000<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>10000ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.11.25
|
|||
|
|
*/
|
|||
|
|
static uint8_t calc_temp_by_res(uint32_t ntc_res)
|
|||
|
|
{
|
|||
|
|
// 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵת<D6B5><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1000 <20><> <20><>10000<30><30>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD>ȣ<EFBFBD>
|
|||
|
|
uint32_t ntc_res_scaled = ntc_res * 10;
|
|||
|
|
|
|||
|
|
// 2. <20>߽籣<DFBD><E7B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵԽС<D4BD>¶<EFBFBD>Խ<EFBFBD><D4BD>
|
|||
|
|
if (ntc_res_scaled > ntc_res_standard[0]) { // <20><><EFBFBD><EFBFBD>>0<><30>ֵ <20><> <20>¶<EFBFBD><0<><30>
|
|||
|
|
return TEMP_MIN;
|
|||
|
|
}
|
|||
|
|
if (ntc_res_scaled < ntc_res_standard[ARRAY_LEN-1]) { // <20><><EFBFBD><EFBFBD><120<32><30>ֵ <20><> <20>¶<EFBFBD>>120<32><30>
|
|||
|
|
return TEMP_MAX;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3. <20><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ڵ<EFBFBD><DAB5>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
uint8_t idx = 0;
|
|||
|
|
for (idx = 0; idx < ARRAY_LEN-1; idx++)
|
|||
|
|
{
|
|||
|
|
if ((ntc_res_scaled <= ntc_res_standard[idx]) && (ntc_res_scaled >= ntc_res_standard[idx+1]))
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return (uint8_t)idx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD>ADC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>
|
|||
|
|
* @param adc_val: ADC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>3000<EFBFBD><EFBFBD>Ӧ3V<EFBFBD><EFBFBD>5000<EFBFBD><EFBFBD>Ӧ5V<EFBFBD><EFBFBD>
|
|||
|
|
* @retval <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>棩
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* 1.<EFBFBD><EFBFBD>·ΪNTC<EFBFBD><EFBFBD>100k<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10k<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
|
|||
|
|
* 2.<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>R_NTC = (R<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> R13) / (R13 - R<EFBFBD><EFBFBD>)
|
|||
|
|
* 3.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SCALE<EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ʧ
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.11.25
|
|||
|
|
*/
|
|||
|
|
static uint8_t calc_temp_by_adc(uint16_t adc_val)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
uint32_t r_parallel_ohm = (uint32_t)adc_val * 10000;
|
|||
|
|
r_parallel_ohm /= (5000 - adc_val);
|
|||
|
|
|
|||
|
|
r_parallel_ohm /= 1000;
|
|||
|
|
|
|||
|
|
uint32_t r_ntc_ohm = r_parallel_ohm * 100;
|
|||
|
|
|
|||
|
|
if(r_parallel_ohm >= 100) // <20><>ֹ<EFBFBD><D6B9><EFBFBD>躸<EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
|
|||
|
|
{
|
|||
|
|
r_parallel_ohm = 99;
|
|||
|
|
}
|
|||
|
|
r_ntc_ohm /= (100 - r_parallel_ohm);
|
|||
|
|
|
|||
|
|
|
|||
|
|
return calc_temp_by_res(r_ntc_ohm*1000);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// У<D0A3><D7BC><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ-ʵ<>ʵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
|||
|
|
typedef struct {
|
|||
|
|
uint16_t adc_val; // <20><><EFBFBD><EFBFBD>ֵ
|
|||
|
|
uint16_t voltage; // ʵ<>ʵ<EFBFBD>ѹ(V)
|
|||
|
|
} CalibData_t;
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
static const CalibData_t calib_table[] =
|
|||
|
|
{
|
|||
|
|
{802, 160},
|
|||
|
|
{864, 170},
|
|||
|
|
{925, 180},
|
|||
|
|
{985, 190},
|
|||
|
|
{1045, 200},
|
|||
|
|
{1105, 210},
|
|||
|
|
{1164, 220},
|
|||
|
|
{1225, 230},
|
|||
|
|
{1284, 240},
|
|||
|
|
{1345, 250},
|
|||
|
|
{1405, 260},
|
|||
|
|
{1465, 270},
|
|||
|
|
{1524, 280},
|
|||
|
|
};
|
|||
|
|
#define CALIB_LEN (sizeof(calib_table)/sizeof(calib_table[0]))
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵתʵ<EFBFBD>ʵ<EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣩
|
|||
|
|
* @param adc_val: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1172<EFBFBD><EFBFBD>
|
|||
|
|
* @retval ʵ<EFBFBD>ʵ<EFBFBD>ѹ(V)
|
|||
|
|
*/
|
|||
|
|
uint16_t calc_220v_voltage(uint16_t adc_val)
|
|||
|
|
{
|
|||
|
|
// <20>߽籣<DFBD><E7B1A3>
|
|||
|
|
if (adc_val <= calib_table[0].adc_val)
|
|||
|
|
{
|
|||
|
|
return calib_table[0].voltage;
|
|||
|
|
}
|
|||
|
|
if (adc_val >= calib_table[CALIB_LEN-1].adc_val)
|
|||
|
|
{
|
|||
|
|
return calib_table[CALIB_LEN-1].voltage;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
uint16_t idx = 0;
|
|||
|
|
for (idx = 0; idx < CALIB_LEN-1; idx++)
|
|||
|
|
{
|
|||
|
|
if (adc_val >= calib_table[idx].adc_val && adc_val <= calib_table[idx+1].adc_val)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>Բ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD>Ŵ<EFBFBD>1000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>
|
|||
|
|
int32_t x1 = calib_table[idx].adc_val;
|
|||
|
|
int32_t y1 = calib_table[idx].voltage;
|
|||
|
|
int32_t x2 = calib_table[idx+1].adc_val;
|
|||
|
|
int32_t y2 = calib_table[idx+1].voltage;
|
|||
|
|
|
|||
|
|
uint16_t voltage = y1 + ((adc_val - x1) * (y2 - y1)) / (x2 - x1);
|
|||
|
|
|
|||
|
|
return voltage;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief ADC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
|
* @param NONE
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* 1.ʹ<EFBFBD><EFBFBD>BSTIM16<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>100ms<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ADCת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* 2.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD>RAM
|
|||
|
|
* 3.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>16<EFBFBD>ι<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @author jarvis
|
|||
|
|
* @data 2025.11.25
|
|||
|
|
*/
|
|||
|
|
void adc_sample_init(void)
|
|||
|
|
{
|
|||
|
|
// <20><>ʼ<EFBFBD><CABC>ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIO
|
|||
|
|
FL_GPIO_InitTypeDef GPIO_InitStruct;
|
|||
|
|
FL_BSTIM16_InitTypeDef InitStructer;
|
|||
|
|
FL_ADC_InitTypeDef ADC_InitStruct;
|
|||
|
|
FL_ADC_CommonInitTypeDef Common_InitStruct;
|
|||
|
|
FL_DMA_InitTypeDef DMA_InitStruct = {0};
|
|||
|
|
FL_DMA_ConfigTypeDef DMA_ConfigStruct = {0};
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ADC<44>Ķ<EFBFBD>ʱ<EFBFBD><CAB1>Ƶ<EFBFBD><C6B5> **********************************************************/
|
|||
|
|
|
|||
|
|
InitStructer.prescaler = 63; /* <20><><EFBFBD><EFBFBD>BSTIM16Ԥ<36><D4A4>Ƶ */
|
|||
|
|
InitStructer.autoReload = 9999; /* <20><><EFBFBD><EFBFBD>BSTIM16Ŀ<36><C4BF><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> */
|
|||
|
|
InitStructer.autoReloadState = FL_ENABLE; /* <20><><EFBFBD><EFBFBD>BSTIM16Ԥװ<D4A4>ع<EFBFBD><D8B9><EFBFBD> */
|
|||
|
|
InitStructer.clockSource = FL_CMU_BSTIM16_CLK_SOURCE_APBCLK; /* <20><><EFBFBD><EFBFBD>BSTIM16<31><36><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Դ */
|
|||
|
|
|
|||
|
|
(void)FL_BSTIM16_Init(BSTIM16, &InitStructer);
|
|||
|
|
|
|||
|
|
FL_BSTIM16_SetTriggerOutput(BSTIM16, FL_BSTIM16_TRGO_UPDATE); /* <20><><EFBFBD><EFBFBD>BSTIM16 Trigger<65>¼<EFBFBD> */
|
|||
|
|
|
|||
|
|
FL_BSTIM16_ClearFlag_Update(BSTIM16); /* <20><>updata<74><61>־ */
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************** <20><><EFBFBD><EFBFBD>ADCͨ<43><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> **********************************************************/
|
|||
|
|
|
|||
|
|
Common_InitStruct.clockSource = FL_ADC_CLK_SOURCE_APBCLK; /* <20><><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Դ */
|
|||
|
|
Common_InitStruct.clockPrescaler = FL_ADC_CLK_PSC_DIV2; /* <20><><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD>ʱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD> */
|
|||
|
|
Common_InitStruct.referenceSource = FL_ADC_REF_SOURCE_VDDA; /* <20><><EFBFBD><EFBFBD>ADC<44>ο<EFBFBD>Դ */
|
|||
|
|
Common_InitStruct.bitWidth = FL_ADC_BIT_WIDTH_12B; /* <20><><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> */
|
|||
|
|
|
|||
|
|
(void)FL_ADC_CommonInit(&Common_InitStruct);
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************** <20><><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD><EFBFBD>״̬ **********************************************************/
|
|||
|
|
|
|||
|
|
GPIO_InitStruct.pin = ADC_PRESS_GPIO_PIN; /* <20><><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> */
|
|||
|
|
GPIO_InitStruct.mode = FL_GPIO_MODE_ANALOG; /* <20><><EFBFBD><EFBFBD>GPIO<49>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ */
|
|||
|
|
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL; /* <20><><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
|||
|
|
GPIO_InitStruct.pull = FL_DISABLE; /* <20><><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
|||
|
|
GPIO_InitStruct.remapPin = FL_DISABLE; /* <20><><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
GPIO_InitStruct.analogSwitch = FL_DISABLE; /* <20><><EFBFBD><EFBFBD>GPIOģ<4F><EFBFBD>ع<EFBFBD><D8B9><EFBFBD> */
|
|||
|
|
|
|||
|
|
(void)FL_GPIO_Init(ADC_PRESS_GPIO_PORT, &GPIO_InitStruct); /* GPIO<49><4F>ʼ<EFBFBD><CABC> */
|
|||
|
|
|
|||
|
|
GPIO_InitStruct.pin = ADC_NTC_GPIO_PIN;
|
|||
|
|
(void)FL_GPIO_Init(ADC_NTC_GPIO_PORT, &GPIO_InitStruct);
|
|||
|
|
|
|||
|
|
GPIO_InitStruct.pin = ADC_220V_GPIO_PIN;
|
|||
|
|
(void)FL_GPIO_Init(ADC_220V_GPIO_PORT, &GPIO_InitStruct);
|
|||
|
|
|
|||
|
|
GPIO_InitStruct.pin = ADC_ELEC_GPIO_PIN;
|
|||
|
|
(void)FL_GPIO_Init(ADC_ELEC_GPIO_PORT, &GPIO_InitStruct);
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************** <20><><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8> **********************************************************/
|
|||
|
|
|
|||
|
|
// <20><>ʼ<EFBFBD><CABC>ADC<44><43><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
|||
|
|
ADC_InitStruct.conversionMode = FL_ADC_CONV_MODE_SINGLE; /* <20><><EFBFBD><EFBFBD>ADCת<43><D7AA>ģʽ */
|
|||
|
|
ADC_InitStruct.autoMode = FL_ADC_SINGLE_CONV_MODE_AUTO; /* <20><><EFBFBD><EFBFBD>ADCת<43><D7AA><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>Ч */
|
|||
|
|
ADC_InitStruct.waitMode = FL_DISABLE; /* <20><><EFBFBD><EFBFBD>ADC<44>ȴ<EFBFBD>ģʽ */
|
|||
|
|
ADC_InitStruct.overrunMode = FL_ENABLE; /* <20><><EFBFBD><EFBFBD>ADC_Overrunģʽ */
|
|||
|
|
ADC_InitStruct.scanDirection = FL_ADC_SEQ_SCAN_DIR_FORWARD; /* <20><><EFBFBD><EFBFBD>ADCɨ<43><C9A8>˳<EFBFBD><CBB3> */
|
|||
|
|
ADC_InitStruct.externalTrigConv = FL_ADC_TRIGGER_EDGE_RISING; /* <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
ADC_InitStruct.triggerSource = FL_ADC_TRGI_BSTIM16; /* <20><><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */
|
|||
|
|
ADC_InitStruct.fastChannelTime = FL_ADC_FAST_CH_SAMPLING_TIME_16_ADCCLK; /* <20><><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
|
|||
|
|
ADC_InitStruct.lowChannelTime = FL_ADC_SLOW_CH_SAMPLING_TIME_512_ADCCLK; /* <20><><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
|
|||
|
|
ADC_InitStruct.oversamplingMode = FL_ENABLE; /* <20><><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
|||
|
|
ADC_InitStruct.overSampingMultiplier = FL_ADC_OVERSAMPLING_MUL_16X; /* <20><><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
ADC_InitStruct.oversamplingShift = FL_ADC_OVERSAMPLING_SHIFT_4B; /* <20><><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ */
|
|||
|
|
|
|||
|
|
(void)FL_ADC_Init(ADC, &ADC_InitStruct);
|
|||
|
|
|
|||
|
|
FL_ADC_EnableSequencerChannel(ADC, ADC_PRESS_CHANNEL); /*ͨ<><CDA8>ѡ<EFBFBD><D1A1>*/
|
|||
|
|
FL_ADC_EnableSequencerChannel(ADC, ADC_NTC_CHANNEL);
|
|||
|
|
FL_ADC_EnableSequencerChannel(ADC, ADC_220V_CHANNEL);
|
|||
|
|
FL_ADC_EnableSequencerChannel(ADC, ADC_ELEC_CHANNEL);
|
|||
|
|
FL_ADC_EnableSequencerChannel(ADC, FL_ADC_INTERNAL_VREF1P2);
|
|||
|
|
|
|||
|
|
FL_VREF_EnableVREFBuffer(VREF);
|
|||
|
|
FL_ADC_EnableDMAReq(ADC); /*<2A><><EFBFBD><EFBFBD>ADC_DMA*/
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************** <20><><EFBFBD><EFBFBD>DMAת<41><D7AA> **********************************************************/
|
|||
|
|
|
|||
|
|
DMA_InitStruct.periphAddress = FL_DMA_PERIPHERAL_FUNCTION1; //<2F><><EFBFBD><EFBFBD>DMAͨ<41><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DMA_InitStruct.direction = FL_DMA_DIR_PERIPHERAL_TO_RAM; //<2F><><EFBFBD><EFBFBD>DMAͨ<41><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DMA_InitStruct.memoryAddressIncMode = FL_DMA_MEMORY_INC_MODE_INCREASE; //<2F><><EFBFBD><EFBFBD>RAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DMA_InitStruct.dataSize = FL_DMA_BANDWIDTH_16B; //<2F><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
DMA_InitStruct.priority = FL_DMA_PRIORITY_HIGH; //<2F><><EFBFBD><EFBFBD>DMAͨ<41><CDA8><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
|||
|
|
DMA_InitStruct.circMode = FL_ENABLE; //<2F><><EFBFBD><EFBFBD>DMAͨ<41><CDA8>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
(void)FL_DMA_Init(DMA, &DMA_InitStruct, FL_DMA_CHANNEL_0);
|
|||
|
|
|
|||
|
|
FL_DMA_Enable(DMA); //<2F><><EFBFBD><EFBFBD>DMAȫ<41>ֿ<EFBFBD><D6BF><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************** <20><><EFBFBD><EFBFBD>DMAͨ<41><CDA8> **********************************************************/
|
|||
|
|
DMA_ConfigStruct.memoryAddress = (uint32_t)adc_result; //<2F><><EFBFBD><EFBFBD>DMA_RAM<41><4D>ַ
|
|||
|
|
DMA_ConfigStruct.transmissionCount = ADC_SAMPLE_COUNT - 1; //<2F><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD>䳤<EFBFBD><E4B3A4>
|
|||
|
|
(void)FL_DMA_StartTransmission(DMA, &DMA_ConfigStruct, FL_DMA_CHANNEL_0);
|
|||
|
|
|
|||
|
|
FL_ADC_ClearFlag_EndOfConversion(ADC);
|
|||
|
|
|
|||
|
|
FL_ADC_Enable(ADC);
|
|||
|
|
|
|||
|
|
FL_BSTIM16_Enable(BSTIM16);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
void sample_adc_process_task(void)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
// <20>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
MsgQueueItem queue_item;
|
|||
|
|
int32_t temp_press;
|
|||
|
|
|
|||
|
|
queue_item.type = MSG_TYPE_AD_SAMPLING;
|
|||
|
|
|
|||
|
|
queue_item.data.adc_data.adc_elec_value = adc_result[ADC_IDX_ELEC];
|
|||
|
|
queue_item.data.adc_data.adc_ntc_value = adc_result[ADC_IDX_NTC];
|
|||
|
|
queue_item.data.adc_data.adc_press_value = adc_result[ADC_IDX_PRESS];
|
|||
|
|
queue_item.data.adc_data.adc_220v_value = adc_result[ADC_IDX_220V];
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ѹ
|
|||
|
|
queue_item.data.adc_data.voltage_elec = (uint32_t)(((uint64_t)adc_result[ADC_IDX_ELEC] * ADC_VREF * 3000) / ((uint64_t)adc_result[ADC_IDX_INTERNAL_VREF1P2] * 4095));
|
|||
|
|
queue_item.data.adc_data.voltage_ntc = (uint32_t)(((uint64_t)adc_result[ADC_IDX_NTC] * ADC_VREF * 3000) / ((uint64_t)adc_result[ADC_IDX_INTERNAL_VREF1P2] * 4095));
|
|||
|
|
queue_item.data.adc_data.voltage_press = (uint32_t)(((uint64_t)adc_result[ADC_IDX_PRESS] * ADC_VREF * 3000) / ((uint64_t)adc_result[ADC_IDX_INTERNAL_VREF1P2] * 4095));
|
|||
|
|
queue_item.data.adc_data.voltage_220v = (uint32_t)(((uint64_t)adc_result[ADC_IDX_220V] * ADC_VREF * 3000) / ((uint64_t)adc_result[ADC_IDX_INTERNAL_VREF1P2] * 4095));
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵѹ<CAB5><D1B9>ֵ
|
|||
|
|
temp_press = (int32_t)1908 * queue_item.data.adc_data.voltage_press - 852000;
|
|||
|
|
if(temp_press < 0)
|
|||
|
|
{
|
|||
|
|
temp_press = 0;
|
|||
|
|
}
|
|||
|
|
queue_item.data.adc_data.real_press = temp_press / 10000;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>¶<EFBFBD>ֵ
|
|||
|
|
queue_item.data.adc_data.real_ntc = calc_temp_by_adc(queue_item.data.adc_data.voltage_ntc);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>ѹֵ
|
|||
|
|
queue_item.data.adc_data.real_220V = calc_220v_voltage(queue_item.data.adc_data.voltage_220v);
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵѹ<CAB5><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
queue_item.data.adc_data.real_elec = queue_item.data.adc_data.voltage_elec * 639/100;
|
|||
|
|
|
|||
|
|
modify_or_add_queue_node_by_type(&global_queue, queue_item.type, queue_item); // ÿ<><C3BF>100ms<6D>Ķ<DEB8><C4B6><EFBFBD><EFBFBD>е<EFBFBD>AD<41><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************ (C) COPYRIGHT YUWELL *****END OF FILE****/
|
|||
|
|
|