아두이노 우노의 경우 PWM주파수가 980Hz (5,6번 핀)와 490Hz(3, 9, 10, 11번 핀)로 고정되어 있다. 보통의 경우(LED의 밝기를 제어한다든가 소형 모터를 돌릴 때)에는 이 주파수를 사용하는 것에 별 문제는 없다.

[표 1] 아두이노 우노의 pwm 주파수

핀 번호

PWM 주파수

5, 6

980Hz

3, 9, 10,11

490Hz

하지만 중소형 이상의 DC모터를 구동하는 경우에는 보통 10KHz 이상의 PWM 주파수를 사용하므로 아두이노에서 제공하는 기본 주파수로는 DC모터를 구동하기에 적절하지 않다. 이 주파수가 중요한 이유는 만약 PWM주파수가 너무 낮다면 모터의 속도를 정밀하게 제어할 수 없으며 모터에서 소음이 발생하는 경우도 있기 때문이다.

 

 이런 경우에 PWM 주파수를 변경해야 하는데 아두이노의 표준 API에는 아쉽게도 PWM의 주파수를 조절할 수 있는 함수를 제공하지 않지만 사용자가 만들어 놓은 라이브러리가 있다. 아래의 페이지에 자세하게 설명되어 있다.

다운로드 받은 파일의 압축을 풀면 세 개의 폴더가 있는데 이 중 PWM 폴더를 아래의 폴더에 복사하여 붙여넣는다.

<아두이노 IDE 설치 폴더>\Arduino\libraries

윈도우즈 시스템에서는 보통 아래의 폴더이다.

C:\Program Files\Arduino\libraries

그러면 아두이노 IDE에 다음 [그림 6.6.1]과 같은 항목이 생성된다. 이 항목을 선택하면 텍스트 에디터에 다음과 같이 인클루드문이 추가된다.

#include <PWM.h>

이것으로 이 라이브러리를 사용할 준비가 된 것이다.


[그림 1] pwm.h를 메뉴에서 인클루드하는 방법

이 라이브러리에서는 다음과 같이 다섯 개의 전역 함수를 제공한다.


[표 1] pwm.h에서 제공하는 전역 함수들

함수명

기능

InitTimers()

Initializes all timers. Needs to be called before changing the timers frequency or setting the duty on a pin

InitTimersSafe()

Same as InitTimers() except timer 0 is not initialized in order to preserve time keeping functions

pwmWrite(uint8_t pin, uint8_t val)

Same as 'analogWrite()', but it only works with initialized timers. Continue to use analogWrite() on uninitialized timers

SetPinFrequency(int8_t pin, int32_t frequency)

Sets the pin's frequency (in Hz) and returns a bool for success. 주파수 범위는 31Hz~2MHz 사이이다.

Sets the pin's frequency (in Hz) and returns a bool for success. 주파수 범위는 31Hz~2MHz 사이이다.

SetPinFrequencySafe(int8_t pin, int32_t frequency)

Same as SetPinFrequency except it does not affect timer 0. 주파수 범위는 31Hz~2MHz 사이이다.


여기서 보면 InitTimers() 와 SetPinFrequency() 함수는 함께 사용되는데 이 함수들은 내부적으로 timer0번을 초기화시킨다. 따라서 시간 관련 함수인 millis(), micros(), delay(), delayMicroseconds() 함수들이 정상 동작하지 않는다. 그리고 3, 5, 9, 10번 핀을 PWM 핀으로 사용할 수 있다.

 반면 InitTimersSafe()와 SetPinFrequency() 함수는 역시 쌍으로 사용되는데 timer0를 초기화시키지 않으므로 시간 관련 함수들이 정상적으로 동작한다. 그리고 3,9,10번 핀을 PWM으로 사용할 수 있다. 두 경우 모두 PWM값을 쓰기 위해서는 analogWrite()함수 대신 pwmWrite()함수를 사용한다.


[표 2] pwm.h 의 두 함수 그룹 비교

함수 그룹

특징

장단점

적용 핀

InitTimers()

SetPinFrequency()

timer0

초기화

millis(), micros(), delay(), delayMicroseconds() 함수들이 정상 동작하지 않는다.

3,

5,

9,

10

InitTimersSafe()

SetPinFrequencySafe()

timer0

초기화

안함

