記事の詳細
後閑哲也先生監修!PiCCASO Web詳細解説



※記事内に試作品の画像を使っているものがあります。
キット版の組み立て方はこちらのPDFもご参照ください
PiCCASOの全体概要
統合学習基板として、最新のPICマイコンの内蔵モジュールを一通り試すことができるようにしました。
完成した統合学習基板の外観が写真Aとなります。

使用したPICマイコンは、まず、周辺モジュールの動作確認用には、最新のPIC16F1ファミリでアナログモジュールが強化された28ピンのPIC16F1778を使いました。
このPIC16F1778の内部構成は図Aのようになっています。
アナログ関連のモジュールの種類とモジュール数が特に多いデバイスとなっています。
またパルス出力関連にも特徴があって、16ビット分解能のPWMモジュールなどが実装されています。

Arduino Uno互換の方のPICマイコンには、28ピンのPIC16F18857を使いました。
このPIC16F18857の内部構成は図Bのようになっていて、こちらも多くの周辺モジュールが実装されています。
外部ピンと内蔵モジュールの接続をピン割付機能で自由に設定できますので、Arduino互換に構成するには最適なものとなっています。

この2つのPICマイコンを使って統合学習基板の全体構成を図Cのようにしました。
電源は5VのACアダプタかパソコンのUSBを使います。
PICマイコンや周辺デバイスにはレギュレータで3.3Vを生成して供給します。
Arduino互換側は3.3Vと5Vを選択できるようにしました。
さらにDCモータには最大1A供給可能な3.3Vのレギュレータを使って供給します。
周辺モジュールの動作確認用に用意した周辺デバイスは、スイッチ、フルカラー発光ダイオード、可変抵抗、液晶表示器、デュアルMOSFET ICによるフルブリッジ、温度センサ、温度気圧センサ、BluetoothモジュールまたはWi-Fiモジュールとなります。
さらに外部接続のデバイスとして、DCモータ、RCサーボ、USBシリアル変換ケーブルを用意することとしました。またオプションとして音声の入出力などのアナログ回路の基板を追加実装できるようにしました。

第二章 機能仕様とできること
統合学習基板で試すことができる周辺モジュールを使った機能について説明します。
対象とする周辺モジュールと機能は表Aとしました。それぞれ実際に信号を入力したり、出力したりするものが必要なものには適当なデバイスを接続しています。

第3章 実装デバイスの機能仕様
統合学習基板に組み込んだセンサやデバイスの機能仕様と使い方を説明します。
3-1 温度センサの使い方
アナログ電圧出力の温度センサではLM35DZが古くから使われており、0℃で0Vに相当するためスケール変換が簡単ということで使いました。このセンサの使い方を説明します。
このセンサのピン配置と特性は図Aのようになっています。ただしピン配置はTO-92形パッケージの場合です。電源電圧が4Vから30Vと非常に広範囲で、消費電流も100μA程度とわずかです。

このセンサの使い方は簡単で、図Bのように電源を加えるだけで、出力端子に温度に比例した電圧を出力します。しかし、電圧は25℃で0.25Vですから、PICマイコンのADコンバータで室内温度を計測するためには、増幅して計測しやすくする必要があります。増幅率は温度計測範囲の上限を何度にするかで決まります。
たとえばADコンバータのリファレンスを4.096Vとした場合で0℃~80℃の測定範囲とするのであれば、センサ出力が0.8VのときADコンバータの最大の4.096Vの入力になればよいですから、4.096÷0.8 ≒ 5倍の増幅が必要となります。図3-3-2では6倍の増幅率になりますから図に示したように0℃~68℃が計測温度範囲となります。

3-2 デュアルMOSFETの使い方
統合学習基板のモータ用フルブリッジには、ICタイプのMOSFETを使いました。このICはPチャネル型のMOSFETとNチャネル型のMOSFETが一つのICにペアで組み込まれていますので、フルブリッジを構成するのに便利に使えます。このICのピン配置と仕様は図Cのようになっています。

これでフルブリッジを構成した場合には、図Dのような回路とし、これを図のようなパルスで制御します。回転方向によりPBかPDをPWMの出力としてNチャネルのMOSFETをPWM制御します。これで正転の場合にはQ3からQ2に電流が流れ、逆転の場合にはQ1からQ4に電流が流れますからモータの回転方向が逆になります。

3-3 複合センサ BME280の使い方
I2C接続のセンサとして写真AのようなBME280というボッシュ社の複合センサモジュールを使っています。このセンサだけで温度、湿度、気圧の3要素が測定できてしまうので便利なセンサです。

