← 講義ポータルへ戻る
この章の学習のねらい
届いた実基板に、いよいよ部品をはんだ付けします。0.65mmピッチのTSSOP-20を確実に実装する「引きはんだ」の技を習得し、WCH-LinkEとArduino環境(およびch32fun)で書き込み環境を整えます。そしてLED点滅で「基板が生きているか」を検品します。ここでのLED点滅は、プログラミングの練習ではなく、自分が設計・製造・実装した基板が正しく動くことを確かめる「検査」です。設計から実物までの全工程が、ここで一本につながります。

8.1 0.65mmピッチTSSOP-20の「引きはんだ」

届いた実基板に部品を実装します。まず2012サイズの受動部品(パスコン・抵抗・LED)をはんだ付けし、いよいよ本丸である20ピンの表面実装マイコン(CH32V003F4P6)に挑みます。ピン間隔が 0.65mm と狭いため、1ピンずつ律儀に付けようとすると、必ず隣のピンとはんだがつながる「ブリッジ不良」が起きます。これを一気に解決するのが「引きはんだ」という技です。

引きはんだの手順
  1. 位置決めと仮固定: 基板のTSSOPパッドの「対角線上の1ピン」にだけ、あらかじめ微量のはんだを盛ります。マイコンの向き(1番ピンのドットマーク)を正確に合わせ、ピンセットで押さえながら、こて先でそのピンを温めて仮固定します。
  2. フラックスをたっぷり塗る: マイコンの左右10ピンずつの足並びに、液体またはペースト状のフラックス(助剤)をたっぷり塗ります。ケチらないのがコツです。
  3. 一気に引く: こて先に少し多めのはんだを溶かして乗せ、足の根元から先端へ、こてを横に「スーッ」と滑らせます。フラックスの表面張力で、はんだは銅箔パッドと足にだけ吸い付き、隣どうしのブリッジが自動的に解消されます。
  4. 洗浄: 残ったフラックスのベタつきや腐食を防ぐため、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 の結線(3線)
WCH-LinkE 側向き自作ボード J3 側役割
3V3J3-1(VCC)電源供給(3.3V)
SWDIOJ3-2(SWIO)書き込み信号(1本)
GNDJ3-3(GND)グラウンド(基準)

本講義では、書き込み・開発の方法として2つの流儀を紹介します。手軽さのArduino環境を主軸に据えつつ、中身を深く知るためのch32funも併記します。まずは入りやすいArduino環境から始め、慣れたらch32funでレジスタの世界を覗く、という二段構えがおすすめです。

方法A(主軸):Arduino IDE で書き込む

普段のArduinoと同じ感覚で、digitalWrite() などの命令でCH32V003を扱えます。手順の要点は次のとおりです。

Arduino環境のセットアップ要点
  1. ボードマネージャにURLを追加: Arduino IDEの「設定」→「追加のボードマネージャのURL」に、WCH公式が配布するボード定義のURL(package_ch32v_index.json)を追加します。正確なURLは、WCHの公式リポジトリ openwch(GitHub)で確認できます。
  2. ボードをインストール: ボードマネージャで「CH32」を検索し、CH32V向けのボードパッケージをインストールします。
  3. WCH-LinkEのモード設定: 付属ツール「WCH-LinkUtility」で、WCH-LinkEのモードをRISC-V用(WCH-LinkRV)に設定します(初回のみ)。これをしないとCH32V003を認識しないことがあります。
  4. ボードと書き込み器を選んで書き込む: ボードでCH32V003を選び、上の3線でつないだWCH-LinkE経由で書き込みます。
正確な手順は「動画」と「公式」で確認を

Arduino環境のセットアップは、IDEやパッケージのバージョンで画面や項目名が少しずつ変わります。第2章で述べたとおり、こうした操作は解説動画を見ながら進めると確実です。「CH32V003 Arduino 書き込み」「WCH-LinkE Arduino」などで検索すると、実際の画面つきの手順が見つかります。あわせて、ボード定義の配布元であるWCH公式リポジトリ(GitHubの openwch)で最新のURLと手順を確認してください。

方法B(発展):ch32fun + minichlink

もう一段深く、マイコンのレジスタを直接触りたくなったら、ch32fun を使います。巨大なIDEを入れず、Cファイルと簡単なビルド設定だけで、書き込みまで完結する軽量な開発環境です。

用語:ch32fun と minichlink
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 など)は、使うボードパッケージによって表記が異なる場合があります(PC0C0 のような書き方など)。うまくいかないときは、お使いのパッケージのピン定義や作例を確認してください。ここでも解説動画が役に立ちます。

次に、同じ動作を 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);
    }
}
2つのコードは「同じこと」をしている
  • Arduinoの pinMode(PC0, OUTPUT) は、ch32fun版の GPIOC->CFGLR の設定(PC0を出力にする)と、その前提となるクロック有効化(RCC->APB2PCENR)を、まとめて肩代わりしてくれています。
  • Arduinoの digitalWrite(PC0, HIGH) は、ch32fun版の GPIOC->BSHR = (1<<0)(PC0をHighにする)に対応します。LOWBCR です。
  • つまり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として活用する応用──を展望します。