2025年7月31日 星期四

PeakCAN Bus 與 ECU Simulator 通訊 擷取 DTC Data

讀取 ECU Simulator 診斷故障碼 (Diagnostic Trouble Code, DTC)
利用PeakCAN Tools抓取的資料

送出以下 Flow Control(FC)封包,才會收到後面的連續幀:
CAN ID: 0x7E0(ECU 接收 ID)
DATA:   30 00 00 00 00 00 00 00
                
                └─ 0x30 = Flow Control (CTS: Continue To Send)

第一幀:
CAN ID: 7E8  
Data:    10 10 43 02 01 68 03 03
DTC 解碼規則:
Byte  位置     說明
0    10        First Frame (FF) 標誌(高4位元=1),表示這是多幀資料起始幀
1    10        剩餘資料長度 = 0x10 = 16 bytes(不含前2個控制位元)
2    43        服務ID:0x43,代表回應「Mode 03(讀取 DTC)」請求(0x03 + 0x40)
3    02        DTC 數量 = 2(總共兩筆故障碼)
4~5  01 68  第1筆 DTC
6~7  03 03  第2筆 DTC

每個 DTC 為 2 bytes,使用下列方式轉為代碼(5 碼):
高 2 bits(byte1) → 類型代碼(P, C, B, U):
00 = P(Powertrain)
01 = C(Chassis)
10 = B(Body)
11 = U(Network)
第一筆:01 68
0x0168 = 00000001 01101000
高兩位是 00 → P
剩下:168 → P0168
說明:燃油溫度過高(Fuel Temperature Too High)
第二筆:03 03
0x0303 = 00000011 00000011
高兩位是 00 → P
剩下:303 → P0303
說明:汽缸 3 點火失敗(Cylinder 3 Misfire Detected)
第二幀:
21 00 00 00 00 00 00 00 00   ← Consecutive Frame #1
第三幀:
22 00 00 00 00 00 00 00 00   ← Consecutive Frame #2

PeakCAN Bus 與 ECU Simulator 通訊 擷取 VIN Data

在這篇文章 ECU Simulator CAN Bus Data with ESP32+MCP2515
當要去讀取 VIN (Vehicle Identification Number) Mode $09 - Vehicle Information 
始終都是只有得到
CAN ID: 0x7E8  
DATA:   10 14 49 02 01 31 46 54  
                │  │
                │  └─ 0x14 = 20 bytes 要回傳(包含 service, pid, vin 等)
                └─ 0x10 = First Frame(多幀傳輸)
找了許多資料知道有些ECU 需要 Flow Control Frame
所以送出以下 Flow Control(FC)封包,才會收到後面的連續幀:
CAN ID: 0x7E0(ECU 接收 ID)
DATA:   30 00 00 00 00 00 00 00
                
                └─ 0x30 = Flow Control (CTS: Continue To Send)
利用之前寫的PeakCAN Tool送出command frame:

終於得到完整的datas
第一幀 
10 14 49 02 01 31 46 54
│  │
│  └─ 0x14 = 20 bytes 資料總長
└──── 0x10 = First Frame

49 02 = 回應 Mode 0x09 + PID 0x02(VIN)
01 = 回傳資料塊 ID = 第 1 組 VIN 塊
31 46 54 = '1FT'(ASCII)
第二幀
21 4C 52 34 46 45 58 42
│ └────────────── 'LR4FEXB'
└─ 0x21 = Consecutive Frame index 1
第三幀
22 50 41 39 38 39 39 34
│ └────────────── 'PA98994'
└─ 0x22 = Consecutive Frame index 2

完整 VIN 字串共 17 個字元,已完全符合 OBD-II 規範
VIN: 1FTLR4FEXBPA98994


2025年7月25日 星期五

CAN Bus 測距通訊軟件開發

Purpose:
基於Radar, UWB等可以量測距離的產品, 開發出一套可以解析CAN bus上接收到的資料, 繪製成360度的GUI顯示出來距離跟角度.
構成要件:
接收介面:
PeakCAN接收的GUI 參閱之前的文章 
PeakCAN Windows GUI Application - Two Channel
解析介面:
CAN bus 通訊的UWB產品
由Initiator跟responder通訊後經由responder解析收到的資料後送至顯示介面顯示.
顯示介面:
360度距離角度GUI
接收解析後的距離跟角度的資料後, 繪製GUI顯示.
影像介面:
經由WEBCAM由responder視角看出, 顯示目前時間跟中心位置cross焦點.

2025年7月21日 星期一

Raspberry Pi4 Project - Android system


KonstaKANG
最近在YouTube看到有人介紹在 Raspberry Pi上安裝Android系統, 
於是就參考這篇
感謝分享!!!!
把我的Pi4變成一台平板



操作起來還蠻順暢的, 後續再來想其他應用!!
在system->Raspberry Pi setting中
先把 SSH跟VNC enable, 後續比較好應用



