Skip to content

Instantly share code, notes, and snippets.

@s-show
Last active November 16, 2023 11:33
Show Gist options
  • Star 23 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save s-show/286ffb1f5d9c886b514ff7a37e6d8d37 to your computer and use it in GitHub Desktop.
Save s-show/286ffb1f5d9c886b514ff7a37e6d8d37 to your computer and use it in GitHub Desktop.

マイコンと USB コネクタとの接続部分の設計

マイコンに ATMega32u4 を、USB コネクタに Type-C を使った左右分割型キーボードを設計するために必要となりそうな知識をメモ。

なお、ケースが金属製か否かで静電気対策が変わってくる(はず)。

電源部分

マイコンの電源は、マスター側の場合はUSB ケーブルで供給し、スレーブ側の場合は TRRS ケーブルで供給する。

USB ケーブルで供給する場合、USB コネクタの VBUS から電源を取り出すことになる。取りだした電源は、マイコンの UVCCVCCAVCCVBUS に供給する。

image

画像の出典元

USB コネクタの VBUS とマイコンの UVCCVCCAVCCVBUS を結ぶ回路の途中に、パスコンとしてコンデンサを配置する。KiCad の回路図上では、コンデンサを配置する部分を別に書く形になる。

コンデンサの容量は、以下のガイドの記述に従って 0.1μF を4つ、4.7μF を1つ配置する。

Next, we'll add decoupling capacitors for VCC, our power source. We will generally want one 0.1uF capacitor for each VCC/AVCC on the controller and one 4.7uF capacitor for UVcc. In our case, we want 4 0.1uF capacitors and 1 4.7uF capacitor, like so:

keyboard-pcb-guide/README.md at master · ruiqimao/keyboard-pcb-guide

image

なお、メーカーは VBUS 線上に 10μF のコンデンサを配置することを強く推奨している。

A 10μF capacitor is highly recommended on VBUS line

ATmega16U4/ATmega32U4 DataSheet 21.5 "Design Guidelines"

このコンデンサについては、PCB Guide Part 3 - Cre... | Keyboard Designer Wiki @ ai03.me では配置しているが、ruiqimao/keyboard-pcb-guide: Guide on how to design keyboard PCBs with KiCad では配置していない。どちらが正しいかを判断するのは難しいが、コンデンサを1つ増やしても作業の難易度が大きく上がるとは考えにくいので、配置しておいた方が良さそうである。

USB 通信部分

メーカーの指示に従って、USB コネクタの D-D+ とマイコンの D-D+ の間に 22Ω の直列抵抗を挟む。

Serial resistors on USB Data lines must have 22Ω value (±5%)
ATmega16U4/ATmega32U4 DataSheet 21.5 "Design Guidelines"

image

ATmega16U4/32U4 - Complete Datasheet より

また、USB Type-C の仕様として、ホスト側の CC1CC2 ピンにはプルアップ抵抗を接続し、デバイス側に CC1CC2 ピンにはプルダウン抵抗を接続するとされていることから、 USB コネクタの CC1CC2 ピンにプルダウン抵抗として 5.1kΩ の抵抗を接続して GND に接続する。

DFPではRpプルアップ抵抗をCC1およびCC2ピンの両方に接続する必要があり、これらを3.3 Vまたは5.0 Vに プルアップします(電流源を使う事もできます)。選択した抵抗の値によって、ポートの電流供給能力をデバイスにアドバタイズします。USB Type-C仕様で定義されたRpプルアップ抵抗と電流源の許容値を下表に示します。 UFPはCC1ピンとCC2ピンの両方を有効なRdプルダウン抵抗を介してGND(または電圧クランプ)に接続する必要があります。1.5 A@5 Vまたは3.0 A@5 VのUSB Type-C供給電流を使う場合、許容抵抗値は5.1 kΩ ± 10%です。下表に詳細を示します。

MICROCHIP USB Type-C™の概要 3.0 CCピン

DFP (Downstream Facing Port) - ホストまたはハブのダウンストリームポート(例: 従来の標準タイプAポート) UFP (Upstream Facing Port) - デバイスまたはハブのアップストリームポート(例: 従来の標準タイプBポート)

MICROCHIP USB Type-C™の概要 1.1 ポートの挙動

そして、メーカーの指示に従って、UCAP に直列で 1μF のコンデンサを接続し、そのうえで GND に接続する。

Ucap capacitor should be 1μF (±10%) for correct operation

