아두이노 PWM 측정 - adu-ino PWM cheugjeong

example 안에 있는 소스를 이것저것 봤다. 뭔 소리인지, 도대체 모르겠다. 근데, 뭔가는 해 보고 싶다. 근데 귀찮다. 어쩌라고? 그러면 간단한 거 부터 해보자. blink해 봤으니, fade라는 게 있다. 이거 LED가 필요할 거 같은데, 아직은 없다. 일단 소스 내용부터 보자. 땜쟁이는 이걸로 밥 벌어먹고 사는 사람 아닌가? 땜쟁이가 대충 어떻게 움직이는 지, 그리고, 오실로스코프라는 걸로 보면 어떻게 보이는 지, 눈으로 보여주마.

오실로스코프 이건 뭔가?

아두이노 PWM 측정 - adu-ino PWM cheugjeong

이런 장치다. 상세한 건 여러분들 장비가 없으니 설명해 줘도 잘 모른다. 만질 수 있는 기회가 있다면 좋으련만, 일반인에게는 좀 생소한 장비다. 이 장비는 실제 보드에서 나오는 파형등을 눈으로 볼 수 있도록 해논 장비이다. 하드웨어 개발자들에게는 절대로 없어서는 안될 중요한 장비이다. 땜쟁이는 회사에도 있고, 집에도 있다. 일단, 오실로스코프로 측정을 해 보기 전에, 오실로스코프는 측정하고자 하는 핀과 GND(그라운드)가 필요하기 때문에, GND 테스트 핀을 하나 장착하도록 하겠다.

아두이노 PWM 측정 - adu-ino PWM cheugjeong

호환품이 아닌 정품으로 테스트를 해 보겠다. 호환품으로 해도 아무 상관 없다.

아두이노 PWM 측정 - adu-ino PWM cheugjeong

아래부분 검은색 핀이 보일 것이다. 두개의핀을 쇼트시켰다. 같은 GND라 상관이 없어서 이렇게 처리했다. 오실로스코프 그라운드 악어클립이 잘 물릴 수 있도록 테스트 핀 장착완료.

아두이노 PWM 측정 - adu-ino PWM cheugjeong

오실로스코프를 PWM이 가능한 arduino 9번 핀에 연결하고, 나머지 그라운드를 아까 만들었던 테스트핀에 접속했다. 연결완료.

9번핀은 PWM(Pulse Width Modulation : 펄스 폭 변조) 이 가능한 핀이다. 이게 뭐냐고?

PWM은 펄스폭변조라고 해서 발생하는 신호 파형의 폭(넓이)을 가변할 수 있는 아주 훌륭한 것이다. 그럼 이거 어디에 쓰냐고? 그게 제일 중요하다. 어디다 쓰는 지 모르고 무작정 배우면 암기도 잘 안되고, 어렵다. 근데 어디다 쓰는 지 용도를 알면 너무 재미있다. 그래서 설명한다.

예를 들어서 크리스마스 트리가 있다고 가정하자.

크리스마스 트리 램프를 보면 여러가지 색상으로 깜박거린다. 꺼졌다가 켜졌다가. 보통은 그렇다. 그런데 가끔 천천히 밝아졌다가 천천히 어두워지는 램프도 있다. 요건 좀 더 비싸다. (똑 같다고 하면 할말없다…-.-;) 바로, 천천히 밝아지고, 천천히 어두워지도록 하려면 반드시 필요한 것이 PWM이다. (물론 다른 방법도 있다고 이야기하면 설멍이 너무 길어지니, 여기서는 PWM만 보자.)

전압이 5V일 동안은 램프가 켜질 것이다. 그리고, 0V이면 꺼지고.

그럼 5V를 유지할 동안의 시간을 조절하면 밝기 조절이 가능하지 않을까 하는 것이, 바로 PWM이다.

파형을 보통 오실로스코프로 보면 다음과 같다.

아두이노 PWM 측정 - adu-ino PWM cheugjeong

요런 형태로 파형이 나타난다.

D는 Duty cycle이라고 해서 어떤 주어진 기간중의 일정한 반복부하의 패턴을 이야기하는 것이다. 쉽게 설명하면, 아주 빠른 시간내에 On/Off를 반복하면서 운전시간의 비율을 조절하는 방법이라고 생각하면 된다.

그럼 실제로 정말로 이렇게 되는 지 한번 보자.

아두이노 PWM 측정 - adu-ino PWM cheugjeong

sublime text3에서 fade.ino라는 example을 로딩해 보았다. 물론, 바로 arduino로 업로드하면 된다.