millis(), micros(), delay(), delayMicroseconds() 함수들이 정상 동작한다.

3,

9,

10


시간 관련 함수들이 정상적으로 동작 하지 않는 것은 큰 문제이므로 InitTimersSafe() 과 SetPinFrequencySafe() 함수를 사용하는 것이 좋을 것이다.



Posted by 살레시오

댓글을 달아 주세요

  라즈베리파이 컴퓨트 모델에 이어서 새로운 모델이 출시되었다. 이름은 model b+ 인데 기존 model b 의 단점과 제기되었던 불편한 요소들을 개선한 최종 진화판이라고 소개하고 있다.



하지만 아쉽게도 모델B와 동일한 프로세서를 사용하므로 사용자들이 가장 원했던 성능의 향상은 없지만 소소하게 개선된 점들을 짚어보면 다음과 같다.


  1. 전원부의 회로를 개선하여 불안정했던 전원을 보완하였다.
  2. 오디오 회로의 수정으로 잡음이 많았던 단점을 보완하였다.
  3. 아날로그 비디오와 오디오 단자를 하나로 통합하였다.
  4. USB포트를 두 개에서 네 개로 늘려서 키보드, 마우스, 와이피이동글을 꽂고도 하나가 남는다.
  5. 마이크로SD카드 채용하여 메모리카드의 고정성이 좀 더 향상되었다. 
  6. GPIO가 26핀에서 40핀으로 확장되었으나 추가된 핀들이 대부분 포트핀(디지털입출력핀)이다. 외부의 EEPROM을 자동 인식하기 위한 통신선 두 개가 추가되었고, PWM은 여전히 하나이며 ADC는 없다.
  7. 그외 마운트 홀의 위치를 좀 더 안정적으로 변경하였고 모서리를 둥글게 처리하였다.


그외 크기나 성능 사양은 model B와 동일하다. 프로세서와 동작클럭도 같고 램도 512MB 이다. 가격은 모델B와 같은 가격으로 책정되었다.


  참고로 (3)번 항에서 알 수 있듯이 새로운 A/V 단자가 있는데 이 단자에 스테레오 이어폰을 끼우면 그냥 오디오 단자로 사용할 수 있는데 아래 그림과 같은 케이블을 이용하면 영상신호와 음향신호를 모두 뽑아낼 수 있다고 한다. 이건 참 개인적으로 기발한 변경점이라고 생각된다.


