'PWM 기능'에 해당되는 글 2건

  1. 2017.03.20 아날로그 출력(PWM)
  2. 2017.03.11 Arduino Uno R3의 개요
Embedded Lecture/Arduino2017. 3. 20. 21:03


Arduino Uno 보드의 디지털 핀은 '1'과 '0'의 진리값만을 출력할 수 있습니다. Uno 보드의 전원 전압이 5V이라면 'HIGH' 값으로 5V 그리고 'LOW' 값으로 0V를 출력한다는 것입니다. 그렇다면 아날로그 물리량은 나타낼 수가 없는 것일까요? 디지털 값을 아날로그 물리량으로 나타낼 수 있는 것이 있는데, 이를 DAC(Digital to Analog Converter)라 부릅니다. 하지만 Uno 보드의 메인칩인 ATmega328은 이 DAC를 탑재하지 않습니다(정교한 아날로그 물리량의 표현이 요구된다면 외장 DAC를 사용할 수 있습니다).


그렇다면 외부에서 DAC를 사용해야 하지만 정밀한 아날로그 물리량을 요구하지 않는 경우에, Uno 보드의 PWM 기능을 이용하여 아날로그 물리량을 표현할 수 있다는 것입니다. PWM(Pulse Width Modulation, 펄스 폭 변조)이란 5V와 0V를 교대로 이루어진 구형파(펄스) 신호를 출력하고 5V인 구간의 폭을 구형파 주기 내에서 변화시킴으로서 외부에서는 마치 0~5V까지 변하는 것처럼 보이게 한다는 것입이다.



위 그림에서 모든 구형파의 주기(T)는 동일하지만 출력이 HIGH인 구간인 구형파의 폭(width)이 점점 증가합니다. 만일 외부에서 디지털 출력 핀을 바라다 볼 때, 구형파의 주기(T)가 충분히 작거나 혹은 주파수(f=1/T)가 충분히 높다면, 구형파의 HIGH인 구간의 폭을 증가시킴에 따라 출력 전압도 증가하는 것처럼 보일 것입니다. 


즉, 이 구형파의 주파수를 높게 하면 상대적으로 반응 속도가 느린 모터 등과 같은 기계 장치는 이것을 아날로그 전압으로 착각하게 된다는 것입니다. 이 주파수는 Uno인 경우 490Hz 혹은 980Hz이며, HIGH인 구간 대비 LOW인 구간의 비율을 듀티비(Duty)라 부릅니다. Arduino의 모든 핀이 PWM 출력을 낼 수 있는 것은 아닙니다. Uno 보드의 경우 3, 5, 6, 9, 10, 11번 핀이 PWM 출력을 낼 수 있으며 보드상에 '~'로 표시됩니다. 이와 같은 디지털 핀의 펄스 폭 변조는 굳이 메인칩이 PWM 기능을 제공하지 않더라도 펌웨어 상에서 구현할 수 있습니다. 그러나 인터럽트나 CPU 타임을 일정부분 할애하기 때문에 코딩이 복잡해지고 효율성이 떨어지게 됩니다.



Uno 보드의 PWM의 동작 주파수는 다음과 같습니다. 

        • 3, 9, 10, 11번 핀 - 490Hz

        • 5, 6번 핀 – 980Hz


Uno 보드의 PWM 기능을 사용하기 위해서는 analogWrite() 함수를 이용하는데, 첫 번째 인수는 아날로그 핀의 번호(3, 5, 6, 9, 10, 11 중 하나)이며 두번째 인수는 0~255 사이의 정수로써 256 레벨의 듀티비를 의미합니다.



Posted by Nature & Life


Arduino Uno R3는 가장 널리 사용되는 입문용 기본 보드로 R3는 세번째 버젼을 의미합니다. 이 보드는 8-bit 마이크로 콘트롤러인 ATmega328P을 탑재하며 PC와 USB로 연결할 수 있어 프로그램 다운로드 및 시리얼 통신에 가능합니다. 그 밖에도 ATmega16U2의 또 다른 마이크로 콘트롤러를 내장하는데, 이는 기존 보드들에서 사용하던 FTDI FT232R USB-to-Serial 드라이버 칩을 대체하기 위한 것으로 USB-to-Serial 변환 프로그램이 들어 있습니다. ATmega328P는 1KB의 부트로터(Bootloader)용을 포함한 32KB의 Flash 메모리와 2KB의 SRAM, 1KB의 EEPROM을 갖고 있으며, 클럭 속도(Clock speed)는 16MHz입니다.


5V로 동작하는 이 Uno 보드의 전원공급은 두 가지 방법이 있는데, 첫번째는 USB로부터 제공되는 5V를 그대로 사용할 수 있으며, 두번째로는 7~12V의 AC 어댑터를 잭에 꼽아 외부에서 공급하는 방법인데 이는 Uno 보드가 내부적으로 5V를 정류하는 레귤레이터(Regulator)를 내장하고 있기 때문이며 위의 두 가지 전원이 모두 연결되어 있다면 외부 전원이 우선이 됩니다.



디지털 입출력 핀 14개 (0번~13번)

디지털 입출력 핀들을 이용해서 외부의 이진 신호를 읽어들어나 또는 이진 신호를 내보낼 수 있다. 디지털 입출력으로 사용되면서 또한 다른 기능을 가지는 핀들이 있는데, 이 기능들은 한 핀으로 두가지를 다 사용할 수는 없으며 다른 기능은 다음과 같습니다.

    • 0번~1번: 시리얼 통신에 사용되어 USB로 PC와 통신을 할 수 있습니다.

    • 2번~3번: 인터럽트(interrupt) 기능을 갖습니다.

    • 3, 5, 6, 9, 10, 11번 핀은 PWM 기능을 가지며 아날로그 출력을 흉내낼 수 있다.


아날로그 입력 핀 6개 (A0~A5)

외부의 아날로그 입력값을 읽어들여 ATmega328P칩 내부의 ADC(Analog to Digital Converter)를 이용하여 0~1023 사이의 숫자로 변환합니다. 이때 필요한 기준 전압은 5V 이지만 1.1V의 내부 전압이 사용될 수 있으며 AREF핀으로 기준 전압을 직접 인가할 수도 있습니다. 그리고 아날로그 핀은 디지털 입출력 핀으로도 사용할 수 있습니다.


아날로그 출력핀 6개 (3,5,6,9,10,11번 핀)

아날로그 출력핀은 0~5V사이의 전압 값(256레벨)을 가질 수 있으며 이는 PWM(Pulse Width Modulation) 방식으로 동작하므로 흉내를 내는 것입니다.


인터럽트 (2, 3번 핀)

2번과 3번 핀에 가해진 외부 이벤트를 감지하여 사용자가 원하는 방향으로 이를 처리하기 위한 기능으로 이를 인터럽트 처리(interrupt handling)라 부르는데, 즉 이 핀들에 변화가 있는면 하드웨어는 즉각적으로 알리고 이때 사용자가 원하는 정해진 동작을 코딩하여 사용합니다.



ICSP for ATmega328 : 기존의 ATmega328P에 ICSP(In Circuit Serial Programming)를 위한 SPI 통신용 6핀 포트입니다. ICSP는 전통적으로 마이크로 컨트롤러에 직접 펌웨어를 프로그래밍하기 위해 마련된 것입니다.


ICSP for USB interface : 기존의 ATmega16U2에 ICSP(In Circuit Serial Programming)를 위한 SPI 통신용 6핀 포트입니다. 


TWI(I2C) 통신 : A0, A1 핀




Posted by Nature & Life