しかし、センサ本体は表面実装の非常に小さなものですので直接我々が扱うことは困難です。したがってこれを基板に実装したモジュールで販売されているものを使います。この基板実装のセンサの外観と仕様が図Eとなります。
この基板実装のものは、I2C接続とSPI接続のいずれかを選択できるようになっていますので、本書ではI2C接続を使います。この場合、J3のジャンパ接続をしておく必要がありますので忘れないようにします。またI2C接続の場合スレーブアドレスをSDOピンで0x76と0x77を切り替えられますが、ここでは0x76としています。電源は3.3Vが標準の電圧になります。

このセンサの内部レジスタのデータフォーマットは図Fのようになっています。データはレジスタアドレスにより区別されすべて8ビットごとに分けられています。したがって例えば湿度のデータの場合、アドレスが0xFEと0xFDの2つのレジスタを読み込んで16ビットのデータに変換する必要があります。さらに温度と気圧は3バイトで構成されています。
このセンサには個別に較正用のデータが書き込まれていて、最初に較正用データをすべて読み出しておき、データ読み出しごとにこの較正データをもとに較正計算をする必要があります。
動作モードを設定するためのレジスタが3種類あります。本書では次のように設定しました。
① configレジスタ
フィルタ係数はなしでfilter = 000、計測間隔1秒としてt_sb = 101
したがってconfig = 0xA0とします。
② ctl_measレジスタ
オーバーサンプル比は、温度はx1でosrs_t = 001、気圧もx1 でosrs_p = 001、
モードはノーマルとするのでmode = 1として結果ctrl_meas = 0x27とします。
②ctrl_humレジスタ
オーバーサンプル比を1としてosrs_h = 001
したがってctrl_hum = 0x01とします。

I2Cでデータを送受信する際の手順は図Gのようにします。制御だけの場合は図G(a)のコマンド送信で送信します。最初のconfig設定などに使います。
計測データや較正データの読み出しの場合は図G(b)の手順で行います。読み出す最初のレジスタアドレスを送信してから後は連続的にデータを読み出せば必要なデータを一括で読み出すことができます。

このBME280センサの較正演算はちょっと複雑で、データシート通りにする必要がありますが、32ビットの演算になるのと、較正データに正負の両方があるので注意が必要です。本稿ではこのBME280の制御プログラムをライブラリ化しています。
3-4 液晶表示器の使い方
本稿では液晶表示器にI2C接続のものを使いました。この液晶表示器の機能仕様は図H、外観は写真Bのようになっています。

マイコンとの接続はI2Cインターフェースとなっていますから、クロック(SCL)とデータ(SDA)の2本だけで接続します。また、この液晶表示器のI2C通信はマイコンからの出力となるWriteモードだけとなっていますので、図Iのような簡単な手順で通信ができるようになっています。
最初にスレーブアドレス+Writeコマンドを1バイトで送信します。この液晶表示器のスレーブアドレスは「0111110」の固定アドレスとなっており、Writeコマンドは「0」ですから、最初の1バイト目は「0111 1100」(0x7C)というデータを送ることになります。
この後にはデータを送りますが、データは制御バイトとデータバイトのペアで常に送信するようにします。制御バイトは上位2ビットだけが有効ビットです。最上位ビットは、この送信ペアが継続か最終かの区別ビットで、「0」のときは最終データペア送信で、「1」のときはさらに別のデータペア送信が継続することを意味しています。本稿では常に0として使います。
次のRビットはデータの区別ビットで、続くデータバイトがコマンド(0の場合)か表示データ(1の場合)かを区別します。コマンドデータの場合は、多くの制御を実行させることができます。表示データの場合は、液晶表示器に表示する文字データとなります。

この液晶表示器は、制御コマンドを送信することで多くの制御を行うことができます。この制御コマンドには大きく分けて標準制御コマンドと拡張制御コマンドとがあります。標準制御コマンドには、表Aのような種類があり、基本的な表示制御を実行します。コマンドごとに処理するために必要な実行時間があり、PICマイコンのプログラムでは、このコマンド実行終了まで次の送信を待つ必要があります。

拡張制御コマンドには2種類ありISビットで選択します。ISビットが「0」のときの拡張制御コマンドには表B(a)のようなコマンドがあり、ISビットが「1」のときの拡張制御コマンドには表B(b)のようなコマンドがあります。拡張制御コマンドは電源やコントラストなど初期設定に必要なコマンドとアイコン選択をするためのコマンドがあります。

