๐ณ ์ค์ต ๋ชฉํ
1. ์ธ๋ถ ์จ๋ ์ผ์ - F429zi ์ฐ๊ฒฐ
2. DMA๋ฅผ ํตํด ๋ค์ด์จ ๊ธฐ๋ณธ ๊ฐ ํ์ธ
3. DMA๋ฅผ ํตํด ๋ค์ด์จ ADC ์ธ๋ถ ์จ๋ ์ผ์ ๊ฐ, ๋ด๋ถ ์ฅ์น Vref ๊ฐ, ๋ด๋ถ ์จ๋ ์ผ์ ๊ฐ ํ์ธ
๐ณ ADC ์ธํ
ADC1 ํ๋ผ๋ฏธํฐ ์ธํ
1.1 Mode
Independent mode : MCU ๋ด๋ถ ADC ๊ธฐ๋ฅ ์ฌ์ฉ
1.2 Clock Prescaler
CPU Clock์ ์ฌ์ฉํ์ฌ ADC ๋ณํ์ด ์ด๋ฃจ์ด์ง๋๋ฐ ์์คํ
์ ํด๋ญ ์๋๊ฐ ๋๋ฌด ๋น ๋ฅผ ํ์๊ฐ ์์ผ๋ฉฐ ์ ๋ ฅ ์๋น ํจ์จ์ฑ ๋ฐ
์ฃผํ์ ๋ฒ์ ๋ด์์ ์์ ์ ์ผ๋ก ๋์์ ์ํด CPU clock์ ๋๋ ์ ์ฌ์ฉํ๋ค.(โป ์ต์ 4 ์ด์)
(โป F429zi PCLK2 (Peripheral Clock 2)์ ๊ฒฝ์ฐ 90MHz ์ด๋ฏ๋ก 4๋ก ๋๋ ๊ฒฝ์ฐ 22.5MHz๊ฐ ๋๋ค.)
1.3 Resolution
์๋ฅผ ๋ค์ด ์
๋ ฅ๋๋ ์๋ ๋ก๊ทธ ์ ํธ๊ฐ 3V์ธ ๊ฒฝ์ฐ 12 bit๋ก Resolution์ ์ค์ ํ์์ ๋ 3V /4096= 0.732mV ๊ฐ๊ฒฉ์ผ๋ก
๋์งํธํ ๋๊ฒ ๋๋ค.
1.4 Data Alignment
ADC ๋ณํ ๊ฒฐ๊ณผ 8 bits(1 byte)๋ฅผ 16 bits์ ๋ ์ง์คํฐ์ ์ฝ์
ํ์์ ๋ ๋ฐ์ดํฐ ์ ๋ ฌ ๋ฐฉํฅ์ ์ค์ ํ๋ค.
1.5 Scan Conversion Mode
์ฌ๋ฌ ์
๋ ฅ ์ฑ๋์ ์ฐ์์ ์ผ๋ก ์ค์บ ํ ์ฑ๋์์ ์์ฐจ์ ์ผ๋ก ๋ณํ์ ์ํํ๋ค.
(โป Disable์ผ ๊ฒฝ์ฐ Single Conversion Mode๋ก ๋์ํ๋ฉฐ ํ๋์ ์ฑ๋์์ ์ค์บ ํ ํ ๋ฒ๋ง ADC ๋ณํ์ ์ํํ๋ค.)
1.6 Continuous Conversion Mode
ํ๋ฒ ์ฑ๋์์ ์
๋ ฅ ๋ฐ์ ํ ์
๋ ฅ์ ์ง์์ ์ผ๋ก ๋ฐ์์ง ์ค์ ํ๋ค.
1.7 DMA Continous Requests
ADC ๊ฒฐ๊ณผ๊ฐ์ DMA๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ฌํ ๊ฒ์ธ์ง ์ ํ ์ฌ๋ถ
1.8 ADC_Regular_ConversionMode
Number Of Converison : ๋ช ๊ฐ๋ฅผ ๋ณํํ ๊ฒ์ธ์ง
Rank : ๋ณํ ์์ (ADC ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๋ด๊ธฐ๋ ์์)
Channel : ADC๋ก ๋ณํํ ๊ฐ์ด ์๋ ์ฑ๋์ ์ ํ
Sampling Time : Resolution ๊ฐ๋ณด๋ค ์ ๋นํ ํฌ๊ฒ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค.
(โป Sampling Time : ์ํ๋ง ์์ ๋์ ์๋ ๋ก๊ทธ ์ ํธ๋ฅผ ์ ์งํ๋ ์๊ฐ)
๐ณ ์ค์ต ๊ฒฐ๊ณผ
https://github.com/Tobbyvv/stm32-project/tree/main/adc
์ธ๋ถ ์จ๋ ์ผ์ - F429zi ์ฐ๊ฒฐ
์จ๋์ผ์์ DATA ํ์ PA5(CN7 10), PA6(CN7 12)์ ์ฐ๊ฒฐ
VCC์ GND๋ฅผ ๊ฐ๊ฐ CN7 6, CN7 8์ ์ฐ๊ฒฐํ์๋ค.
DMA๋ฅผ ํตํด ๋ค์ด์จ ADC ์ธ๋ถ ์จ๋ ์ผ์ ๊ฐ, ๋ด๋ถ ์ฅ์น Vref ๊ฐ, ๋ด๋ถ ์จ๋ ์ผ์ ๊ฐ ํ์ธ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <stdint.h>
#include "main.h"
#include "app.h"
// ADC, DMA, UART ํธ๋ค๋ฌ ๋ณ์ ์ ์ธ
extern ADC_HandleTypeDef hadc1;
extern DMA_HandleTypeDef hdma_adc1;
extern UART_HandleTypeDef huart3;
// ADC ์ฑ๋์์ ๋ฐ์ ๊ฐ ์ ์ฅ์ฉ ๋ฐฐ์ด ์ ์ธ
static volatile uint16_t adc_value[4];
// EXTI์์ ๋ฐ์ ๊ฐ ์ ์ฅ์ฉ ๋ณ์ ์ ์ธ
static volatile uint16_t exti_value = 0;
void app(void)
{
// ADC ๋ณํ์ ์์ํ๋ ๊ฒ๊ณผ ๋์์ DMA๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
// CPU์ ๊ฐ์
์์ด ๋ฐ์ดํฐ๋ฅผ ์์งํ ์ ์์
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_value, 4);
for (;;) {
HAL_Delay(100);
// ADC ์จ๋๊ฐ๊ณผ EXTI ์ํ ๊ฐ์ UART๋ฅผ ํตํด ์ถ๋ ฅ
printf("ExtUnitTemp = %d ExtUnitTemp = %d InternalTemp = %d Vref = %d ExtValue = %d\r\n",
adc_value[0], adc_value[1], adc_value[2], adc_value[3],
exti_value);
}}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
exti_value = GPIO_Pin; //GPIO 13๋ฒ Pin์ ์ํ๊ฐ 0 ๋๋ 1 ์ ์ฅ
}
int __io_putchar(int ch)
{
HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xffff); // UART ์ถ๋ ฅ
return ch;
}
1. ExUnitTemp : 4095
DHT11 ์จ๋์ผ์๋ ์ต๋, ์จ๋๋ฅผ ๋์งํธ ๊ฐ์ผ๋ก ๋ฐํํ๋ ์ผ์์ด๋ค. A๋ผ๋ ๋์งํธ ๊ฐ์ adc ๋ณํํ๋ฉด ๊ทธ๋๋ก A๋ผ๋ ๊ฐ์ด
๋์ค๋ 4095๋ผ๋ ๊ฐ์ ์จ๋ ๊ฐ๋ ์๋๊ณ ์ต๋ ๊ฐ๋ ์๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ADC ์ถ๋ ฅ์ ์ค์ตํ๋ ์ฑํฐ ์ด๋ฏ๋ก dht11์ ๋ฐ๋ก ๋ค๋ค์ ์ฑํฐ์ฏค์ ๋ฐ์ดํฐ์ํธ๋ฅผ ์ฐธ๊ณ ํด ์ ๋๋ก ์ค์ตํด ๋ณด๊ณ ์ ํ๋ค.
2. Internal Temp : 970
MCU์ ๋ด๋ถ ์๋ ๋ก๊ทธ ์จ๋์ผ์๋ฅผ ํตํด ์ป์ ๊ฐ์ ํตํด ์ญ์จ์จ๋๋ฅผ ๊ณ์ฐํ ๊ฒฐ๊ณผ ์จ๋(°C) = (1.43 - 0.970) / 0.0043 + 25 ≈ 32.093°C ๊ฐ ๋์๋ค. ์ค์ต ๋น์ ์ฃผ๋ณ ์จ๋๋ 28๋ ์์ผ๋ฏ๋ก MCU ๋ด๋ถ ๋ฐ์ด ๋ฑ์ผ๋ก ์ธํด ๋ ๋์ ์จ๋๊ฐ ๋์จ ๊ฒ ๊ฐ๋ค.
3. Vref : 1494
3.3V๋ฅผ ์จ๋์ผ์์ ์ฐ๊ฒฐํ์์ผ๋ 1.494V๊ฐ ๋์จ ๊ฒ์ผ๋ก ๋ณด์ dht11 ์จ๋์ผ์ ๋ด๋ถ์์ ๋ค์ด์ค๋๋ฅผ ํตํด ํ์ํ ์ ์์ผ๋ก ์กฐ์ ํ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
4. ExtValue = 8192
GPIO ํ์ ์ํ 0 ๋๋ 1์ด ๋์ฌ ์ค ์์๋๋ฐ 8192๋ผ๋ ์ซ์๊ฐ ๋์๋ค. ์์ธ์ ์ฐพ์ง ๋ชปํ์์ผ๋ฉฐ 8192๋ 2^13์ผ๋ก ์ฌ์ฉํ 13ํ๊ณผ ๊ด๋ จ์ด ์๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
'embedded' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[stm32] I2C ํต์ ์ค์ต (0) | 2023.09.11 |
---|---|
[stm32] I2C ํต์ ์ด๋ก ์ ๋ฆฌ (0) | 2023.09.11 |
[stm32] ADC & DMA ์ด๋ก ์ ๋ฆฌ (0) | 2023.09.06 |
[stm32] UART ์ค์ต (0) | 2023.08.30 |
[stm32] UART ์ด๋ก ์ ๋ฆฌ (0) | 2023.08.16 |