JJ1WKN Log

自作や移動運用関連のログです。

Liイオン充電池用放電監視装置と放電器の製作

2020-07-30 | その他
 ノートPCの電池パックの中古品を手に入れてトランシーバーの電源として利用しています。
通常3直列あるいは4直列にしていますが、一部の電池の放電が進み、チェックしてみると0Vになっているセルがあり、気が付かないでいるとそのセルが使用不可能になる可能性がありました。
 Liイオン電池の放電終止電圧は3.0Vと言われており、3.0Vを切ったら放電を中止してすぐに充電しないといけません。
 そこで各セルの電圧を監視してどれか1つでもセルの電圧が3.0Vを切ったら、その電池パック全体の出力を遮断する装置を作ることにしました。

 回路図です。
 各セルの接続点から電圧をセンスする線を引き出して、電圧に応じて分圧してAD変換し、各接続点の電圧を求め、その差分から各セルの電圧を求め、どれかのセルが3.0Vを切ったらリレーを作動させて、電池パックの出力を遮断するようにしました。
 並行して各接続点と各セルの電圧をシリアル経由でPCに表示するようにしました。
 
 作成した基板です。

 放電中の電圧を監視していると、同じ速度で電圧が下がっているように見えますが、スタートの電圧自体がバラバラですし、電圧降下の速度もセルの元気度合いにより差があるのがよく分かります。設定した放電終止電圧を切るとその電池パックからの出力が遮断され、最悪の事態になることは避けられますが、生き残ったセルが4V近くあったりして、バラバラ度合いが余計に激しくなってしまいました。

 移動運用中はこの監視装置で問題ありませんが、生き残ったセルを3.0Vまで放電して、充電のスタートラインを揃えれば、充電が終了後の放電開始時点のスタートラインが揃うだろうと期待して個々の電池を独立して制御しながら放電できるような装置を作ることにしました。

 回路図です。
 以前は電池から接続点を引き出してセンスしていましたが、個々のセルを制御する必要があるので、各セルの両端子を引き出さないといけません。電池パック側に各セルの全端子をソケットに引き出して、そのままこの放電装置に接続するようにしました。
 前出の監視装置は、各セルの接続点から引き出していますので、電池側のソケットに接続するピン側で各セルを直列接続して各セルの接続点を引き出すようにしました。

作成した基板です。

 電池を接続して放電している写真です。この電池パックは3並列3直列の構成で、3並列は元の電池パックのママです。


 放電中のPC画面です。10秒インターバルで放電中:0、遮断:1、各セルの電圧が表示されます。
かなりバラバラです。最初の項目が経過秒数、次が設定した放電終止電圧です。
------
start
0:3.30v|0|0|0|0|3.37|3.65|3.82|0.00
10:3.30v|0|0|0|0|3.36|3.64|3.81|0.00
20:3.30v|0|0|0|0|3.36|3.64|3.81|0.00
以降略
------
 放電が進むと放電が遮断され、電圧が上昇しますがしばらくした時点で再度放電を開始すると、遮断されるまでの時間が短くなります。これを何回か繰り返し、放電が開始され全セルが数秒間で遮断されるようになったら、全セルが放電終止電圧に達したと判断し、充電を開始することにしました。

 充電は直列接続にして引き出すケーブルを使用して充電電圧を12.0Vに設定して行いました。
 充電終了後再度放電を開始しました。
 まだ少しバラつきがありますが、このような充電放電プロセスを何回か繰り返せば揃ってくると期待します。
 個々のセルごとに充電するほうが良いとは思いますが、充電電圧を制御するのは今後の課題とします。
------
start
0:3.00v|0|0|0|0|4.12|3.93|4.04|0.00
10:3.00v|0|0|0|0|4.11|3.93|4.04|0.00
20:3.00v|0|0|0|0|4.10|3.93|4.04|0.00
以降略
------

IC-705ケースの製作

2020-07-01 | その他
駅弁売スタイルで首から下げて操作できるようにケースを作りました。
布でチクチクやろうと思ったのですが、面倒なので、プラスチックボードをペタペタテープで貼り付けて作ることにしました。
ケースに入れたところです。


処分した肩掛けバッグから取り外したベルトを取り付けてみました。


首から下げてみたところです。お腹の一部が写り込んでいます。


調整用音源の製作

2020-06-05 | その他
受信機の調整など、変調がかかった信号が欲しいときがあります。
無線機にダミーロードを接続して、「ワンツー」などとやればいいのですが、無線機との距離を離したい場合はやっかいです。

