2020年9月26日土曜日

にゃんたBMS BMS本来の機能を実装してみた。

前回までで、BMSとしての足回しが完成したので、バッテリ管理機能を実装しました。

LEDだけだと寂しいので、リレーモジュールを接続。カチッと動作するとカッコいい(*´ω`*)
設定項目に関しては、赤枠のパラメータを使用。
セル電圧での管理をメインとし電流に関してはまったり監視しています。
容量計算については、
【電流センサがある場合】
・起動時にセル電圧からおおよその残量を計算。
・毎秒の電流を積算し、残量に反映。
【電流センサが無い場合】
・起動時にセル電圧からおおよその残量を計算。
・定期的にセル電圧を確認し、起動時同様に残量を推定。
としました。



2020年9月13日日曜日

にゃんたBMS 電流センサの実装

電流センサ付ハーネスが出来たのでにゃんたBMSに実装していきます。

電流センサの型番はCAB300-C/SP2 データシート

 主な仕様は、

  • 検出範囲 ±350A
  • 精度    ±10 ~ ±1500mA
  • 電源電圧 8~16V
  • CAN    500Kbps
データは32bit整数で1mA単位。
精度が最大±1500mAと大雑把だが、自分の利用範囲ならそこそこ使えそう。
何にしても最初からデータでもらえるのはありがたい。とりあえず1桁削除でいこう。

実際に使うときはこんな感じ。挟むタイプではないので設置に困る場合も出てきそう。
電流センサが付くといっきにBMSっぽくなる。カッコいい(*´ω`*)
番外編として手動でのOn/Offだがバランス機能を追加。
次は充放電のOn/Off機能だな(*´ω`*)

2020年9月12日土曜日

にゃんたBMS用ハーネス作ってみた

BMS構想もある程度すすんだので、バッテリを接続するハーネスを作成します。

少しもったいですが、アウトランダーPHEV GG3Wのハーネスを使います。
既にケーブルの外装は外した状態です。
折角なので接続構成を確認しましょう。
絡まっていて分かりづらいですが、
・外部ケーブルからBMUに接続
・BMUからバッテリ内のCANバスが伸び、2ヶ所でハブ接続されています。
・リレーとファン、安全プラグは外部ケーブルに伸びています。
てっきりBMUで全て制御していると思ったのですが意外でした。
CANのハブ接続を中心に分割
電流センサも使いたいしってことで、この部分を使います。
しかし、こういう接続の場合終端抵抗はどこにつけるんだろう。まぁなくてもいいかな^^;



にゃんたBMS バッテリ情報をLCD表示するテスト

 にゃんたBMS開発もそこそこ進んできました。

  1. CMUのCANバスコネクタ配線確認
  2. CMUのCANデータ確認
  3. CMU情報をデコードしセル電圧、温度情報を取得
  4. スマートBMSのUARTデータ確認
今回のメインはUARTパケットの送受信機能となります。
シリアルデータは単純にバイトデータが流れてくるだけなので、CANバスのようにはいきません。

スマートBMSはチェックサムを付けているのですが、手持ちのLCDユニットは使っていないようです。
苦労して使ったのに残念。まぁ、他の機器では使っているでしょうから無駄ではないはず。( ;∀;)
 0xA5、0x03と0xA5、0x04のみで0xA5、0xAAは実装していないのであれですが、処理落ちや文字化けで時々返信できていないようです。
 今のところ表示するだけなので問題ありませんが、重要コマンドを扱うときは注意が必要です。

受信から返信はこのくらいの遅れ

実際にLEV40を接続して実験してみました。
次は電流センサと遮断用リレーでも繋いでみようかな。

追記
・Bluetoothモジュールと交換してスマホから見れるか試してみました。
アプリにもよりますが、iPhoneアプリでは0xA5、0x05を返さないと先に進めませんでした。

引き続き、0xA5、0xAAを要求されますが、0xA5、0xA0も来ています。この辺調べないとだな。


2020年9月8日火曜日

CANシールドとか実験パーツ諸々

やっとArduinoUNO用のCANシールドが届いた。
その間に追加で注文したCAN関連部品とかも揃ったし、開発環境としては十分。


本命はCANシールドなので組み立てし合体!!
中華なので説明書もろくに無いのでポート配置の確認から、
12 CAN-INT D2
13 SCK     D13
14 MOSI    D11
15 MISO    D12
16 CAN_CS  D10
Key1       D4
Key2       D5
LED1       D6
LED2       D7
SCL        A5
SDA        A4
RxD        D0
TxD        D1

準備が整ったのでImievBMSV2のサンプルプログラムであるOutlander_BMS.inoを動かしてみる。
 MCP_CAN CAN0(9);  を10にするだけであっけなく動作。素晴らしい(≧▽≦)


セル電圧や温度、バランスのOn/Offができるのだが、温度が実際と乖離している。以前調査したデータでも温度部分は1バイトのものと2バイトのものが存在した。このプログラムは2バイトタイプ。

次にSCiBでも試してみた。
修正部分はcandecode()にcase 0x4:の処理を追加し、変数定義や表示周りの定数を変更。


うん。いい感じに動いている。

本命のOutlanderBMSV2.isoに手を出しても良さそうな雰囲気だな(*´ω`*)

