MPW2 (MPWの高速化バージョン)
外観 (奥に見えるのがPIC16F628A)
PIC16F628Aに何回も書き込みをしていると『遅い』と思うようになり高速化を考え始めました。 単純に高速化するには、動作クロックを上げれば良いだけです。 4MHzから20MHzにするだけで1/5に短縮します。 ただPIC16F628Aのポート数が足りないのです。
MPW/MPW2のコンセプトとして
- 小型であること
- 安く作れること
- 秋葉原で入手可能な部品で有ること
仕事で使う部品なら簡単に小型化でき性能も十分出ます。 量産するなら価格も安くできるのですが、秋葉原で入手困難な部品が多いです。
改版内容
クロック部
クロックをあげる事が、高速化の鍵を握っています。 水晶振動子の20MHzを使うのは、簡単ですが安くはなりません。 そこで前から目を付けていたUSBN9604のClockOutを使い16MHzの外部入力として使いました。 水晶振動子に比べ部品が掛からずポートも1本減るだけです。 ですが、上手くクロックの切り替えができるか問題でした。 PIC自身で、PICのクロックを変更することに成るからです。
USBN9604の電源投入時は、4MHzのクロック出力です。 USBN9604のレジスタを変更して16MHzにします。。 プログラムを作ってみると案外あっさり切り替わってしまいました。 念のため切り替え後ウォッチッドックタイマによるリセットを掛けました。 約1/4の時間でPICからプログラムを読み出せることになりました。 書き込みは、ウェイト等が必要なので余り変わりません。
DC-DC部
前回同様にPICで作っています。 DC-DC用のICも秋葉原で入手可能ですが、価格と大きさで諦めました。 ただし色々改良しています。 高速化に伴いDC-DCの制御周波数が、2kHzから125kHzに上がっています。
これにより
- PWM駆動のみの制御する。(PFMを使わない)
- コイルが、47uHから470uHへ変更する。
となります。
また割り込み回数を減らす為にタイマ0を使い約125mS置きに電圧を監視します。
- 検出電圧が目標の電圧より高い場合は、パルス幅を狭めて電圧を下げます。
- 検出電圧が目標の電圧より低く、パルス幅が最大値より小さい場合は、パルス幅を広げて電圧を上げます。
- 2項でパルス幅が最大値より大きく場合、回路に不具合があるとみなしてDC-DCを止めます。
コンパレータの割り込みを使って制御することも可能ですが、電圧範囲を検出する為に2つの検出電圧が必要なので上記方法を取っています。
ゼロプレッシャーソケット使用
制御信号がクロック入力に使われたため、最初からソケットを使う事にしました。 制御用のトランジスタがかなり増えるのですが何とかなります。(なりました。)
回路図
MPWのICSP部とソケット部で別れていましたが..MPW2は、くっついています。 これは、同一基板に実装することが目的です。ソケット部分がなくても動作します。
回路図のダウンロード : mpw2circuit.pdf
部品表
項 | ロケーション | 部品名 | メーカ/型格 | 員数 | 価格 | 備考 |
---|---|---|---|---|---|---|
1 | U1 | PIC16F628A | マイクロチップ | 1 | 250円~450円 | PIC16F648Aも可 |
2 | U2 | USBN9604-28M | ナショナルセミコンダクタ | 1 | 600円~800円 | USBN9603-28Mも可 |
3 | Q1~Q6 | 2SA1015-Y | 東芝 | 6 | 10円~20円 | |
4 | Q7~Q13 | 2SC1815-Y | 東芝 | 7 | 10円~20円 | |
5 | Q14 | 2SJ439 | 東芝 | 1 | 90円~150円 | 2SJ377も可 |
6 | Q15 | 2SK2961 | 東芝 | 1 | 50円~80円 | 2SK2962も可 |
7 | LED1 | PowerLED | φ3mm - 10mA | 1 | 30円~100円 | 緑とか青 |
8 | LED2 | BusyLED | φ3mm - 10mA | 1 | 30円~100円 | 黄や橙 |
9 | D1 | 11DQ04 | 日本インター | 1 | 30円~50円 | |
10 | D2 | 1SS133 | ローム | 1 | 10円~30円 | 1S1588も可 |
11 | PS1 | RLD60P050X | リセップタクルヒューズ500mA 用 | 1 | 50円~100円 | |
12 | PS2 | RLD60P010X | リセップタクルヒューズ100mA 用 | 1 | 50円~100円 | |
13 | L1 | インダクタ | 470uH 130mA | 1 | 50円~100円 | |
14 | R1~R20 | カーボン抵抗 | 100kΩ 1/8W | 20 | 10円 | |
15 | R21~R24 | カーボン抵抗 | 4.7kΩ 1/8W | 4 | 10円 | |
16 | R25~R28 | カーボン抵抗 | 27kΩ 1/8W | 4 | 10円 | |
17 | R29~R32 | カーボン抵抗 | 1.5kΩ 1/8W | 4 | 10円 | |
18 | R33,R34 | カーボン抵抗 | 820Ω 1/8W | 2 | 10円 | |
19 | R35~R38 | カーボン抵抗 | 22Ω 1/8W | 4 | 10円 | |
20 | R39,R40 | カーボン抵抗 | 1kΩ 1/8W | 2 | 10円 | |
21 | R41,R42 | カーボン抵抗 | 10Ω 1/8W | 2 | 10円 | |
22 | R43 | カーボン抵抗 | 1MΩ 1/8W | 1 | 10円 | |
23 | R44 | カーボン抵抗 | 220kΩ 1/8W | 1 | 10円 | |
24 | R45 | カーボン抵抗 | 10kΩ 1/8W | 1 | 10円 | |
25 | C1~C6 | 積層セラミック | 0.1uF 50V | 6 | 20円 | |
26 | C7 | アルミ電解 | 1uF 16V | 1 | 40円 | |
27 | C8,C9 | セラミック | 15pF 50V | 2 | 20円 | |
28 | C10 | アルミ電解 | 100uF 16V | 1 | 50円~80円 | |
29 | C11 | アルミ電解 | 47uF 25V | 1 | 50円~80円 | |
30 | C12 | アルミ電解 | 10uF 25V | 1 | 50円~80円 | |
31 | C13 | セラミック | 2200pF 25V | 1 | 50円~80円 | |
32 | Y1 | 水晶振動子 | 24MHz | 1 | 100円~200円 | |
33 | J1 | コネクタ | USB-B | 1 | 100円~200円 | |
34 | SK1 | ゼロプレッシーソケット | 40Pin | 1 | 1200円 |
ソフトウェア
PIC プログラム
今回配布するhexファイルは、PIC16F628Aでアセンブルしてありますが..多分PIC16F628やPIC16F648Aでも動作します。 機能的には、まだ足りない部分もあります。(PIC18系とか)ただしPIC16系用では十分かな?
MPLAB IDE (Ver6.x) 用のソースファイルが入っています。 リンカを使ったプログラム構成になっているのでリンカファイルも登録して使います。 セグメント使ったプログラムは少ないのでわかりずらいかもしれませんが。
ソースファイル へ登録
- MPW.asm (一番最初に登録してください。)
- DCDC_c.asm
- MicroWire.asm
- PicPROG.asm
- PicUSB.asm
- WaitControl.asm
ヘッダファイル へ登録
- DCDC_c.h
- MicroWire.h
- PicPROG.h
- PicUSB.asm
- USB9604.asm
- WaitControl.asm
リンカファイル へ登録
- 16f628.lkr
プログラムにバグがありました。 いやお恥ずかしい間違えで..割り込みの抜け出し時にPCLACHを戻すのですが、関係ない値を書き戻していました。 よく動いていたものだ。
Windows プログラム
一応形には成っています。少し使い勝手が悪いかも。しかも前回と同じくまともな説明書が付きません。
プログラムのPICへの書き込み/PICからの読み出し/ベリファイ位はできます。 またデバイスIDを検査したりします。設定はあちこちクリックしてみてください。
2004/08/20 PIC16F88 の書き込み時にコンフィグのエラーになるバグがありました。 Ver1.0.1で修正しました。
このソフトだけでは、USB部分が動作しません。 柏野さんの uusbd.dll/uusbd.sys が必要になります。 ガジマルの森からuusbdv10.zipをダウンロードしてください。
ドライバは、何とか作りたいと思って居るのでその内にできるかも?
その他
写真
上段の写真ですが.. 合成写真とかではなく実際に作ったMPW2の基板です。 トランジスタのフットパターンの間違えがある物の動作はしています。 前のMPWの基板と同じく名刺サイズ(90×55)の大きさに40pinのゼロプレッシーソケットを入れてしまいました。 その為空き領域が無くなっています。 余分に基板作っているので5枚ほど余って足りします。 間違え修正した基板を起こそうかな。
サポートしているデバイス
個人的に使えるPIC16系のフラッシュタイプの物をサポートしています。 ワンタイムタイプや窓付きタイプも使えないことはないのですが.. 現状サポートしていません。
- PIC12F629
- PIC12F675 *
- PIC16F84
- PIC16F84A *
- PIC16F627
- PIC16F627A
- PIC16F628 *
- PIC16F628A *
- PIC16F648A *
- PIC16F818
- PIC16F819 *
- PIC16F873 *
- PIC16F873A *
- PIC16F874
- PIC16F874A
- PIC16F876
- PIC16F876A
- PIC16F877
- PIC16F877A *
- PIC16F87
- PIC16F88 *
* はテストして動作が確認されているデバイス。
USBのベンダID
個人的に取るのは、難しいですね。 本当に誰かプロダクトIDを分けて頂けないでしょうか? 悩みの種です。