そこで、電子オルゴールで変調をかけてようと思いましたが、送信し続けるのもいただけないので、3分送信30秒停波などの繰り返しができるようにしました。

変調は電子オルゴールをエンドレスで鳴らして、レベル調整して、マイク端子に入れます。
PTTはマルチバイブレータで制御します。
送信側、停波側をそれぞれの時定数で独立して設定できるので、このような用途には適します。
120uFx2.2MΩで3分をかせいでおり、大容量のケミコンを使用するので、時間の正確さは怪しいですが、このような用途では正確さは要求されません。

左上が、UM3482を使用した3分/30秒、右上がSM6201-4Lを使用した80秒/30秒。
左下がArduinoの内蔵Toneを音源にしたものでプログラム次第で時間の設定ができます。
FT-817のマイクコネクタから引き出したコネクタに挿せば動作します。

右下はオマケで、10.7MHzの水晶発振回路にSM6201-2LでFM変調をかけただけの回路で調整には重宝します。

Sipeed Longan Nano のテスト その7

2020-01-02 | その他
本年も本ブログをよろしくおねがいします。

その7です。

このプロジェクトもそろそろ、本格的な開発段階に入ったので、テストボードを作りました。
このプロジェクトでは、トランシーバーのUIを開発するので、ロータリーエンコーダーといくつかのSWが必要となります。

ご本家のuBITXでは16文字x2行のLCDに表示するのですが、1つのファンクションSWとロータリーエンコーダーだけで操作するシンプルな構成なのですが、操作性が好みではありません。
そこでこのプロジェクトでは、LonganNanoの160x80ドットのカラーLCDを活用し情報量を多くし、数個のSWでダイレクトに機能を選択できるようにする予定です。

回路図です。
とりあえず、SWは7個としました。6個は機能を選択するためのSWで1つのAD変換ポートで対応します。
抵抗値は出力電圧が等間隔になるように選びました。
以前のテストではAD変換値が想定外でしたが、きちんと配線すれば想定通りに動作するようです。

PTTはハンドマイクへ引き伸ばすことを考慮して、独立したポートに割当ました。
その他、ロータリーエンコーダー用のポートと、送信時を示す出力ポート、パドル用ポートがあります。


できたテストボードです。
とりあえず、付属のピンをLonganNanoに全部取り付け、片側のみ全ピン外に出してみましたが、LonganNano内蔵のLCD、SDカード、LEDなどで使用されているポートが合計11と意外と多く、全ポートが使用できないので、ポート割当が大変でした。
回路図でポート名の末尾に小文字が付いているポートはLonganNano内蔵デバイスで使用しているポートで、使用しない方が懸命です。

表示しているのは、最近コメントを頂いているMichaelさんから頂いた32x32ドットフォントです。


MichaelさんはLonganNanoで腕時計を開発中とのことで、スッキリした見やすいフォントです。
全フォントはこんなかんじです。
LonganNanoはRTC機能もあるので、トランシーバーに時刻表示機能をつけるのもいいかもしれませんね。




Sipeed Longan Nano のテスト その6

2019-12-19 | その他
その6です。

16ドット東雲フォントを表示してみましたが、気に入ったものがありませんでした。
他のフリーフォントを試してみればいいのかもしれませんが、とりあえず周波数表示用に太字で見やすいフォントが欲しいので、7セグフォントでデザインしてみました。

数字だけなので横8ドットに収まりそうです。8ドットフォントにしてもいいのですが、直線だけの単純なフォントなので、一筆書きで端点をつないで描画することにしました。
線幅が2ドットなので、0~9まで一筆で描くことができました。
黄緑色の数字上の1~dが描く順番です。


下のようにフォントの端点を並べたフォントデータの配列(char font[])と、端点の数は数字によって異なるので、各数字の開始位置を示す配列(int pos[])で構成されます。
例えば、0の開始座標は(1,1)なので、1バイトにパックして0x11、次の端点は(6,1)なので0x61です。
--------------------------------
char font[] = { // C Pos
0x11,0x61,0x6e,0x1e,0x12,0x52,0x5d,0x2d,0x23, // 0 0
0x51,0x61,0x6e,0x5e,0x52, // 1 9
・・・
};
int pos[] = {
// 0 1 2 3 4 5 6 7 8 9
0, 9, 14, 26, 38, 48, 60, 74, 80, 93, 104
};
--------------------------------
以前5x7ドットと10x14ドットを同様の方式で作ったことがあるので、これを流用してもいいのですが、今回は数字だけなのと、LCD.Cでサポートされたフォントとの兼ね合いもあり、で新たにフォントデータを作りました。