SSH登入

VNC登入password: KonstaKANG



2025年7月10日 星期四

RaspberryPi Project - MagicMirror Function

Purpose:
在樹莓派上面安裝魔鏡軟體, 搭配適當的硬體, 你的樹莓派立刻變成亮麗的展示播放器!
Step:
1. 安裝好樹莓派
2. 在樹莓派安裝MagicMirror
3. 在MagicMirror安裝所需的模組. 如時間, 行事曆....

我的MagicMirror介面安排如下圖:
接下來介紹如何將介面配置出來

1. 安裝 Node.js 和 git。Node.js 是 MagicMirror 所需要運行環境。git 是我們要獲取MagicMirror 時所需要的工具。
sudo apt-get install curl
curl -fsSL https://deb.nodesource.com/setup_current.x | sudo -E bash
sudo apt install -y nodejs git

2. 下載 Magic mirror 的主程式碼:
git clone https://github.com/MichMich/MagicMirror
cd MagicMirror
npm run install-mm
將配置的示例文件複制一份,作為初始的配置文件
cp config/config.js.sample config/config.js
這個config/config.js就是要配置各個模組的檔案
運行npm run start 來啟動完整的 MagicMirror

3. 數位相框 Module MMM-ImageSlideshow
依照這連結步驟
部屬到MagicMirror 顯示介面變成數位相框






2025年5月9日 星期五

PeakCAN Windows GUI Application - Two Channel

Purpose:
利用兩台PeakCAN撰寫一個利用c#寫的MDI(Mutliple Document Interface)來擷取CAN Bus上面的資料, 可應用於CAN Bus介面上的產品分析, 或是配合OBD2的介面的接線來接收車子的CAN Bus上的資料.

介面設計:
利用PeakCAN給的範例架構在MDI的GUI上面

另外在撰寫一個transmit的介面, 可同時連續傳送或是傳送一次勾選的ID內容
GUI上半部可同時監看兩台PeakCAN的接收與傳送的資料


2025年2月11日 星期二

PeakCAN Control ODrive with A2212-1400KV and X2212-980KV

我的Odrive Board
版號: Odrive v3.6-56
ODrive control utility v0.6.5.post2
Odrive 硬件內部 FW V0.5.6

接續這一篇文章odrive perform Sunnysky X2212 980KV motor with Encoder TLE5012B
M1位置是接無編碼器
設定如下:
dev0.axis1.controller.config.vel_gain = 0.01
dev0.axis1.controller.config.vel_integrator_gain = 0.05
dev0.axis1.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
dev0.axis1.controller.config.vel_limit = 50
dev0.axis1.motor.config.current_lim =15
dev0.axis1.sensorless_estimator.config.pm_flux_linkage = 5.51328895422 / (7 * 1400)
dev0.axis1.requested_state = AXIS_STATE_MOTOR_CALIBRATION
dev0.axis1.motor.config.pre_calibrated = True
dev0.axis1.requested_state = AXIS_STATE_SENSORLESS_CONTROL
dev0.axis1.config.startup_sensorless_control = True
dev0.save_configuration()
dev0.reboot()


測試指令:
dev0.axis1.requested_state = AXIS_STATE_MOTOR_CALIBRATION
dev0.axis1.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
dev0.axis1.controller.input_vel = 10

Demo:



2025年2月4日 星期二

坦聯 旋轉轉台控制小工具

執行用C#寫的MDI_ATS程式, 選擇ATS中的Console, 再依據轉台所接的轉接板com port 開啟所用的port number

硬體包括坦聯控制盒, 單軸轉台
依據Unit 的轉動角度有1, 10 , 20 , 100度再按button +(正轉動)或是 button –(負轉動), 單次轉動轉台


2025年1月24日 星期五

Python 使用 GPU 的安裝方式

依據顯卡的資訊

Nvidia-smi 顯示卡 資訊

我的經驗是先更新顯卡的驅動到可支援的最新版本

再到nvida網站下載適合你版本的cuda

我是下載12.4版本來做測試

查看是否安裝完成 nvcc -V
在python環境上驗證:

import torch
print(torch.cuda.is_available())

2025年1月22日 星期三

CVAT-標註模型 Deploy a model with nuclio successful, but status unhealthy

使用有Nuclio的CVAT docker image
Nuclio是一個無伺服器(Serverless)平台,Serverless架構的Nuclio較一般的server簡單,適合用來快速製作無需資料庫的API。
前往安裝CVAT的位置
docker compose down # 關閉該CVAT的docker image
啟動具Nuclio的CVAT container。
docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml up -d # 啟動具serverless 架構的CVAT container

當在CVAT部屬自動標註模型時, 重開了Docker後會造成部屬的自動標註模型"unhealthy"的情況

先在Nuclio上的模型按 stop function
再到Docker上的模型按 start
然後再到Nuclio上啟動