切削を2回ぐらい失敗したあと、そこそこ良さそうなのができたので、実装してみました (まだ途中ですが)。右側でブリッジしているような部分がありますがこれは設計上の意図的なもので、右側はほぼ完璧です。

マクロで撮るとスケール感がわかりにくいので右側に SOIC のパッケージのものも入れています。ほぼ同じサイズで約2倍のピンが並びます。

残念ながらプレッシャーフットなどがないのでワークのZ軸に傾きがあり、これがどうしても消せませんでした。左側は低くて、右側は高い (といっても0.1mm〜0.2mm程度の傾き) という状態です。ほとんど基板に触れない状態から切削を開始して、ダメそうなら 0.02mm ずつZを下げていきました。これ以上下げるとTSSOPの部分のパッドが消滅しそうなのでやめました。

左側は手作業でショート部分を削ったのでだいぶ汚ないです。

一応 TSSOP も実装できそうです。しかし、このサイズ (30mmx23mm程度) でも傾きがこれほど問題になるので、もっと大きな基板では現状のセッティングではまず無理そうです。プレッシャーフットを自作するか、あるいは基板を固定しているジュラコンを精密に水平出しをすればいけるのかあるいは設定を詰めればいけるのか、よくわかりません。プレッシャーフットも万能ではないのでなんともいえなそうです。


やはり気楽にやれる範囲は SOIC ぐらいだと思います。実装の点でも SOIC まではルーペなしで実装可能ですが、TSSOP ぐらいからルーペ確認が必須になってきます。

主要ピン幅

  • DIP : 2.54mm
  • SOIC: 1.27mm
  • TSSOP: 0.65mm
  • MSOP: 0.5mm

先端 0.1mm、60度のVカッターだと0.1mm の深さで幅 0.215mm。

ソルダーマスク

このように PCB Milling で普通に作るとソルダーマスクがないので、ハンダブリッジをとても起こしやすい状態になります。

いくつか作って実装してみてわかりましたが、表面実装品ではソルダーマスクがなくても案外ブリッジしません。一方でリード品をハンダづけすると高確率でブリッジします。

これはおそらく使用するハンダの量の違いだと思います。また、リード品だとリードが邪魔で正確にコテ先をあてにくいのも一因としてありそうです。

TSSOPでもパッドがしっかり成形できていれば、ハンダ付け自体にはそれほど困難に感じません。ただしフラックスは必須です。

「リード部品のほうがハンダ付けしやすい」という刷り込みを持っていたので、意外な発見でした。

  1. トップ
  2. tech
  3. PCB Milling で TSSOP

/**
zun-doko-kiyoshi in ARM Linux EABI
 */

.section .text
.global _start

.macro sys_write
        mov r7, $0x04
        svc $0x00
.endm

.macro rand_init
        /* using all high resiters for rand: r8-r12 */
        /* set seed from time */
        ldr r0, =time
        /* sys_time */
        mov r7, $0x0d
        svc $0x00
        ldr r0, =time
        ldr r8, [r0]
        /* load constant for rand */
        ldr r9, =1103515245
        ldr r10, =12345
        ldr r11, =2147483647
.endm

.macro rand
        /* random update r8 */
        mov r12, r8
        mla r8, r12, r9, r10
        and r8, r8, r11
.endm


_start:
        rand_init
        /* r6 is current zun count */
        mov r6, $0

loop:
        rand
        /* check bit / eq = zun, ne = doko */
        tst r8, $0x80
        adreq r1, zun
        moveq r2, #zun_len
        addeq r6, $1
        adrne r1, doko
        movne r2, #doko_len
        mov r0, $0x01
        sys_write
        bne check_kiyoshi
        b loop

check_kiyoshi:
        /* now this is doko state and check zun count */
        cmp r6, $5
        /* zun count is greater than 5 */
        bge call_kiyoshi
        /* failed to call kiyoshi and reset state */
        mov r6, $0
        b loop

call_kiyoshi:
        /* now this is kiyoshi state */
        adr r1, kiyoshi
        mov r2, #kiyoshi_len
        mov r0, $0x01
        sys_write
        mov r0, $0x00
        /* sys_exit */
        mov r7, $0x01
        svc $0x00

zun:
        .string "ズン\n"
zun_len = . - zun
        .align 2

doko:
        .string "ドコ\n"
doko_len = . - doko
        .align 2

kiyoshi:
        .string "キヨシ\n"
kiyoshi_len = . - kiyoshi
        .align 2


.section .data
time: .word 0

cross compile

 arm-linux-gnueabi-as ./sketch.s -o sketch.o && arm-linux-gnueabi-ld -o sketch -e _start sketch.o && qemu-arm-static ./sketch
  1. トップ
  2. tech
  3. arm-linux-eabi でのアセンブリ ズンドコ