マイコンに ATMega32u4 を、USB コネクタに Type-C を使った左右分割型キーボードを設計するために必要となりそうな知識をメモ。
なお、ケースが金属製か否かで静電気対策が変わってくる(はず)。
マイコンの電源は、マスター側の場合はUSB ケーブルで供給し、スレーブ側の場合は TRRS ケーブルで供給する。
USB ケーブルで供給する場合、USB コネクタの VBUS
から電源を取り出すことになる。取りだした電源は、マイコンの UVCC
、VCC
、AVCC
、VBUS
に供給する。
USB コネクタの VBUS
とマイコンの UVCC
、VCC
、AVCC
、VBUS
を結ぶ回路の途中に、パスコンとしてコンデンサを配置する。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
なお、メーカーは 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 コネクタの D-
、D+
とマイコンの D-
、D+
の間に 22Ω の直列抵抗を挟む。
Serial resistors on USB Data lines must have 22Ω value (±5%)
ATmega16U4/ATmega32U4 DataSheet 21.5 "Design Guidelines"
ATmega16U4/32U4 - Complete Datasheet より
また、USB Type-C の仕様として、ホスト側の CC1
、CC2
ピンにはプルアップ抵抗を接続し、デバイス側に CC1
、CC2
ピンにはプルダウン抵抗を接続するとされていることから、 USB コネクタの CC1
、CC2
ピンにプルダウン抵抗として 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 を使っているので、同じ周波数とする。クリスタルの接続は次の図のとおり。
クリスタルとセットで使うコンデンサの容量は、メーカーが一定の幅で推奨 (以下の表参照) しているが、次の式で求めることが可能である。
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 だと VCC
、GND
、RX1(1/PD2)
としているので、それを ATMega32u4 に置き換えると VCC
、GND
、PD2
となる。ただし、実際にシリアル通信で使うピンは、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 書き込みには、MISO
、MOSI
、SCK
、VCC
、GND
、RST
のピンを引き出しておく必要があり、MISO
は PB3
、MOSI
は PB2
、SCK
は PB1
からそれぞれ引き出す。VCC
、GND
、RST
は、既に引き出しているピンから分岐する。
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 書き込みとキーマトリックスは同時に使用しないので、PB3
、PB2
、PB1
のピンは、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 回路を通った静電気を受け止めることになる。
- ATmega16U4/32U4 - Complete Datasheet
- MICROCHIP USB Type-C™の概要
- USB Type-Cに置き換える方法 第1話 Type-Cの原理を知る | 組込み技術ラボ
- keyboard-pcb-guide/README.md at master · ruiqimao/keyboard-pcb-guide
- PCB Designer Guide | Keyboard Designer Wiki @ ai03.me
- 基板から自作キーボードを作った!脱Pro Micro! - Qiita
- Building your own keyboard (from scratch) | by w4ilun | Medium
- プルアップのナゾ
- プルアップ抵抗・プルダウン抵抗とは?電子回路に必須の考え方 | VOLTECHNO
- ATmega32U4 - Self-Made Keyboards in Japan
- power - How can I get my (Arduino) Pro Micro schematic to allow me to program it through GPIO instead of USB - Arduino Stack Exchange
- plaid/plaid.pdf at master · hsgw/plaid
- (htts://discordapp.com/channels/376937950409392130/418326189644709889/691616120138104862)
- 水晶振動子につけるコンデンサの値 - 滴了庵日録
- |水晶振動子・仕様の用語集|株式会社多摩デバイス|