2020年9月7日月曜日

スマートBMSのUARTを覗いてみた。

BMSを作るにあたって、周辺環境まで自前で用意するのは大変です。
スマホアプリとかLCDモニタなどの周辺機器を使いまわせないか調べてみました。

ロジアナの設定はN81で速度はオートとしました。
こんな感じで、送受信しています。フレームは0xDDで始まり0x77で終わるようです。
データは繰り返して流れますので、書き出して眺めているとなんとなく見えてきます。

0xA5 0x03はBMSのステータスで0xA5 0x04は電圧っぽいのですが、変化させながら確認する必要があるので何かと時間がかかる作業です。

困った時の海外サイト頼みなんですが、
なんとスマートBMSの本家HPにたどり着いてしまいました(/・ω・)/
 幸せの蒼い鳥は近くにいた!

さすがに全てのコマンドが載っているわけではありませが、最低限のコマンドは載っています。

これで読み解くと、
素晴らしい。これで準備は整いました。あとは作るだけだな。


2020年9月3日木曜日

LEV40-8 CMUの信号を覗いてみた その2

助っ人を召喚しました。

USB-CAN デバッガアダプタ。

適当に安いのを選んだためか、中国語しか対応していません。( ゚Д゚)
なんとか使えているので良しとするか・・・。


繋いだらCMUの動作に変化が見られました!

接続前
0.000036600,0,DATA,0x611,0x8,0x00 0x30 0x4F 0x4F 0x4F 0x4F 0x4F 0xFF,0x7DD4,NAK
0.000298600,1,DATA,0x611,0x8,0x00 0x30 0x4F 0x4F 0x4F 0x4F 0x4F 0xFF,0x7DD4,NAK
0.000560600,2,DATA,0x611,0x8,0x00 0x30 0x4F 0x4F 0x4F 0x4F 0x4F 0xFF,0x7DD4,NAK
0.000822800,3,DATA,0x611,0x8,0x00 0x30 0x4F 0x4F 0x4F 0x4F 0x4F 0xFF,0x7DD4,NAK
0.001084800,4,DATA,0x611,0x8,0x00 0x30 0x4F 0x4F 0x4F 0x4F 0x4F 0xFF,0x7DD4,NAK
0.001346800,5,DATA,0x611,0x8,0x00 0x30 0x4F 0x4F 0x4F 0x4F 0x4F 0xFF,0x7DD4,NAK
0.001608800,6,DATA,0x611,0x8,0x00 0x30 0x4F 0x4F 0x4F 0x4F 0x4F 0xFF,0x7DD4,NAK
0.001871000,7,DATA,0x611,0x8,0x00 0x30 0x4F 0x4F 0x4F 0x4F 0x4F 0xFF,0x7DD4,NAK

