Arduino Nano PWM 주파수

나는 Arduino Nano를 발열체의 PWM 컨트롤러로 사용하고 있습니다.

현재 D11 (PB3). PWM을 사용하는 모든 핀이 사용 중이고 다시 쓰기 및 다시 배선이 필요하더라도 변경할 수 있습니다.

이것은 ~ 490Hz에서 신호를 생성하지만 이것을 다음으로 변경하는 실험을하고 싶습니다. 더 높은 주파수.

기본 64에서 제수를 변경하여 주파수를 변경할 수 있다고 생각합니다.

내 스케치는 Uses http://playground.arduino.cc/Main/SevenSegmentLibrary 및 millis () 호출-PWM 제수 변경이 이들 중 하나에 영향을 미칩니 까?

참고 setPwmFrequency 문서를 읽었지만 “정상 작동 중단”이 도움이되지 않는다고 생각합니다. 실제로 구체적인 효과에 대해 설명하고 있습니다. 저는 millis()를 사용하여 시간이 중요하지 않은 시간 버튼을 누르고 LED를 깜박입니다.

PWM 주파수를 변경하면 Atmega의 타이머는 시간에 의존하는 많은 함수 (delay (), millis (), Servo 라이브러리)의 정상적인 작동을 방해합니다.

좀 더 연구하고 있습니다. http://playground.arduino.cc/Code/PwmFrequency 핀 3, 5, 6 또는 11의 변경으로 인해 delay () 및 millis ( ) 기능이 작동을 멈 춥니 다.

다른 참조에서는 3, 11이 timer 2를 사용하므로 millis()에 영향을 미치거나 다른 참조에 대해 timer 0이 사용된다는 주장에 영향을주지 않습니다.

댓글

  • 사용 된 PWM 타이머에 따라 예 및 아니요.

답변

이 잘못된 정보의 출처를 모르겠습니다 … 대답은 아니요 , Timer 2를 재구성해도 아니요 이러한 기능은 Timer 0에 의존하므로 millis() 또는 delay()에 영향을 미칩니다. AFAIK는 Arduino 코어가 Timer 2를 전혀 사용하지 않습니다. 그러나 Timer 2를 사용하는 다른 Arduino 또는 타사 라이브러리가있을 수 있습니다.

여기에서 iv id = “의 소스 코드를 볼 수 있습니다. 0a067319cf “>

delay() .

MITU RAJ가 대답에 올바르게 언급했듯이 핀 11의 PWM 신호는 타이머 2이므로 안전하게 사용할 수 있습니다.

댓글

답변

답변은 아니요 , 핀 11의 PWM 분배기를 변경해도 millis() 기능 (또는 delay()).


설명 :
Arduino Nano Arduino Uno 와 동일한 ATMega328P 마이크로 컨트롤러를 사용합니다.

핀 11 “의 PWM은 타이머 2에 의해 제어됩니다. 기본적으로 타이머 2의 프리 스케일은 64입니다 (즉, 0x04 설정). 타이머 2의 기본 주파수는 31372.55Hz이며 결과적으로 490.2Hz (즉, 31372.55 / 64 = 490.1961).

다른 한편으로 마이크로 초 타이머 (즉, millis()에서 사용하는 타이머, micros(), delay()delayMicroseconds())는 타이머 0에 의해 제어됩니다.

따라서 타이머 2의 프리스케일러를 변경해도 millis()에는 영향을주지 않습니다.

그러나 핀 3의 PWM 주파수는 변경됩니다.


질문으로 돌아 가기 :
핀 11의 가능한 PWM 주파수 (488Hz 이상)는 다음과 같습니다.

31373/32 = 980.4Hz
31373/8 = 3921.6Hz
31373/1 = 31373Hz

여기서 32, 8, 1은 프리스케일러입니다.
동일 설정 값을 각각 0x03, 0x02 & 0x01로 설정합니다.

다음 코드 줄 추가 :

TCCR2B = TCCR2B & 0b11111000 | setting; 

여기서 setting는 각 프리스케일러의 설정 값입니다.

============================================ || Frequency [Hz] || Prescaler || Setting || ============================================ || 31373.55 || 1 || 0x01 || || 3921.57 || 8 || 0x02 || || 980.39 || 32 || 0x03 || || 490.20 || 64 || 0x04 || || 245.10 || 128 || 0x05 || || 122.55 || 256 || 0x06 || || 30.64 || 1024 || 0x07 || ============================================ 

소스 코드 : https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c

댓글

  • 그냥 간단하게 선택하지만 … 위상 보정 PWM 모드에서 타이머 '의 기본 주파수는 F_CPU / 512가 아닌 F_CPU / 510 (31373Hz)입니다. 계산하는 데 255 사이클이 걸립니다. 에프 rom 0에서 255까지, 그런 다음 255를 더 추가하여 0으로 되돌립니다. C.f. 데이터 시트의 PWM 주파수 방정식입니다.
  • @EdgarBonet 좋은 점입니다. 이제 답이 수정되었습니다.
  • 15.31HZ까지 한 단계 더 느리게 내려갈 수 있을까요?

답변

PWM에 사용한 핀에 따라 다릅니다.

Arduino UNO / NANO 사양은 다음과 같이 말합니다.

핀 3, 9, 10 및 11의 기본 주파수는 31250Hz입니다.

핀 5 및 6의 기본 주파수는 62500Hz입니다.

사용 가능한 제수 핀 5, 6, 9 및 10은 1, 8, 64, 256 및 1024입니다.

핀 3 및 11에서 사용할 수있는 제수는 1, 8, 32, 64, 128, 256입니다. , 및 1024.

PWM 주파수는 핀 쌍으로 함께 연결됩니다. 쌍 중 하나가 변경되면 다른 하나도 일치하도록 변경됩니다.

핀 5와 6은 timer0에서 페어링됩니다.

핀 9와 10은 timer1에서 페어링됩니다.

p>

핀 3과 11은 timer2에서 쌍을 이룹니다.

핀 3, 5, 6 또는 11에서 변경하면 지연 ()이 발생할 수 있습니다. 및 millis () 함수는 작동을 중지합니다. 다른 타이밍 관련 기능도 영향을받을 수 있습니다.

댓글

  • 이후 ' 사양을 인용하고 있는데 ' 링크 할 수도 있다면 좋을까요? 🙂

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다