サーボモーターはパルス幅変調(PWM)の原理で動作し、その回転角はその制御ピンに適用されるパルスの持続時間によって制御されます。このチュートリアルでは、 PWM技術を使用してATtiny13マイクロコントローラーでサーボモーターを制御します。したがって、先に進む前に、まずPWM、サーボモーター、およびArduinoボードを使用してATtiny13をプログラムする方法について学習します。
パルス幅変調(PWM)
パルス幅変調(PWM)は、デジタルソースを使用してアナログ信号を生成する方法として定義されています。PWM信号は、デューティサイクルと周波数の2つの主要コンポーネントで構成されています。これらのコンポーネントは、その動作を定義します。デューティサイクルは、信号がハイ状態にある時間を表します。これは、1サイクルを完了するのにかかる合計時間のパーセンテージとして表されます。
デューティサイクル=ターンオン時間/(ターンオン時間+ターンオフ時間)
周波数は、PWMがサイクルを完了する速度と、信号がハイ状態とロー状態の間で切り替わる速度を定義します。100Hzの周波数は、1秒あたり100サイクルを意味します。デジタル信号のオンとオフを高速で特定のデューティサイクルで切り替えることにより、出力は定電圧アナログ信号のように見えます。PWMの強力な利点の1つは、電力損失が非常に少ないことです。
すべてのサーボモーターは+ 5V電源で直接動作しますが、モーターが消費する電流の量に注意する必要があります。3つ以上のサーボモーターを使用している場合は、適切なサーボシールドを設計する必要があります。
サーボをAttiny13に接続する前に 、このサーボモーターテスター回路を使用してサーボをテストできます。ここでは、サーボモーターを多くのマイクロコントローラーと接続しました。
- サーボモーターとARM7-LPC2148のインターフェース
- サーボモーターとMSP430G2のインターフェース
- Arduinoで複数のサーボモーターを制御する
- MPLABとXC8を使用したPICマイクロコントローラとサーボモーターのインターフェース
- RaspberryPiによるサーボモーター制御
- ArduinoDueによるサーボモーター制御
- サーボモーターとAVRマイクロコントローラーAtmega16のインターフェース
Arduinoを使用したATtiny13のプログラミング
Attiny13は、ArduinoUnoまたはその他のArduinoボードを使用してプログラムできます。次の図に示すように、Attiny13をArduinoUnoに接続します。
- Arduino 5V –ATtiny13ピン8
- Arduino GND –ATtiny13ピン4
- Arduinoピン13–ATtiny13ピン7
- Arduinoピン12–ATtiny13ピン6
- Arduinoピン11–ATtiny13ピン5
- Arduinoピン10–ATtiny13ピン1
ArduinoはATtiny13をプログラムするプログラマーとして設定されています。これは、ArduinoISPスケッチをArduinoにアップロードすることによって行われます。このArduinoスケッチは、ArduinoIDEの例の中で利用できます。Arduino IDEを開き、 [ファイル]> [例]> [ArduinoISP]に移動し ます。
これで、ArduinoISPのプログラムがポップアップ表示されます。プログラムをArduinoUnoにアップロードします。
ArduinoUnoはAttiny13をプログラムする準備ができました。ただし、コアファイルをインストールしてAttinyをセットアップする必要があります。これを行うには、ArduinoIDEの [ファイル] >> [設定] に移動し ます
次に、新しいウィンドウがポップアップ表示されます。そして、「 追加のボードマネージャーURL 」に以下のリンクを追加し、「OK」をクリックします。
「https://raw.githubusercontent.com/sleemanj/optiboot/master/dists/package_gogo_diy_attiny_index.json」
Arduino IDEで、 [ツール] >> [ボード] >> [ボードマネージャー]に 移動し ます
次に、別のウィンドウがポップアップし、検索ボックスに 「Attiny」 と入力すると、「DIY ATtiny」が表示され、 「インストール」 ボタンをクリックします(すでにインストールしているため、インストールボタンは灰色で表示されます)
ATtiny 13のプログラミングを開始するには、ブートローダーをそれに書き込む必要があります。そのためには、 [ツール]> [ボード]> [ATtiny13] に移動し ます。
次に、[ツール]> [プロセッサ バージョン]に移動し、正しいバージョンのATtinyが選択されているかどうかを確認します。チップに応じて、ATtiny13またはATtiny13aのいずれかを選択します。
次に、[ツール]メニューの下部にある[ブートローダーの書き込み]ボタンをクリックします。
ブートローダーを焼き付けた後、ATtinyをプログラムする準備が整いました。これで、プログラムをアップロードできます。
必要なコンポーネント
- ATtiny13マイクロコントローラー
- サーボモーター
- ポテンショメータ
- + 5Vバッテリー
- Arduino IDE
- 接続線
回路図と動作
ATtiny13でポットを使用してサーボモーターを制御するための回路図を以下に示します。
以下は接続です
- サーボモーター制御ピンをATtiny13のピン5に接続します
- サーボモーターのアースをATtiny13のピン4に接続します
- サーボモーターのVCCをATtiny13のピン8に接続します
- ポテンショメータの中央のピンをATtiny13のピン7に接続します
- ポテンショメータの1番目と3番目のピンをVCCとGNDに接続します。
- + 5VバッテリーのプラスをATtiny13のピン8に接続します
- + 5VバッテリーのマイナスをATtiny13のピン4に接続します
ポテンショメータはATtiny13のピン7(PB2)に接続され、サーボモーターの制御線はピン5(PB0)に接続されています。
ここで、ポテンショメータの値が読み取られ、0〜180の値に変換されます。次に、この角度の値がマイクロ秒に変換され、計算されたマイクロ秒の遅延でサーボモーターの制御ピンにパルスが与えられます。これで、以下のビデオに示されているように、サーボモーターがポテンショメーターの値に従って回転します。