サーボモーターは、電子機器や組み込みシステムで非常に役立ちます。サーボモーターは、おもちゃ、ロボット、コンピューターのCDトレイ、車、飛行機など、いたるところに使用されています。この広い範囲の理由は、サーボモーターが非常に信頼性が高く正確であるためです。特定の角度に回転させることができます。それらは広範囲で利用可能で、高トルクモーターから低トルクモーターまで形成されます。このチュートリアルでは、サーボモーターを8051マイクロコントローラー(AT89S52)に接続します。
まず、サーボモーターの動作原理を理解する必要があります。サーボモーターはPWM(パルス幅変調)プリンシパルで動作します。つまり、回転角は、制御PINにパルスが印加されている時間によって制御されます。基本的にサーボモーターは、可変抵抗器(ポテンショメーター)といくつかのギアによって制御されるDCモーターで構成されています。 DCモーターの高速力はGearsによりトルクに変換されます。 WORK = FORCE X DISTANCE、DCモーターでは力が小さく、距離(速度)が高く、サーボでは力が大きく、距離が小さいことがわかっています。ポテンショメータはサーボの出力シャフトに接続されており、角度を計算し、必要な角度でDCモーターを停止します。
サーボモーターは0度から180度まで回転できますが、メーカーによっては最大210度まで回転できます。この回転の程度は、LOGICレベル1パルスを1msから2msの期間適用することによって制御できます。1ミリ秒でサーボを0度に回転させ、1.5ミリ秒で90度に回転させ、2ミリ秒のパルスで180度回転させることができます。1〜2ミリ秒の持続時間で、サーボモーターを0〜180度の任意の角度に回転させることができます。
回路図と動作説明
サーボモーターには、Vcc(電源)用に赤、アース用に茶色、制御線にオレンジの3本のワイヤーがあります。制御線は8051に接続でき、8051のピン2.1に接続しました。次に、このピンをロジック1に1ミリ秒間保持して、0度、1.5ミリ秒で90度、2ミリ秒で180度回転させる必要があります。遅延を作成するために8051のオンチップタイマーを使用しました。関数「servo_delay」を使用して50usの遅延を作成し、「for」ループを使用して50usの倍数の遅延を作成しました。
タイマー0とモード1を使用しているため、01HをTMODレジスタに配置しました。モード1は16ビットタイマーモードで、TH0には上位バイトが含まれ、TL0には16ビットタイマーの下位バイトが含まれます。 FFD2を16ビットタイマーレジスタに、FFをTH0に、D2をTL0に配置しました。 FFD2を配置すると、約の遅延が発生します。 11.0592MHzの水晶で50us。 TR0とTF0はTCONレジスタのビットであり、TRピンはセット時にタイマーを開始し、reset(0)時に停止するために使用されます。 TFはオーバーフローフラグであり、オーバーフロー時にハードウェアによって設定され、ソフトウェアによってリセットする必要があります。基本的に、TFはタイマーの完了を通知し、16個のタイマーがFFFFHから0000Hに移行するときにハードウェアによって設定されます。 「8051タイマー」について読んで、タイマーレジスタの値の計算を理解し、50usの遅延を作成できます。
CROから測定すると、servo_delay関数の13ループで1ミリ秒の遅延が発生するため、1ミリ秒(13ループ)から開始して2ミリ秒(26ループ)に進み、サーボを0度から180度回転させます。しかし、遅延を1msからゆっくりと増加させ、1msから2msのウィンドウを1.14ms、1.28 ms、1.42msなどの7つの部分に分割したので、サーボは約の倍数で回転します。26度(180/7)。180度を超えると、自動的に0度に戻ります。