表示してみました。
現状は2ドットの線幅で横8ドットですが、もう少し太らして横12ドットくらいがいいのかもしれません。


<追記>

横12ドットフォントのデザインをしてみましたが、一部の線幅を3ドットにしたところ、うまく一筆書きができませんでした。
そこで発想を変えて、例えば0では中心も含めて横11ドット縦14ドットを黒く塗りつぶして、中心の四角を白色で塗りつぶすことにしました。
白抜きにするためのデータは1~2個なので多くても2バイトに収まります。
2と3の例を下に示しましたが、最初に0-0の四角を黒く塗りつぶし、1-1と2-2の四角を白く塗りつぶします。
フォントに必要なデータ量をかなり削減できましたが、こういう芸当ができるのも単純な7セグフォントの利点です。


表示してみました。
中央の横線のみ2ドットですが、とりあえずこのフォントを使用しようと思います。
全体的なレイアウトをして余裕があれば縦17ドットに変更します。
線幅は全部2ドットにする方がスッキリするかもしれませんね。


この後は3桁ごとに少数点を半角で表示して9桁の数値を表示できるようにします。

<追記>

結局、線幅2ドットに統一しました。


フォントデータです。だいぶデータ量を削減できました。赤色がアクティブなVFOのつもりです。
--------------------------------
char font[] = {     // C Pos
 0x33,0x9c,      // 0 0
 0x11,0x5e,0x81,0xbe, // 1 2
 0x13,0x96,0x39,0xbc, // 2 6
・・・
};
int pos[] = {
 0,2,6,10,14,18,22,26,28,32,36
};
--------------------------------

<追記>

無線機パネルの画面レイアウトをしてみました。
表示内容は、VFO A/Bの周波数、Sメータ、周波数ステップ、送受信(Rx/Tx)、RIT周波数、モード(USBなど)です。
せっかくのカラーLCDなので色を付けてみました。



Sipeed Longan Nano のテスト その5

2019-12-17 | その他
その5です。

16ドットの東雲フォントは8種類ありますが、実際に表示してどのフォントを使用するか決めたいと思います。
フォントごとに配列を作成し、各フォントを表示できるようにしました。

----------------------------------
u8 Font01[] = {
// cshnmk16.bdf
// 0123456789
// STARTCHAR 2330 824f 0
0x00,0x00,0x03,0xc0,0x04,0x20,0x08,0x10,0x08,0x10,0x10,0x08,0x10,0x08,0x10,0x08,
0x10,0x08,0x10,0x08,0x10,0x08,0x08,0x10,0x08,0x10,0x04,0x20,0x03,0xc0,0x00,0x00,
・・・・
// STARTCHAR 2339 8258 9
0x00,0x00,0x03,0xc0,0x04,0x20,0x08,0x10,0x10,0x08,0x10,0x08,0x10,0x08,0x08,0x18,
0x04,0x28,0x03,0xc8,0x00,0x10,0x00,0x10,0x00,0x20,0x00,0xc0,0x07,0x00,0x00,0x00,
};

u8 Font02[] = {
// cshnmk16b.bdf
・・・・
};
・・・・

----------------------------------
表示してみました。




Sipeed Longan Nano のテスト その4

2019-12-14 | その他
その4です。

シリアル出力とLCDへの表示ができるようになったので、I2CとADCのテストをしてみました。

Longan Nanoにはファームウェアライブラリが用意されており、サンプルもあるのですが、色々なケースのサンプルがあり、どれが基本的な例なのか良くわかりません。
作例を調べてみまいたが、ファームウェアライブラリの使用例は見つかりませんでした。

ファームウェアライブラリではありませんが、独自にライブラリを開発された方のブログを見つけたので、「なんとなく活動記録。」さんのライブラリを使用させて頂きました。
こちらのページからI2Cを、こちらのページからADCのライブラリを使用しました。

I2Cのテスト写真です。
I2Cの使用例は、マスタとして、スレーブへコマンドを送信するケースがほとんどですが、今回はSi5351aに周波数を設定することにしました。
Si5351aの設定はuBITXのライブラリを使用しました。
Si5351aのスレーブアドレスは0x60の7ビットなのですが、引き続くR/Wビットを含めて0xc0で指定しないと動作しませんでした。


ADCのテスト写真です。

Gndに接続したとき

3v3に接続したとき

AD変換は12ビットなので0~4095のハズなのですが、誤差にしては大きすぎます。
リファレンスは電源電圧と同じと思い込んでいる状態なので、何かの設定が必要なのかもしれません。




Sipeed Longan Nano のテスト その3

2019-12-05 | その他
その3です。

任意の漢字の表示ができるようにしました。