바로 업로드해도 아무 반응이 없다. 이거 뭐지? 잘못된 건가? 아니다. 현재 LED를 연결하지 않아서 눈으로 보이지 않을 뿐이다. 내부적으로는 엄청나게 일을 하고 있다.

소스를 보면, 밝기를 내렸다가 다시 올렸다가를 반복하고 있다. LED가 없기 때문에, 어떻게 동작이 되는 지 오실로프코프로 한번 확인해 보자.

아두이노 PWM 측정 - adu-ino PWM cheugjeong

위의 화면을 클릭~!

보인다. 아까 PWM 움짤에서 봤던 파형이 그대로 보인다. 우와~! 신기하다. 땜쟁이가 지금 가지고 있는 오실로스코프가 좀 오래된거라 깨끗하지 않다.

자 그러면, PWM이 가능하지 않은 핀은 정말 On/Off만 하는 걸까? On/Off만 하면 파형이 어떻게 나오는 걸까? 궁금하다. 그래서 땜쟁이가 이 화면도 준비했다.

아두이노 PWM 측정 - adu-ino PWM cheugjeong

위의 화면을 클릭~!

세로로 찍혀버렸다… 수정하기 귀찮아서 그냥 했다. 자 봐라. 폭이 변하지 않고 일정하게 On/Off만 반복한다. 이렇게 되면 꺼졌다, 커졌다만 반복한다. 정말로 신기하지 않은가?

PWM은 밝기제어, 모터의 속도제어등 여러분야에서 쓰인다. 정말로 없어서는 안될 기능이다. 다음에는 실제로 LED를 장착해서 밝기가 정말로 변하는 지 보도록 하자. 또 피곤해 졌다. 그럼 이만~!

Arduino 보드에서 사용할 수있는 디지털 및 아날로그 핀을 사용하면 전기 신호를 수신하거나 전송하여 전자 프로젝트에서 데이터를 제어하거나 얻을 수 있습니다. 또한 이러한 유형의 플레이트에는 다른 매우 흥미로운 신호가 있습니다. PWM, 실제로 아날로그가 아닌 아날로그 신호를 에뮬레이트 할 수 있습니다. 즉, 아날로그 신호와 유사한 방식 (동일하지 않음)으로 작동 할 수있는 디지털 핀입니다.

이러한 유형의 신호는 디지털 HIGH 및 LOW 신호, 즉 1 또는 0, ON 및 OFF를 사용하고 싶을 때뿐만 아니라 더 나아가 설명하고 싶을 때 매우 실용적입니다. 다소 복잡한 신호. 예를 들어, 속도를 조절할 수 있습니다. 모터 DC, 또는 빛의 광도, 솔레노이드 등

색인

  • 1 아날로그 대 디지털 시스템
    • 1.1 아날로그 대 디지털 신호
  • 2 PWM이란 무엇입니까?
  • 3 Arduino의 PWM
    • 3.1 PWM : Arduino의 핀아웃
    • 3.2 타이머로 제어
    • 3.3 비 호환성 및 충돌
    • 3.4 Arduino를 사용한 실습 테스트

아날로그 대 디지털 시스템

아두이노 PWM 측정 - adu-ino PWM cheugjeong

전자 회로는 크게 두 가지 제품군 또는 범주로 나눌 수 있습니다. 디지털 및 아날로그. 디지털 전자 장치에 대해 이야기 할 때, 우리는 처리되는 비트의 상태를 해석하기 위해 저전압 또는 고전압의 전기 신호로 표현되는 이진 시스템 인 이산 값을 가진 수량을 사용합니다. 반면에 아날로그 회로의 경우 연속 값을 가진 수량이 사용됩니다.

디지털 시스템 내에서 차례로 찾을 수 있습니다. 조합형과 순차 형. 즉, 전자는 시스템의 출력이 입력 상태에만 의존하는 것입니다. 반면에 순차적 인 요소에는 메모리 요소가 포함되며 출력은 입력의 현재 상태와 저장된 이전 상태에 따라 달라집니다.

아날로그의 경우이 두 가지 큰 그룹이나 변형이 없습니다. 여기에서는 항상 의존하는 연속 신호이기 때문입니다. 신호 현재 시스템. 예를 들어, 확성기에서 제공되는 신호는 재생하려는 사운드에 따라 다릅니다. 마이크도 마찬가지로 수신하는 소리에 따라 아날로그 신호를 생성합니다. 분명히이 블로그에서 설명하고 아날로그 신호로 작동하는 다른 많은 센서에서도이를 보셨을 것입니다 (따라서 나중에 Arduino IDE 스케치에서 값을 계산하거나 조건화 할 수 있도록 공식을 만들어야했습니다. ) ...