ATmega16U4/ATmega32U4 DataSheet 21.5 "Design Guidelines"

クリスタルとの接続部分

クリスタル無しだと低速動作 (low-speed) になり、外部クリスタルを使えば全速動作 (full-speed) になる。

To reduce external components count and BOM cost, the USB module can be configured to operate in low-speed mode with internal RC oscillator as input source clock for the PLL. The internal RC oscillator is factory calibrated to satisfy the USB low speed frequency accuracy within the 0°C and +40°C temperature range.For USB full-speed operation only external crystal oscillator or external source clock can be used.

ATmega16U4/ATmega32U4 DataSheet 21.4 "Crystal-less Operation"

使用するクリスタルは、参考にしたサイトが全て 16MHz を使っているので、同じ周波数とする。クリスタルの接続は次の図のとおり。

image

クリスタルとセットで使うコンデンサの容量は、メーカーが一定の幅で推奨 (以下の表参照) しているが、次の式で求めることが可能である。

Frequency Range [MHz] CKSEL3..1 Recommended Range for Capacitors C1 and C2 [pF]
0.4-0.9 100 -
0.9-3.0 101 12 - 22
3.0-8.0 110 12 - 22
8.0-16.0 111 12 - 22
Cl = C1 * C2 / (C1 + C2) + Cp
ただし、C1, C2: コンデンサの容量、Cl: 水晶振動子の負荷容量、Cp: 回路の寄生容量とする。

実際に計算するときは、C1 と C2 の容量は同じになるので、C で置き換えることができる。その場合、上の式は次のとおり簡略化できる。

Cl = (C / 2) + Cp

また、Cp は回路次第で決まる値であるが、目安として 3pF~10pF の間になるので、机上計算では 5pF などと仮定して計算できる。クリスタルの負荷容量が 20pF の場合のコンデンサの容量は、以下のとおりとなる。

20 = (C / 2) + 5
C = 30

参考

左右間の接続

左右間の通信はシリアル通信で行い、TRRS ケーブルで左右のキーボードを接続する。

QMK Firmware のドキュメントでは、シリアル通信で使うピンは、ProMicro だと VCCGNDRX1(1/PD2) としているので、それを ATMega32u4 に置き換えると VCCGNDPD2 となる。ただし、実際にシリアル通信で使うピンは、SOFT_SERIAL_PIN で指定したピンとなる。

2つの Pro Micro 間で GND、Vcc、D0/D1/D2/D3 (別名 PD0/PD1/PD2/PD3) を TRS/TRRS ケーブルの3本のワイヤで接続します。

分割キーボード - シリアル配線

リセット回路

ATMega32u4 は、RESET ピンに一定時間以上 Low レベルの電圧がかかるとリセット (External Reset) されるので、RESET ピンと GND をプッシュスイッチで繋ぐと、リセット回路になる。

External Reset. The MCU is reset when a low level is present on the RESET pin for longer than the minimum pulse length.

ATmega16U4/ATmega32U4 DataSheet 8.2 "Reset Sources"

ただし、これだけではスイッチを押していない時の電圧が不定 (電気回路で「浮いている」と呼ばれる状態) になるので、プルアップ抵抗を介して VCC に接続する。

プルアップ抵抗の値は、ルネサスのウェブサイトでは「一般には数kΩ~数十kΩ程度の抵抗が使用され」とあり、また、プルアップ抵抗の値について説明しているウェブサイトでは「何も考えたくないときは4.7kや10kを使って置けばだいたい問題ありません」とあるので、ひとまず 10kΩ とする。

マイコンとキーマトリックスの接続部分

キーマトリックスに使うピン

基本的に、キーマトリックスの col/row は、I/O ポートである Port B (PB7..PB0)Port C (PC7,PC6)Port D (PD7..PD0)Port E (PE6,PE2) および Port F (PF7..PF4, PF1,PF0) のうち、A/D コンバーターやタイマ機能などの特殊機能が割り当てられていないピンに接続する。

キーマトリックスに割り当てられない主なピンは、以下のとおり。これ以外のピンでも、A/D コンバーターなどの機能を使う場合には使用できないものがある。

PE2 (HWB)
HWB (Hardware bootloader activation)[^1] 機能を有効にするため、プルダウン抵抗を介して `GND` に接続する。
PD0, PD1 (I2C(SCL,SDA))
I2C を利用するなら使えない
PF4, PF5, PF6, PF7 (JTAG(TCK,TMS,TDO,TDI))
シリアル通信で IC の内部回路と通信する仕組みである JTAG[^2] を利用するなら使えない。