[#00072]

Posted by 살레시오

댓글을 달아 주세요

  한정된 자원의 라즈베리파이를 조금이라도 괘적하게 사용하기 위해서 화면을 저해상도로 변경해보고자 한다. 


먼저 터미널에서 다음과 같이 설정 파일을 연다.


sudo nano /boot/config.txt 


이 화일 안에서 코멘트(#) 처리된 것들 중에서 다음 항목들을 활성화 시킨다.


hdmi_force_hotplug = 1

hdmi_group = 2

hdmi_mode = N # 여기서 해상도를 설정한다

hdmi_drive = 1 


위의 명령들 중에서 원하는 해상도에 맞추어 N값을 설정해 준 후 저장하고 빠져나와서 재부팅해주면 된다. 예를 들어 'hdmi_mode = 16' 이라고 쓰면 1024x768@60Hz 로 해상도가 조절된다. (아래 목록표 참조.)


자세한 설정값은 http://elinux.org/RPi_config.txt 에 있다.


hdmi_group=2 (DMT) 인 경우:

주의 :최대 해상도는 1920x1200 @60 Hz (reduced blanking) 이다.

hdmi_mode=1    640x350    85 Hz
hdmi_mode=2    640x400    85 Hz
hdmi_mode=3    720x400    85 Hz
hdmi_mode=4    640x480    60 Hz
hdmi_mode=5    640x480    72 Hz
hdmi_mode=6    640x480    75 Hz
hdmi_mode=7    640x480    85 Hz
hdmi_mode=8    800x600    56 Hz
hdmi_mode=9    800x600    60 Hz
hdmi_mode=10   800x600    72 Hz
hdmi_mode=11   800x600    75 Hz
hdmi_mode=12   800x600    85 Hz
hdmi_mode=13   800x600   120 Hz
hdmi_mode=14   848x480    60 Hz
hdmi_mode=15   1024x768   43 Hz  DO NOT USE
hdmi_mode=16   1024x768   60 Hz
hdmi_mode=17   1024x768   70 Hz
hdmi_mode=18   1024x768   75 Hz
hdmi_mode=19   1024x768   85 Hz
hdmi_mode=20   1024x768  120 Hz
hdmi_mode=21   1152x864   75 Hz
hdmi_mode=22   1280x768          Reduced blanking
hdmi_mode=23   1280x768   60 Hz
hdmi_mode=24   1280x768   75 Hz
hdmi_mode=25   1280x768   85 Hz
hdmi_mode=26   1280x768  120 Hz  Reduced blanking
hdmi_mode=27   1280x800          Reduced blanking
hdmi_mode=28   1280x800   60 Hz  
hdmi_mode=29   1280x800   75 Hz  
hdmi_mode=30   1280x800   85 Hz  
hdmi_mode=31   1280x800  120 Hz  Reduced blanking
hdmi_mode=32   1280x960   60 Hz  
hdmi_mode=33   1280x960   85 Hz  
hdmi_mode=34   1280x960  120 Hz  Reduced blanking
hdmi_mode=35   1280x1024  60 Hz  
hdmi_mode=36   1280x1024  75 Hz  
hdmi_mode=37   1280x1024  85 Hz  
hdmi_mode=38   1280x1024 120 Hz  Reduced blanking
hdmi_mode=39   1360x768   60 Hz  
hdmi_mode=40   1360x768  120 Hz  Reduced blanking
hdmi_mode=41   1400x1050         Reduced blanking
hdmi_mode=42   1400x1050  60 Hz  
hdmi_mode=43   1400x1050  75 Hz  
hdmi_mode=44   1400x1050  85 Hz  
hdmi_mode=45   1400x1050 120 Hz  Reduced blanking
hdmi_mode=46   1440x900          Reduced blanking
hdmi_mode=47   1440x900   60 Hz  
hdmi_mode=48   1440x900   75 Hz  
hdmi_mode=49   1440x900   85 Hz  
hdmi_mode=50   1440x900  120 Hz  Reduced blanking
hdmi_mode=51   1600x1200  60 Hz  
hdmi_mode=52   1600x1200  65 Hz  
hdmi_mode=53   1600x1200  70 Hz  
hdmi_mode=54   1600x1200  75 Hz  
hdmi_mode=55   1600x1200  85 Hz  
hdmi_mode=56   1600x1200 120 Hz  Reduced blanking
hdmi_mode=57   1680x1050         Reduced blanking
hdmi_mode=58   1680x1050  60 Hz  
hdmi_mode=59   1680x1050  75 Hz  
hdmi_mode=60   1680x1050  85 Hz  
hdmi_mode=61   1680x1050 120 Hz  Reduced blanking
hdmi_mode=62   1792x1344  60 Hz  
hdmi_mode=63   1792x1344  75 Hz  
hdmi_mode=64   1792x1344 120 Hz  Reduced blanking
hdmi_mode=65   1856x1392  60 Hz  
hdmi_mode=66   1856x1392  75 Hz  
hdmi_mode=67   1856x1392 120 Hz  Reduced blanking
hdmi_mode=68   1920x1200         Reduced blanking
hdmi_mode=69   1920x1200  60 Hz  
hdmi_mode=70   1920x1200  75 Hz  
hdmi_mode=71   1920x1200  85 Hz  
hdmi_mode=72   1920x1200 120 Hz  Reduced blanking
hdmi_mode=73   1920x1440  60 Hz  
hdmi_mode=74   1920x1440  75 Hz  
hdmi_mode=75   1920x1440 120 Hz  Reduced blanking
hdmi_mode=76   2560x1600         Reduced blanking
hdmi_mode=77   2560x1600  60 Hz  
hdmi_mode=78   2560x1600  75 Hz  
hdmi_mode=79   2560x1600  85 Hz  
hdmi_mode=80   2560x1600 120 Hz  Reduced blanking
hdmi_mode=81   1366x768   60 Hz  
hdmi_mode=82   1080p      60 Hz  
hdmi_mode=83   1600x900          Reduced blanking
hdmi_mode=84   2048x1152         Reduced blanking
hdmi_mode=85   720p       60 Hz  
hdmi_mode=86   1366x768          Reduced blanking

[#00076]

Posted by 살레시오

댓글을 달아 주세요