フリーの漢字フォントを探したところ、東雲フォントが見つかりました。
16ドットフォントもあり、LCDライブラリがそのまま使えそうです。
東雲フォントはBDF形式のビットマップフォントで下の例はJISコード=2121で、BITMAP以降の16行が16進数で表示したフォントデータです。
1行目が16x16ドットの一番上の1ドット行(0,0)-(15,0)に相当します。2行目は(0,1)-(15,1)。
LCDやプリンタ用のフォントデータは縦8ドットで1バイトの形式が多いのですが、汎用のフォントデータなので素直な並びです。

STARTCHAR 2121
ENCODING 8481
SWIDTH 960 0
DWIDTH 16 0
BBX 16 16 0 -2
BITMAP
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
ENDCHAR

試しにLCDライブラリ中のoledfont.hの漢字の1文字を置き換えてみたところ、鏡文字で表示されたので、ビットの並びが左右逆なようです。
フォントデータのビット列を反転させてもいいのですが、LCD_ShowChines()の1<<iを128>>iに変更して逆にスキャンするようにしました。(><は小文字)

フォントファイルの形式が判明したので、bdf形式ファイルからJISコードの行とビットマップ部分を抜き出して、コメントと16進数での配列定義に変換してファルへ出力しました。
上の2121は下のようになります。

// STARTCHAR 2121
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

変換プログラムは勉強を兼ねてrubyで開発しました。

これで表示したい漢字のJISコードが分かればこのファイルを検索してコピペすればOKですが、単純作業となるので、SJISで記述された文字列からSJISコードに変換、さらにJISコードに変換してこのファイルを検索して必要な部分を抽出して出力するようにしました。
STARTCHAR、JISコード、SJISコード、SJIS文字の順です。
漢字コードが混在しているので、厄介でした。

// JJ1WKN
// STARTCHAR 234a 8269 J
0x00,0x00,0x00,0x70,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,
0x00,0x20,0x00,0x20,0x00,0x20,0x08,0x20,0x04,0x40,0x03,0x80,0x00,0x00,0x00,0x00,
// STARTCHAR 234a 8269 J
0x00,0x00,0x00,0x70,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,
0x00,0x20,0x00,0x20,0x00,0x20,0x08,0x20,0x04,0x40,0x03,0x80,0x00,0x00,0x00,0x00,
// STARTCHAR 2331 8250 1
0x00,0x00,0x00,0x80,0x00,0x80,0x01,0x80,0x02,0x80,0x00,0x80,0x00,0x80,0x00,0x80,
0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x01,0xc0,0x00,0x00,

検索したところ、外部ROMやSDカードに全部の漢字フォントを入れる例がありましたが、テキストビューワーを作る訳ではないので、電光掲示板や画面の一部ならソースに記述する方式で十分です。
LonganNanoにはSDカードが付いているのでそのうち試してみようと思います。

最後に「中景…」の代わりに「JJ1WKN」を表示させた例です。






Sipeed Longan Nano のテスト その2

2019-11-29 | その他
その2です。

JE2IMS/1さんにLCDライブラリの在り処を教えて頂いたので、早速テストしてみました。

先ずはサンプルを実行してみました。

サンプルのmain.cはBadApple!デモと同じでしたが、シリアルへの出力ルーチンが入っていたので、テストしてみました。
シリアル出力はUSB経由ではなく、USBコネクタの反対側のシリアルピンからUSBシリアル変換モジュールを経由してPCと接続する必要があります。

printfでそのままシリアル出力できましたが、改行を入れないとバッファから出力されないようです。
シリアルモニタでは改行コードの設定を変えてみましたが、改行はされないので\n\nでいきます。

8x16ドットフォントでASCII文字の表示ができますが、1行19文字しか表示できません。
19文字を超えて出力しようとすると自動的に改行され、5行を超えると画面が赤色でクリアされますが、以降の文字が表示されます。


画面のUPです。


1行19文字の制限はライブラリを調べたところ、下記ではじかれているようです。
if(x>LCD_W-16||y>LCD_H-16)return;

画面の端は表示に問題があるのかもしれませんが、「x>159」に変更したら、20文字x5行表示ができました。
ついでにフォントファイルに例が記述されていた漢字も表示してみました。
漢字の表示は表示したい漢字のフォントを抽出して記述する必要があります。
16x16フォントで10文字x5行しか表示できませんが、それなりに使えそうです。



以前「Tanukino デジット32x16ドットマトリクスLEDモジュールで漢字表示」で漢字フォントファイルから必要な漢字のフォントを抽出して電光掲示板を作ったことがあります。