はじめに
USB-C 2.0のソケットをPCBにハンダ付けした際に、各端子がブリッジせずちゃんとハンダ付けされたかを確認するためのツール『USB-C 2.0 ソケットテスター』作成した。
実はもう随分前に作成したのですが、記事にするのを忘れていました

USB-C(2.0)ソケットのリード線は0.5ミリピッチと非常に狭いため、手ハンダしたとき、見た目でパッと判断できないハンダ不良を起こしている場合がある。以前は汎用のデジタルテスターの導通チェックで確認していたが、両手がふさがり非常に面倒なため、専用のテストツールを作成した。
使い方
-
左上のUSB-Cソケットに5V電源をつなぎ、右下から伸びるUSB-Cケーブルを、テストしたい基板上のUSB-Cソケットにつなげる
-
テストしたい基板上の5V(VBUS)、GND、D+、D-、CCの各ランドにテストリード(プローブ)を当てる。該当するLEDだけが光れば(ブザーが鳴れば)正しくハンダ付けされている。2つ以上のLEDが光ったり、逆に何も光らないときは、ハンダ不良があることを示す。
2つ以上のLEDが光る: ブリッジしている
何も光らない: USB-Cの端子とPCBが導通していない
- USB-Cソケットは両面対応のため、USB-Cケーブルを一度抜いて裏返し、再度刺してもう一度テストする。
部品実装後は、正しくハンダ付けできていても5V/GND/CC等が同時に点灯することがあるため、マイコンや電子部品をハンダ付けする前に、USB-Cソケットだけ単独でチェックすること
ランドにプローブをちゃんと当てるため、ブザーも鳴動させ、視線を動かさなくても確認できるようにした。
配線図
USBの5V+をRAW
ピンに入れることで、3.3Vへの降圧は不要
Arduinoスケッチ
USBの各信号線に対応した(Pull_Upしている)デジタルピンを読み出して、Lowの時に、該当するLEDが接続されたピンをHIGHにする、単純なプログラム。
ブザーはArduino標準のtone
関数でLEDピンに応じた周波数を指定する。ブザーはアナログ(PWM)出力できるピンに接続する必要がある。
プログラム起動時に、LEDとブザーを一通り光らせて(鳴らして)、このテスター自身のLED不良がないことを教えるようにしている。
#define A3 17
#define buzzer A3
#define in_vbus 2
#define in_gnd 3
#define in_d_minus 4
#define in_d_plus 5
#define in_cc 6
#define led_vbus 8
#define led_gnd 9
#define led_d_minus 10
#define led_d_plus 11
#define led_cc 12
#define tone_c3 131
#define tone_d3 147
#define tone_e3 165
#define tone_f3 175
#define tone_g3 196
#define tone_a3 220
#define tone_b3 247
#define tone_c4 262
#define tone_d4 294
#define tone_e4 330
#define tone_f4 349
#define tone_g4 392
#define tone_a4 440
#define tone_b4 370
#define tone_c5 392
int tones[] = {
tone_c3 ,
tone_e3 ,
tone_g3 ,
tone_c4 ,
tone_e4 ,
tone_g4 ,
};
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(in_vbus, INPUT_PULLUP);
pinMode(in_gnd, INPUT_PULLUP);
pinMode(in_cc, INPUT_PULLUP);
pinMode(in_d_plus, INPUT_PULLUP);
pinMode(in_d_minus, INPUT_PULLUP);
pinMode(led_vbus, OUTPUT);
pinMode(led_gnd, OUTPUT);
pinMode(led_cc, OUTPUT);
pinMode(led_d_plus, OUTPUT);
pinMode(led_d_minus, OUTPUT);
for (int n=0; n<5; n++) {
digitalWrite(n + led_vbus, HIGH);
tone(buzzer, tones[n], 80);
delay(80);
}
for (int n=0; n<5; n++) {
digitalWrite(n + led_vbus, LOW);
}
tone(buzzer, tones[5], 300);
delay(300);
digitalWrite(LED_BUILTIN, HIGH);
}
void ifOn(int pin) {
bool isOn = (digitalRead(pin) == LOW);
if (isOn) {
tone(buzzer, tones[pin - in_vbus], 300);
}
digitalWrite(pin - in_vbus + led_vbus, isOn);
}
void loop() {
ifOn(in_vbus);
ifOn(in_gnd);
ifOn(in_cc);
ifOn(in_d_minus);
ifOn(in_d_plus);
delay(10);
}
テスト対象 | デジタル入力ピン | LED出力ピン | ブザー周波数 |
---|---|---|---|
VBUS | 2 | 8 | 131 |
GND | 3 | 9 | 165 |
D- | 4 | 10 | 196 |
D+ | 5 | 11 | 262 |
CC | 6 | 12 | 330 |
おわりに
当初苦しんだ、USB-Cソケットのハンダ付けも何度か経験すると、失敗無く手はんだできるようになってきたが、確認は必須作業となっており、このテスターは非常に役立っている。
一点改善ポイントとして、最近、このテスター自身の電源にUSB-Cケーブルを挿すのが面倒だなと感じており、乾電池(充電池)仕様に変えようかと考えている。
以上