表示データとしてASCIIコードを送信すると1文字表示しますが、そのASCIIコードと文字の対応は図Jのようになっています。通常のASCIIコードでは、0x00から0x1F、0x80から0x9F、0xE0から0xFFには文字はないのですが、この液晶表示器にはこの範囲に特殊文字が割り当てられています。C言語でこの文字を表示する場合には、16進数で指定する必要があります。

第四章 統合学習基板の回路設計
各部品の仕様を元に統合学習基板の回路設計をします。
4-1 回路設計
(1章)図Cの全体構成を元に出来上がった回路が図Aとなります。
図左側がいろいろなCIPの動作を確認するための回路部で、右側がArduino互換の部分になります。
まず電源は図左側から、USBかDCジャックでDC5Vを入力するものとします。5V直接駆動のものが、Arduino互換用のPICマイコンとコネクタ、RCサーボ、温度センサとなります。あとはレギュレータで3.3Vを生成して供給します。
モータには独立でレギュレータを用意しさらにダイオードで降圧しジャンパ経由で供給しています。このジャンパは常時はオフとしておき、モータフルブリッジへのパルスが正常に出ていることが確認できたら、ジャンパを接続してモータ駆動ができるようにします。万一出力が間違っていて、貫通電流が流れるとトランジスタICが熱くなって壊れますので安全対策としています。同じようにNチャネル側のゲートは抵抗でプルダウンしてPICのリセット時や出力ピンへの出力が無い場合に両方ともオフとなるようにしています。
Arduino互換用PICマイコンには3.3Vと5Vを選択して供給できるようにしました。
RN-42XVPのBluetoothモジュールと、Wi-FiモジュールのWROOM-02は、2つのPICマイコンのいずれからも使えるようにジャンパで切り替えできるようにしました。この2つの通信モジュールはソケットへの差し替えでいずれかが使えるようにしました。
Arduino互換のコネクタとPICマイコンとの接続は、できるだけ互換性が保たれるように接続し、PICマイコンの内蔵モジュールのピン割り付け機能により互換のピンとできるようにしています。
RCサーボの出力にはトランジスタを挿入して電圧変換をしています。
複合センサと液晶表示器は同じI2Cのピンに接続し10kΩの抵抗でプルアップしています。


この基板組み立てに必要な部品は表Aとなります。


第五章 基板組み立てノウハウ
プリント基板を組み立てる際の手順や、そのときに注意すべきことなどのノウハウを説明します。
5-1 組み立て手順
統合学習基板に部品を実装する際の手順はだいたい次のようになりますが、基本は背の低いものから順番に実装するということです。
(1) 表面実装部品を最初に実装する。
基板のはんだ面あるいは部品面に表面実装のICやコンデンサなどの部品がある場合は、これを真っ先に取り付けます。表面実装部品は位置決めやはんだ付け後のクリーニングの際、周囲に部品があるとやりにくいですし、他に背の高い部品が実装済みだったりすると基板が固定できず、不安定になりますので最初に実装します。その中でもピン数の多いICから先に取り付けます。
抵抗やコンデンサなどもはんだ付けしてしまいます。
(2) ジャンパ線を実装する
次に部品面で一番背の低いものがジャンパ線です。特に自作の片面基板のような場合には、ジャンパ線が後回しになると基板から線が浮き上がった状態になったりして周りの部品と接触することもあります。
(3) 抵抗を実装する
次に背の低いのが抵抗です。最近は小型化されて小さくなっていますので、縦より横にして実装することが多くなりました。横にするとき、基板の穴に抵抗を挿入してから基板を裏向けて机などの上に置けば、それだけで固定されますから、リード線を曲げる必要もなく、そのままはんだ付けができます。
(4) ICソケットなどを実装する
次に背の低い部品がICソケットです。ICソケットの実装には特に向きに注意し、基板に全ピンを挿入できたことが確認できたら、対角にある2ピンだけをはんだ付けして固定します。残りのピンはそのままにして、全部品を実装後の最後にまとめてはんだ付けします。これで、万一逆向きの実装だったり、ピンが曲がっていたりということを後から気が付いても簡単に変更できます。
(5) LEDやICの実装
残りの半導体部品を実装します。これらの多くは極性や向きがあるものがほとんどですから、向きに注意して実装します。
(6) スイッチやコネクタなど
あとは背の低い順に残りの部品を実装していきます。このとき、例えば液晶表示器やセグメントLEDなど、表面に傷をつけたくない部品はできるだけ最後に実装するようにします。
DCジャックやコネクタなど外部から何らかのものを接続する部品は、力が加わりますから、しっかりとはんだ付けするように注意します。
5-2 統合学習基板の組み立て
回路設計が完了し、Eagleでパターン設計をしてからプリント基板を作成します。
出来上がった基板に図Aの組み立て図に基づいて部品を実装します。順序は前述のとおりです。
中央下側の四角部はオプション基板の実装位置ですので、組み立ては不要でCN4のソケットのみ実装しておきます。太い線がジャンパ線ですが、スイッチの部分は本体で接続されますからジャンパ線は不要です。