하나와 다른 것의 이러한 특성으로 인해 일부는 자신의 장점과 단점, 거의 모든 것에서 평소처럼. 예를 들어, 디지털은 일반적으로 저렴하고, 빠르고, 개발하기 쉽고, 정보를 더 쉽게 저장할 수 있으며, 정확도가 높고, 프로그래밍 할 수 있으며, 소음 등의 영향에 취약하지 않습니다. 그러나 아날로그를 사용하면 더 복잡한 신호로 작동 할 수 있다는 것도 사실입니다.

로 ejemplo, 디지털 방식의 홀 효과 센서는 근처의 자기장 유무 만 감지 할 수 있습니다. 대신 아날로그 홀 효과 센서가이를 수행 할 수 있으며 출력에서 ​​생성되는 아날로그 신호 덕분에 자기장의 밀도를 결정할 수 있습니다. 더 크거나 더 작은 전압의 신호를 잘 해석하는 방법을 알면 그 크기를 쉽게 알 수 있습니다. 온도, 시간, 압력, 거리, 소리 등과 같이 아날로그 시스템으로 정량적으로 측정 할 수있는 다양한 자연의 다른 예입니다.

아날로그 대 디지털 신호

즉, 아날로그 신호 시간에 따라 지속적으로 변하는 전압 또는 전류가 될 것입니다. 그래프로 표시하면 아날로그 신호는 단일 주파수 사인파가됩니다.

로 디지털 신호는 시간에 따라 단계적으로 변하는 전압입니다. 즉, 그래프에 표시되면 연속적으로 변하지 않고 단계적으로 또는 이산 적으로 증가하는 단계 신호가됩니다.

아날로그 신호에서 디지털 신호로 또는 그 반대로 이동하는 회로가 있다는 것을 알아야합니다. 이들 변환기 DAC (Digital-to-Analog Converter) 및 ADC (Analog-to-Digital Converter)라고합니다. 그리고 그들은 TV, 컴퓨터 등과 같이 오늘날 우리가 사용하는 많은 장치에서 매우 자주 발생합니다. 이를 통해 이러한 장비에서 사용하는 디지털 신호를 전자 수준으로 변환하여 아날로그로 작동하는 다른 주변 장치 또는 부품과 함께 작동 할 수 있습니다.

로 ejemplo, 사운드 카드와 함께 작동하는 아날로그 신호가있는 스피커 또는 마이크 또는 아날로그 모니터 포트 용으로 유명한 RAMDAC 칩이있는 디지털 그래픽 카드 ... Arduino에서 이러한 유형의 변환기는 여러 프로젝트에도 사용됩니다. ...

PWM이란 무엇입니까?

아두이노 PWM 측정 - adu-ino PWM cheugjeong

이기는하지만 PWM (Pulse-Width Modulation) 또는 펄스 폭 변조, 디지털 기반을 가지고 있으며 신호의 모양은 다소 "정사각형"아날로그 신호와 유사합니다. 이전에 이미 언급했듯이 디지털 펄스를 통해 신호를 변화시켜 아날로그 시스템을 에뮬레이트 할 수 있습니다. 사실, 이름을 보면 이미 디지털 펄스의 폭을 통해 그것이 무엇을하는지에 대한 단서를 제공합니다.

이것은 유익합니다 아두 이노 프로젝트에 추가 할 수있는 자동화 또는 전자 부품이 많기 때문에 진정한 아날로그 신호를 제공 할 수 없습니다.하지만이 PWM을 사용하여 작동합니다. 또한 이산화 된 아날로그 신호, 즉 디지털 신호와 유사하게 전압 점프로 이동하는 신호를 사용할 수도 없습니다. 그들이 할 수있는 것은 디지털 출력 -Vcc 또는 디지털 유형의 Vcc를 사용하여이 독특한 신호를 생성하는 것입니다.

따라서 PWM은 Arduino 및 기타 시스템이 이러한 유형의 신호와 상호 운용 할 수있는 일종의 "트릭"입니다. 아날로그도 아니고 전통적인 디지털도 아닙니다. 이를 가능하게하기 위해 그들은 항상 관심사에 따라 특정 시간 동안 또는 꺼진 동안 디지털 출력을 활성 상태로 유지합니다. 이것은 펄스의 폭이 동일한 디지털 클록 또는 이진 코드 신호와는 거리가 멀다.

