届いた実基板に、いよいよ部品をはんだ付けします。0.65mmピッチのTSSOP-20を確実に実装する「引きはんだ」の技を習得し、WCH-LinkEとArduino環境(およびch32fun)で書き込み環境を整えます。そしてLED点滅で「基板が生きているか」を検品します。ここでのLED点滅は、プログラミングの練習ではなく、自分が設計・製造・実装した基板が正しく動くことを確かめる「検査」です。設計から実物までの全工程が、ここで一本につながります。
8.1 0.65mmピッチTSSOP-20の「引きはんだ」
届いた実基板に部品を実装します。まず2012サイズの受動部品(パスコン・抵抗・LED)をはんだ付けし、いよいよ本丸である20ピンの表面実装マイコン(CH32V003F4P6)に挑みます。ピン間隔が 0.65mm と狭いため、1ピンずつ律儀に付けようとすると、必ず隣のピンとはんだがつながる「ブリッジ不良」が起きます。これを一気に解決するのが「引きはんだ」という技です。
- 位置決めと仮固定: 基板のTSSOPパッドの「対角線上の1ピン」にだけ、あらかじめ微量のはんだを盛ります。マイコンの向き(1番ピンのドットマーク)を正確に合わせ、ピンセットで押さえながら、こて先でそのピンを温めて仮固定します。
- フラックスをたっぷり塗る: マイコンの左右10ピンずつの足並びに、液体またはペースト状のフラックス(助剤)をたっぷり塗ります。ケチらないのがコツです。
- 一気に引く: こて先に少し多めのはんだを溶かして乗せ、足の根元から先端へ、こてを横に「スーッ」と滑らせます。フラックスの表面張力で、はんだは銅箔パッドと足にだけ吸い付き、隣どうしのブリッジが自動的に解消されます。
- 洗浄: 残ったフラックスのベタつきや腐食を防ぐため、IPA(イソプロピルアルコール)や市販のフラックスクリーナーで基板をきれいに拭き上げます。
引きはんだに失敗してピン間がブリッジ(短絡)しても、慌てる必要はありません。はんだ吸い取り線(ソルダーウィック)にフラックスを付けてブリッジ部分に当て、こてで温めれば、余分なはんだが吸い取られてきれいに分離します。第6章で基板を複数枚調達したのは、まさにこのためです。1枚目で失敗の感覚をつかみ、2枚目できれいに仕上げる──そう考えれば気が楽になります。安価なルーペがあると、ブリッジの確認がぐっと楽になります。
- 背の低い部品から付けるのが基本です。チップ部品(抵抗・コンデンサ・LED)→ マイコン → 最後に背の高いピンヘッダ、の順が作業しやすいです。
- LED(D1)の向き(極性)に注意。 LEDには向きがあります。カソード(K、マイナス側)がGND側になるよう、基板のシルクやパッド形状を確認して付けます。逆向きだと光りません。
- ピンヘッダは最後に、まっすぐ付ける。 ブレッドボードに挿してから、その上に基板を載せてはんだ付けすると、垂直がきれいに出ます。
8.2 書き込み環境を整える(WCH-LinkE+Arduino/ch32fun)
はんだ付けが終わったら、基板が生きているかを確かめる準備として、プログラムの書き込み環境を整えます。CH32V003は、SWIO という1本の信号線で書き込みとデバッグを行います(USBブートローダは持っていません)。そのため、書き込みには専用の書き込み器 WCH-LinkE(第6章で調達、末尾E必須)が必要です。
WCH-LinkEと自作ボードを3本の線でつなぐ
WCH-LinkEと、自作ボードの書き込み端子(J3)を、次の3本で結線します。
| WCH-LinkE 側 | 向き | 自作ボード J3 側 | 役割 |
|---|---|---|---|
| 3V3 | → | J3-1(VCC) | 電源供給(3.3V) |
| SWDIO | → | J3-2(SWIO) | 書き込み信号(1本) |
| GND | → | J3-3(GND) | グラウンド(基準) |
本講義では、書き込み・開発の方法として2つの流儀を紹介します。手軽さのArduino環境を主軸に据えつつ、中身を深く知るためのch32funも併記します。まずは入りやすいArduino環境から始め、慣れたらch32funでレジスタの世界を覗く、という二段構えがおすすめです。
方法A(主軸):Arduino IDE で書き込む
普段のArduinoと同じ感覚で、digitalWrite() などの命令でCH32V003を扱えます。手順の要点は次のとおりです。
- ボードマネージャにURLを追加: Arduino IDEの「設定」→「追加のボードマネージャのURL」に、WCH公式が配布するボード定義のURL(
package_ch32v_index.json)を追加します。正確なURLは、WCHの公式リポジトリopenwch(GitHub)で確認できます。 - ボードをインストール: ボードマネージャで「CH32」を検索し、CH32V向けのボードパッケージをインストールします。
- WCH-LinkEのモード設定: 付属ツール「WCH-LinkUtility」で、WCH-LinkEのモードをRISC-V用(WCH-LinkRV)に設定します(初回のみ)。これをしないとCH32V003を認識しないことがあります。
- ボードと書き込み器を選んで書き込む: ボードでCH32V003を選び、上の3線でつないだWCH-LinkE経由で書き込みます。
Arduino環境のセットアップは、IDEやパッケージのバージョンで画面や項目名が少しずつ変わります。第2章で述べたとおり、こうした操作は解説動画を見ながら進めると確実です。「CH32V003 Arduino 書き込み」「WCH-LinkE Arduino」などで検索すると、実際の画面つきの手順が見つかります。あわせて、ボード定義の配布元であるWCH公式リポジトリ(GitHubの openwch)で最新のURLと手順を確認してください。
方法B(発展):ch32fun + minichlink
もう一段深く、マイコンのレジスタを直接触りたくなったら、ch32fun を使います。巨大なIDEを入れず、Cファイルと簡単なビルド設定だけで、書き込みまで完結する軽量な開発環境です。
ch32funは、CH32シリーズを最小限の手間で動かすためのオープンソース開発環境です。付属の書き込みツールminichlinkが、WCH-LinkEを通じてチップへプログラムを流し込みます。GitHubの
cnlohr/ch32fun で公開されています。Arduinoが「手軽な入口」なら、ch32funは「仕組みが透けて見える窓」です。同じ3線の結線のまま使えます。
8.3 LED点滅で「基板を検品」する
いよいよ最終確認です。LEDを点滅させるプログラムを書き込みます。ここで大切なのは、これはプログラミングの練習ではなく、自作基板の「検品」だということです。LEDが規則正しく光れば、次のすべてが一度に確認できます──電源が生きている/書き込みが正しく通った/はんだ付けの導通が取れている/マイコンが動作している。逆に光らなければ、どこかに不具合があるという診断になります。だから、この確認は「自分ではんだ付けした基板の上で」やることに意味があります。
本ボードはLED(D1)がPC0につながっているので、PC0をオン・オフすれば点滅します。まずはArduino版の短いコードです。
// CH32V003 ProMicro互換ボード ― 基板の検品(LED点滅)
// 本ボードは D1(LED) が PC0 につながっています。
// Arduino環境(CH32V向けボードパッケージ)で書き込みます。
void setup() {
pinMode(PC0, OUTPUT); // PC0 を出力に設定
}
void loop() {
digitalWrite(PC0, HIGH); // LED点灯
delay(500); // 0.5秒待つ
digitalWrite(PC0, LOW); // LED消灯
delay(500);
}
Arduino環境でのポートの呼び方(PC0 など)は、使うボードパッケージによって表記が異なる場合があります(PC0、C0 のような書き方など)。うまくいかないときは、お使いのパッケージのピン定義や作例を確認してください。ここでも解説動画が役に立ちます。
次に、同じ動作を ch32fun(レジスタ直接操作) で書いたものです。Arduino版が内部で何をしているのかが見えてきます。中身を知りたい人向けの発展です。
/* CH32V003 ProMicro互換ボード ― 基板の検品(LED点滅・ch32fun版)
* 本ボードは D1(LED) が PC0 につながっています。
* レジスタを直接操作して、Arduinoの digitalWrite が
* 内部でやっていることを、そのまま書き下したものです。 */
#include "ch32fun.h"
int main(void) {
SystemInit();
/* GPIOC のクロックを有効化(この部屋の電気を入れる) */
RCC->APB2PCENR |= RCC_APB2Periph_GPIOC;
/* PC0 を汎用プッシュプル出力に設定
* 一度クリアしてから設定するのが安全な作法 */
GPIOC->CFGLR &= ~(0xf << (0 * 4)); /* PC0 の4bitをクリア */
GPIOC->CFGLR |= (0x1 << (0 * 4)); /* 出力に設定 */
while (1) {
GPIOC->BSHR = (1 << 0); /* PC0 = High → LED点灯 */
Delay_Ms(500);
GPIOC->BCR = (1 << 0); /* PC0 = Low → LED消灯 */
Delay_Ms(500);
}
}
- Arduinoの
pinMode(PC0, OUTPUT)は、ch32fun版のGPIOC->CFGLRの設定(PC0を出力にする)と、その前提となるクロック有効化(RCC->APB2PCENR)を、まとめて肩代わりしてくれています。 - Arduinoの
digitalWrite(PC0, HIGH)は、ch32fun版のGPIOC->BSHR = (1<<0)(PC0をHighにする)に対応します。LOWはBCRです。 - つまりArduinoは「わかりやすい言葉」、ch32funは「マイコンが実際に読む言葉」。同じ動作を2つの高さから眺めているわけです。
(1<<0)の0がPC0を表すので、PC1にしたいなら(1<<1)です。
コードを書き込んで、基板上のLEDが規則正しく点滅を始めれば、検品合格です。回路設計・基板配線・手はんだ実装──あなたが通ってきた全工程が、正しく機能していることの証明になります。
LEDが光らないのは「検品で不具合が見つかった」ということ。次の順で切り分けます。(1) WCH-LinkEは末尾Eか/3線の結線(特にSWIOとGND)は正しいか。(2) 書き込み自体は成功しているか(IDEやminichlinkのログを確認)。(3) LEDの向き(極性)は合っているか──カソード(K)がGND側です。(4) はんだブリッジで隣ピンと短絡していないか(ルーペで確認)。(5) コードのピン番号がPC0になっているか。一つずつ潰していけば、必ず原因にたどり着きます。これこそが「検品」の実際です。
- 引きはんだで、TSSOP-20マイコンと2012部品を実装した
- WCH-LinkEと自作ボードを3線でつないだ
- Arduino環境(またはch32fun)で書き込み環境を整えた
- LED点滅を書き込み、基板の「検品」に合格した(=全工程が正しく機能)
おめでとうございます。あなたは今、回路図から実物の動く基板まで、すべてを自分の手で作り上げました。次章(発展)では、この一枚を「量産する」道──工場に実装まで任せるPCBAや、CH32V003をサブMCUとして活用する応用──を展望します。