接続後
0.018130200,0,DATA,0x611,0x8,0x00 0x30 0x4F 0x4F 0x4F 0x4F 0x4F 0xFF,0x7DD4,ACK
0.018432600,1,DATA,0x612,0x8,0x0F 0x2D 0x0E 0xA6 0x0F 0x2E 0x0F 0x30,0x3924,ACK
0.018739000,2,DATA,0x613,0x8,0x0F 0x31 0x0F 0x2E 0x0F 0x30 0x0F 0x33,0x684E,ACK
0.019043200,3,DATA,0x614,0x8,0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF,0x2D67,ACK
0.058140800,4,DATA,0x611,0x8,0x00 0x30 0x4F 0x4F 0x4F 0x4F 0x4F 0xFF,0x7DD4,ACK
0.058443200,5,DATA,0x612,0x8,0x0F 0x2D 0x0E 0xA7 0x0F 0x30 0x0F 0x30,0x0061,ACK
0.058745600,6,DATA,0x613,0x8,0x0F 0x31 0x0F 0x30 0x0F 0x30 0x0F 0x33,0x0DF9,ACK
0.059049800,7,DATA,0x614,0x8,0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF,0x2D67,ACK

ロジアナ上でも変化が! 連続して送信し続けていたのが、間欠送信となりました。


CANバスの仕組みとして、データを受信したノードがCRCを計算して問題なければACKを返す仕組みがあり、送信側はACKが無いので同じデータを送り続けていたようです。

では送られてきたデータを読み取ってみましょう。
0x611,0x00 0x30 0x4F 0x4F 0x4F 0x4F 0x4F 0xFF
バランス実行無し、29℃、29℃、29℃、29℃、29℃
0x612,0x0F 0x2D 0x0E 0xA6 0x0F 0x2E 0x0F 0x30
S1:3.885mV、S2:3.750mV、S3:3.886mV、S4:3.888mV
0x613,0x0F 0x31 0x0F 0x2E 0x0F 0x30 0x0F 0x33
S5:3.889mV、S6:3.886mV、S7:3.880mV、S8:3.891mV 
0x614,0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
未使用

0x611については諸説あるのであれですが、612~614の電圧はあっているように見えます。

最後にバランスコマンドのテストを・・・

あれ? マニュアル通りに設定しているのにちゃんと送れない。
ロジアナで確認すると拡張IDでRTR形式で送信している。なぜだ( ゚Д゚)

原因判明 なんとIDタイプとRTRの指定を中国語のまま保存する仕様になっており、文字化けで誤動作していました。該当の文字をコピペしてなんとか設定完了。

0x611のバランス情報が0xFDとなり2セル以外バランスしていることが分かります。
0.149405400,16,DATA,0x3C3,0x8,0x0F 0x10 0x01 0x04 0x03 0x00 0x00 0x00,0x67F1,ACK
0.184412000,18,DATA,0x611,0x8,0xFD 0x30 0x51 0x51 0x51 0x51 0x51 0xFF,0x10FC,ACK
0.184710400,19,DATA,0x612,0x8,0x0F 0x2B 0x0E 0xA3 0x0F 0x2D 0x0F 0x2D,0x20B0,ACK
0.185008800,20,DATA,0x613,0x8,0x0F 0x2E 0x0F 0x2D 0x0F 0x2D 0x0F 0x31,0x28B6,ACK

左がバランスなし、右がバランスありです。セル2が低いので他7セルを抵抗で消費しています。

動画はこちら。バランスコマンドは1回送ればいいのではなく、コマンドの都度数ミリ秒実行されるようです。
停止⇒連続⇒停止⇒連続⇒頻度小⇒頻度中と変化させてみました。