Arduino를 사용한 프로젝트에서 시간이 지남에 따라 일정한 주파수의 펄스 트리거가 유지되는 이러한 유형의 PWM 신호를 확인할 수 있지만 이 펄스의 폭은 다양합니다.. 사실, 신호가 전체 사이클에 대해 하이 상태로 유지되는 것을 듀티 사이클이라고합니다. 따라서 듀티 사이클은 %로 제공됩니다.

PWM에서는 여러 전압 값 사이에서 아날로그 신호처럼 작동하지 않으며 그 사이에서 변동합니다. PWM의 경우 디지털 스타일의 사각 신호이며 최대 값은 Vcc. 예를 들어, 3V 전원 공급 장치로 작업하는 경우 3V 또는 0V 펄스를 제공 할 수 있지만 실제 아날로그에서 발생하는 1V 또는 기타 중간 값은 제공 할 수 없습니다. 이 경우 변동되는 것은 펄스 폭으로, 높은 Vcc 값에서 30 %를 유지하거나 더 많은 전력을 제공하기 위해 60 %를 유지할 수 있습니다.

그러나 장치가 Vcc 제한을 지원하고 PWM을 초과하면 손상 될 수 있으므로주의하십시오. 따라서 항상 제조업체가 제공하는 데이터 시트의 값을 존중해야합니다. 또한 DC 모터와 같은 일부 장치에서는 릴레이, 전자석 등, 듀티 사이클 후 전압 철회는 유도 성 부하가 손상을 일으킬 수 있음을 의미 할 수 있습니다. 그래서 보호 시기 적절한.

Arduino의 PWM

아두이노 PWM 측정 - adu-ino PWM cheugjeong

작동 원리를 알았으니 이제 Arduino 세계에서 PWM의 특정 사례를 살펴 보겠습니다.

PWM : Arduino의 핀아웃

Arduino 보드에서 하드웨어 PWM을 구현하는 여러 핀을 찾을 수 있습니다. PCB 자체에서 식별 할 수 있습니다. 기호 ~ (작은 머리) 핀 번호와 함께. 아두 이노 코드의 소프트웨어로도 할 수 있지만, 마이크로 컨트롤러가 작업으로 과부하를 일으킬 수 있습니다.

  • Arduino UNO, Mini 및 Nano-핀 6, 8, 3, 5, 6 및 9에 10 개의 11 비트 PWM 출력이 있으며, 숫자 바로 앞에 ~가 있습니다.
  • 아두 이노 메가-이 가장 강력한 Arduino 보드에는 15 개의 8 비트 PWM 출력이 있습니다. 핀 2 ~ 13 및 44 ~ 46에 있습니다.
  • 아두이노 듀:이 경우 13 개의 8 비트 PWM 출력이 있습니다. 핀 2 ~ 13과 12 비트 분해능의 DAC에 의해 이산화 된 다른 두 개의 아날로그 출력에 있습니다.

이러한 유형의 PWM 출력에서 ​​8 비트 또는 12 비트 등의 해상도에 대해 이야기 할 때, 당신은 당신이 가지고있는 기동을위한 공간을 의미합니다. 와 8 비트는 256 레벨 그 사이에서 다양 할 수 있으며 12 비트는 최대 4096 레벨까지 올라갑니다.

타이머로 제어

하드웨어 PWM 제어용, Arduino 타이머를 사용합니다 그것을 위해. 현재의 각 타이머는 2 개 또는 3 개의 PWM 출력을 제공 할 수 있습니다. 각 출력에 대한 비교 레지스터는이 시스템을 보완하므로 시간이 레지스터 값에 도달하면 출력 상태 또는 값이 변경되어 듀티 사이클을 중지합니다. 동일한 타이머로 제어되는 두 개의 출력이 있지만 동일한 주파수를 공유하더라도 둘 다 다른 듀티 사이클을 가질 수 있습니다.

각 PWM 핀과 관련된 타이머의 경우 Arduino 보드의 유형에 따라 당신이 가진 것들:

  • Arduino UNO, Mini 및 Nano:
    • 타이머 0-5 및 6
    • 타이머 1-9 및 10
    • 타이머 2-3 및 11
  • 아두 이노 메가:
    • 타이머 0-4 및 13
    • 타이머 1-11 및 12
    • 타이머 2-9 및 10
    • 타이머 3-2, 3 및 5
    • 타이머 4-6, 7 및 8
    • 타이머 5-44, 45 및 46

