カーブトレーサ@Peter Balch の改造
<!-- markdown-mode-on -->
# **概要**
https://www.instructables.com/Transistor-Curve-Tracer/
このプロジェクトにはarduino pro mini atmega328を使っている。特性の描画に時間がかかる動画を見た。速くするため、esp32などへの変更は可能だろうか?。
条件は:
* オリジナルの機能を完全維持する
* 元スケッチをベースにしたい
* 描画速度が遅いのは絶対に嫌
* UNO より高速な MCU が必要
* DAC は MCP4922 を使う
* オリジナルは A0〜A3,6,7、D2,3,4,7 ピンを使用
* SPIとシリアルを使用
<a name="more"></a>
---
## MCUの選定
### 落選MCU
1. **ESP32 Devkit V1**
- ADC の有効レンジが 0.1〜3V 程度
- 微小電圧・微小電流が死ぬ
→ **カーブトレーサ用途では致命的に不適**
2. **RP2040 / RP2350‑Zero**
- 自由に使える ADC は 3ch
- オリジナルは A0,1,2,3,6,7 の 6ch 必須
→ **物理的に機能維持不可能**
---
### ✅ じゃあ、何が残るのか
- **ATmega328P 系(UNO/互換)+外付け DAC(MCP4922)+描画最適化**
- ADC の素直さはまだマシ
- ただし描画速度は限界がある
- **STM32F3 / G4 / F103 クラス**
- ADC チャンネル数:余裕で 6ch 以上
- ADC の線形性・レンジ:ESP32 より遥かにマシ
- MCU 性能:十分高速、SPI も速い
→ **「オリジナル機能維持+微小領域もちゃんと測れる+描画も速い」を現実的に満たせる候補**
基準(**オリジナル機能=ADC6ch 必須、微小電圧・微小電流が正しく測れない MCU は即不採用**)に完全に合わせて、
**STM32F303K8 と STM32F401 を“カーブトレーサ用途”に限定して評価する。**
結論から言うと:
**→ STM32F303K8(または F303/F3 系の上位)
これが最適解。**
- ADC の質が良い
- ADC チャンネル数が十分
- 微小電圧も扱える
- SPI も速い
- FPU あり
- DAC も内蔵(外付けでもOK)
あなたの「機能維持」「微小領域の正確測定」「描画高速化」
この3つを全部満たせる MCU は、現実的に **F303 系** だけだ。
| MCU | ADC 質 | ADC 数 | 微小電圧 | カーブトレーサ適性 |
|------|--------|---------|-----------|----------------------|
| **STM32F303K8** | ◎(測定器寄り) | ◎(6ch以上) | ◎ | **最適** |
| STM32F401 | △ | ○(数はあるが1基) | △ | **不適** |
| RP2040‑Zero | △ | ×(3ch) | ○ | 不適 |
| ESP32 Devkit V1 | ×(0.1〜3Vしか使えない) | ○ | × | 致命的に不適 |
---
### STM32F3系比較
| 型番 | パッケージ | ピン数 | フラッシュ | RAM | ADC | DAC | 備考 |
|------|------------|--------|------------|------|------|------|------|
| **STM32F303K6T6** | LQFP‑32 | 32 | **32 KB** | 16 KB | 最大 10ch(ADC1/2) | 2ch | 最小構成、ピン少ない |
| **STM32F303K8T6** | LQFP‑32 | 32 | **64 KB** | 16 KB | 最大 10ch(ADC1/2) | 2ch | F303K6 の上位(Flash 2倍) |
| **STM32F303R8T6** | LQFP‑64 | 64 | **64 KB** | 40 KB | 最大 16ch(ADC1/2/3/4) | 2ch | ピン数多い、ADC豊富 |
| **STM32F303RBT6** | LQFP‑64 | 64 | **128 KB** | 40 KB | 最大 16ch | 2ch | R8 の上位(Flash 2倍) |
| **STM32F303RCT6** | LQFP‑64 | 64 | **256 KB** | 40 KB | 最大 16ch | 2ch | R8/RB のさらに上位 |
| **STM32F303RDT6** | LQFP‑64 | 64 | **384 KB** | 40 KB | 最大 16ch | 2ch | 大容量モデル |
| **STM32F303RET6** | LQFP‑64 | 64 | **512 KB** | 40 KB | 最大 16ch | 2ch | 最大フラッシュ |
| **STM32F303CBT6** | LQFP‑48 | 48 | **128 KB** | 40 KB | 最大 12ch(ADC1/2/3/4) | 2ch | ピン数中間、ADC多い |
| **STM32F303CCT6** | LQFP‑48 | 48 | **256 KB** | 40 KB | 最大 12ch | 2ch | CB の上位 |
---
#### 🔥 **型番の読み方(重要ポイントだけ)**
- **K** → 32pin
- **C** → 48pin
- **R** → 64pin
- **6 / 8 / B / C / D / E** → フラッシュ容量
- 6 → 32KB
- 8 → 64KB
- B → 128KB
- C → 256KB
- D → 384KB
- E → 512KB
---
#### 🔥 **カーブトレーサ用途での最適選択(あなたの要求基準で)**
あなたの要求:
- **ADC 6ch 必須(オリジナル機能維持)**
- **微小電圧・微小電流を正確に測れること**
- **描画高速化(SPI 速い MCU)**
- **DAC 2ch(MCP4922 でも内蔵でも可)**
これを満たすのは:
---
#### 🥇 **最適:STM32F303CBT6(48pin / 128KB)**
理由:
- ADC 最大 12ch → **6ch 必須を余裕で満たす**
- ピン数 48 → LCD / DAC / タッチ / ボタン全部載る
- FPU あり → 計算高速
- SPI 高速 → 描画速い
- DAC 2ch 内蔵 → 外付け MCP4922 と併用も可
- フラッシュ 128KB → 元スケッチ+UI でも余裕
---
#### 🥈 **次点:STM32F303CCT6(48pin / 256KB)**
- CB のフラッシュ増量版
- 余裕が欲しいならこちら
---
#### 🔥 **最終結論**
あなたの要求(機能維持・微小領域の正確測定・高速描画)を
**すべて満たす最適 MCU は:**
> **STM32F303CBT6(または CCT6)**
- ADC:高精度・多チャンネル
- DAC:内蔵
- SPI:高速
- FPU:あり
- ピン数:十分
- サイズ:扱いやすい
**F303K6/K8(32pin)はピン不足で不適。
F303R8/RB/RC/RD/RE(64pin)は過剰。**
---
#### カーブトレーサ用途におけるピン要件 vs Nano / F303K8 / F303CBT6
| --比較項目--| 必要条件(カーブトレーサ) | Arduino Nano<br>(ATmega328P) | STM32F303K8(32pin) | STM32F303CBT6(48pin) |
|------|----------------------------|----------------------------|----------------------|------------------------|
| 総ピン数 | ― | 30 | 32 | 48 |
| 実質 GPIO(電源/リセット等除く) | **21 本 必要** | **22 本 使用可** | **理論上 22 本(ADC/SPI 競合により実用 18〜20 本)** | **約 37 本 使用可** |
| ADC チャンネル数 | **6ch 必須** | 8ch(A0〜A7)専用 | 6ch(PA0〜PA5) | 最大 12ch(ADC1/2/3/4) |
| SPI ピン | SCK/MOSI/MISO 必須 | D10〜D13 に専用割当 | PA5/PA6/PA7(ADC と競合し同時使用不可) | SPI1/SPI2 を ADC と独立して割当可能 |
| LCD 制御(CS/DC/RST/BL) | 4 本 | 割当可能(GPIO 余り 18 本) | **割当不可(残り GPIO が 4 本未満になる)** | 割当可能(GPIO 余り 30 本以上) |
| DAC CS | 1 本 | 割当可能 | **割当不可(残り GPIO が 1 本未満になる構成が発生)** | 割当可能 |
| タッチ(CS/IRQ) | 2 本 | 割当可能 | **割当不可(残り GPIO が 2 本未満)** | 割当可能 |
| ボタン | 3 本 | 割当可能 | **割当不可(残り GPIO が 3 本未満)** | 割当可能 |
| その他(DUT制御など) | 2 本 | 割当可能 | **割当不可(残り GPIO が 2 本未満)** | 割当可能 |
| ADC と SPI のピン競合 | **競合しないことが望ましい** | **競合なし(ADC=A0〜A7、SPI=D10〜D13)** | **競合あり(PA5/PA6/PA7 が ADC/SPI で排他的)** | **競合なし(ADC と SPI を別ポートに配置可能)** |
| 必要 21 本に対する実質 GPIO | **21 本 必須** | **22 本 → 要求を満たす** | **18〜20 本 → 要求を満たさない** | **約 37 本 → 要求を満たす** |
| 結論 | ― | **カーブトレーサ構成:成立** | **カーブトレーサ構成:不成立(ピン数不足)** | **カーブトレーサ構成:成立(十分なピン数)** |
---
## STM32F3での基本設計
### 1. STM32F303CBT6 での A0〜A7 再現ピン割り当て
前提:
- オリジナル UNO の A0〜A3, A6, A7 を **すべて再現**
- STM32 側では **ADC1/2 のチャンネルに素直に割り当て**
#### ■ ADC(A0〜A7 相当)
| UNO 論理名 | 用途例 | STM32 ピン | STM32 ADC チャンネル |
|------------|--------------------|------------|----------------------|
| A0 | Ic(シャント) | **PA0** | ADC1_IN1 / ADC2_IN1 |
| A1 | Vce | **PA1** | ADC1_IN2 / ADC2_IN2 |
| A2 | 別モード用電圧1 | **PA2** | ADC1_IN3 / ADC2_IN3 |
| A3 | 別モード用電圧2 | **PA3** | ADC1_IN4 / ADC2_IN4 |
| A6 | 12V 昇圧監視 | **PA4** | ADC1_IN5 / ADC2_IN5 |
| A7 | バッテリ電圧監視 | **PA5** | ADC1_IN6 / ADC2_IN6 |
※PA0〜PA5 は F303CBT6 で素直に ADC に割り当てられる構成。
※ADC1 だけでも 6ch 取れるので、実装は ADC1 に統一でよい。
---
#### ■ SPI(LCD / DAC / タッチ)
SPI1 を共用にする想定:
| 信号 | STM32 ピン | 用途 |
|------|------------|-------------------|
| SCK | PA5 or PB3 | SPI1_SCK |
| MOSI | PA7 | SPI1_MOSI |
| MISO | PA6 | SPI1_MISO(タッチ) |
CS 系は GPIO から自由に:
| 信号 | STM32 ピン | 用途 |
|----------|------------|-------------------|
| LCD_CS | PB0 | ILI9341 CS |
| LCD_DC | PB1 | ILI9341 D/C |
| LCD_RST | PB2 | ILI9341 RESET |
| LCD_BL | PB10 | バックライト制御 |
| DAC_CS | PB12 | MCP4922 CS |
| TP_CS | PB13 | XPT2046 CS |
| TP_IRQ | PB14 | XPT2046 PENIRQ |
※ピンは一例。重要なのは「SPI1 を 3デバイスで共有+CS 個別」。
---
#### ■ その他 GPIO
- ボタン類:PB3, PB4, PB5 など空きピンに割り当て
- DUT セレクトリレー等があれば同様に空き GPIO へ
---
### 2. F303 版カーブトレーサのハード構成(ブロック図イメージ)
#### ■ 電源
- **メイン 12V**:外部アダプタ or DC-DC
- **5V**:ロジック・LCD 用(必要なら)
- **3.3V**:STM32・MCP4922・ロジック系
- 必要なら **2.048V リファレンス**(DAC Vref 用)
#### ■ DAC(MCP4922)
- CH A:コレクタ掃引用
- CH B:ベース/ゲート駆動用
- 接続:SPI1(SCK/MOSI)+ DAC_CS
#### ■ 掃引オペアンプ
- 電源:12V 単電源
- 入力:DAC 出力(0〜2.048V)
- 非反転増幅:ゲイン ≒ 5.7(例:10k / 47k)
- 出力:0〜約12V → DUT コレクタへ
#### ■ DUT & シャント
- コレクタ:掃引電圧
- エミッタ:シャント抵抗(例:10Ω)→ GND
- シャント上側電圧 → A0(PA0)で Ic 測定
#### ■ 電圧測定
- Vce:コレクタ−エミッタ間を分圧 → A1(PA1)
- その他モード用電圧:A2, A3(PA2, PA3)
- 12V 監視:分圧 → A6(PA4)
- バッテリ監視:分圧 → A7(PA5)
#### ■ LCD & タッチ
- ILI9341:SPI1(SCK/MOSI)+ LCD_CS/DC/RST/BL
- XPT2046:SPI1(SCK/MOSI/MISO)+ TP_CS/TP_IRQ
---
### 3. AVR → STM32 移植の具体的変更点
#### ■ 3-1. ピン定義の置き換え
- `#define pin_Adc_Ic A0` → `#define PIN_ADC_IC PA0`
- `#define pin_Adc_Vce A1` → `#define PIN_ADC_VCE PA1`
- …といった形で **論理名を STM32 ピンにマップし直す**
#### ■ 3-2. `analogRead()` → STM32 HAL/LL ベースの ADC 読み出し
- AVR の `analogRead(pin)` をそのまま使わず、
**ADC1 を初期化 → チャンネルごとに変換 → 値取得** に書き換え
- ただし Arduino STM32 コアを使うなら `analogRead()` 互換もあり
→ その場合でも「ピン番号 → ADC チャンネル」の対応だけ確認
#### ■ 3-3. `readSupply()` / 内部 1.1V 依存コードの削除・再設計
- AVR の内部 1.1V リファレンスを使った AVcc 測定ロジックは **そのままでは使えない**
- 代わりに:
- **3.3V を基準とした ADC キャリブレーション**
- 必要なら **外付けリファレンス(2.048V)+その実測**
でスケールを決める
#### ■ 3-4. SPI 初期化の書き換え
- AVR の `SPI.begin()` / `SPI.setClockDivider()` 等を
STM32 用の SPI 設定に置き換え
- クロック:10〜20MHz 程度
- モード:ILI9341 / MCP4922 / XPT2046 に合わせる(多くは MODE0)
#### ■ 3-5. PROGMEM / pgm_read 系の削除
- AVR 特有の `PROGMEM` / `pgm_read_byte` 等は不要
- STM32 では普通に `const` 配列としてフラッシュに置かれる
#### ■ 3-6. 割り込み・タイマ依存コードの見直し
- `ISR(TIMERx_COMPA_vect)` など AVR 固有の ISR は
STM32 の TIMx 割り込みに移植
- ただしカーブトレーサでは **ポーリング+ループ駆動** でも十分なことが多い
→ 必要最低限に留める
#### ■ 3-7. 電源補正ロジックの再構成
- 12V・バッテリ電圧を **A6/A7 相当(PA4/PA5)で実測**
- その値を使って:
- 掃引電圧のスケール補正
- 表示用の電源電圧表示
- AVR 時代の「AVcc 補正」は捨て、
**“実測電圧ベース” の補正に一本化**
---
## 設計書
要求仕様は:
- オリジナル機能を完全維持(ADC6ch 必須)
- 微小電圧・微小電流を正確に測定
- 高速描画
- DAC(MCP4922)使用
- STM32F303CBT6 を採用
---
### **カーブトレーサ設計書(STM32F303CBT6版)**
---
### **1. 目的**
本設計書は、オリジナル Arduino UNO ベースのカーブトレーサの機能を完全維持しつつ、
STM32F303CBT6 を用いて以下を実現することを目的とする。
- ADC 6ch による Ic / Vce / 12V / バッテリ / 補助測定の完全再現
- 微小電圧(1mV級)・微小電流(0.1mA級)の正確測定
- 高速描画(ILI9341)
- DAC(MCP4922)による掃引電圧生成
- オリジナル機能の完全互換性
---
### **2. システム構成概要**
```
+-------------------------------+
| STM32F303CBT6 |
| ADC1: PA0〜PA5 (6ch) |
| SPI1: LCD / DAC / Touch |
| DAC: 内蔵2ch(任意使用) |
+-------------------------------+
| | |
| | |
MCP4922 ILI9341 XPT2046
(DAC) (LCD) (Touch)
|
掃引OPAMP → DUT → シャント → ADC
```
---
### **3. ピン割り当て(A0〜A7 完全再現)**
#### **3.1 ADC(A0〜A7 相当)**
| UNO名 | 用途 | STM32ピン | ADCチャンネル |
|------|------|-----------|----------------|
| A0 | Ic(シャント) | PA0 | ADC1_IN1 |
| A1 | Vce | PA1 | ADC1_IN2 |
| A2 | 補助測定1 | PA2 | ADC1_IN3 |
| A3 | 補助測定2 | PA3 | ADC1_IN4 |
| A6 | 12V監視 | PA4 | ADC1_IN5 |
| A7 | バッテリ監視 | PA5 | ADC1_IN6 |
※ADC1 のみで 6ch を確保できる。
---
#### **3.2 SPI(LCD / DAC / タッチ)**
##### SPI1(共用)
| 信号 | STM32ピン | 用途 |
|------|-----------|------|
| SCK | PB3 | SPI1_SCK |
| MOSI | PB5 | SPI1_MOSI |
| MISO | PB4 | SPI1_MISO(タッチ用) |
##### CS / 制御信号
| デバイス | 信号 | STM32ピン |
|----------|-------|------------|
| ILI9341 | LCD_CS | PB0 |
| ILI9341 | LCD_DC | PB1 |
| ILI9341 | LCD_RST | PB2 |
| ILI9341 | LCD_BL | PB10 |
| MCP4922 | DAC_CS | PB12 |
| XPT2046 | TP_CS | PB13 |
| XPT2046 | TP_IRQ | PB14 |
---
#### **3.3 その他 GPIO**
| 用途 | ピン |
|------|------|
| ボタン1 | PA8 |
| ボタン2 | PA9 |
| ボタン3 | PA10 |
---
### **4. ハードウェア詳細設計**
---
#### **4.1 DAC(MCP4922)回路**
- Vref:2.048V(REF5020 など推奨)
- CH A:掃引用
- CH B:ベース/ゲート駆動用
- 出力は OPAMP に入力
---
#### **4.2 掃引オペアンプ**
##### 推奨:OPA197 / OPA2991 / LMV358(12V動作)
- 入力:DAC(0〜2.048V)
- 非反転増幅
- ゲイン例:
- Rf = 47k
- Rin = 10k
→ Gain ≒ 5.7
→ 出力:0〜約12V
---
#### **4.3 シャント回路(Ic測定)**
- シャント抵抗:10Ω(1%)
- シャント上側 → PA0(A0)
- シャント下側 → GND
- 測定範囲:
- 0.1mA → 1mV
- 10mA → 100mV
→ STM32F303 の ADC なら十分測定可能
---
#### **4.4 Vce測定**
- コレクタ電圧を分圧して PA1(A1)へ
- 分圧例:
- R1 = 100k
- R2 = 33k
→ 12V → 約3V
---
#### **4.5 電源監視(A6/A7)**
- 12V → 分圧 → PA4
- バッテリ → 分圧 → PA5
- 分圧比は 12V → 3V になるように設定
---
### **5. ソフトウェア設計(AVR → STM32 移植)**
---
#### **5.1 ピン定義の置換**
```c
#define PIN_ADC_IC PA0
#define PIN_ADC_VCE PA1
#define PIN_ADC_A2 PA2
#define PIN_ADC_A3 PA3
#define PIN_ADC_12V PA4
#define PIN_ADC_BATT PA5
```
---
#### **5.2 ADC 読み取り**
##### AVR(旧)
```c
value = analogRead(A0);
```
##### STM32(新)
```c
uint16_t readADC(uint32_t channel) {
ADC1->CHSELR = channel;
ADC1->CR |= ADC_CR_ADSTART;
while (!(ADC1->ISR & ADC_ISR_EOC));
return ADC1->DR;
}
```
---
#### **5.3 電源補正ロジックの再設計**
AVR の内部 1.1V リファレンス方式は廃止。
STM32 では:
- A6(12V)
- A7(バッテリ)
を **実測値ベースで補正** に使用。
---
#### **5.4 SPI 初期化**
```c
SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_BR_0 | SPI_CR1_SSM | SPI_CR1_SSI;
SPI1->CR1 |= SPI_CR1_SPE;
```
---
#### **5.5 PROGMEM の削除**
- STM32 では `const` 配列で十分
- `pgm_read_byte()` → 直接アクセスに置換
---
#### **5.6 タイマ・割り込み**
- AVR の `ISR(TIMER1_COMPA_vect)` →
STM32 の TIM2/TIM3 割り込みへ移植
- ただしカーブトレーサはループ駆動でも十分
---
### **6. キャリブレーション**
---
#### **6.1 ADC キャリブ**
- 0V
- 1.0V
- 2.0V
- 3.0V
の 4点で線形補正テーブルを生成。
---
#### **6.2 掃引電圧キャリブ**
- DAC 出力 → OPAMP → ADC で実測
- 12V まで 0.5V ステップで補正テーブル作成
---
### **7. 動作フロー**
1. 電源投入
2. ADC キャリブ
3. LCD 初期化
4. タッチ初期化
5. DUT 選択
6. 掃引開始
7. Ic/Vce を高速サンプリング
8. LCD にプロット
9. モード切替(NPN/PNP/MOSFET/ダイオード)
---
### **8. 部品表(主要部品)**
| 部品 | 型番 |
|------|------|
| MCU | STM32F303CBT6 |
| DAC | MCP4922 |
| LCD | ILI9341 |
| タッチ | XPT2046 |
| OPAMP | OPA197 / LMV358 |
| シャント | 10Ω 1% |
| 分圧抵抗 | 100k / 33k |
| Vref | REF5020 |
---
### **9. まとめ**
この設計書により:
- **オリジナル機能(ADC6ch)完全維持**
- **微小電圧・微小電流の正確測定**
- **高速描画**
- **DAC 掃引の高精度化**
- **STM32F303 のアナログ性能を最大限活用**
がすべて成立する。
---
## 変換基板
Atmega328P (32 TQFP) と STM32F303CBT6 (LQFP48) のための共通の基板を考える。すなわち、ベースの回路は共通の基板を使い、2種類のMCU用にそれぞれ専用の変換基板を作る。
---
### 📘 Arduino Pro Mini ピン割り当て
まずはInstructables の **Transistor Curve Tracer の Arduino Pro Mini の実装ピン割り当て**を
回路図から読み取る
|役割カテゴリ|MCUピン(物理)|ポート名|Arduinoピン|信号名<br>(MCU側)|信号名<br>(デバイス側)|接続先<br>(回路図上の部品)|
|:----|:----|:----|:----|:----|:----|:----|
|ディスプレイ|32|PD2|D2|LCD_CS|CS|ILI9341 (3番ピン)|
| |1|PD3|D3|LCD_RST|RESET|ILI9341 (4番ピン)|
| |2|PD4|D4|LCD_DC|DC|ILI9341 (5番ピン)|
|タッチパネル|17|PB5|D13|SCK|T_CLK|ILI9341 (10番ピン)/U1 (MCP4802) (3番ピン)|
| |16|PB4|D12|MISO|T_DO|ILI9341 (13番ピン)|
| |11|PD7|D7|TP_CS|T_CS|ILI9341 (11番ピン)|
| |15|PB3|D11|SDI / MOSI|T_DIN|U1 (4番ピン) / ILI9341 (6番ピン)/同(12番ピン)|
|DAC制御|14|PB2|D10|DAC_CS|DAC_CS|U1 (MCP4802) (2番ピン)|
|アナログ測定|23|PC0|A0|ADC0| |Nch電流シャント上流|
| |24|PC1|A1|ADC1| |Nch電流シャント下流|
| |25|PC2|A2|ADC2| |Pch電流シャント上流|
| |26|PC3|A3|ADC3| |Pch電流シャント下流|
| |19|ADC6|A6|ADC6|VCC_MON|BATT ADC|
| |22|ADC7|A7|ADC7|12V_MON|12V ADC|
|電源/基本|4,6,18|VCC|VCC|VCC|5V|U5 (HT7550) 5V出力|
| |3, 5, 21|GND|GND|GND|0V|各部 0V|
---
###🔷 **32pin 変換基板 ↔ STM32F103C8T6**
Atmega328P の変換基板は秋月電子の[32ピンQFP変換基板 金フラッシュ](https://akizukidenshi.com/catalog/g/g109581/)として、基板1番ピンがAtmaga328Pの#1pin、以後同様に#32pinとなる。このとき、STM32F303CBT6は内部クロックを使用(HSEなし)
STM32F303CBT6
これにSTM32F303CBT6のピンを対応させる変換基板を専用に起こす。その時の関係を表で示す。
#### カーブトレーサ用・完全 3者+STM32ピン番号一覧(Atmega ピン番号基準)
|Atmega<br>ピン番号|Atmega<br>ピン名|Arduino 名|メイン基板<br>信号名|役割・備考|Blue Pill<br>シルク|STM32 ポート|STM32 LQFP48<br>ピン番号|
|:----|:----|:----|:----|:----|:----|:----|:----|
|1|PD3 / INT1|D3|LCD_RST|LCD リセット|B10|PB10|45|
|2|PD4|D4|LCD_DC|LCD データ/コマンド|B7|PB7|42|
|9|PD5|D5|BTN3|ユーザボタン3|C13|PC13|2|
|11|PD7|D7|TP_CS|タッチパネル CS|A8|PA8|30|
|12|PB0 / ICP1|D8|BTN2|ユーザボタン2|B1|PB1|22|
|13|PB1 / OC1A|D9|BTN1|ユーザボタン1|B0|PB0|21|
|14|PB2 / SS|D10|DAC_CS|DAC MCP4922 CS|B12|PB12|26|
|15|PB3 / MOSI|D11|SPI_MOSI|SPI MOSI|B15|PB15|29|
|16|PB4 / MISO|D12|SPI_MISO|SPI MISO|B14|PB14|28|
|17|PB5 / SCK|D13|SPI_SCK|SPIクロック|B13|PB13|27|
|19|ADC6|A6|SIG_12V_MON|12V監視 ADC|A4|PA4|15|
|22|ADC7|A7|SIG_VCC_MON|VCC監視 ADC|A5|PA5|16|
|23|PC0 / ADC0|A0|SIG_A0|Nch電流シャント上流|A0|PA0|11|
|24|PC1 / ADC1|A1|SIG_A1|Nch電流シャント下流|A1|PA1|12|
|25|PC2 / ADC2|A2|SIG_A2|Pch電流シャント上流|A2|PA2|13|
|26|PC3 / ADC3|A3|SIG_A3|Pch電流シャント下流|A3|PA3|14|
|27|PC4 / SDA|A4|I2C_SDA(予備)|I2C予備(未使用)|B9|PB9|44|
|28|PC5 / SCL|A5|I2C_SCL(予備)|I2C予備(未使用)|B8|PB8|43|
|30|PD0 / RXD|D0|UART_RX|シリアルRX|A10|PA10|32|
|31|PD1 / TXD|D1|UART_TX|シリアルTX|A9|PA9|31|
|32|PD2 / INT0|D2|LCD_CS|LCD チップセレクト|B6|PB6|41|
---
#### カーブトレーサ用・完全 3者+STM32ピン番号一覧(信号名基準)
|信号名(メイン基板)|機能・役割|Atmega<br>ピン番号|Atmega<br>ピン名|Arduino 名|Blue Pill<br> シルク|STM32 ポート|STM32 LQFP48<br> ピン番号|
|:----|:----|:----|:----|:----|:----|:----|:----|
|SIG_A0|Nch電流シャント上流|23|PC0/ADC0|A0|A0|PA0|11|
|SIG_A1|Nch電流シャント下流|24|PC1/ADC1|A1|A1|PA1|12|
|SIG_A2|Pch電流シャント上流|25|PC2/ADC2|A2|A2|PA2|13|
|SIG_A3|Pch電流シャント下流|26|PC3/ADC3|A3|A3|PA3|14|
|SIG_12V_MON|VCC監視 ADC|19|ADC6|A6|A4|PA4|15|
|SIG_VCC_MON|12V 監視 ADC|22|ADC7|A7|A5|PA5|16|
|SPI_SCK|SPI クロック|17|PB5/SCK|D13|B13|PB13|27|
|SPI_MOSI|SPI MOSI|15|PB3/MOSI|D11|B15|PB15|29|
|SPI_MISO|SPI MISO|16|PB4/MISO|D12|B14|PB14|28|
|DAC_CS|DAC MCP4922 CS|14|PB2/SS|D10|B12|PB12|26|
|TP_CS|タッチパネル CS|11|PD7|D7|A8|PA8|30|
|LCD_CS|LCD チップセレクト|32|PD2/INT0|D2|B6|PB6|41|
|LCD_RST|LCD RST|1|PD3/INT1|D3|B10|PB10|45|
|LCD_DC|LCD DC|2|PD4|D4|B7|PB7|42|
|BTN1|ユーザボタン1|13|PB1/OC1A|D9|B0|PB0|21|
|BTN2|ユーザボタン2|12|PB0/ICP1|D8|B1|PB1|22|
|BTN3|ユーザボタン3|9|PD5|D5|C13|PC13|2|
|UART_TX|シリアル TX|31|PD1/TXD|D1|A9|PA9|31|
|UART_RX|シリアル RX|30|PD0/RXD|D0|A10|PA10|32|
|I2C_SCL(予備)|I2C SCL 予備|28|PC5/SCL|A5|B8|PB8|43|
|I2C_SDA(予備)|I2C SDA 予備|27|PC4/SDA|A4|B9|PB9|44|
- 信号名が一番左に来ているので、**メイン基板はこの列だけ見て設計できる**。
- Atmega 版サブ基板:左→Atmega列を見るだけ。
- Blue Pill / STM32 版サブ基板:左→Blue Pill シルク→STM32 ポート→LQFP48 ピン番号、の列を見るだけ。
もし「この信号は別ピンにしたい」「予備を正式に使いたい」があれば、**この表の行だけ差し替えれば済む**。
## 関連リンク