DCモーターは最も広く使用されているモーターです。これらのモーターは、小さなプロジェクトから高度なロボット工学まで、ほぼすべての場所で見つけることができます。以前は、DC MotorをArduino、Raspberry piなどの他の多くのマイクロコントローラーと接続し、多くのロボットプロジェクトで使用していました。今日、私たちはAVRマイクロコントローラーAtmega16でDCモーターを制御することを学びます。しかし、先に進む前に、DCモーターについてもっと知りましょう。
DCモーターとは何ですか?
DCモーターは、電気エネルギーを機械エネルギーに変換するデバイスです。具体的には、DCモーターはDC電流を使用して電気エネルギーを機械エネルギーに変換します。モーターの基本原理は、磁場と電流が相互作用してモーター内に力を発生させ、モーターの回転を助けることです。そのため、磁場内でコイルに電流を流すと磁力が発生し、トルクが発生してモーターが動きます。モーターの方向は、電流を逆にすることによって制御されます。また、供給電圧を変えることで速度を変えることができます。マイクロコントローラにはPWMピンがあるため、モーターの速度を制御するために使用できます。
このチュートリアルでは、DCモーターの動作をAtmega16で実演します。L293Dモータードライバーは、電流の方向、つまり移動方向を逆にするために使用されます。L293Dモータードライバーは、必要な電流をモーターに出力するHブリッジ回路構成を使用します。2つの押しボタンを使用してモーターの方向を選択します。プッシュボタンの1つは時計回りの回転を選択するために使用され、もう1つはDCモーターの反時計回りの動作を選択するために使用されます。
必要なコンポーネント
- DCモーター(5V)
- L293Dモータードライバー
- Atmega16マイクロコントローラーIC
- 16Mhz水晶発振器
- 2つの100nFコンデンサ
- 2つの22pFコンデンサ
- ボタンを押す
- ジャンパー線
- ブレッドボード
- USBASP v2.0
- Led(任意の色)
回路図
DCモーター制御用のAtmega16のプログラミング
ここで、Atmega16はUSBASPとAtmelStudio7.0を使用してプログラムされています。USBASPを使用してAtmega16をプログラムする方法がわからない場合は、リンクにアクセスしてください。 プロジェクトの最後に完全なプログラムが提供され ます。プログラムをAtmega16にアップロードし、2つのプッシュボタンを使用してDCモーターを時計回りと反時計回りに回転させます。DCモーターは、L293Dモータードライバーを使用して接続されます。DCモーターは、それぞれの押しボタンを押すと2方向に回転します。1つの押しボタンはDCモーターを時計回りの方向に回転させるために使用され、もう1つの押しボタンはDCモーターを反時計回りの方向に回転させるために使用されます。まず、マイクロコントローラーのCPU周波数を定義し、必要なすべてのライブラリを含めます。
#define F_CPU 16000000UL #include #include
次に、1つの変数を使用して、プッシュボタンが押された状態を追跡します。この変数は、モーターの方向を定義するために使用されます。
int i;
データ方向レジスタを使用してGPIOの入出力モードを選択します。最初は、押しボタンを押さずにモーターが起動しないように、モーターピンの出力を低くします。
DDRA = 03; PORTA&=〜(1 << 1); PORTA&=〜(1 << 0);
1かどうかをチェック番目のプッシュボタンを押すとATmega16でのPORTA4に接続し、変数にプッシュボタンの状態を格納します。
if(!bit_is_clear(PINA、4)) { i = 1; PORTA&=〜(1 << 1); _delay_ms (1000); }
同様に、Atmega16のPORTA5に接続された2番目のプッシュボタンが押されているかどうかを確認し、プッシュボタンのステータスを変数に保存します。
else if(!bit_is_clear(PINA、5)) { i = 2; PORTA&=〜(1 << 0); _delay_ms (1000); }
1つの状態ならば番目のボタンが真である、クロック賢明な方向にDCモータを回転させると、第2のプッシュボタンの状態が真であるならば、賢明なアンチクロックでDCモータを回転させます。
if(i == 1) { PORTA-=(1 << 0); PORTA&=〜(1 << 1); } else if(i == 2) { PORTA-=(1 << 1); PORTA&=〜(1 << 0); }
使用するGPIOに応じて、モーターピンを任意のGPIOピンに接続できます。また、マイクロコントローラーはDCモーターを実行するために必要な電流を供給できないため、モータードライバーICを使用してマイクロコントローラーの負荷を減らすことが重要です。DCモーターに基づく詳細およびその他のプロジェクトについては、所定のリンクにアクセスしてください。
完全なコードとデモンストレーションビデオを以下に示します。