arduino
PWM - パルス幅変調
サーチ…
PWMを使用してシリアルポートを介してDCモータを制御する
この例では、最も一般的なタスクの1つを達成することを目指しています。小型のDCモーターを搭載しています.Arduinoを使用して制御するにはどうすればよいですか? analogWrite()
関数とSerial
ライブラリを使用して、簡単にPWMとシリアル通信を行います。
基礎
短いパルス幅変調またはPWMは、デジタル出力を使用してアナログ信号を模倣する技術です。これはどのように作動しますか?各期間のハイレベル(デジタル1、通常5V)とローレベル(デジタル0,0V)の時間の関係D(デューティサイクル)を変更して、これらの2つのレベル間の平均電圧を生成するパルス列を使用すると、
ArduinoのanalogWrite(pin,value)
関数を使うことで、 pin
の出力のデューティ・サイクルのvalue
を変えることができます。 pin
は出力モードにする必要があり、 value
は0(0V)〜255(5V)の間でなければなりません。その間の任意の値は、比例中間アナログ出力をシミュレートします。
しかし、アナログ信号の目的は、通常、Arduinoボードだけで可能なものよりも多くの電圧と電流を必要とする機械システムの制御に関係しています。この例では、ArduinoのPWM機能を増幅する方法を学習します。
このために、MOSFETダイオードが使用される。本質的に、このダイオードはスイッチとして機能する。それは、そのソースおよびドレイン端子間の電気の流れを許可または遮断します。しかし、機械式スイッチの代わりに、 ゲートと呼ばれる第3の端子を備えています。非常に小さな電流(<1mA)はこのゲートを「開」し、電流を流します。私たちは、それによってArduinoのを破壊する電圧と電流を可能にMOSFETを介して、同じデューティ・サイクルを持つ別の PWMパルス列を作成し、このゲートにアルドゥイーノのPWM出力を送ることができるので、これは、非常に便利です。
部品表:この例を作成するには何が必要ですか
- MOSFETダイオード:例えば、人気のあるBUZ11
- モーター用保護ダイオード: ショットキーSB320
- 抵抗器:何でも10K〜1MΩ
- モーター:一般的な小型モーター(典型的なモーターは12Vです)
- 選択したモータと互換性のある電源
- ブレッドボード
- カラフルなケーブル!
- Arduino、しかしあなたはすでにそれを知っていた。
ビルド
すべてをまとめる!ブレッドボードのレールに電力を供給し、MOSFETダイオードをその中に置きます。正のレールとMOSFETのドレインの間にモーターを接続します。同様に、MOSFETドレインと正レールの間に保護ダイオードを接続します。 MOSFETのソースを共通接地レールに接続します。最後に、PWMピン(この例ではピン10を使用しています)をMOSFETのゲートに接続し、また抵抗を介して共通のグランドに接続します(非常に低い電流が必要です)。
このビルドの外観の例を次に示します。あなたがスキームを好むなら、 ここに 1つあります。
コード
これで、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);
}