๐ณ ADC๋? (Analog - to - Digital Converter)
MCU์์ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ ์๋ ๋ก๊ทธ ์ ํธ๊ฐ ๋ค์ด์์ ๋ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๋์งํธ ์ ํธ(1 ๋๋ 0)๋ก ๋ฐ๊ฟ์ฃผ๋ ์ฅ์น์ด๋ค.
๋๋ถ๋ถ์ MCU์๋ ADC ์ฅ์น๊ฐ ๋ด์ฅ๋์ด ์๋ค.
๐ณ ์๋ ๋ก๊ทธ ์ ํธ -> ๋์งํธ ์ ํธ ๋ณํ ๋ฐฉ๋ฒ
์๋ ๋ก๊ทธ ์ ํธ -> ๋์งํธ ์ ํธ๋ก ๋ณํํ๊ธฐ ์ํด์ 1) ํํฐ๋ง -> 2) ์ํ๋ง -> 3) ์์ํ -> 4) ๋ถํธํ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ฉฐ
๊ฐ ๊ณผ์ ์ ๋ํ ์ค๋ช
์ ์๋์ ๊ฐ๋ค.
1. ํํฐ๋ง
์๋ ๋ก๊ทธ ์ ํธ์์ ์ํ๋ ๋์ญ์ ์ค์ ํด ์์น ์๊ฒ ๋ค์ด์จ ์ํ์ง ์๋ ๋์ญ์ ์ ํธ(๋ ธ์ด์ฆ ์ ํธ)๋ฅผ ์ ๊ฑฐํ๋ค.
2.์ํ๋ง
ํํฐ๋ง๋ ์ ํธ๋ฅผ x์ถ(์๊ฐ) ๊ธฐ์ค์ผ๋ก ์ชผ๊ฐ๊ณ ์ชผ๊ฐ ์๊ฐ์ ๋ฐ๋ฅธ(x๊ฐ์ ๋ฐ๋ฅธ) y ๊ฐ๋ค์ ์ป๋๋ค.
(โป ๋ง์ด ์ชผ๊ฐค์๋ก ์๋ ๋ก๊ทธ ์ ํธ์ ๊ทผ์ฌํ ๊ฐ์ ์ป์ ์ ์์ผ๋ ๋๋ฌด ๋ง์ด ์ชผ๊ฐ๋ฉด ๋ณํ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์๋ค.)
3 ์์ํ & ๋ถํธํ
์ํ๋ง์ ํตํด ์ป์ y์ถ ๊ฐ๋ค์ 1byte ๋จ์๋ก ํํํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ผ๋ก ๋งค์นญ์ํจ ํ(e.g. 12.345123 -> 12)
0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ๋ก ๋ถํธํํ์ฌ ๋์งํธ ๊ฐ์ ์ป๋๋ค.
(โป ์ปดํจํฐ ๋ฐ์ดํฐ ์ฃผ์ ๋จ์๋ 1byte(8bits) ์ด๋ฉฐ ์๋ฅผ ๋ค์ด 12๋ผ๋ ๊ฐ์ ๋ถํธํํ๋ฉด 11110100์ด ๋๋ค.)
๐ณ F429zi ADC block diagram
Block ๋ค์ด์ด๊ทธ๋จ์ ๋ณด๋ฉด ๋๋ต์ ์ผ๋ก ์๋์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
1. ADC1 ~ ADC 15 GPIO ports๋ก๋ถํฐ ์ธ๋ถ ์๋ ๋ก๊ทธ ์ ํธ๋ฅผ ์
๋ ฅ๋ฐ๋๋ค.
2. ์
๋ ฅ๋ฐ์ ์ ํธ๊ฐ ADC Converter์ ์ํด ๋ณํ๋๋ค.
(โป Regular Channel : ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ, Injected Channel : ์ถ๊ฐ์ ์ธ ์ค์ ์ด ํ์ํ ๊ฒฝ์ฐ)
3. ๋ณํ๋ ์ ํธ๊ฐ data register์ ๋ด๊ธด๋ค.
๐ณ DMA(Direct Memory Access) ๋?
์ผ๋ฐ์ ์ผ๋ก MCU์์ ํน์ ํ ์์
์ ์ํํ ๋
1) CPU ๋ ์ง์คํฐ์ ์ฒ๋ฆฌํ ๋ฐ์ดํฐ ์ถ๊ฐ -> 2) ๋ฉ๋ชจ๋ฆฌ์์ ํด๋น ๋ฐ์ดํฐ ๋ก๋ ๋ฐ ์์
์ํ
2๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณ ์์
์ ์ํํ๊ฒ ๋๋๋ฐ 1๋ฒ ๊ณผ์ ์์ด(CPU ๋ถํ ์์ด) ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ์ฌ
๋ฐ๋ก ์์
์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด DMA์ด๋ค.
๐ณ F429zi DMA Block Diagram
์ฒซ ๋ฒ์งธ๋ก F429zi์ ๊ฒฝ์ฐ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๋์ผํ ๊ตฌ์กฐ์ DMA๊ฐ 2๊ฐ ์กด์ฌํ๋ฉฐ
ํ๋์ DMA ๋น 8๊ฐ์ ์คํธ๋ฆผ์ด ์กด์ฌํ๋ฉฐ ์ด ์คํธ๋ฆผ์ ๋ค์ 8๊ฐ์ ์ฑ๋์ ๊ฐ์ง๋ค.
(โป ์ฑ๋์ DMA ์ปจํธ๋กค๋ฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ ๋ฌผ๋ฆฌ์ ์ธ ํต๋ก ๊ฐ๋
์ด๊ณ
์คํธ๋ฆผ์ ์ฑ๋๋ก ๋ถํฐ ๋ค์ด์จ ๋ฐ์ดํฐ๋ค์ด ์ฐ์์ ์ผ๋ก ํ๋ฌ arbiter์ ๋ค์ด๊ฐ๋ ์ถ์์ ์ธ ๊ฐ๋
์ธ๊ฒ ๊ฐ๋ค.)
DMA ์ฑ๋๋ค์ ๊ฐ๊ฐ ์ฌ์ฉ ์ฉ๋๊ฐ ์๋์ ๊ฐ์ด ์ ํด์ ธ ์์ผ๋ฉฐ ๊ฐ ์ฑ๋์ ์ฉ๋์ ๋ง์ถฐ ์ฌ์ฉํด์ผ ํ๋ค.
๋ ๋ฒ์งธ๋ก ๊ฐ ์ฑ๋์ ํตํด ๋ค์ด์จ ๋ฐ์ดํฐ๋ arbiter์ ์ํด ๊ด๋ฆฌ๋๋ฉฐ ํ์ํ ์ฌ๋ฌ ์์
์ ๊ฑฐ์ณ ์ถ๋ ฅ ํฌํธ์ ์ ์ก๋๋ค.
(โป Arbiter : DMA ์ฑ๋ ๊ฐ ์ฐ์ ์์๋ฅผ ๊ฒฐ์ , ์ถฉ๋์ ๊ด๋ฆฌ ๋ฑ์ ์์
์ ํ๋ ํ๋์จ์ด ์ฅ์น)
์ธ ๋ฒ์งธ๋ก ๋ฉ๋ชจ๋ฆฌ๋ก ์ฐ๊ฒฐ๋ AHB ๋ฉ๋ชจ๋ฆฌ ํฌํธ์ ์ฃผ๋ณ ์ฅ์น์ ์ฐ๊ฒฐ๋๋ AHB ์ฃผ๋ณ ์ฅ์น ํฌํธ 2๊ฐ์ ์ถ๋ ฅ ํฌํธ๊ฐ ์กด์ฌํ์ฌ
์ฃผ๋ณ๊ธฐ๊ธฐ - ๋ฉ๋ชจ๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ - ์ฃผ๋ณ๊ธฐ๊ธฐ, ๋ฉ๋ชจ๋ฆฌ - ๋ฉ๋ชจ๋ฆฌ ๋ผ๋ฆฌ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํ๋ค. (ํด๋น ๊ฒฝ์ฐ์๋ DMA2๋ง)
๋ค ๋ฒ์งธ๋ก AHB slave ํฌํธ๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ๊ฐ ๋ ์ง์คํฐ์ ์ ๊ทผํ๊ณ DMA ์ปจํธ๋กค๋ฌ๋ฅผ ์ค์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์๋ค.
'embedded' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[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 |
[stm32] Timer ์ค์ต (0) | 2023.08.16 |