組み立てが完了した基板の部品面が写真A、はんだ面が写真Bとなります。


第六章 ハード動作確認ノウハウ
組み立てが完了したら、PICマイコンのプログラムで動かす前にハードウェアだけの動作を確認します。
確認は目視チェックと電源チェックです。
6-1 目視チェック
目で見て確認する作業で部品の実装向きのチェックです。意外とこれで見つかる単純な間違いも多いものです。特に実装するときに方向性がある部品については、念入りにチェックします。このときのチェックポイントは下記のような項目です。
①ダイオードの向き
特に発光ダイオードは向きが分かりにくいので注意が必要ですが、中身が透けて見える発光ダイオードでしたら、ピンのモールド内部の形状で向きが確認できます。
②3端子レギュレータの向き
安定した電源を作り出す3端子レギュレータですが、これのピン配置が種類ごとに異なっているので注意が必要です。特に正電源用と負電源用でも異なりますし、100mA用と1A用の大きさによっても異なっていますので注意が必要です。
③ICソケットの向き
これは基本的なことですが、案外間違っていることがあります。特に部品面からとはんだ面から見たときの違い、つまり裏表を勘違いしていることが多いようです。
④電解コンデンサの向き
これは特に電源部分に使われていることが多く、向きを逆にすると破裂しますので注意が必要です。
⑤コネクタの向き
簡易コネクタの場合には、実装の向きが特定できずどちらでも実装できてしまうものが多いので、ケーブル側との相性を確認する必要があります。
6-2 電源投入チェック
配線や、実装の間違いが無いことが確認できたら、いよいよ電源を投入してみましょう。しかし、いきなり電源を投入して部品を壊すのももったいないでしょうから、まずは下記の手順で進めましょう。
電源を最初に投入するときには下記のようにします。
まず、電源以外の外部接続用のコネクタへは何も接続しないでおきます。万一間違って接続相手を壊してしまうのを避けるためです。
この状態で電源をオンとしたら、まずICや部品で熱くなっているものが無いか手で触って確認します。ICの逆向き挿入や、回路の間違いがあると、過電流が流れることが多く、特に3端子レギュレータが直ぐ熱くなるので触ればわかります。この手で触るというチェックが経験上最も簡単で確かな方法です。
何か熱くなっているものがあれば、なんらかの不具合があると思われますので、直ぐ電源をオフとして基板の確認をします。直ぐ電源をオフとすれば部品が熱くなったとしても壊れることはまずありません。
このような場合下記のような不具合が考えられます。
- ICの逆向き実装
- 整流ダイオードを使っていればその接続方向の間違い
- 3端子レギュレータの実装向きの間違い
- ICのピン間のはんだづけブリッジ
- パターン間のはんだブリッジやリード線によるショート
- 抵抗の抵抗値の桁違い
特に熱くなっている部品が無いことが確認できたら、念のため、電源電圧を確認しておきましょう。プラス、マイナスや複数の電源を必要としている回路は念入りにテスタなどで電圧をチェックしておきます。
6-3 回路の動作チェック
最初に動作確認することは、PICマイコンを使った回路でしたら、クロックの発振状態です。正常に設計値どおりの周波数で発振しているか、正常な出力電圧が出ているかなど、オシロスコープで観測して確認します。
オシロスコープが無い場合には、とにかく最も簡単なLEDを一定間隔で点滅させるだけのプログラムを作成して動作で確認します。点滅間隔が意図した時間どおりであればクロックは正常に動作していることになります。このような動作確認用に、PICマイコンの回路には動作確認用のLEDを最低でも1個は追加しておきましょう。このLEDはプログラムのデバッグにも役立てることができます。
回路の動作チェックをする場合には、オシロスコープが万能とも言える力を発揮します。特に目に見えない信号がはっきりと目で確認できるわけですから鬼に金棒とはこういうことでしょう。
特にディジタル回路では、タイミングの確認が必要ですので、オシロスコープが役に立ちます。こういう目的のためにもオシロスコープは2現象以上のものを用意したいものです。
最近ではUSB接続方式でパソコンを表示器として使うオシロスコープが安価で入手できますから、機会があれば入手しておきたい道具です。