最後のビデオではシリーズを締めくくり、成果を披露します。最終的には、モーターの速度は手と近接センサーの距離によって制御されます。
前回のビデオでは、PWMの有無にかかわらずさまざまな周波数でピンを駆動する方法、割り込みとタイマーを使用してxマイクロ秒ごとにアクションを実行する割り込みを生成する方法、I2CとSPIバスをプログラミングして外部コンポーネントと通信する方法について学習しました。これらすべての知識を組み合わせることで、モーターの速度が手と近接センサーの距離に応じて変化するプロジェクトを作成できるようになりました。ここでも、マイクロコントローラにはCypressのPSOC4200 BLEを使用し、近接センサーにはSTMicroelectronicsのVL6180、ステッピング モーター ドライバーにはSTMicroelectronicsのL6474を使用します。I2Cを備えたデバイスは近接センサーであり、SPIバスを備えたデバイスはステッピング モーター ドライバーでした。
関連商品を見る
関連商品を見る
32kHzクロックはPWMに供給され、方形信号を生成します。320カウントの周期と32kHzクロックを組み合わせると、モーターは100ステップ/秒の速度で駆動されます。50% のデューティ サイクルを実現するには、期間値の半分の値を比較します。モーターの速度を変更するには、プログラム内のこれらの値を上書きします。PWMの出力ラインはL6474のSTEPピンに接続されており、このピンの各立ち上がりエッジでモーターが1ステップ移動します。
I2Cブロックは近接センサーVL6180との通信を可能にし、SPIバスはステッピング モーター ドライバーL6474との通信を可能にします。I2Cは100kHzでマスターとしてプログラムされます。
I2C SCBコンポーネントは、デフォルトで優先度レベル3の内部割り込みを使用します。プログラムでは、デフォルトの優先度値が3であるタイマーによってトリガーされる割り込みサービス ルーチンの実行中に呼び出されますが、呼び出されることはなく、I2C通信は行われません。I2Cの割り込みレベルを2に変更すると、それが呼び出され、I2C通信が正しく実行されます。
Arduinoピン配置制約は、SCBモードでI2CとSPIを使用するための制約を生成します。実際、同じSCBコンポーネント内にある必要があります。この問題を克服するために、SCBのSPIの代わりにUDBのSPIマスターが使用されます。APIは非常に似ています。UDBモードではピン接続は自動ではないため、回路図にピン コンポーネントを追加する必要があります。
SPIバスの極性は、CPHA = 1およびCPOL = 1、MSBファースト、データ ビットが8にプログラムされています。MISOピンは入力ピンであり、MISO、CLOCK、およびチップ選択ピンはすべて強力ドライブ モードで出力として構成されています。
さらに2つのピンが必要です: リセット ピンと方向ピンです。
プログラムに関しては、SPI、I2C、タイマー、PWMブロックを起動する必要があります。また、L6474をリセットして構成するために、L6474.cファイルにプログラムされたメソッドを呼び出します。タイマーは割り込みを使用してプログラムされています。割り込みでは、近接センサーから値を読み取り始めます。距離に基づいて新しい速度が計算され、PWM周期と比較値が上書きされます。近接センサーからのフィードバックは、0 (センサーに近い物体) から255 (物体が検出されない) の間です。物体が近いほど、モーターの回転速度が速くなります。
L6474.cファイルには、リセットピンのレベルを遅延させて変更することでモータードライバーをリセットする方法と、SPIコマンドを送信する2番目の方法があります。
3つ目は、ドライバーを構成し、SPIパケットを送信するメソッドを呼び出すことです。
コードは読みやすくするために最適化されていません。構成パラメータを理解するには、L6474リファレンス マニュアルを参照してください。
最後に、VL6180.cファイルで、近接センサーのメソッドをプログラムします。 近接センサーを使用する前に、近接センサーを設定し、デバイスの準備ができていることを確認する必要があります。詳細については、VL6180Xの仕様をお読みください。
VL6180に関するアプリケーション ノートの推奨事項に従うだけです。シングルショットモードで距離測定を実行します。したがって、私たちのプログラムでは、次のメソッドを使用します。
- 測定を開始するには、
- 測定の準備ができるまで待機し、最後に値を読み取るメソッド。
- 近接センサーの値を読み取る
最後のステップは、ボードを組み立ててプログラムすることです。モーターは低速 (100ステップ/秒) で回転し、プロジェクトが近接センサーに近づくと、モーターは距離に応じて最大1,000ステップ/秒で回転します。速度はこれら2つの値の間で変化します。