今回は、サンプルプログラムSTEP6-1~6-2(run_wait・run_ST_PWM)の中身を確認していきたいと思います。STEP6-1は、180mm進むためのサンプルです。MOT_CWCCW_R(L)は、回転方向を決めており、portdef.hでポートの設定がされています。MOT_FORWARDはstatic_parameters.hで0となっています。MOT_CWCCW_R(L)に、0を出力すると、前進する方向に回転するようになっています。逆に1を出力すると後退する方向に回転するようになります。43行目でMOT_POWER_ONでモーターを励磁させています。44行目は、いきなり回すと脱調することがあるため、脱調防止の為の待ち時間です。48行目から52行目で、ブザーとモーターにパルスを出力しています。上図46行目のLEN2STEP(180)の中身ですが、下図のmacro.hで定義されており、180mm進むためのステップ数を求めています。タイヤの直径(TIRE_DIAMETER)は、parameters.hで定義されています。PI:COで使われいるタイヤは直径48mm、モータは1ステップで0.9度ずつ回転するモータ(1回転に400ステップ必要)を使用しています。while文のカウントは、1回で2進むので、2倍されています。2倍しているかは後々解説します。STEP6-2は、PWMでモータを回します。今回メインプログラム部分は、part9で説明したモード選択しているだけなので、飛ばします。モード選択の内容は下図のようになり、モータを励磁させた後122行目から123行目で最高速度・加速度を指定しています。124行目でstraightが直進走行用の関数で、括弧内の180が移動距離を表しています。straight()はrun.cで定義されています。24行目で、PWMを出力して前進を開始しています。34行目では、残りの走行距離と減速に必要な距離を比較して、減速が必要な距離になったら処理が開始されます。この式は、関数で書いていると分かりにくいかもしれませんが、x=(V2-V02)/(2a)(x:移動距離、V:速度、V0:初速度、a:加速度)の式です。STEP2LENは、LEN2STEPとは逆にステップを距離に変換しています。最後に38行目で目標ステップ数に到達したらPWMを停止しています。加減速は、interrupt.cのint_cmt0で定義されています。23行目でspeedに加速度を足していっています。25~31行目は、最高・最低速度の制限36・37行目で求めた速度をTGRCのバッファレジスタに代入し、速度を変えてます。shotaこんにちは、shotaです。社員研修として、オリジナルマウスの製作しています。[前回の記事]では電源回路について書きました。今回は物体検出センサ回路(通称:壁センサ回路)について書きます。物体検出センサ回路のブロック図はこのようになりました。点線から左側が内部回路で、上半分が発光回路、下半分が受光回路です。点線から右側が外部回路です。回路はありませんが、赤外線を反射する壁があります。物体の検出にはフォトリフレクタ[LBR-127HLD]を使用します。フォトリフレクタには赤外線発光ダイオードとフォトトランジスタが内蔵されており、ダイオードが発光した赤外線が壁で反射し、フォトトランジスタで受光されることで壁を検出できます。壁がない場合は、赤外線が反射されず、フォトトランジスタが受光できません。回路図はこのようになりました。自分のマイクロマウスには、この検出回路が4つ搭載されます。それぞれ、前(左)・左・右・前(右)の壁を検出します。[HM-StarterKit]を流用していますが、より詳しい発光回路の動きについては[マイクロマウスのセンサについて2]を参考にしました。参考記事に書いてあるとおり、環境光による壁の誤検知を防ぐため、発光ダイオードをパルスでON/OFFさせます。パルスの周波数は1kHzとします。発光ダイオードを1kHzでON/OFFすると、それに伴い電源電流が変動します。この変動をなだらかにするためにローパスフィルタを搭載しています(回路図のR5とC11)。素子の定数はHM-StarterKitの値をそのまま使用しています。電源ICがHM-SterterKitのものから変わっているので、実際に動かした時の波形を見て定数を変えようと思います。(もしかしたらフィルタ回路が不要かもしれません。)ON/OFFするパルスは、ESP32から出力します。発光した赤外線が別の受光部に入らないように、4つのダイオードを別々のタイミングで発光させたいです。そのためには、パルスの出力端子も4つ必要ですが、ESP32の端子数が足りないため出力端子を2つに減らしています(回路図のIRLED_R_FLと、IRLED_L_FR)。本来は別々に点灯させる、RとFLを同時に点灯させます。同じようにLとFRも同時に点灯させます。RとLのセンサは角度が傾いているので、センサRとFL、LとFRのペアで発光すれば、誤検知しません(おそらく)。受光回路こちらも、HM-StarterKitの回路図を流用します。フォトリフレクタに内蔵されているフォトトランジスタは、ベース電流の入力が光の入力に置き換わったトランジスタです。