수색…


PWM을 사용하여 직렬 포트를 통해 DC 모터 제어

이 예에서는 가장 일반적인 작업 중 하나를 수행하는 것을 목표로합니다. 작은 DC 모터가 있습니다. 내 Arduino를 사용하여 제어하려면 어떻게해야합니까? analogWrite() 함수와 Serial 라이브러리를 사용하여 PWM 및 직렬 통신으로 간단합니다.

기본 사항

짧은 펄스 폭 변조 또는 PWM은 디지털 출력을 사용하여 아날로그 신호를 모방하는 기술입니다. 이게 어떻게 작동합니까? 각 기간의 하이 레벨 (디지털 1, 일반적으로 5V)에서의 시간과 로우 레벨 (디지털 0, 0V)에서의 시간 D 사이의 관계 D (듀티 사이클)을 갖는 펄스 트레인을 사용하여이 두 레벨 사이의 평균 전압을 생성 할 수 있습니다.

여기에 이미지 설명을 입력하십시오.

Arduino의 analogWrite(pin,value) 함수를 사용하여 pin 출력의 듀티 사이클 value 을 변경할 수 있습니다. pin 은 출력 모드에 있어야하며 value 은 0 (0V)에서 255 (5V) 사이 여야합니다. 그 사이의 값은 비례 중간 아날로그 출력을 시뮬레이션합니다.

그러나 아날로그 신호의 목적은 Arduino 보드만으로 가능한 것보다 많은 전압과 전류를 필요로하는 기계 시스템의 제어와 관련이 있습니다. 이 예에서는 Arduino의 PWM 기능을 증폭하는 방법을 배우게됩니다.

이를 위해 MOSFET 다이오드가 사용됩니다. 본질적으로이 다이오드는 스위치 역할을합니다. 소스드레인 단자 사이의 전기 흐름을 허용하거나 차단합니다. 그러나 기계식 스위치 대신 게이트 라고 불리는 제 3의 단자가 있습니다. 매우 작은 전류 (1mA 미만)는이 게이트를 "열어"전류가 흐를 수있게합니다. Arduino의 PWM 출력을이 게이트에 보내어 MOSFET을 통해 동일한 듀티 사이클을 갖는 또 다른 PWM 펄스 트레인을 만들 수 있기 때문에 이것은 매우 편리합니다. Arduino를 파괴 할 수있는 전압과 전류를 허용합니다.

BOM :이 예제를 작성하려면 무엇이 필요합니까

  • MOSFET 다이오드 : 예를 들어, 인기있는 BUZ11
  • 모터 보호용 다이오드 : 쇼트 키 SB320
  • 저항기 : 10K ~ 1MΩ
  • 모터 : 일반적인 소형 모터 (일반적인 12V 일 수 있음)
  • 선택한 모터와 호환되는 전원
  • 브레드 보드
  • 다채로운 케이블!
  • Arduino,하지만 당신은 이미 그것을 알았습니다.

빌드

모든 것을 함께하십시오! 브레드 보드의 레일에 전원을 공급하고 MOSFET 다이오드를 그 안에 넣습니다. 모터를 양극 레일과 MOSFET 드레인 사이에 연결하십시오. 같은 방식으로 보호 다이오드를 연결하십시오 : MOSFET 드레인과 포지티브 레일 사이. MOSFET의 소스를 공통 접지 레일에 연결하십시오. 마지막으로 PWM 핀 (이 예에서 핀 10을 사용하고 있음)을 MOSFET의 게이트에 연결하고 레지스터를 통해 공통 접지에도 연결합니다 (전류가 매우 적음).

이 빌드가 어떻게 보이는지 예제가 있습니다. 당신이 계획을 선호한다면 여기에 하나가 있습니다.

물리적 구성표

코드

이제 Arduino를 컴퓨터에 연결하고, 코드를 업로드하고 모터를 제어하고, 직렬 통신을 통해 값을 전송할 수 있습니다. 이 값은 0에서 255 사이의 정수 여야합니다.이 예제의 실제 코드는 매우 간단합니다. 설명은 각 행에 제공됩니다.

int in = 0;                   // Variable to store the desired value
byte pinOut = 10;             // PWM output pin

void setup() {                // This executes once
  Serial.begin(9600);             // Initialize serial port
  pinMode(pinOut, OUTPUT);        // Prepare output pin
}

void loop() {                 // This loops continuously
  if(Serial.available()){         // Check if there's data
    in = Serial.read();           // Read said data into the variable "in"
    analogWrite(pinOut, in);      // Pass the value of "in" to the pin
  }
}

그리고 그게 다야! 이제 Arduino의 PWM 기능을 사용하여 전원 요구 사항이 보드의 한계를 초과하는 경우에도 아날로그 신호가 필요한 어플리케이션을 제어 할 수 있습니다.

TLC5940을 사용한 PWM

TLC5940 은 Arduino에서 PWM 포트가 부족할 때 사용할 수있는 편리한 제품입니다. 16 채널로 구성되어 있으며 각각 12 비트 해상도 (0-4095)로 개별적으로 제어 할 수 있습니다. 기존 도서관은 http://playground.arduino.cc/Learning/TLC5940 에서 구할 수 있습니다. 여러 서보 또는 RGB LED를 제어하는 ​​데 유용합니다. 명심해야 할 점은, LED는 공통 양극이되어야 작동한다는 것입니다. 또한이 칩들은 데이지 체인 방식으로 연결되어있어 더 많은 PWM 포트를 사용할 수 있습니다.

예:

// Include the library
#include <Tlc5940.h>

void setup() {
    // Initialize
    Tlc.init();
    Tlc.clear(); 
}

unsigned int level = 0;
void loop() {
    // Set all 16 outputs to same value
    for (int i = 0; i < 16; i++) {
        Tlc.set(i, level);
    }
    level = (level + 1) % 4096;
    // Tell the library to send the values to the chip
    Tlc.update();
    delay(10);
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow