PICマイコンの選定方法(PIC16F1614)

製品へ搭載するPICマイコンの選定において、チェックしておきたい項目がいくつかあります。
当然、全ての項目をチェックし、製品との親和性に問題がないか?を得ることがベストになりますが、まずは、1ページの表紙部分に書かれている箇条書き項目(=主要項目)だけでも確認をしてみましょう。

確認項目

駆動動作電圧と駆動温度範囲

今回はPIC16F1614を選定していますので、当該マイコンの仕様書を見ながら確認をしましょう。

PICにはPIC16LF1614とL文字が入っている品種があり、Low Voltage版であることが示されています。この品種は、駆動電圧範囲が低いので搭載機器の仕様に応じて選定してください。

今回は特に制約がないと思いますし、5V電源を使用する方が良いと思いますので、通常品番となるPIC16F1614で良いと思います。

次に、駆動温度範囲ですが、工業用 or 拡張用があります。
温度範囲以外にも駆動電流に差があります。


工業用の方(=温度範囲が狭い)が駆動電流が大きく扱えます(以下、35.1 Absolute Maximum Ratimgsの白枠参照)
但し、I/Oポートの駆動電流は、「ポート数×各ポートの駆動電流」となり総和の電流値を意識する必要があります。

今回は割愛しますが、低消費電力モードで消費を抑制してスタンバイさせておきたい場合にも、低消費時の消費電流に差があります。

クロック機能

マイコンのクロックには2系統あり、どちらかの設定が可能です。
 系統①・・・マイコン内蔵のクロック(周囲温度に応じて±2%~±5%の誤差)
 系統②・・・外部発振子によるクロック

系統①の設定可能な周波数は、31KHz~32MHzになります。
以下、仕様書内のBLOCK DIAGRAMの抜粋の通り、11パターンの設定が可能です。
設定はプログラムからレジスタ値を設定することで実現します。

系統②の設定可能な周波数も、31KHz~32MHzの範囲で外付け発振子が選択可能です。

クロックを内蔵 or 外付けのどちらが良いか?は、搭載機器仕様や製品コストで決定します。
精度が厳しい製品仕様の場合、外付けの発振子を精度の良いものを選定する必要があります。
他方、コストが厳しい製品の場合、内蔵クロックを使用する前提で少しでも周辺部品を減らす方が望ましいです。

選定周波数は、4MHz以上の周波数であれば十分な処理速度になります。
心配であれば16MHzや32MHzにしておけばまず問題ありません。

一連のプログラム処理がus単位で寸分狂わない間隔が求められるほど、シビアな制御はほとんどありえませんし、その様な仕様の製品である場合、マイコンではなくFPGAなどのハードウェア処理を採用する必要があります。

メモリ容量について

メモリはROMとRAMの2種類が存在します。
ROM・・・プログラミングしたコードが格納される不揮発メモリ。
RAM・・・プログラム内部で変数などに一時的に割り当てされる揮発メモリ。

どちらもどれだけの容量があれば、開発しようとしている製品に足りるのか?が見えないと思いますが、ここは開発実績から判断するほかにありません。

プログラマーによっても、効率的なプログラム設計をするエンジニアと非効率な無駄の多い設計をするエンジニアが居る為、一概にこれで大丈夫!とは語れないものの、経験値から選定しているマイコンのメモリ容量で十分すぎる容量と判断します。

ちなみに、仕様書のROM単位となる「W(ワード)」ですが、1ワード = マイコンのビットコアで計算します。
例えば、PIC16F1614は、1ワード=8bit、ROM=4KWなので、(4KW × 8bit) / 8bit = 4096byteとなります。つまり、ROM容量は4KBあるということです。
恐らく、今回の製品に置き換えする処理をプログラムで書いたとしても2KB以下で収まると思われます。

RAMについては、1KB以上あるとプログラミングの際にあまり気にせずに設計できるのですが、子今回、512byteで十分設計できると思います。
この辺りは後編のプログラミングの解説で説明したいと思います。

内蔵機能について

マイコンに備わっている内蔵機能の多くは、A/D、PWM、タイマー、シリアル通信、SPI通信、I2C通信が基本の機能です。
必ず備わっているわけではなく、選定する品種によって搭載/非搭載が発生します。

特殊であまり見ないのが、D/A(有りそうで無い)、Comparator、Zero-Cross Detect など…

今回の設計で使用する予定なのが、A/D、タイマー、PWM、Zero-Cross Detectになります。
A/Dは10bitの精度となり、5Vを基準電圧にするならば、5V / 1024 = 4.8828mV/1bitになります。ご覧の通り、既に計算時点で5Vから誤差が生じています。

タイマーは8bitと16bitになります。
プログラムの解説の際に設定値に対して、1bitの分解能のお話をしたいと思います。

PWMについては、クロックの周波数を基準に出力周波数を生成します。
その為、クロックが高速である方が出力周波数も早くすることができます。
以下は仕様書の抜粋ですが、数KHz~200KHzぐらいまでの範囲で生成可能です。
ON DUTYとOFF DUTYも設定できるので、カスタマイズされた波形を出力することが可能です。

まとめ

マイコン選定をする際には以下を確認する必要があります。
詳細まで仕様が明確になっているほど、後々の再選定の手戻りが無いので良いです。

  • 必要な周辺機能が搭載されているか?
  • クロックの周波数は妥当か?
    例えば、時計機能を構築したい場合、32.768KHzが最適だが、MHz帯域のクロックを選んでしまうと生成できない(=ズレが大きな時計機能)ことになる。
  • A/D、タイマー、PWMは必要チャンネル数が搭載されているか?
    上記では語りませんでしたが、複数チャンネルで制御したい場合は必要数搭載されているか、仕様書をしっかり確認する必要があります。
    よくあるのが、搭載チャンネル数は足りているが、同時に駆動させるための条件が小さな文字で書かれており、見落としてしまい使用できなかったということがあります。
  • I/Oポートは必要数備わっているか?
    LEDの点灯制御、周辺のON/OFF制御、物理SWの押下検出用など、周囲回路の駆動に必要な場合は、必要数を持ったマイコンを選定する必要があります。
  • ROM、RAMはソフト設計のサイズに対して十分確保できているか?
    上記の解説でも記載しましたが、実際にプログラムを書いてコンパイルしてみないと、イメージが湧かないと思います。
    何行書いたら何byteになるのか・・・が、実際の設計資産から見えてくるようになると、
    開発規模に応じて必要な凡その容量が分かるようになると思います。
  • ハード的な条件に合っているか?
    駆動電圧、消費電流、環境温度に対しての駆動温度範囲など。