본문 바로가기
공부/아두이노 & 회로구성

아두이노 우노, PWM 제어 라이브러리 활용

by 쉬고 싶다 2020. 10. 14.
반응형

- PWM (Pulse Width Modulated) square wave

- Arduino uno, PWM library download

- PWM 제어 사용 코드

- led +, - 구분

 

 

 PWM (Pulse Width Modulated) square wave

 

2020/09/24 - [정리, 공부해요/전기, 전자, 통신] - PWM (Pulse Width Modulated) square wave, PWM파 with 아두이노

 

PWM (Pulse Width Modulated) square wave, PWM파 with 아두이노

- PWM (Pulse width modulated)파 - PWM (Pulse width modulated) - Arduino에서 PWM  PWM (Pulse Width Modulated)파 이런 꺽쇠 모양의 signal을 주는 것을 PWM 제어, wave라고 합니다. PWM은 특정 목표값을 갖..

setoo0922.tistory.com

PWM에 관한 설명은 다른 포스팅에서 해두었습니다.

필요하시면 참고하시면 되겠습니다 :)

 

 Arduino uno, PWM library download

 

code.google.com/archive/p/arduino-pwm-frequency-library/downloads

 

Google Code Archive - Long-term storage for Google Code Project Hosting.

 

code.google.com

우선, 라이브러리는 위의 사이트에서 제공된 것이고 아래에서도 다운 받으실 수 있습니다.

 

Arduino PWM Frequency Library v_05.zip
0.01MB

 

압축을 푸시면 3가지 폴더가 들어있습니다.

아두이노 스케치에서 라이브리러 사용을 위해

다운로드 한 파일 내의 PWM 폴더를

문서 > Arduino > libraries 폴더 속에 압축을 풉니다.

그리고 예제 폴더들은 PWM 폴더 속에 "examples" 폴더를 만들고 그 속에 압축을 풉니다.

(기존에 다운 받았던 모든 library 파일들이 이런 형식으로 다운로드 되어 있기에 똑같은 방식으로 저장했습니다.)

 

 

그러면 아두이노 스케치 내에서 위의 예제들을 불러 올 수 있고,

라이브러리 내용을 불러와

PWM 파를 쉽게 사용할 수 있습니다.

 

 

 

 PWM 제어 사용 코드 

 


#include <PWM.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

//use pin 11 on the Mega instead, otherwise there is a frequency cap at 31 Hz
int led = 9;                // the pin that the LED is attached to
int brightness = 0;         // how bright the LED is
int fadeAmount = 5;         // how many points to fade the LED by
int32_t frequency = 35; //frequency (in Hz)

void setup()
{
  //initialize all timers except for 0, to save time keeping functions
  InitTimersSafe(); 

  //sets the frequency for the specified pin
  bool success = SetPinFrequencySafe(led, frequency);

  #ifndef ESP8266
    while (!Serial);     // will pause Zero, Leonardo, etc until serial console opens
  #endif
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  
  //if the pin frequency was set successfully, turn pin 13 on
  if(success) {
    lcd.print("succeed freq") ;  
  }
}

void loop()
{
  //use this functions instead of analogWrite on 'initialized' pins
  pwmWrite(led, brightness);

  brightness = brightness + fadeAmount;

  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
  }     
  
  delay(30);      
}

9번 핀의 led를 pwm 시그널을 사용해 digital pin 임에도 밝기 조절을 하는 코드 입니다.

PWM 코드/라이브러리 사용에서 필수적으로 들어가는 것으로 보여지는 것은,

진동 주파수 잡는 것

>> bool success = SetPinFrequencySafe(led, frequency);

PWM 파형 사용 하는 것

>> pwmWrite(led, brightness);

정도로 보입니다.

 

PWM 파워: 0 ~ 255

 

InitTimers() 모든 타이머 초기화, 타이머 주파수를 변경하거나 듀티를 세팅하기 전에 사용
InitTimersSafe() 기능 유지, 시간 보존, 타이머가 0이 되지 않는 것들을 제외하고 시간 초기화
pwmWrite(uint8_t pin, uint8_t val) 초기화 후 사용 가능, analogWrite과 동일
SetPinFrequency(int8_t pin, int32_t frequency) Hz 단위로 핀의 주파수를 세팅하고 그 성공 여부를 불 값으로 준다
SetPinFrequencySafe(int8_t pin, int32_t frequency) 타이머가 0이 되지 않는 것을 제외하고 위의 내용과 동일

 

 

 led +, - 구분

 

혹시나 해서 올려둡니다 :)

 

 

 

 

마무리

PWM 활용한 펜과 Peltier 구동

2020/10/10 - [정리, 공부해요/아두이노] - 아두이노 우노 펜 PWM 제어, 속도 제어 - heat sink, fan

 

아두이노 우노 펜 PWM 제어, 속도 제어 - heat sink, fan

- PWM & 라이브러리 활용 - Fan pin 연결 (Vin, Gnd, PWM) - 코드  PWM & 라이브러리 활용 이번 포스팅에서는 Fan의 연결과 Fan의 PWM 제어에 대해 포스팅하고 PWM에 대해서와 라이브러리 활용에 관해서는 이전

setoo0922.tistory.com

2020/10/10 - [정리, 공부해요/아두이노] - Peltier(펠티어, 열전소자) 아두이노로 제어 - PID, PWM, 외부전원

 

 

 

 

반응형

댓글