마이크로컨트롤러

From Hidden Wiki
Jump to navigation Jump to search

개요

마이크로컨트롤러(microcontroller) 또는 마이크로 컨트롤러 유닛(micro controller unit). 줄여서 MCU라고도 한다.

집적 회로 안에 프로세서와 메모리, 입출력 버스 등의 최소한의 컴퓨팅 요소를 내장한 초소형 컨트롤러. 마이크로 컨트롤러 또는 마이크로 프로세서라고 불린다. 보통 자동 제어(자동제어, 제어 공학, 제어공학)에 사용되기 위한 저성능/저전력 연산 장치를 뜻하나, 경우에 따라서는 ARM Cortex-A 시리즈와 같이 스마트폰 등에 사용되는 고성능/저전력 프로세서 제품도 MCU라 표현하기도 한다. ARM Cortex-A 시리즈와 같은 고성능/저전력 프로세서의 경우 CPU와 MCU의 경계선에 있다고 봐도 된다. 이러한 경우 일반적인 PC에 비해 저성능/저전력이지만 나름대로 지유아이(GUI)를 탑재한 OS를 설치하여 PC처럼 사용할 수 있기 때문이다. 그러나, 당연히 저성능 자체를 추구하는 것은 아니므로 구조의 개선이 이루어지며 점점 성능 향상이 이루어지고 있다.

PC에서의 CPU와 비슷하나, 이와 다른 가장 큰 특징은 저성능/저전력에 저렴한 가격으로 제작된다는 점과, 자동제어에 이용되기 위한 많은 주변장치를 포함하고 있다는 점이다. 예를 들어 많은 수의 타이머와 PWM 출력, 많은 수의 GPIO, 각종 시리얼 통신 장치들, 프로그램을 저장하기 위한 플래시 메모리나 ROM 등이 있다. 고성능의 처리 능력을 가지는 비싼 MCUDigital Signal Processor(DSP, 디에스피, 디지털 시그널 프로세서)라 하며, 현재 MCU와 CPU의 구분은 그 프로세서의 사용 목적에 따라 정해지는 편이다. 고성능의 OS를 설치하여 PC나 서버, 슈퍼컴퓨터 등에 사용하는 경우에는 보통 CPU라 하며, 일반적인 OS가 아닌 RTOS를 설치하여 사용하거나 OS 없이 칩 위에서 바로 돌아가는 프로그램을 Bare metal 프로그램이나 펌웨어 만 사용하여 자동제어에 사용되는 경우에는 MCU라 부르는 편이다. ARM Cortex-M 시리즈의 경우 FreeRTOS와 같은 RTOS를 설치해서 쓴다. 그러나 그 경계가 모호해지는 경우도 있다.

보통 임베디드 시스템에 적합하게 디자인된 물건이 많은지라 성능 자체는 뛰어나다고 볼 수 없지만 단순하고 신뢰성 있으며 전력소모가 적으며 저렴하다는 장점이 있으며 현재도 여러 분야에 걸쳐서 널리 쓰이는 장치들이다. 이쪽에서 주로 쓰이는 AVR이나 Cortex-M을 보면 알 수 있듯이 매우 제한된 용량, 연산성능을 가지고 있다. 극단적인 예로 가면 마이크로칩사의 PIC12C508A 같은 모델은 프로그래밍 가능한 용량이 512바이트인 경우도 있다. 이칩의 가격은 약 900원.

예를 든다면 약 8달러의 Espressif 사의 IoT 임베디드 SoC 칩인 ESP32는 160MHz 듀얼코어(600DMIPS)/16 MB Flash/블루투스+WiFi 정도의 사양이며 이정도면 고성능의 임베디드 칩이다. 너무 초저가격대의 칩은 성능이 너무 제한적이여서 사용 용도가 제한적이다. 74시리즈나 40시리즈 IC를 대체하고 싶다거나 단순한 기능을 가진 기계를 마구 찍어낸다든가. 만원 이하의 중급 칩은 전성비와 더불어 성능도 상승한지라 사용용도가 무궁무진하다.

성능이 뛰어나지 못하니 최신아키텍처에서 성능을 줄인 제품들을 쓰는 것으로 오해할 수 있지만, ARM Cortex-M 시리즈 등을 제외하고는 10년은 더 된 오래된 아키텍처를 그대로 갖다쓰는 경우가 대부분이다. 거기다가 10nm니 8nm니 하는 스마트폰 SoC들에 비하면 최신 마이크로컨트롤러 생산공정이 대부분 100nm 대에 머물러 있는 경우도 많다. 어찌보면 구식 기술들을 왜 끌어안고 살고 있나 싶지만 그럴만한 이유가 있다. 대부분 성능보다는 전기적인 특성과 안정성을 추구하는 분야이기 때문인데, 대부분의 마이크로컨트롤러들은 작동전압이 5V 나 3.3V 인데 반해 최신 스마트폰들 SoC들은 작동전압이 1.8V나 심지어 그보다 낮은 경우가 많다. 수많은 센서들과 모터 컨트롤러 들은 5V나 3.3V로 작동하기 때문에 그것과 맞는 작동전압을 가진 마이크로컨트롤러를 쓰면 설계 난이도나 비용을 상당히 많이 낮출 수 있기 때문이다. 또한 생산공정을 미세화하는 것이 이 분야에서는 항상 좋은 것만이 아닌데, 생산공정을 미세화할 수록 칩들의 전기적인 특성이 훨씬 더 불안정해지기 때문. 100nm 칩에서 10nm 칩들을 쓰면 그만큼 디지털회로 상태 변화에 필요한 전기적 에너지가 낮아지는데, 이것을 반대로 말하면 그만큼 외부의 전기적 변화에 취약하다는 의미이다. 다만 2017년 현재 최신 임베디드 칩의 경우 40nm의 제조공정을 보이고 있다. 어쩔수 없는 것이 전성비와 가성비 2가지를 동시에 올리려면 전기적 변화에 취약할지라도 어쩔수 없이 미세공정화가 필수이기 때문이다.