프리 스케일링 된 레지스터는 시간을 정수로 나누고 타이머가 나머지 작업을 수행하여 연관된 각 PWM 출력을 제어합니다. 레지스트리 값을 수정하면 빈도가 변경 될 수 있습니다. 그만큼 주파수 타이머와 플레이트에 따라 달라집니다.

  • Arduino UNO, Mini 및 Nano:
    • Timer0 : 1, 8, 64, 256 및 1024의 사전 스케일링을 허용합니다. 주파수는 62.5Khz입니다.
    • Timer1 : 프리 스케일 된 1, 8, 64, 256 및 1024. 주파수 31.25 Khz.
    • Timer2 : Timer1과 동일하지만 이전 항목에 추가로 32 및 128의 사전 배율을 추가합니다.
  • 아두 이노 메가:
    • Timer0, 1, 2 : 위와 동일합니다.
    • Timer3, 4 및 5 : 31.25Khz의 주파수 및 1, 8, 64, 256 및 1024로 사전 조정됩니다.

비 호환성 및 충돌

타이머 출력과 관련된 것은 해당 기능에만 해당되지 않습니다., 다른 사람도 사용합니다. 따라서 다른 기능에서 사용하는 경우 둘 중 하나를 선택해야하며 동시에 둘 다 사용할 수 없습니다. 예를 들어, 다음은 프로젝트에서 찾을 수있는 몇 가지 비 호환성입니다.

  • 서보 라이브러리: 서보 모터 사용시 타이머를 많이 사용하므로 충돌이 발생할 수 있습니다. 특히 UNO, Nano 및 Mini에 대해 Timer1을 사용합니다. 즉, 해당 라이브러리에서 스케치를 사용하는 동안에는 핀 9와 10을 사용할 수 없습니다. Mega에서는 서보의 수에 따라 다릅니다.
  • SPI: Arduino 보드에서 SPI 통신을 사용하는 경우 11 번 핀이 MOSI 기능에 사용됩니다. 그렇기 때문에 PWM 핀을 사용할 수 없습니다.
  • 음정:이 기능은 Timer2를 사용하여 작동합니다. 따라서 사용되는 경우 핀 3과 11 (또는 Mega의 경우 9 및 10)을 쓸모 없게 만듭니다.

Arduino를 사용한 실습 테스트

아두이노 PWM 측정 - adu-ino PWM cheugjeong

Arduino에서 PWM이 어떻게 작동하는지 제자리에서 확인하려면 할 수있는 가장 좋은 방법은 측정 리드를 연결하는 것입니다. 전압계 또는 멀티 미터 (전압 측정 기능) 사용하기로 선택한 PWM 핀과 Arduino 보드의 접지 핀 또는 GND 사이. 이러한 방식으로 측정 장치의 화면에서이 PWM 트릭 덕분에 디지털 출력으로 전압이 어떻게 변화하는지 확인할 수 있습니다.

전압계 / 멀티 미터를 LED로 교체하여 빛의 강도가 DC 모터 또는 원하는 다른 요소로 어떻게 변하는 지 확인할 수 있습니다. 나는 더 이상 LED가없는 Fritzing으로 다이어그램에서 단순화했지만 멀티 미터의 팁을 나타낼 수도 있다는 것을 알고 있습니다 ...

LED를 사용하는 경우 음극 및 GND의 저항을 기억하십시오.

에 소스 코드 Arduino 보드 마이크로 컨트롤러를 제어하여 모든 것이 작동하도록하려면 이것을 Arduino IDE에 삽입해야합니다 (이 경우에는 PWM 핀 6을 사용했습니다. Arduino UNO):

const int analogOutPin = 6;
byte outputValue = 0;  
 
void setup()
{  
   Serial.begin(9600);        
   pinMode(ledPIN , OUTPUT); 
 
   bitSet(DDRB, 5);       // LED o voltímetro
   bitSet(PCICR, PCIE0);       
   bitSet(PCMSK0, PCINT3);     
}
 
void loop() 
{
   if (Serial.available()>0)  
   {
      if(outputValue >= '0' && outputValue <= '9')
      {
         outputValue = Serial.read();   // Leemos la opción
         outputValue -= '0';      // Restamos '0' para convertir a un número
         outputValue *= 25;      // Multiplicamos x25 para pasar a una escala 0 a 250
         analogWrite(ledPIN , outputValue);
      }
   }
}  
 
ISR(PCINT0_vect)
{
   if(bitRead(PINB, 3))
   { 
      bitSet(PORTB, 5);   // LED on 
   }
   else
   { 
      bitClear(PORTB, 5); // LED off  
   } 
} 

나는 당신이 가치를 가지고 놀아보고 빛 또는 전압계의 결과. 이 프로그램은 0에서 9까지의 값을받을 수 있으므로 모든 것이 어떻게 달라지는 지 확인할 수 있습니다. 더 많은 정보를 원하시면 arduino 코스 우리는 무료 다운로드에 ...