[^1] HWB 機能を有効にした状態で、外部リセットの際にこのピンが GND に接続されていると、リセット後にブートローダーモードに入る。

[^2] JTAGとは何か | 特殊電子回路

キーマトリックスの組み方

キーマトリックスの組み方は、マイコン直付けでも ProMicro でも同じなので、説明は省略。

ファームウェア等書き込み用回路

ATMega32u4 は、工場出荷時点で DFU 機能が有効になっているので、USB 経由でファームウェアを書き込める。しかし、USB 経由で書き込めない事態に備えて、ICSP 書き込み用の回路を引き出しておく。

ICSP 書き込みには、MISOMOSISCKVCCGNDRST のピンを引き出しておく必要があり、MISOPB3MOSIPB2SCKPB1 からそれぞれ引き出す。VCCGNDRST は、既に引き出しているピンから分岐する。

PORT PIN Alternate Functions
PB3 PDO/MISO/PCINT3 (Programming Data Output or SPI Bus Master Input/Slave Output or Pin Change Interrupt 3)
PB2 PDI/MOSI/PCINT2 (Programming Data Input or SPI Bus Master Output/Slave Input or Pin Change Interrupt 2)
PB1 SCK/PCINT1 (SPI Bus Serial Clock or Pin Change Interrupt 1)

ATmega16U4/ATmega32U4 DataSheet 10.3.1 Alternate Functions of Port B Table 10-3.

なお、ICSP 書き込みとキーマトリックスは同時に使用しないので、PB3PB2PB1 のピンは、ICSP 書き込み用回路とキーマトリックス用回路の両方に割り当てることができる。

静電気対策

基板に静電気が流れると、場合によっては基板直付けのマイコンが壊れる恐れがあるため、静電気対策が必要となる。

ケースが金属製か否かで若干対策が変わるので、まずは両方に共通した対策から説明する。

共通の対策

静電気から USB のデータライン (D+, D-) を保護するため、D+、D- ラインと平行に ESD 保護ダイオードを追加する。

ESD 保護ダイオードは、ダイオードの「順方向の電気は通すが逆方向の電気は原則通さない。しかし、逆方向の電気でも、電圧が一定以上高くなると急激に電流が流れるようになる」という特性を利用した素子である。

使い方は、USB のデータラインである D+、D- ラインと GND をESD 保護ダイオードで接続するというものである。そのうえで、USB コネクタの Shield 端子を GND に接続する。これにより、静電気を GND に流して USB のデータラインに流れ込まないようにすることができる。GND に流れた静電気は、USB のシールドを通って処理されるため、シールド付きの USB ケーブルを使っている限り静電気対策ができることになる。

なお、ESD 保護ダイオードは、データの波形が乱れる可能性を排除するため、USB2.0 Hi-Speed 対応品を使う必要がある。そのため、部品の選定が重要になるが、自作キーボードでは PRTR5V0U2X,215 Nexperia USA Inc. | Circuit Protection | DigiKey が使われているようなので、これを選んでおけば大丈夫ではないかと思われる。

また、ESD 保護ダイオードは、USB 伝送線路 (USB コネクタ) の近くに配置し、配線を可能な限り短くする必要がある。

・コイルやダイオードなどのEMI、ESD対策用部品をUSB伝送線路に実装する場合は、USB伝送線路の近くに配置し、配線は可能な限り短くしてください。 ・EMI、ESD対策用部品は、必ずUSB2.0Hi-Speed対応品を使用してください。なお、EMI、ESD対策用部品を実装することで、USB伝送線路のインピーダンスに不整合が生じ、波形が乱れることがありますので、十分に評価した上で使用する部品を決定してください

Renesas Full-Speed USB2.0 基板設計ガイドライン 5.EMI/ESD対策

金属ケースの追加対策

ケースが金属製の場合、静電気がケースに流れた後に PCB に流れ込む事態が起こりうる。ケースと PCB をスペーサーやワイヤーで接続し、あわせて USB コネクタの Shield とケース・PCB の接続部分を接続して「ケース → PCB → USB コネクタの Shield」という経路を作っておくと、確実に静電気を USB のシールドに逃がすことができるようになる。

また、シールドされていない USB ケーブルが使われることも想定して、USB コネクタの Shield と GND を RC 回路を介して繋いでおく。この場合、GND で RC 回路を通った静電気を受け止めることになる。

参考にした情報

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment