# 電池管理系統（BMS）

# CAN 的解碼

CAN 的解碼
來自 Orion_BMS2 :
0x301 0x300 0x2FF 0x200 0x210
來自PM100DX:
0x0A5 0x0A2

待測CAN RX 功能
UART 和CAN的數值轉換 還沒開始


void decode DATA陣列解碼後使用前面宣告的陣列儲存
RX 中斷 紀錄數據到DATA陣列

儀表 6v 0.3A
STM 5v 0.2A

CAN ACK 錯誤待修 
打線TTRECO9

# CAN-R02A 記錄儀使用說明書

---
title: CAN-R02A 記錄儀使用說明書
tags: Manual, CAN-R02A, 說明書
---

# CAN-R02A 記錄儀使用說明書
> **版本：V1.2**

[TOC]

---

## 1. 產品簡介

:::info
**產品概述**
CAN-R02A 是一款 2 通道的 CAN 記錄儀，可以脫機記錄和回放報文。
* **供電方式**：採用 USB 供電或 OBD-II 供電方式。
* **斷電保護**：內置鋰電池，可在外部電源斷開瞬間完成剩餘報文的寫入。
* **配置方式**：連接電腦後可通過 USB 配置參數。
:::

## 2. 產品規格參數

| 參數項目 | 規格描述 |
| :--- | :--- |
| **電源輸入 (USB 接口)** | 輸入電壓：4.7-5.5V<br>最大功耗：135mA/5V；休眠功耗：70uA/5V |
| **電源輸入 (OBD-II 接口)** | 輸入電壓：6-32V<br>最大功耗：40mA/24V；休眠功耗：85uA/5V |
| **工作溫度** | -40°C ~ +80°C |
| **工作濕度** | 5%~95% RH 無凝露 |
| **存儲介質** | TF 卡，最大支持 512G |
| **CAN 通道數** | 兩通道 |
| **CAN 波特率** | 10Kbit/s ~ 1Mbit/s，可配置 |
| **CAN 標準** | 遵循 ISO 11898 標準，支持 CAN2.0A/B |
| **CAN 終端電阻** | 內置 120Ω，可配置 |
| **CAN 報文記錄能力** | 每通道 8000 幀/秒 |
| **CAN 報文時間戳** | 精度 5us |
| **外形尺寸** | 88 x 47.6 x 25.6 (mm) |

---

## 3. OBD-II 引腳定義

| 引腳編號 | 定義 | 備註 |
| :---: | :--- | :--- |
| **16** | 6-32V | 電源正極 |
| **4** | 電源地 | 電源負極 |
| **6** | CAN1_H | |
| **14** | CAN1_L | |
| **3** | CAN2_H | |
| **11** | CAN2_L | |
| **15** | 觸發線 | |
| **其他** | 空 | 引腳 1, 2, 5, 7, 8, 9, 10, 12, 13 為空 |

---

## 4. 指示燈狀態說明

| 狀態說明 | 指示燈表現 |
| :--- | :--- |
| **配置模式** | 2 個指示燈間隔 0.5 秒交替閃爍 |
| **檢測 TF 卡** | 2 個指示燈間隔 0.5 秒同時閃爍 |
| **記錄模式 (連續記錄)** | **有報文**：CAN 指示燈快閃<br>**無報文**：2 個指示燈常亮 |
| **記錄模式 (硬件觸發)** | **有報文**：CAN 指示燈間隔 2 秒快閃 1 次<br>**無報文**：CAN 指示燈常亮 |
| **回放模式** | **有報文**：CAN 指示燈快閃<br>**無報文**：2 個指示燈常亮 |
| **休眠模式** | 2 個指示燈熄滅 |
| **關機模式** | 2 個指示燈熄滅 |

---

## 5. 工作模式

* **配置模式**：斷電狀態下，按住按鍵不鬆開同時上電，將進入配置模式。
* **記錄模式**：配置文件中工作模式設為「記錄」，通電後自動進入記錄模式。
* **回放模式**：配置文件中工作模式設為「回放」，通電後自動進入回放模式。

---

## 6. 配置參數

### 6.1 進入配置模式
記錄儀在斷電狀態下，按住按鍵不鬆開，通過 USB 線連接到電腦。電腦將顯示名稱為「**CAN_REC**」的磁碟圖標。

### 6.2 校準系統時間
:::success
**操作步驟**
在配置模式下，打開磁碟並用鼠標雙擊磁碟中的「**時間校准.bat**」文件，將自動修改記錄儀的時間與電腦時間同步。
:::

### 6.3 配置工作模式
在配置模式下，打開磁碟中的配置文件（`配置文件.txt`），修改參數等於號後面的內容並保存：
* **記錄儀收發報文模式** = 記錄（或回放）

### 6.4 配置記錄模式參數
修改 `配置文件.txt` 中「**記錄/接收報文參數**」下的各項參數：

* **記錄報文來源通道**：CAN1、CAN2 或 CAN1+CAN2 通道。
* **記錄報文終端電阻開關**：終端電阻使能或關閉。
* **工作模式**：正常模式或監聽模式。
* **通信波特率**：支持 10K 至 1M，或設置為「自動」(可識別 83.3K 至 1M)。
* **報文 ID 過濾**：要記錄的報文 ID 白名單範圍，每路 CAN 最多 16 段。
* **觸發模式**：連續模式或硬件觸發模式。
* **文件名標識碼**：寫入到報文文件名中的字符（字母、數字、下劃線），最多 9 位。
* **報文文件格式**：ASC、TRC、CAN 或 CSV。
* **報文文件分割**：達到設定大小創建新文件，可設 5-4000MB。
* **磁碟寫滿執行操作**：TF 卡寫滿停止記錄，或刪除最早記錄的報文文件。
* **自動休眠**：開啟後，若總線無報文達到設定時間（5-3600秒）進入休眠，有報文後自動喚醒。

### 6.5 配置回放模式參數
修改 `配置文件.txt` 中「**回放/發送報文參數**」下的各項參數：

* **發送報文終端電阻開關**：終端電阻使能或關閉。
* **通信波特率**：支持 10K 至 1M 多種波特率。
* **報文文件循環回放**：設置 TF 卡根目錄下 `playback` 文件夾內所有文件的循環發送次數（1 至 1000000 次或永久）。

---

## 7. 固件升級

:::info
**升級方法**
在配置模式下，把待升級的 APP 固件拖拽到記錄儀的磁碟中，等待約 3 秒升級完成並自動退出磁碟。完成升級後會自動退出配置模式並運行新的 APP。
:::

---

## 8. TF 卡插卡/取卡

* **插卡**：任何模式下都可以插卡。
* **取卡**：
    1.  **關機/休眠模式**（2 個指示燈熄滅）可取卡。
    2.  **配置模式**（2 個指示燈交替閃爍）可取卡。
    3.  **退卡模式（工作中取卡）**：

:::danger
**工作中取卡注意事項**
記錄儀工作中，需**按住按鍵 1 秒**，指示燈變為「間隔 0.5 秒同時閃爍」，此時記錄和發送已停止，**可以取卡**。

**警告**：若超過 **15 秒**未取卡，將重新開始記錄或發送報文（恢復正常讀寫），**此時不可取卡**，否則可能損壞數據。
:::

---

## 9. 文件系統
* **支持文件系統**：FAT、FAT32、exFAT。
* **格式化建議**：分配單元大小建議設置為 16K-128K。

---

## 10. 文件管理

### 記錄報文文件管理
* **文件夾分類**：按年月日建立文件夾，每天的日誌存儲在同一個目錄中。
* **文件名組成**：創建時間（年月日_時間分秒）+ 用戶自定義「文件識別碼」+ 波特率 + 文件編碼格式。
* **循環覆蓋規則**：
    > 若開啟寫滿自動覆蓋，磁碟寫滿後將 **優先刪除非 CAN 記錄生成的文件夾和文件（包括 `playback` 文件夾及其內容）**，然後再刪除最早記錄的報文日誌文件。

### 回放報文文件管理
* **回放目錄**：搜索 TF 卡根目錄 `playback` 文件夾下的所有報文文件。
* **回放順序**：按文件名中的時間或數字由小到大逐個回放。
* **支持格式**：`playback` 目錄中可存儲不同格式 (TRC, ASC, CAN, CSV)，記錄儀會根據後綴名匹配解碼方案。
* **循環邏輯**：當回放次數大於 1 或設為永久時，會將目錄下所有文件依次回放完畢算作 1 遍，然後再從第 1 個文件開始第 2 遍回放。

# PCAN-Explore 6 - 建立symbol

打開軟體
![image](https://hackmd.io/_uploads/ByNvd8hqyx.png)

## 說明
### 主要分為
| Enums   |  signals | symbols  |
| -------- | -------- | -------- |
| 數值直接對應的意思| 類比訊號換算  | DBC解調  |

![image](https://hackmd.io/_uploads/rkNRYUh5Jg.png)

### Eunums
![image](https://hackmd.io/_uploads/Bkx891P3qke.png)

### Symbols
![image](https://hackmd.io/_uploads/BkCrlvn5yl.png)

# PCAN-Explore 6 tutorial

1. 軟體安裝
2. 使用簡介
3. 建立symbol
4. 收發介面
5. GUI建置
6. 
![image](https://hackmd.io/_uploads/HkKtwIn9kx.png)

# SavvyCAN 使用指南：.asc 分析與 PCAN 即時監控

[TOC]

## 1. 簡介
**SavvyCAN** 是一款跨平台、開源（免費）的 CAN Bus 分析工具。它具備兩大核心功能：
1. **離線分析**：讀取 Vector `.asc` 檔案進行回放與圖表分析。
2. **即時監控 (Live Stream)**：透過 PCAN 等硬體直接讀取 CAN Bus 數據。

- **官方網站**：[SavvyCAN.com](https://www.savvycan.com/)
- **教學影片** : [csselectronics.com](https://www.csselectronics.com/pages/can-bus-interface-savvycan#void)
- **說明書** : [SavvyCAN V189 documentation](https://www.savvycan.com/docs/)
- **支援硬體**：PCAN, Kvaser, SocketCAN, ESP32 等

---

## 2. 匯入 .asc 檔案 (Import Data)

這是最基本的離線分析功能，將 Vector CANalyzer/CANoe 錄製的資料匯入。

1. 開啟 SavvyCAN。
2. 點選上方選單列的 **File**。
3. 選擇 **Load File...** (或是 `Import "Vector ASC" File`)。
4. 選擇您的 `.asc` 檔案並開啟。

:::info
**💡 小撇步：**
如果檔案很大（>500MB），載入過程可能需要幾秒鐘，請耐心等待直到畫面出現數據列表。
:::

---

## 3. 介面快速導覽

| 區域 | 名稱 | 功能描述 |
|:---|:---|:---|
| **中央列表** | Frame List | 顯示所有的 CAN 封包 (ID, Data)。 |
| **下方區塊** | Graphing Window | 顯示訊號波形圖。 |
| **右側欄位** | Connections/DBC | 管理硬體連線與 DBC 解碼檔。 |

---

## 4. 載入 DBC 檔案進行解碼 (Decode)

若沒有 DBC，您看到的只是 HEX 亂碼。

1. 點選選單列 **File** -> **Load DBC File...**。
2. 選擇對應的 `.dbc` 檔案。
3. 載入後，回到 **Frame List** 點選任意數據。
4. 畫面右側或下方會出現 **"Signals"** 區域，顯示物理數值 (如 Speed, RPM)。

---

## 5. 繪製波形圖 (Graphing)

將數據視覺化是 SavvyCAN 的強項。

1. 確保 DBC 已載入。
2. 在數據列表中，點選感興趣的 **CAN ID**。
3. 在訊號列表 (Signal List) 中，**勾選** 訊號名稱旁的方框。
4. 下方的 **Graph Window** 會即時繪出波形。

> **操作技巧：**
> * **滾輪**：縮放時間軸。
> * **左鍵拖曳**：移動時間軸。
> * **雙擊波形**：最大化顯示。

---

## 6. 過濾特定 ID (Filtering)

1. 在主畫面上方的 **Filter** 欄位。
2. 輸入 ID (支援 Hex 格式，如 `0x123` 或 `123`)。
3. 系統會自動隱藏其他 ID。

---

## 7. 常見問題 (離線分析)

* **時間戳記怪怪的？**：請檢查 .asc 檔頭是否有 `timestamps absolute`。
* **數據是紅色的？**：代表 Error Frame，請檢查錄製時的線路品質。

---

## 8. 連接 PCAN 進行即時監控 (Live Stream)

如果您手邊有 **PEAK PCAN-USB** 硬體，可以直接用 SavvyCAN 讀取即時數據，取代昂貴的 CANoe。

### 步驟一：安裝驅動
請確保您的電腦已安裝 PEAK 原廠驅動程式 (PCAN-Basic API)。
* [PEAK Drivers 下載頁面](https://www.peak-system.com/Drivers.523.0.html?&L=1)

### 步驟二：設定連線 (Connection)
1. 將 PCAN-USB 插入電腦 USB 孔，並連接到 CAN Bus 線路。
2. 開啟 SavvyCAN。
3. 點選選單 **Connection** -> **Open Connection Window**。
4. 點選 **Add New Device Connection**。

### 步驟三：配置參數
在跳出的設定視窗中，依序設定：

* **Connection Type**: 選擇 `QTSerialBus` (這是最穩定的通用選項)。
* **Serial Bus Type**: 選擇 `peakcan`。
* **Interface Name**: 通常輸入 `usb0` (代表第一個插入的 PCAN)。
* **Baud Rate**: **非常重要！** 必須與車輛/設備一致 (常見為 `500000` 或 `250000`)。

### 步驟四：啟動監控
1. 點選 **Create New Connection**。
2. 在 Connection Window 列表中，確認 `Status` 顯示為 **Connected**。
3. 勾選左側的 **Enable Console** (選用，可在下方顯示除錯訊息)。
4. 關閉視窗，回到主畫面。
5. 按下主畫面左上角的 **▶ (Play/Capture)** 按鈕。
6. 您應該會看到數據開始在螢幕上瘋狂滾動！

:::danger
**⚠️ 注意事項：**
1. **Baud Rate 錯誤**：如果設錯速率，會收不到數據或收到 Error Frame (紅色數據)。
2. **終端電阻**：請確保 CAN Bus 線路兩端有 120歐姆電阻，否則 PCAN 可能無法連線。
:::

---

## 9. 如何錄製 Log (Capture & Save)

既然接上了 PCAN，您也可以把即時數據錄下來存成 .asc 檔。

1. 確保 Live Stream 正在執行。
2. 讓數據跑一段時間。
3. 按下 **Pause/Stop** 按鈕。
4. 點選 **File** -> **Save File As...**。
5. 存檔類型選擇 **Vector CANalyzer format (.asc)**。
6. 這樣存下來的檔案，以後可以用 CANoe 或 SavvyCAN 再次開啟。

# VESC Tool 完整設定與原理教學指南

> **⚠️ 安全警告 (Safety First)**
> 1. **輪子懸空**：在進行任何設定（尤其是馬達偵測）之前，務必將車體架高，讓驅動輪離地。
> 2. **拆除傳動**：如果無法架高，請拆下皮帶或鏈條。
> 3. **電池電壓**：確保電池電量充足，避免低電壓造成偵測錯誤。

---

## 目錄
[TOC]

## 1. 硬體連接與基礎準備

在開啟 VESC Tool 之前，請確認硬體狀態：

* **電源**：電池已連接 VESC，並已開機。
* **連接**：使用 USB 線連接 VESC 與電腦（或透過藍牙模組）。
* **連線確認**：點擊軟體右側 **Connect**。
    * 成功：右下角顯示 `Connected (COM X)` 與韌體版本。
    * 失敗：檢查 USB 線是否具備傳輸功能（很多線只能充電）。
---

## 2. 設定精靈 (Setup Wizards)

對於初次設定，**強烈建議**使用`Setup Wizards`，讓 VESC 自動偵測馬達物理特性
（電阻 R、電感 L、磁通量 Flux）。

### A. Setup Motor FOC (馬達偵測)
1. **Load Default Parameters**：選擇你的硬體規格（如 VESC 6, 75/300, 或 Generic）。
2. **Motor Type**：選擇 **FOC** (Field Oriented Control)。
   * *FOC 優點*：靜音、效率高、低速扭力強。
   * *BLDC*：聲音大、起步衝，僅用於舊硬體或特殊高轉需求。
3. **Run Detection**：
   * 馬達會發出異音並轉動（此時輪子必須懸空）。
   * 成功後會顯示 R, L, Flux 數值，點擊 **Apply**。

### B. Setup Input (遙控/油門偵測)
1. 選擇控制類型：
   * **PPM**：滑板遙控器。
   * **ADC**：電動單車轉把/指撥油門。
2. 跟隨指示設定油門的最高點、最低點與中立點。



---

## 3. 核心參數詳解 (Motor Settings)

進入左側 `Motor Settings` > `General`，這裡是影響手感與保護機器的核心。

### A. Current (電流設定 - 動力來源)

| 參數名稱 | 中文解釋 | 影響層面 | 設定建議 |
| :--- | :--- | :--- | :--- |
| **Motor Current Max** | 馬達最大電流 | **加速力道** (扭力) | 依馬達額定值 (如 60A)。單車建議 15-20A。 |
| **Motor Current Max Brake** | 馬達最大煞車 | **煞車力道** | 負值。越負越強。單車若有單向齒輪此項無效。 |
| **Abs Max Current** | 絕對最大電流 | **硬體保險絲** | **勿動**。瞬間電流超過此值會斷電保護。 |
| **Batt Current Max** | 電池最大輸出 | **電池保護** | 取決於電池 BMS 與並聯數 (例如 10S4P 30Q = 60A)。 |
| **Batt Current Max Regen** | 電池最大回充 | **電池保護** | 煞車回充。通常設為 -10A 至 -40A。 |

### B. Voltage (電壓保護)

設定電池的低電壓保護，防止過放損壞。

* **Cutoff Start (限速電壓)**：`3.3V` × 串聯數 (S)。(如 10S 設定 33V)
* **Cutoff End (斷電電壓)**：`3.0V` × 串聯數 (S)。(如 10S 設定 30V)

---

## 4. 物理運算與原理 (The Math)

VESC 不知道你的輪子多大，它只看得懂電氣訊號。我们需要透過數學將兩者連結。

### A. 極對數 (Pole Pairs) 與 ERPM

VESC 使用 **ERPM (Electrical RPM)** 來計算轉速。

#### 1. Pole Pairs (極對數) 計算
$$\text{Pole Pairs} = \frac{\text{馬達總磁鐵數 (Magnets)}}{2}$$

* 範例：16 極馬達 $\rightarrow$ **8 Pole Pairs**。
* *設定位置*：`Motor Settings` > `General` > `Additional Info`。

#### 2. ERPM 計算公式
$$\text{ERPM} = \text{機械轉速 (RPM)} \times \text{Pole Pairs}$$

* 範例：馬達轉速 300 RPM，極對數 8。
* ERPM = $300 \times 8 = 2400$。

#### 3. 實戰：如何計算限速 (例如限制 25 km/h)？
假設：26吋輪徑 (周長約 2.07m)，極對數 8，無減速齒輪。

1. **換算目標 RPM**：
   $$25 \text{ km/h} \approx 417 \text{ m/min}$$
   $$\text{RPM} = 417 / 2.07 \approx 201 \text{ RPM}$$

2. **換算目標 ERPM**：
   $$\text{Limit ERPM} = 201 \times 8 = 1608 \text{ ERPM}$$

3. **設定**：在 `General` > `RPM` > `Max ERPM` 填入 1608。
   *(註：若為減速馬達，需再乘以減速比，如 1:5 則 ERPM 需乘以 5)*

---

### B. 電流 vs 佔空比 (Current vs Duty Cycle)

這兩個概念常被搞混，請參考下圖理解它們的關係。

#### 概念圖解 (Mermaid Chart)

```mermaid
graph LR
    A[油門輸入] --> B{控制模式}
    B -- Current Control --> C(控制力道/電流)
    B -- Duty Cycle --> D(控制極速/電壓)
    
    C --> E[感覺: 像一般車輛]
    D --> F[感覺: 定速巡航]