이 분야에서 주로 사용되는 언어는 어셈블리어, C이다. 물론 실제 업무용이 아니라면 범위가 넓어져서 BASIC, C#, 파이썬 등등으로 넓어지기는 한다. 대신 이쪽은 주로 교육용이다.

넓게 가보면 C++까진 실업무에서 쓰나 대부분의 회사에서 주력으로 C를 쓰며 칩을 내는 업체도 대부분 C에 기반한 예제와 라이브러리를 제공한다. 가끔씩 번외로 아두이노로 프로젝트 구성을 자사 IDE에 탑재하는 경우는 많아졋다. 특히 Atmel. 칩을 극단적으로까지 짜내는 영역이 아닌 이상 어셈블리어는 건드리지 않지만 최적화를 하다 보면 어셈블리어에 대한 이해도 어느 정도 필요하다. 고급 언어는 쓰고 싶어도 프로세서 성능은 둘째 치고 MCU 프로그래밍은 기본적으로 메모리 조작과 많은 연관을 지닌 관계로 포인터 없이는 제대로 프로그래밍 하기 불가능한 경우가 많다. 예를 들면 MCU에서 출력을 바꾸는 건 몇 번 핀과 연결된 메모리에 1, 0값을 쓰는 형태로 이루어진다. 괜히 이쪽업계에서 16진수와 메모리 단위로 word를 사용하는게 아니다. 사실 노력만 하면 MCU 제어 라이브러리도 모든 언어로 구성할 수 있다. 당장 Java 또한 이와 관련된 라이브러리가 있고 라즈베리 파이는 파이선으로 비슷하게 해볼수 있다. 다만 8비트와 16비트이하에서는 많이 어렵다. 따라서 업계는 칩의 성능이 나아지던 발전하던 간에 계속 C나 어셈블리 가지고 씨름해야 한다. 다만 RTOS 같은 게 발전해서 32비트 쪽은 나름 언어선택폭이 다양해졌다. 당장 자바스크립트나 PHP로도 프로그래밍 가능한 개발보드가 나오기도 한다. 다만 8비트는 진짜 C와 어셈블리 아니면 답이없는 영역이다.

사용 분야

민간 분야 쪽에서는 대부분의 가전제품 등에 들어가 있으며 산업 분야에서는 단순 제어 분야에 많이 사용된다. 최근 이슈가 되고 있는 드론의 컨트롤러로 많이 쓰이고 있다. Fitbit등 웨어러블 기기에 대부분 들어간다.

스마트폰에서도 AP와 함께 로직보드에 MCU가 들어가는 경우도 많은데, 그 예시로는 아이폰 6에 들어가는 모션 프로세서인 M8. ARM Cortex-M3 마이크로컨트롤러에 자이로스코프, 가속도계등의 센서가 연결되어있는데, 하는 일은 센서의 값을 읽어들여 데이터 처리를 한 후 AP에 처리된 데이터를 보내는 것. AP를 이용해 처리하면 에너지 낭비인 일을 처리하기 위한 용도다.

이외에 초보적인 하드웨어 프로그래밍을 배우는 용도로도 많이 쓰인다. 대표적인 게 Arduino, Basic Stamp. 아두이노 이전부터 쓰여오던 이 분야의 선배격 디바이스로 우표크기에 DIP 배열을 가진 형태의 기판에 베이직으로 프로그래밍을 했다.

생산 기업

[[1]]

업계 입문 난이도가 낮아서 4비트나 8비트 마이크로 컨트롤러는 학부 수준에서도 제대로 파고 들면 설계할 수 있다. 직접 설계하는 업체도 많은 만큼 다 따지면 엄청난 수의 회사에서 엄청난 수의 MCU를 내놓는다. 16비트 MCU는 대다수 업체들이 직접 설계한 칩을 가진 경우가 많다. 32비트 수준에서도 ARM이라는 걸출한 회사의 아키텍처가 있는만큼 Cortex-M 기반으로 다수업체들이 여러 MCU를 내놓는 경우가 많다. ~~물론 실제 회사에 가면 죽어라 하나만 파게될것이다~~

또한 다양한 아키텍처의 마이크로컨트롤러가 존재하는 관계로 여러 마이크로 컨트롤러를 개발 가능한 개발자는 찾기 힘들다.

관련 항목