pcbエディタのみでプリント基板の設計
プリント基板の設計にはkicadを使っているが,複雑な回路を作るのには便利なのだが,逆に簡単な回路用の基板を設計するが面倒であると感じていた. kicadでは,まず回路図を書いてから,netlistを作って,pcbの配置を決めるのだが,単純な回路の場合には,回路図を書かずにいきなりpcbを作った方が楽な場合がある. 他にも,マイコンを使うときには,ピンの入れ替えができるので,回路図の段階ではどのピンを使うかを決めずに,pcb上でピンを決めた方が良い場合もある. さらに,使うICが回路図エディタのライブラリに無い場合には,外部のライブラリを探すか自分で作らなければならないが,データシートを見ながらpcb上で配線をどう繋げば良いかを考えるのは難しくない.
これまでは仕方なく回路図を書いてからpcbの設計をしていたが,回路図を書かずにpcbエディタだけを使って基板の設計をする方法が分かったので,そのやり方を書いておく. ます,pcbエディタを起動する. 原点はplace - drill/place file originで決めて置くと良い. 基板の外形はEdge.Cutsのレイヤーを選んでdraw lineで描く. そして,必要な部品をplace - place footprintsで配置して,それらの端子を配線で結べば良い. 配線で結ぶときに,netlistが無いので繋げないこともあったが,その場合には配線の設定でAllow DRC violationsとすると,繋げるようになる. 実は,このやり方がpcbエディアの本来の使い方なのかも知れないが,kicadの使い方を調べると回路図から始めるやり方しか見つからなかったので,これまで知らなかった.
マイコンの配線をするときには,回路図を作って,pcbエディタで配置を決めて,配線の取り回しが悪い場合には,回路図に戻ってピンを入れ替えて,またpcbエディタに戻るということを繰り返さなければならなかったが,pcbエディタのみで出来れば,効率化される. ユニバーサル基板上に部品を載せて,データシートを見ながらハンダ付けをする感じで配線を考えられて,訂正も出来るので,良い感じである. この方法でいくつかの基板を設計してみたが,やり方に少し慣れてきた. でも,配線の誤りが無いかは目でしっかりとチェックしなければならない. pcbエディタで配線した情報から,逆にnetlistを作って,回路図にするとかが出来れば,間違いのチェックも出来て良いのでは無いかと考えてしまう.
WCH社のマイコンでUSBデバイス
WCH社のマイコンで単純なUSBデバイスを作るときに,どのICを使うと便利かを考えてみた. まず,WCH社の代表的なマイコンは,CH55xシリーズとCH32シリーズに大きく分けられる. これらはCPUのコアなどに違いがあるのだが,USBデバイスを作るハードという観点では,電源の違いが大きい. CH55xシリーズでは,コンデンサを付ければ3.3Vを作ってくれるので,ピンが一つ減ってしまうが,マイコン以外に余分な部品無しでUSBを扱える. 一方,CH32シリーズでは,USBの5Vから三端子レギュレータなどで3.3Vを作って,それをマイコンの電源として使わなければならない.
秋月で入手可能なWCH社の安価なICについて,USBを使う時の機能などについて比較して,表にまとめてみた. ピン数の少ないものは省いたが,似た型番のものとほぼ同じ性能と考えれば良い. データシートなどを見て,まとめたものなので,ミスなどはあるかもしれないが,ご容赦いただきたい. このpin数のところではUSBのデータ線の2本を引いてある. この表の中のデータ以外にも,細かい違いもあるので,私が理解している範囲で説明したい.
| IC | CH552T | CH559T | CH559L | CH32V203K8T6 | CH32V305FBP6 | CH32V003F4P6 |
| 価格(円) | 70 | 180 | 150 | 120 | 250 | 50 |
| pin数 | 20 | 20 | 48 | 32 | 20 | 20 |
| GPIO数 | 16-2 | 16-2 | 40 | 26-2 | 17-2 | 18-2 |
| flash | 16k | 64k | 64k | 64k | 128k | 16k |
| RAM | 256+1k | 256+6k | 256+6k | 20k | 32k | 2k |
| default clock | 6M | 12M | 12M | 8M | 8M | 24M |
| USB version | 2.0FS | 2.0FS | 2.0FS | 2.0FS | 2.0HS | 1.1LS |
| EP番号 | 0-4 | 0-4 | 0-4 | 0-15 | 0-15 | 0-2? |
| EP size | 64 | 64 | 64 | 合計512 | 1024 | 8? |
先日,CH552を使ってUSBデバイスを作ってみたが,ICとコンデンサ二つとUSBコネクタだけでUSB機器が作れて,クセはあるが有用なICだと感じた. 同じCH55xには,より高性能なCH559もあり,ほぼ同様の使い方ができるだろう. これらのマイコンは,MCS51と互換性のあるコアを使っており,フリーのコンパイラが限定されるために,C言語は使えるが,C++が使えない. Arduinoでは,ch55xduinoを組み込むことで使うことができる.
32bitマイコンであるCH32では,高性能なものはUSBを扱う機能が組み込まれている. 最も安価なCH32V003では,それ自体にはUSBを扱う機能は無いのだが,rv003usbを使うとLow SpeedでUSBを使えるようになる. CH32V003F4P6については,rv003usbを使う場合について表中に書いてあるが,まだ理解できていない部分も多いので,間違っているかも知れない. これらのマイコンは,CH32Vサポートを組み込むと,Arduinoからも使えるようになる. 当然,C++も使える. 特に,USB機能のあるマイコンは,TinyUSBライブラリを使ってプログラムすることができる.
まとめると,その目的に応じて,以下のようにマイコンを選択すると良いと思う. 安く少ない部品点数でUSBデバイスを作りたいときには,CH55xをch55xduinoから使うと良いだろう. プログラムにはコア特有のクセがあり,C言語で書かないといけないが,モードを切り替えればUSBからプログラムを書き込めるので,楽である. とにかく安く作りたいときには,CH32V003+rv003usbが選択肢として考えられる. コンパイル環境を整えたり,rv003usbをある程度理解する必要があるが,Low Speedで良い場合には十分に使えると思う. そうでなければ,USB機能のあるCH32Vを使うと良いだろう. ArduinoでのTinyUSBの使い方に関する文章が少ないが,例を参考にすれば,比較的短いコードで,プログラムを書くことができる.
raspberry pi picoの搭載されているRP2040やRP2350も,非常に安価に売られていることに気がついた. このICはUSB1.1のLow Speedには対応しているらしいが,リードピンの無いパッケージなので半田付けが非常に難しいらしい. 一方,このICを搭載したマイコンボードとしては,raspberry pi picoはサイズが大きいのでこれまで使おうとは思っていなかったが,非常に小型のRP2040-ZeroやRP2350-Zeroというものも発売されている. 小型のマイコンボードなら,今後使う候補として考えていこうと思う.
ch55xでUSBのプログラムをするには
WCH社のCH32の使い方
CH552でUSBのserial number
USB-パラレル変換ケーブルの制御
ch552tでvendor specificなUSB-GPIBアダプタ
先日,ch552tを使ってUSB-GPIBアダプタを作ったが,これにはいくつかの欠点があった. RENが制御出来ないのは,ch552tのピンの数の問題なので仕方がないが,binary通信が出来ないとか,データは256バイトまでしか扱えないとか,パラレルポールが出来ないなどである. binary通信は特殊文字をエスケープするとかの処理をすれば可能であり,データサイズもバッファを増やしたりバッファサイズで区切って処理することで対応でき,パラレルポールに関しては適切にプログラムを書けば対応はできるはずだ. しかし,それらのためにはマイコンのプログラムを書き換える必要があり,c言語で実装するのが面倒である.
vendor specificな機器の作り方も分かったので,それを応用すればこれらの問題を解消したUSB-GPIBアダプタが作れるのでは無いかと思ったので,作ってみた. ハードは以前のままで,マイコンのソフトだけを入れ替えれば良い. hand shake以外の制御信号はcontrol transferを使って制御し,データの転送はbulk transferを使って行って,マイコンがhand shakeをするというように設計した. データはバッファサイズである64バイト毎に区切られるが,GPIB側の処理が終わったらACKとすることで,大きなデータも扱うことができるようになる. multi-lineコマンドも,ATNしてからbulk transferしてATNを下げるという方法で実現している. PC側のソフトはrubyで書いてみた. デバイスにアクセスするためには,権限の問題がある場合もあるが,ch55xduinoのインストール時に設定していれば問題無い. マイコンとPCのソフトは,私のhomepageのツールの装置制御とマイコンのところにあるので,ここでは割愛する. まだ,検証が十分では無いので,細かいバグは残っているかも知れないが.
原理的には他のUSB-GPIBアダプタと互換性のあるものも作れるかも知れないが,プロトコルを解析するのも面倒だし,使う分には独自の仕様で十分だろう. GPIBを使い始めて以来,様々なGPIBアダプタを作って来たが,ほぼ満足できる仕様になったと考えている. 価格面ではこれ以上下げるのはほぼ不可能だし,RENが使えない以外で性能的には問題無い. PC側のソフトはまだ改善の余地はあるし,ハードを簡単に作れるような基板なども設計すれば,さらに良いものができるかも知れない. しかし,世の中にはすでに様々なGPIBアダプタがあるので,このアダプタが広まる可能性は低いとは思うが,今後GPIBを使うときには,活用して行こうと思う.