サーボモーターは、ロボット、自動機械、ロボットアームなど、精密な制御が必要な場所で広く使用されています。ただし、サーボモーターの範囲はこれだけにとどまらず、多くの用途に使用できます。サーボモーターの基本、理論、動作原理について詳しくは、リンクをたどってください。
以前、サーボモーターを多くのマイクロコントローラーと接続しました。
- サーボモーターとARM7-LPC2148のインターフェース
- サーボモーターとMSP430G2のインターフェース
- サーボモーターとSTM32F103C8のインターフェース
- MPLABとXC8を使用したPICマイクロコントローラとサーボモーターのインターフェース
- サーボモーターとArduinoUnoのインターフェース
- 8051マイクロコントローラーとインターフェースするサーボモーター
このチュートリアルでは、Atmel Studio 7.0を使用して、マイクロサーボモーターをAtmega16AVRマイクロコントローラーとインターフェースさせます。サーボモーターの定格は4.8-6Vで動作します。パルス列またはPWM信号を適用することにより、回転角と方向を制御できます。サーボモータは360度全回転できないため、連続回転が不要な場合に使用します。回転角は0-180度または(-90)–(+ 90)度です。
必要なコンポーネント
- SG90タワープロマイクロサーボモーター
- Atmega16マイクロコントローラーIC
- 16Mhz水晶発振器
- 2つの100nFコンデンサ
- 2つの22pFコンデンサ
- ボタンを押す
- ジャンパー線
- ブレッドボード
- USBASP v2.0
- Led(任意の色)
サーボモーターのピンの説明
- 赤=正電源(4.8V〜6V)
- ブラウン=グラウンド
- オレンジ=制御信号(PWMピン)
回路図
下の図に示すようにすべてのコンポーネントを接続し、AVRマイクロコントローラーを使用してサーボモーターを回転させます。4つのPWMピンがあり、Atmega16の任意のPWMピンを使用できます。このチュートリアルでは、PWMの生成にピンPD5(OC1A)を使用しています。PD5は入力信号ピンであるサーボモータのオレンジ色の線に直接接続されています。電源インジケータ用の任意の色のLEDを接続します。また、必要に応じてAtmega16をリセットするために、リセットピンに1つの押しボタンを接続します。Atmega16を適切な水晶発振器回路に接続します。すべてのシステムは5V電源から電力を供給されます。
完全なセットアップは次のようになります。
AVRATmega16によるサーボモーターの制御
ステッピングモーターと同様に、サーボモーターにはULN2003やL293Dモータードライバーなどの外部ドライバーは必要ありません。サーボモーターを駆動するにはPWMだけで十分であり、マイクロコントローラーからPWMを生成するのは非常に簡単です。このサーボモーターのトルクは2.5kg / cmなので、もっと大きなトルクが必要な場合はこのサーボは適していません。
サーボモーターは20msごとにパルスを求め、正のパルスの長さがサーボモーターの回転角を決定することがわかっています。
20msのパルスを取得するために必要な周波数は50Hz(f = 1 / T)です。したがって、このサーボモーターの仕様では、0度の場合は0.388ms、90度の場合は1.264ms、180度の場合は2.14msのパルスが必要であると規定されています。
指定されたパルスを生成するには、Atmega16のTimer1を使用します。CPU周波数は16Mzですが、マイクロコントローラーに接続されている周辺機器が少なく、マイクロコントローラーの負荷が少ないため、1Mhzのみを使用します。1Mhzがその役割を果たします。プリスケーラは1に設定されているため、クロックは1Mhz / 1 = 1Mhz(1uS)として分割されます。これはすばらしいことです。タイマー1は高速PWMモード、つまりモード14として使用されます。タイマーのさまざまなモードを使用して、目的のパルス列を生成できます。参考資料を以下に示します。詳細については、Atmega16の公式データシートを参照してください。
するには高速PWMとしてタイマ1を使用するモード我々はICR1のTOP値(インプットキャプチャレジスタ1)が必要になります。TOP値を見つけるには、以下の式を使用します。
f pwm = f cpu / nx(1 + TOP)
これは次のように簡略化できます。
TOP =( f cpu /( f pwm xn))– 1
ここで、N =プリスケーラセットの値
f cpu = CPU周波数
f pwm = 50Hzのサーボモーターパルス幅
必要なすべての値があるので、ICR1値を計算します。
N = 1、f cpu = 1MHz、f pwm = 50Hz
上記の式に値を入力するだけで、次のようになります。
ICR1 = 1999
180すなわち、最大度を達成するために、この手段0 ICR1は1999でなければなりません。
16MHzの水晶とプリスケーラを16に設定すると、
ICR1 = 4999
それでは、スケッチについて説明しましょう。
USBaspを使用したAtmega16のプログラミング
サーボモーターを制御するための完全なAVRコードを以下に示します。コードはシンプルで簡単に理解できます。
ここでは、0からのサーボモータを回転させるためにはATmega16をコード化している0 180 0と180から再び戻ってくる0 0 0。この移行は9つのステップ、つまり0 – 45 – 90 – 135 – 180 – 135 – 90 – 45 – 0で完了します。遅延のために、AtmelStudioの内部ライブラリを使用します。
USBASP v2.0を接続し、このリンクの指示に従って、USBASPとAtmel Studio7.0を使用してAtmega16AVRマイクロコントローラーをプログラムします。スケッチを作成し、外部ツールチェーンを使用してアップロードするだけです。
デモンストレーションビデオを含む完全なコードを以下に示します。また、ロボット工学におけるサーボモーターの重要性を知ることにより、サーボモーターの詳細を学びます。