どうもkohaniiです。
以前STCmicro製の8051コアマイコンのSTC89C52RCを使ってLチカプログラムを書きました。
この時は書き込みにUSB-UARTを使い、スイッチをマイコンのVCCと電源の間に入れて書き込みました。
その後このマイコンも見つけました。
STC Micro STC8G1K08-38I-DIP20
https://www.lcsc.com/product-detail/Microcontroller-Units-MCUs-MPUs-SOCs_STC-Micro-STC8G1K08-38I-DIP20_C7419406.html
このマイコンはSTC89C52RCよりもさらに安価で、10個買えば一個あたり0.5282ドルです。
しかも書き込み方法は同じ回路で良く、同じ書き込みソフトのstcgalで書き込めるようです。
使いやすいマイコンがあるのに書き込みは準備が大変なので、簡単に書き込めるようにする基板を設計してみました。
そして基板とPCBA(部品実装)をJLCPCBに発注してみます。
書き込む方法
まずはマイコンに書き込むために必要な手段を説明します。
STCのマイコンは電源が繋がった瞬間にUARTで通信することで書き込みが開始されます。
マイコンのデータシートに書いてあるPL2303-GL USB-UART ICを使った参考回路を載せておきます。
この回路の通り電源とVCCの間にスイッチを入れ、書き込み時に手動で一旦電源を切り、また電源を入れると書き込みが開始されます。
このスイッチ部分を自動で行おうとすることが今回の基板です。
以前の記事でも使ったstcgalではRS-232のDTRやRTS制御信号を書き込み時に出力できるので、この信号を使って電源をオンオフするという計画です。
STCマイコンの手動書き込み回路やSTCmicro製書き込み機のリバースエンジニアリングなどの情報はVincent DEFERTさんのpdfが参考になります。
https://codeberg.org/20-100/Awesome_STC
回路図
出来上がった回路図がこちらです。
いつものようにKiCadで設計しました。
USBとCH340K
USBコネクタは一般的なUSB Micro-Bを使いました。
せっかく基板にするのでUSB-UARTモジュールなどは使わず、CH340KというICを使いました。
CH340Kは一般的なUSB-UART ICで、パソコンにドライバーを入れればシリアルポートとして認識され、ICのTXDとRXDでシリアルデータをやり取りし、DTR CTS RTSの制御信号も出力できます。
USBの電源の入力にはノイズ軽減用としてフェライトビーズを入れて、内部電源に繋ぐ前には350mAのポリスイッチで電流制限をしてあります。
電流制限後のUSB電源をVBUSとします。
CH340Kは5Vで動作させるのでVCCにUSBのVBUSを入力し、V3にはデカップリングコンデンサを接続します。
USBのデータ線には念の為22Ωのダンピング抵抗を入れておきました。
stcgalを使い書き込みするときに自動書き込み用オプションでDTRが書き込み開始時に有効(ローイネーブルなのでローが出る)になるのですが、実験した結果、初回書き込みの二回目以降ではDTRが変化しなくなるようなので、書き込み中に常に有効になるRTSピンを使います。
電源
基板とマイコン用の電源の供給はUSBのVBUSから取ります。
ただマイコンの電源を5Vに固定すると使い方が固定される気がするので、3.3Vにも切り替えれるようにしました。
5Vの時はVBUSからそのまま出力し、3.3Vの時はAMS1117-3.3リニアレギュレーターで降圧します。
AMS1117のドロップアウト電圧は1Vなので、VBUSが4.3V以下になると出力電圧を保てませんが、極端な負荷が無ければUSBの電圧は下がらないはずなので良しとします。
5Vを出力したい時はレギュレーターをバイパスしなければいけないため、P-ch MOSFETでレギュレーターの入力と出力をショートして5Vを出力させます。
この切り替えをスイッチにしなかったのはスイッチの最大電流が50mAほどしかないためで、このMOSFETを使えば2A以上流せるためこのような回路になりました。
MOSFETを付けたおまけとしてボディーダイオードが入出力の逆電圧保護として働いてくれます。
レギュレーターの入力と出力にはデカップリングとして4.7uFのセラミックコンデンサを接続してあります。
なお小型の0603inサイズのセラミックコンデンサを使ったため、DCバイアス特性により5Vが掛かると容量が1.62uFに激減します。
レギュレーター出力後にある10kΩの抵抗は、電圧切り替えで5Vから3.3Vに切り替えた時にすぐ電圧が下がるように放電用の負荷として入れました。
レギュレーターの後にはMT9700 電流制限電源スイッチを使い電流制限をしています。
このMT9700はポリスイッチより応答が速いので、突入電流や急なショートに耐えることができるはずです。
MT9700の外付け抵抗に10kΩを繋げたので最大電流は680mAになります。
MT9700の出力には10uFの平滑用のセラミックコンデンサを入れてあります。
このコンデンサは1206inサイズの大きめのものを使ったため容量が5V時でも8uFまでしか減少しません。
この電源出力をVDDとし、この後MOSFETによるパワースイッチの後にマイコン用電源になります。
ワンショット回路
書き込み中に~RTS(以下チルダは負理論を示す)ピンがローになりますが、書き込みの最初のみ一時的にマイコンのVCC電源を切る必要があるため、~RTSがローになって一定時間だけ有効になり時間が経つと無効になる回路が必要です。
そこでこのような回路を作りました。
CH340Kの~RTSのピンはローイネーブルですので、普段はハイが出ています。
ハイインピーダンスになった時用に100kでプルアップしておきましたが、必要ないかもしれません。
まず~RTSをワンゲートシュミットトリガNOTで反転しRTS(正理論)にします。
このNOTの手持ちが多かっただけでシュミットトリガである必要はありません。
このRTSは普段はローになっています。
このRTSの状態を確認できるようにするために赤色のLEDを接続してあります。
RTSがイネーブルの状態になっている時にLEDが光ります。
その後RTSをRCローパスフィルターを通した後再びワンゲートシュミットトリガNOTで反転し、これを~RCとします。
出力の~RCは~RTSが一定時間遅延したような信号になります。
このNOTの入力はアナログ信号であり、しきい値付近でノイズにより誤動作させないためにシュミットトリガ入力である必要があります。
NOTの入力にあるダイオードは電源が切れた時のための保護であり動作には関係ありません。
この~RCは普段はハイになっています。
この~RCとRTSをワンゲートANDでAND演算すると、ANDゲート出力のANDOUT(回路図では小さくて読めない)が書き込み開始時に一定時間だけハイになるワンショット信号になります。
この基板では手動でも電源を切るスイッチをつけたので、AND入力のRTSがスイッチを押すとハイになる回路も追加しました。
スイッチは長押ししてもずっと電源は切れっぱなしです。
なおこの回路のNOTゲートの電源はVBUSの5Vで、ANDゲートはスイッチするMOSFETのゲートに使うため電源はVDDです。
VDDは3.3Vに低下する可能性があり、ANDゲートの入力が電源電圧より高い5Vに耐えられるように5Vトレラント入力の74LVCシリーズを使っています。
この回路に74HCシリーズなどを使うとICの保護ダイオードが損傷する可能性があります。
回路図の左下に書いてあるタイミング図を拡大して載せておきます。
メモとして書いたものでこのタイミング図の時間軸の縮尺は正しくありません。
実際の同じ回路の試作基板での波形はこうなっています。
書き込み開始時にCh1(黄)の~RTSがローになり、Ch2(水)のRCが充電され、300ms後にCh3(紫)の~RCがしきい値を超えローになり、ANDOUTが開始から300msハイになっています。
RCの係数は持ち合わせの部品で適当に決めたのでまさか300msぴったりだとは思いませんでした。
書き込みが終わった後の波形はこうなっています。
~RTSがハイになり、RCが放電され、40ms後に~RCがしきい値を超えハイになります。
ANDOUTは書き込みが終わった後は変化しません。
オシロスコープの設定でRCの波形は2V/divでそれ以外の波形は5V/divに設定しているので、RCは他の2.5倍の高さで表示されています。
マイコン用電源スイッチ回路
ワンショット回路のANDゲートの出力が電源スイッチのMOSFETを制御する信号になります。
マイコンの電源を切る回路はこのようになっています。
中央上のQ2のP-Ch MOSFETがVDDとマイコンの電源をスイッチします。
VDDOUTラベルがマイコンの電源に繋がる信号になります。
このゲートは普段はローになっているため、P-Ch MOSFETがオンしています。
書き込み開始時にはゲートがハイになり、そうするとP-Ch MOSFETはオフになります。
Q2のゲートからソースに入っている10kΩの抵抗は、ANDゲートの出力がハイインピーダンスになった時にオフさせるために入れています。
Q3のN-Ch MOSFETは、電源をオフした後マイコンの電源に入っているバイパスコンデンサなどの充電を素早く放電させるために入れてあります。
これがないとP-Ch MOSFETがオフしたところで電源のコンデンサが放電されるまで電源がオフになりません。
ドレインとVDDOUTに入っている1kΩの抵抗は、MOSFETが360mAまでしか流せないので放電時の5mAの電流制限のためと、もしVDDOUTに外部電源が繋がっている場合に常に大電流が流れ破壊させないための保護として入れています。
ANDゲートの出力とMOSFETのゲートの間に入っている22Ωはダンピング抵抗です。
おそらく無くても何も変化しないと思いますが、ゲート容量により少し速度が落ち、スイッチング時のノイズが減少すると思います。
スイッチ後にもMOSFETのオン抵抗がありますので、100nFのパスコンを入れてあります。
そしてマイコン用の電源がオンしていることを示す緑色のLEDをつけてあります。
この書き込み機で書き込み時以外常に光っているLEDはこのLEDのみです。
電源出力に過負荷がかかったり短絡したりすると、電流制限により電圧が低下しこのLEDの光は消えます。
UART
UARTの回路はこんな感じです。
左下のCH340KのTXDとRXDからバッファと保護抵抗とLEDがついています。
TXDはCH340K側が出力で、マイコンに入力されます。
CH340Kの出力は5Vなので、マイコンの電源電圧以上の電圧が出力されてはいけないのでレベル変換回路を入れています。
電圧レベル変換回路はANDゲートの入力二つにTXDを入力して、非反転バッファとして使っています。
74LVCシリーズのゲートを使っているため5Vトレラント入力でVDDOUT電源以上の電圧を入力することができるので、電圧レベル変換ICとして使えます。
RXDはCH340K側が入力で、マイコンから出力されます。
CH340Kは入力電圧が2V以上でハイとして認識されるため、3.3Vの信号であれば問題なく動作します。
そのためRXにはレベル変換回路などは不要でそのまま入力しています。
RXとTXには受信送信の確認用のLEDをつけてあります。
UARTはデータを送信送信していない間はハイを出すようになっているため、常に光らないようにLEDは信号がローになると光るようになっています。
なのでデータ0xFFを送信したときは暗く光り、データ0x00を送信したときは明るく光ります。
マイコンへと繋がる間には保護として100Ω抵抗を入れています。
TXの場合は出力がショートした場合過電流が流れるのを防ぐためのもので、RXの場合は信号レベルが高すぎたり負電圧が入力されたときにCH340Kの保護ダイオードが破損するのを防ぐために入れています。
リセットボタン
マイコンをリセットするためのボタンも用意しておきました。
回路は非常にシンプルで、プッシュボタンを押すとリセットピンがローになる回路です。
STC8Gなどの本家8051の改良版マイコンはローレベルリセットのため、リセットのためにピンをローにします。
Intel 8051の場合ハイレベルリセットのため、この回路では押してない間に常にリセットがかかり動きません。
ボタンを押していない間リセットピンがハイにするために10kΩ抵抗でプルアップしています。
リセットしていることを確認できるように黄色のLEDをつけてあります。
リセットピンがローになっている間光るようにしてあり、2.2kΩ抵抗でこのLEDの電流制限をしています。
マイコンのリセットピンに繋がる手前に直列に入っている100Ω抵抗は、スイッチを押している時に出力がハイになっている時のための保護です。
なおSTC8Gマイコンは起動時にはRSTピンはP5.4のI/Oピンとして設定されるため、マイコンのプログラムでRSTCFGレジスタのP54RSTビットを1にしないとRSTピンをローにしてもリセットできません。
コネクタ
マイコンへと繋がるピンを出力するためにピンヘッダのコネクタをつけました。
この回路図ではピンヘッダの1ピンが一番下になっていることに注意してください。
基板では右側に出すことを想定しているため、基板右側から見て1ピンを左にしたピンヘッダをつけると回路図と同じ配置になります。
ピンアサインは以下の通りです。
pin | name | 説明 |
---|---|---|
1 | GND | |
2 | VBUS | USBの5V電源 |
3 | VDD | 書き込み時オフにならない3.3Vもしくは5V電源 |
4 | ~RESET | リセット出力 |
5 | TX | シリアル出力(マイコンのRX) |
6 | RX | シリアル入力(マイコンのTX) |
7 | VDDOUT | マイコンの3.3Vもしくは5V電源出力 |
この中で書き込みするためにマイコンに接続するのは、GND TX RX VDDOUTです。
STCのマイコンはパワーオンリセット機能があるため、書き込み時のリセットは必要ありません。
マイコン以外の電源にも使えるように、書き込み時にもスイッチされないVDD、常に5Vが出力されるVBUSもピンに出しておきました。
VBUSに100nFのコンデンサがあるのは、USBからコネクタまでが遠く配線が長くなるので電源を安定化させるためのバイパスコンデンサとして入れています。
VDDとは違いVBUSにはMT9700の電流制限はありませんが、USBコネクタの後に350mAのポリスイッチがあるため、もし短絡しても大電流は流れ続けません。
基板
回路図はすでにプロトタイプ基板を作り実験済みですので、プリント基板を設計しました。
設計した基板はこのようになりました。
3Dビューアで表示したおもて面がこんな感じです。
裏面はこんな感じです。
部品はピンヘッダ以外を表面実装の物を使いました。
そのためピンヘッダの部分以外の裏面は全て平らになっています。
基板の四方にはM3ねじ用の穴があり、基板をネジで固定できます。
USBと電源周辺
左端の中央にあるのがMicro-B USBコネクタです。
USBコネクタの右にあるのがCH340K USBシリアル変換ICです。
CH340Kのパッケージが、「ESSOP-10」の3.9 x 5.0mmのボディー、ピンは1.0mmピッチ、2.1x3.3mmのEP(背面パッド)という非常に珍しいパッケージで、KiCadのデフォルトのフットプリントには無かったので元からあった似ているフットプリントを混ぜて自分で作りました。
USBのVBUSからポリスイッチを通った5V電源がCH340KとAMS1117-3.3レギュレーターに供給されます。
AMS1117が基板左上にあります。
リニアレギュレーターなので5Vから3.3Vに変換すると、1.7Vの降下分を熱として消費させるので、200mAを流した時には0.34Wの熱が生じます。
SOT-223パッケージを使っていて、VOUTの2ピンに接続されている上のタブから効率良く熱が出るため、その周辺に両面の広い銅を接続し放熱するようにしています。
AMS1117の右下にあるのが電圧を切り替えるために入力と出力をショートするP-Ch MOSFETとスライドスイッチです。
スライドスイッチは取手部分が4mmの高さがある長めのタイプを使っています。
ロジック
ロジック部分はこのようになっています。
CH340Kの右下の6ピンから~RTSが出ています。
~RTSが下のU5のNOTを通り、右のRとCとDを通ってRC信号になり、右のU6のNOTを通ったあと、左下のSWとRTSのワイヤードORとU6とをU7のANDし出力します。
UARTはCH340Kの右側8、9ピンからのTXDとRXDから、TXDはU4のANDでレベル変換し、D1とD2のLEDを通ります。
おまけのリセット回路は簡単で右下の小さい部分に入っています。
リセットスイッチの片側からプルアップ抵抗を通り、電流制限抵抗とリセットLEDがあります。
配線の流れがわかりづらいので配線部分を塗りつぶしました。
黄色がロジック部分の配線、紫色がリセット部分の配線、赤色が+電源です。
黄色のロジックの配線が行ったり来たりして長距離なのがわかります。
U7の右下から出て右上に向かっている配線が出力(ANDOUT)です。
面付け
基板がかなり小さくできたので、縦に2個の1x2の面付け基板にしました。
このように1基板の中に複数の基板を入れると一度の実装で複数の基板が作れてお得です。
基板の周りには捨て基板を付けます。
これは実装時に基板の周りに固定と位置合わせ用のマークをつけるので、ある程度の余白が必要なためです。
基板と基板の連結にはVカットとドリルでのミシン目の方法がありますが、今回はドリルのミシン目を試してみました。
ミシン目はこのようになっています。
0.4mm径のドリルを0.65mm間隔で並べています。
この部分に力を入れると簡単に折れるはずです。
このドリルを基板の内側に全て食い込ませることで、折ったときに棘が外に飛び出ないため安全です。
ミシン目を3Dビューアーで確認するとこのように見えます。
面付け基板の全体を3Dビューアで表示するとこんな感じです。
裏面はこうなっています。
今回発注するのはこの面付け基板です。
BOM
今回はJLCPCBに基板の実装をお願いするので、部品表のBOMを作っておきます。
JLCPCBで実装してもらうときには、部品の購入は部品屋さんのLCSCにある部品から選びます。
なので、LCSCの部品のパーツナンバーの「C12345」のようなCから始まる数字を調べておきます。
そしてLCSCに在庫があってもJLCPCBのAssembly Parts Libに在庫があるとは限らないので、こちらでも確認しておきます。
https://jlcpcb.com/parts/
KiCadの回路図を設計するときに、部品ごとにフィールドにLCSCというフィールドを作り、そこにパーツナンバーを書いておきます。
今回は私がわかりやすくするためにLCSC Nameという部品名を書いたフィールドも作りました。
もちろん主要な半導体以外のセラミックコンデンサや、2.2kΩの0603インチチップ抵抗なども全て設定します。
そして全て設定してシンボルフィールドテーブルで一覧を表示すると以下のようになります。
なお私は設定中この一覧設定機能があることを知りませんでした。
基板データとBOMとCPLの書き出し
基板が出来上がったのでファイルを書き出します。
BOMやCPLなどのデータはcsvファイルに書き出す必要がありますが、JLCPCBが対応した形式に書き出すのは少し大変です。
そこでKiCad用のJLCPLC用に書き出すプラグインを使います。
それがKiCAD JLCPCB toolsです。
https://github.com/bouni/kicad-jlcpcb-tools
せっかくなのでインストールと使い方を説明します。
KiCAD JLCPCB toolsのインストール
まずプラグイン&コンテンツ マネージャーを開きリポジトリの管理を押します。
するとリポジトリを管理ウィンドウが開くので、左下のプラスマークを押して以下のURLを入力します。
https://raw.githubusercontent.com/Bouni/bouni-kicad-repository/main/repository.json
すると名前付きでURLが入力されますので、保存を押して閉じます。
すると管理の左のKiCad official repositoryを押してBouni's KiCadが選べるようになり、選ぶとKiCad JLCPCB toolsが表示されるので、インストールします。
書き出し
インストールされるとPCBエディターの外部プラグインからJLCPCB Toolsが選べるようになるので、書き出したい基板のPCBエディターで開きます。
最初に在庫数のデータベースをダウンロードするために右上のDownloadボタンを押す必要があるかもしれません。
回路図のネットリストやフィールドから基板を作るときに回路図のフィールドが引き継がれるため、このウィンドウのLCSCフィールドに設定したパーツナンバーが表示されるはずです。
ウィンドウ右上のGenerateボタンを押すと書き出しが開始され、プロジェクトフォルダにjlcpcbフォルダが追加され、発注に必要なファイルが生成されます。
jlcpcbフォルダ内のproduction_filesフォルダに「BOM-(基板名).csv」と「CPL-(基板名).csv」と「GERBER-(基板名).zip」が入っているはずです。
GERBER-(基板名).zipを解凍して確認すると中には必要なガーバーファイルが入っています。
中身は以下のような感じになっているはずです。
(基板名)-CuBottom.gbr (基板名)-CuTop.gbr (基板名)-EdgeCuts.gbr (基板名)-MaskBottom.gbr (基板名)-MaskTop.gbr (基板名)-NPTH-drl_map.pdf (基板名)-NPTH.drl (基板名)-PTH-drl_map.pdf (基板名)-PTH.drl (基板名)-PasteBottom.gbr (基板名)-PasteTop.gbr (基板名)-SilkBottom.gbr (基板名)-SilkTop.gbr (基板名)-VScore.gbr
BOMのcsvは以下のような感じになっているはずです。
Comment | Designator | Footprint | LCSC |
---|---|---|---|
1u | C10,C2 | C_0603_1608Metric | C105174 |
22 | R15,R4,R5 | R_0603_1608Metric | C107701 |
100 | R10,R11,R20 | R_0603_1608Metric | C110091 |
2.2k | R18 | R_0603_1608Metric | C113303 |
350mA | F1 | Fuse_0805_2012Metric | C116172 |
Power OFF | SW2,SW3 | SW_Push_1P1T_NO_6x6mm_H9.5mm | C127506 |
CPLのcsvは以下のような感じになっているはずです。
Designator | Val | Package | Mid X | Mid Y | Rotation | Layer |
---|---|---|---|---|---|---|
C1 | 4.7u | C_0603_1608Metric | 83.5 | -117.0 | -90.0 | top |
C1 | 4.7u | C_0603_1608Metric | 83.5 | -77.0 | -90.0 | top |
C2 | 1u | C_0603_1608Metric | 86.5 | -117.0 | -90.0 | top |
C2 | 1u | C_0603_1608Metric | 86.5 | -77.0 | -90.0 | top |
C3 | 4.7u | C_0603_1608Metric | 88.0 | -106.0 | 0.0 | top |
C3 | 4.7u | C_0603_1608Metric | 88.0 | -66.0 | 0.0 | top |
CPLはコンポーネント配置リストだといい、部品の実装する位置と角度と表裏を指定するファイルだそうです。
Yの位置が全てマイナスですが正常です。
この基板は面付けしてあり部品ごと複製したので同じ部品番号が2つずつ連続しています。
さて、設計と発注のデータが完成したので次は発注編です。
発注編をお楽しみに。
2023.12.21追加 つづきはこちらです。
コメント