DCマウス研修(移行中)

マイクロマウス研修(kora編)[29] 光センサの動作確認

こんにちは。koraです。

今回は光センサを設定します。

光センサの動作確認

STM32のADC

光センサとバッテリー電圧の読み取りにSTM32のADC (アナログ・デジタル・コンバータ)を使用します。STM32F732にはADCモジュールが3つあり、今回使用するのはADC1です。
配線は次のようになっています。

  • 右前光センサ: ADC1_IN0
  • 右光センサ: ADC1_IN1
  • 左光センサ: ADC1_IN2
  • 左前光センサ: ADC1_IN3
  • バッテリー電圧: ADC1_IN4
CubeMXの設定

次のように設定します。

ADC_Settings

  • Scan Conversion Mode: Enabled … 複数のチャンネルを変換するためEnabledにします。
  • Continuous Conversion Mode: Disabled … 連続で変換するわけではなく、光センサのLEDの発光と同期させる必要があるのでDisableにします。
  • Discontinuous Conversion Mode: Enabled … ADCを開始後、下のNumber of Discontinuous Conversionで指定する数のチャンネルだけ変換してADCが停止するようになります。
  • Number of Discontinuous Conversion: 1にします。

Scan Conversion Modeでは、変換する順番を指定します。
各光センサは、LED消灯時に1回、LED点灯時に1回、ADCを実行し、その差分を取るようにします。バッテリー電圧は1回だけにします。つまり、①右前LED消灯時、②右前LED点灯時、③右LED消灯時、④右LED点灯時、⑤左LED消灯時、⑥左LED点灯時、⑦左前LED消灯時、⑧左前LED点灯時、⑨バッテリー電圧、という順でADCを行います。
ADC_Regular_ConversionModeを次のように変更します。

  • Number of Conversion: 9にします。
    • Rank: 1
      • Channel: Channel 0 … 一番最初に読み取りたいチャンネルを指定します。0を指定するとADC1_IN0が読み込まれます。
    • Rank: 2
      • Channel: Channel 0 … 二番目に読み取りたいチャンネルを指定します。
    • 以下略
光センサ用のモジュール

光センサ(とバッテリー電圧監視)用のモジュールを作ります。以前作成したジャイロ用のモジュールと同様に、Srcフォルダにphoto.cを、Incフォルダにphoto.hを作ります。

光センサの変更

作ったプログラムをCubeProgrammerでマウスに書き込み、光センサの出力をTeraTermで確認してみました。しかし、壁の前に置いてもほとんど反応しません。オシロスコープで電圧を確認してみても、数十mVほどしか出力されていませんでした。
自作マウスには赤外線センサOP265FAAとフォトダイオードLTR-4206を使用する設計にしていたのですが、どうやら基板上の抵抗と値が合っていなかったようです。抵抗を選定しなおすことも考えましたが、実績のあるHM-StarterKitのフォトリフレクタLBR-127HLDと交換することにしました。

作り直した基板で値を再度テストすると、ちゃんとセンサが反応することを確認できました。

次回

何とか光センサが使えるようになりました。次はタイマ割り込みの実装に入りたいと思います。

タイトルとURLをコピーしました