ST Microelectronicsが送るSTM3に開発エコシテムによる開発実習第5弾 ADC 実習編です電圧電流などのアナログ信号をマイコンで処理すために必要なデジタル信号に変化を行うADCを動かすプログラムの実装体験をしていただきますそれでは始めましょうこの実習ではマイコンに内蔵されているADCを使って外部に接続した下編抵抗によって作られる分厚された電圧の変換値を読み取ることを実現いたします使用する機材はニュークレーボードとADCに入力する電圧を作る下編抵抗ボードと接続ケーブルですGPAを実習の時と同じようにCube MXを開きますCube MXの初期画面からニュー・プロジェクトにある3つのボタンのうち1番上のアクセス2 MCUセレクターをクリックしポップアップされたウインドーの左側のフレーム内になりますシリーズはSTM3にF4OラインはSTM3にF401OマッケージはLQFP6用をそれぞれ選択しますそうしますと右側のフレームにいろいろたによって絞られたデバイスの一覧を見ることができますその中のSTM3にF401REをダブルクリックしますデバイスを選択しますとずどいような画面が現れQFP64パッケージの字で示されたSTM3にF401REが見えます次に画面にありますQFP64パッケージで示されたPINに直接PINの設定をしていきます今回使うPINは1つですPA0をADC1のIN0に設定していきますPA0のPINを探してクリックします今回PA0はADC1のIN0として使えますので上から2番目のADC1 IN0を選択しますADCのサンプルレートなどその他の細かい設定は行わずデフォルトの設定のまま行います興味がある方は左側のフレーム内になりますアナログカテゴリーからADC1を選択し開いたモード&コンフィグレーションウィンドウ内の設定をご覧ください下の段のコンフィグレーションにおける各パラメータのヘルプの参照の仕方はYou are to実習内でお伝えした通りです続いてクロックの設定をしていきます画面上部にありますクロックコンフィグレーションのタブをクリックして開きます開いた画面ではコアクロックやピレル、ペリファラに必要なクロックと全てのクロック設定が自由愛上で行います開いた画面の中央よりにHELKの設定がありますデフォルトでは16MHzに設定されていますので最大周波数の84MHzに設定しますここまでの設定でマイコンの設定は終了ですこの後は生成するプロジェクトファイルに関する設定を行っていきます画面上部にありますプロジェクトマネージャーをクリックして開きますまずはじめにプロジェクトの名前を設定しますプロジェクトネームにプロジェクトの名前を設定しプロジェクトロケーションにはプロジェクトを保存するルートデリクトリーを設定しますここで重要な注意点ですプロジェクト名やプロジェクトを保存するフォルダのパスに全角半角スペース、漢字型などの2倍と文字を含めてはいけません使うツールによってはパスが通らなくなりプロジェクトをビルドする際にエラーになることが報告されています次にコード生成時の詳細設定を行います画面左側の上から2番目にありますコードジネータをクリックしますデフォルトではビルドに必要ない全てのファイルをプロジェクトフォルダにコピーする設定になっておりプロジェクトを作るたびに膨大な量のファイルが複製されPCのストレージをアパックすることになりますそこで最上段設定2番目のコピーオンリーネスサリーライバリーファイルズに変更し不必要なファイルのコピーを防ぎますこれで初期化コードを生成する準備が全て整いました設定してこなかった細かな内容に関しましてはベッドキューブメックスのユーザーマニュアル等をご紹介しますのでそちらを参考にしていろいろ試してみてくださいでは画面右上にありますGenerateコードをクリックしますしばらくしてコード生成が完了すると生成されたプロジェクトファイルを設定したツールチェーンで開くかフォルダを開くか一旦終了するかの選択肢を訪ねてきますEWARMを使って開くのでオープンプロジェクトをクリックして開きますでは実際にコード生成をしてプロジェクトファイルをEWARMで開いてみましょうここで年のためビルのが通ることを確認しますEWARMのプロジェクトメニューから全てを再ビルドを選択しビルドしますADC実習では一つのプログラムを実装していきますADCの変換を開始その変換が完了したかの確認をした後変換された値を読み出す通りです続いて実際のコードを記入する際の重要な注意点をご説明いたしますCubeMXで生成されたコードにはユーザーコードビギンとユーザーコードエンドのコメントの記載がありこのコメント分の間にのみユーザーコードを追期することが可能ですこのルールに乗って追期したユーザーコードはGPIOの設定等を変えたならなどをして再度CubeMXにてコード生成した場合でも保護されます逆にこのコメント分の範囲以外の部分にユーザーコードを追加したりCubeMXで自動生成されたコードを編集しますと再度コードを生成した際に追期したコードは切り替え変更した部分はすべて元に戻ってしまいますなおユーザーがこのコメント分を模範して記入してもコード再生成時に消えてしまいますので必ず生成されたコード内のコメント分の間に追期するようお願い致しますでは実際にmain.cファイルにコードを追期していきますお手元の資料からコフェをして入力すると簡単ですまず追期箇所1か所目ですユーザーコードbegin.pvユーザーコードendpvの間に追期していきますadcで変換された値を確認する変数アナログバリューを追期しますadcは12bitのデータを出力するので32bitの変数として設定します次回箇所2か所目ですユーザーコードbegin.pvユーザーコードendpvの間に追期していきます実際のメインループの処理を追加しますはるadcスタートでadc変換を開始しますその後はるadcp4forconversionの戻り値を使って変換が完了することを確認しますこの関数はタイムアウトパラメータを持つフォーリング処理となっております変換が正しく完了しタイムアウト時間内にハルオーケーが返ってくるかあるいは変換が終わらずタイムアウトとなってハルオーケー以外の戻り値が返ってくるかとなります追期は終わりましたらプロジェクトメニューの中ほどにありますメイクを選択してビルドしますビルド完了後エラやワーニングないことを確認しますではadcに年圧を印化するための変換抵抗を接続します必ずボードはPCのUSBポートからケーブルを外し接続を切った状態で行ってください冒頭スライド2で説明した回路の変換抵抗と配線色を使って説明しています次のスライドにて詳しく説明いたしますまず変換抵抗の黒色の信号線を接続しますボードのUSBコネクター上に見た時左側のモルフコネクターCL7の内側下から数えて10番目の20番ピンに接続します次に下変抵抗の赤色の信号線を接続します同じくCL7の内側下から数えて12番目の16番ピンに接続します最後に下変抵抗の黄色の信号線を接続します同じくCL7の内側下から数えて6番目の28番ピンに接続します接続を間違いますと下変抵抗左右のどちらかに最後まで回した際電源の3.3Vとグランドがショートしますのでご注意くださいお手元のニュークレボードをPCと接続します接続されるとボード右上にあるLD1が赤色に点灯しボード中ほどにあるLD3も赤色に点灯しますでは実際にボードに書き込んでデバッグしましょうプロジェクトメニューからダウンロードしてデバッグを選択しボードにデータをダウンロードしますボードと通信中LD1が点滅しますダウンロードが完了するとデバッグモードに切り替わりますボードのLD1は緑色に点灯します次にプログラム実行中の変数を参照するライブオッチ機能を設定しますライブオッチはメモリに配信された変数の値の表示を一定周期で更新してくれる機能ですEWMの表示メニューからライブオッチを選択しますそうするとソースコード編集画面右側にライブオッチウインドが開きます今回参照する変数はアナログバリューですライブオッチウインドに入力して設定しますそれでは準備が整いましたキーボードの動きを押して実行しますライブオッチウインドのアナログバリューにはADCが変換した値が確認されており時間とともにパラパラと変化していると思いますその後可変抵抗左右に回しますと可変抵抗によって分割された電圧がADCに入力されそれにともないアナログバリューの値も変化しますでは実際の様子を見てみましょうはい では実際にライブオッチウインドを使ったデバッグの様子を見ていきたいと思います既に2ボードには可変抵抗がつながっておりましてパソコンにつながっております右上のLEDが緑に点灯していますで デバッグモードになっておりましてライブオッチウインドの設定も進ませてあります参照したい変数であるアナログバリューこちらをライブオッチウインドのところに設定していて初期値が0の状態になっていますこれからF動きを押して実行していきますでは実行しますそうしますとADCの変換が始まりましてその変換している値がある一定の感覚でこのライブオッチウインドのほうのアナログバリューのところで更新されますこのように実行中のマイコンのメモリーの値を読むことができますでは実際にボリュームを回してみますグルグルグル今2300 2600409512ビトのADCなので最大4095どんどん逆に絞って電圧を下げてここに持ってきますとこのように1ないし0になりましたねというような形でこのようにアナログの変化オリュームの変化をこのライブオッチで追いかけることができるようになっています実際にユーザーアプリケーションに追加した際に使ったアルドライバの簡単なご説明をいたしますまず1つ目はアルADCスタートですADCの設定に基づいた変換を開始しますこちらの第一引き数にはADCのハンドラーを指定します2つ目はアルADCポール4コンバージョンですADCの変換終了をポーリングによって監視するブロッキング関数ですこちらの第一引き数にはADCのハンドラーを指定します第2引き数にはポーリング終了までのタイムアウト時間をミリセクターにで指定します3つ目はアルADCゲットバリューですADCの変換したデータを取得しますこちらの第一引き数にはADCのハンドラーを指定します最後はアルADCストップですADCの変換を停止しますこちらの第一引き数にはADCのハンドラーを指定します実際のドライバのソースコードはプロジェクトを保存したフォルダにあるドライバーズディレクトリー内のSTMさんにF4XXハルドライバフォルダにありますドライバの使用方法に関しましては該当のソースコードやヘッダやコメント分またはWebに公開しているユーザーマニュアル1000年約25番UM1725にてご確認ください資料にはWebリンクを埋め込んでありますのでクリックして参照してくださいでは最後に動いたままの暴動を止めてデバックを終了しますEWARMのデバックメニューからデバックの停止を選びデバックモードを終了しますその後EWARMもCubeMXも終了させます実習していただいた感想はいかがでしょうか比較的簡単に動作させることができたかと思いますSTMさんにマイコンは各種のソフトウェアが準備されています次のスライドにSTMさんにマイコンのインターネトリ入手可能な便利なリンクをまとめましたのでお活用くださいこれでADC自習編を終了しますいつずのビデオと資料にわたりお付き合いいただきありがとうございました実際の仕事にてお会いできることを頃からお待ちしております