実装機能の動作確認です。
ようやく寒さ和らぎ、過ごしやすい日々が続いております。
みなさんこんにちは、YUUKIです。
前回、大会出場した報告の記事を書いておりました。
ちょっとバタバタしており更新が途絶えておりましたが、ようやく再開です。
YMmouseに実装した機能の動作確認をしていきます。
今回の記事では、距離センサー、IMU、モータードライバーの動作確認をしていきます。
(と思っていましたが、少しボリュームがあったので本記事では距離センサーのみを、次回IMU、モータードライバーについて記事にします。)
相変わらずいろんな問題が発覚しコツコツ解決していきますが、温かい目で見守っていただければと思います。
距離センサー
さて、距離センサーということで、フォトトランジスタと赤外LEDの動作確認をしていきます。
YMmouseの距離センサーは赤外LEDの光をフォトトランジスタで受光し、そのAD値を利用して壁の有無を判断します。(ちょっと大雑把な説明でしょうか)マイクロマウス、クラシックマウスでよく使われているものですね。赤外LEDの動作確認は、単なるLチカとなるので後回しとし、先にフォトトランジスタがちゃんと受光して、AD変換した値が取得できるかを確認していきます。
DMAで値が取得できません・・・
YMmouseに使用しているフォトトランジスタは「ST-1KL3A」です。回路図についてはこちらの記事で簡単に説明しています。
ふり返ると、機体が完成して一段落付いたあたりに動作確認をしていました。
私のブログではお馴染みですね。のりさんの記事を参考に動作確認しています。
シングルチャンネル、マルチチャンネルの動作は、のりさんの記事通りに行うと、すんなり確認が取れました。
なので、ここは割愛します。
続いてDMA(Direct Memory Access)の設定をして動作確認していきますが、意図した値が取得できません。
のりさんのブログでは特に問題なかったみたいですが、このように決まった値しか取得できません。
この問題点探し出すのにだいぶ時間を費やしましたが、結論を言うとSTM32CubeIDEのコードジェネレートが犯人でした。
ペリフェラルの初期化をするコードを自動生成してくれるのがSTM32CubeIDEの便利なところですが、どうもADCの初期化より先にDMAの初期化をしないといけないようです。
ここは、一度でも先にADCの設定をしてしまうと、後からDMAの設定に切り替えても先にADCを初期化してしまうようです。これを手動でDMAを先に初期化するように書き換える(上写真のように)とうまく値を取得できるようになります。
これでフォトトラの動作確認完了です。
赤外LEDが光っていない…
続いて赤外LED(SFH4550)の動作確認です。
ここは、特筆難しいことなく単純にLチカできればクリアです。
赤外LEDなので、よくカメラ越しに見ると確認できるとかよく言われますが、実際にカメラ越しに見ても光っているように見えません。ということで原因探ります。
・そもそもLチカできているか
オシロスコープで確認しましたが問題なさそう。(写真がなかったですごめんなさい…)
・回路に問題があるか。
Part13にて紹介した回路図において、シンボルのピン配置や向きが違ってないかを再確認します。
(3.3Vレギュレーターのシンボルを、詳細を確認することなくKicadのライブラリから使用し、何個も使用不能にした過去があります。)
ここは特に問題ありませんでした。
余談ですが開発を進め、いざ迷路を走らせてみると光量が足りず、壁の有無の判断がシビアでした。
なので後に10Ωへ変更することになります。
(割り込みの中で、それぞれ一瞬光らせるだけなので問題ないかと…)
・素子の実装はできているか。(意図したものが実装できているか)
犯人はここでした。以前、電源周りで小さい抵抗つけてレギュレーター大量破壊したとお話したことがありましたが、今回は大きすぎる抵抗を取り付けたことにより光っていませんでした。
本来33Ωを実装するところ33kΩを実装していました。(回路図記載の記事はこちらです。)
すぐ換装したかったのですが、社内に33Ω抵抗がなく、一先ず47Ωに換装しました。(あれ、どこかで使いましたね笑)
これで下写真のように光ることを確認できました。
無事に光りました!(うまく撮れなくてボケてますが…)
フォトトランジスタ、赤外LEDそれぞれ組み合わせると・・・
無事、Lチカに合わせてフォトトランジスタの受光も変化しています。
DMAによる取得にかなり時間を費やしました。
本来であればサクッと通過したいところでしたが・・・
では次回、IMUとモータードライバーについて書いていきます。
それではっ
YUUKI