OLEDディスプレイを備えたプログラム可能なポケット電源
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> ![]() |
| |||
![]() |
| |||
|
アプリとオンラインサービス
> ![]() |
|
このプロジェクトについて
アイデア
趣味の人として、私たちは頻繁にプロトタイプに電力を供給し、プロジェクトの電圧、電流、電力制限をチェックし、新しく購入したコンポーネントをテストする必要があります。可変電源の必要性は、この作業ラインに常にあります。しかし残念ながら、私たち全員がベンチ/ラボ電源を持っているわけではありません。購入すると高価で、持ち運びが必要な場合はかさばります。私は、プロトタイプに電力を供給し、コンポーネントをテストするための携帯性と生産性を備えた、より低コストのプログラム可能な電源を探していました。そこで、作ることにしました。
次の機能があります。
- プログラム可能
- 充電式
- ポータブル
- ステップ変数
- 電圧/電流/電力計
- 保護されたリレー
- カスタマイズ可能、コンパクト、かわいい
- クールなOLEDユーザーインターフェース
- プッシュボタンのユーザーコントロールとメニューベースのナビゲーション
- より多くの機能のためにアップグレード可能なファームウェア!
そして、低電力エレクトロニクスプロジェクト向けの最も用途の広い電源。
実写!
デバイスの動作を示すこのビデオをチェックしてください:
デバイスの仕様
デバイスの仕様は次のとおりです。
- 最大出力DC負荷電流:400 mA
- 電圧範囲:2.0ボルト-12.0ボルト
- 電圧ステップ:約0.1ボルト
- 最高の効率:75%
- 電流測定精度:+/- 1 mA
- 電圧測定精度:+/- 0.02ボルト


このデバイスはクイックプロトタイプであることに注意してください。大容量のバッテリー、追加の電子機器、アップグレードされた設計を使用することで、0〜30、さらには負の供給とより多くの出力電流を作ることが可能です。
動作原理
設計自体はハードウェアを集中的に使用します。ここでたくさんのことが起こっています。システムの大まかなブロック図は次のようなものです:
<図>
電源は、USB充電式の3.7 VLi-Poバッテリーです。最初にXL6009DC-DCブーストモジュールを使用して、Li-Poから15.6ボルトを生成します。 MCUを実行するために、7805レギュレーターを使用して5ボルトも作成します。
Arduino UNOクローンAtmega328Pは、2つの割り込みベースのユーザー入力スイッチ、エレガントなOLED出力ディスプレイに接続されています。 Rx / Tx / DTRファームウェア(スケッチ)は、PCからUSB /シリアルを介してポートをアップロードします。 (モジュール1)
プロジェクトの中心は、 MCP4131デジタルポテンショメータ(Digipot)+ LM 358 OpAmp です。 ベースのステップ電圧発生器。この電圧は、LM317調整可能レギュレータの制御電圧です。 (モジュール2)
Digipotは、ArduinoからPseudo-SPIのようなコマンドを介して制御されます。 LM317は、出力ピン電圧が ピン電圧の調整よりも常に1.25ボルト高い INPUTピンの電圧が十分に高い場合(ここでは15.6ボルト)。 (モジュール3)
ステップ電圧は調整ピンに供給され、ユーザーの必要に応じてArduinoからの可変出力を作成します。
ADCは、監視と保護に関連するすべての電圧を測定します。バッテリ電圧、ブースト電圧、充電センス電圧、および出力電圧は、ADC範囲(ここでは0〜1.1ボルト)に給電するために分圧器ネットワークを介して調整されます。私は、1.1ボルトの基準電圧を生成するArduinoの内部基準を使用しました。
電流検出の場合、出力負荷からのリターン(負荷Gnd)は、1オームの電流検出抵抗と直列にシステムGndに接続されます。外部負荷に電流が流れると、このセンス抵抗にも電圧降下が発生します。この電圧は、OP07高精度オペアンプを介して増幅され、ADCピンの1つに供給されます。
最後に、バッテリー充電のために、USBからの5ボルトが4007ダイオードと直列に接続され、5オームの電流制限抵抗がLi-Poバッテリーに接続されます。これは大まかな充電方法であり、Li-Po充電には最適ではありません。
サマーリー作戦: MCP4131デジタルポテンショメータは、約40mVのステップで0〜5ボルトの範囲のステップ電圧を生成し(7ビット10KDigipotは129ステップ5V / 128 =0.40 mV)、LM358によって2.5倍に増幅されて0-12.5になります。 0.1ボルト刻みの電圧制御範囲。この増幅されたステップ電圧信号は、LM317の調整ピンに供給されます。 LM317は、外部負荷に供給されるV_Step +1.25ボルトの出力電圧を生成します。外部負荷のリターン/グランドは、1オームの電流検出抵抗を介して内部グランドに接続されています。仮定: x mA電流が外部負荷に流れているため、 x が生成されます。 1オームの電流センス抵抗でのmV降下(オームの法則V =I * R)。この小電圧信号は、2.5Xゲインで構成された低オフセット(10uV)オペアンプOP07に供給され、2.5 x を生成します。 mV出力。 Arduino ADCは、1.1ボルトの内部リファレンスで構成されているため、0 -1100 mVの電圧を約1mV(1100/1023)のステップで検出できます。 OP07の出力は電流検出用にArduinoADCに接続されています。これが電流制限が400mAである理由です。 OP07のゲインを変更することで増減できます。同様に、LM358のブースト電圧とゲインを変更することにより、出力電圧範囲を変更できます。他の電圧は、ADC範囲に適合するように電圧を減衰させる抵抗分圧器ネットワークで測定されます。ラッチリレーには2つのコイルがあります。いずれかのコイルに瞬間的な電力を供給することにより、リレー接点を切り替えることができます。一度切り替えるとそこに留まるので、コイルの電源はすぐにオフになります。
プロジェクトの構築
まず、単一のスイッチソケットボックスから始めて、バッテリー、USB充電ポート、電源スイッチなどを配置するために必要なカットと調整を行います。
<図>
次に、ヒートシンクはDC-DCブーストモジュール用の銅テープとコインで作られています。
<図>

ブーストモジュールはソケットボックス内に配置されます:
<図>

上記のパーツを使用して、次の3つのモジュールが作成されます。
- Arduino + I / O +コントロールモジュール
- ステップ電圧と調整可能なレギュレータモジュール
- 電流検出モジュール


最後に、すべてのボード間のクモの巣の接続が接続され、はんだ付けされます。
<図>
ホットグルーをフィラーとして使用した後、最終的にそれができました:
<図>
ファームウェアの開発と操作手順
ファームウェア(Arduino Sketch)は現在1.0.2ベータ版です。現在、すべての機能が利用できるわけではありません。ただし、電圧の制御、リレーの接続/切断、情報の表示などの最も重要な機能は有効になっています。 void setup()で
さまざまな外部ハードウェアに関連付けられたArduinoピンをウォームアップするための初期化機能はほとんどありません。
入力 :出力電圧を増減するための2つの割り込みベースの入力ボタン、アクセスメニューがあります(このバージョンでは使用できません)。 Arduinoピン2および3のINT0およびINT1は、FALLING EDGEINTERRUPT用にコード化されています。デバウンス用の機械式スイッチと並列に2つのコンデンサが表示されます。ユーザーがこれらのスイッチを押してリレーを介して出力をオン/オフしたり、電圧を増減したりするときに割り込みをトリガーするコードが書き込まれます(ベータ版)。
出力 :1306 OLEDは、ADCからデータを取得する出力情報、内部タイマー(デバイスの稼働時間用)、および出力の有効化/無効化ステータスについてユーザーに通知するフラグ変数を表示します。 U8Gライブラリに基づいて、OLEDは情報をテキストと数値として印刷します。グラフィック(アナログタイプ)表現を使用する予定です。
SSD1306(WaveshareのOLED)clk、din、cs、d / c、resの5つのデジタルピンがArduino 10、9、11、13、12ピンに接続され、それに応じてプログラムされます。メインループ内 update_display()
OLEDの情報を更新するために関数が毎回呼び出されます。
Atmega328Pの内部タイマー1は、時間を追跡するために1秒ごとに定期的にトリガーするように構成されています。
制御: MCP 4131デジタルポテンショメータは、 increment_digipot()
を備えたコントローラです。 & decrement_digipot()
CS、Clk、データピンとしてピン6、7、8を使用して、適切なクロッキングと遅延でデータがシフトアウトされる機能。それは遅いソフトSPIのようなものです。私はすでにどこかでハードウェアSPIピンを使い果たしたので、これが唯一の解決策でした。
2つのデジタルピン4と5は、ラッチングリレーを制御するために使用されます。短い高パルスがリレー駆動トランジスタに供給され、2つのコイルに通電してリレーを反転させます。自動(過負荷/短絡時)またはユーザーによる手動の両方で発生します。
ADC: calc_VI()
メインループの関数は analogRead を実行します
20倍の平均電圧および電流情報を取得し、新しい情報の変数を更新して、ディスプレイに出力します
スケッチは複数のタブで記述され、さまざまな操作に関連付けられたさまざまな機能のコードを整理します。 ADC、Digipot、 Display_Fn
があります 、[割り込み]、[リレー]、および[タイマー]タブで、すべてのユーザー定義関数を配置します。すべての機能を説明するコメントも追加してみますが、これらの機能は特定のタスクを実行する複数のArduino関数に基づいているため、理解するのは難しいことではありません。
制限
このデバイスにはいくつかの重大な制限があります:
- 電圧は2.0Vを下回ることはできません
- 電圧出力は連続的ではなく段階的です
- 電流測定により、大電流のグラウンドシフトが発生します
- ADC測定の解像度は低くなります
- 低電圧大電流負荷では、効率はクラスで最悪です
- 非標準で少し安全でないLi-Po充電
参考資料
これらのチュートリアルで各コンポーネントの詳細を学ぶことができます:
- 回転式ポテンショメータ
- ボタンチュートリアル
結論&
このプログラム可能な電源は、プロジェクト/プロトタイプをより効率的に作成するのに役立ちます。マルチメータを使用せずに電圧電流電力を測定します。
コード
- Arduinoプログラマブルポータブル電源
- コードバージョン1.0.1ベータ版
- コードバージョン1.0.2ベータ版
- コードバージョン1.0.3
Arduinoプログラマブルポータブル電源 Arduino
Ver 1.0.1、コメントにピン配置情報//ピンリセット、スケッチをアップロードするためのD0&D1 // OLEDディスプレイを制御するためのピンD9、D10、D11、D12、D13 // V_boostを検出するためのADCA0ピン// V_battを検出するためのADCA2ピン(LiPo)// I_Outputを検出するためのADC A3ピン(負荷)// V_USBを検出するためのADC A4ピン(充電)// V_Outputを検出するためのADC A5ピン(負荷)//ラッチリレーの2コイル駆動ピンD4&D5#define RC1 4#define RC2 5 //ピンD2&D3に接続されたユーザー入力スイッチ#define SW1 2#define SW2 3 //デジタルポット制御ピン用のピンD6、D7、D8#define CS_PIN 6#define CLK_PIN 7 #define DATA_PIN 8volatile uint8_t Switch1 =1; volatile uint8_t Switch2 =1; float V_Out =0.0; float I_Out =0.0; float V_Bat =0.0; float V_Bst =0.0; float V_Chg =0.0; uint32_t time =0; #include "U8glib。 h "// OLEDディスプレイ制御ピン// SSD1306 oled waveshare(clk、din、cs、d / c、res); //これはWAVESHAREU8GLIB_SSD1306_128X64 u8g(10、9,11、13,12); void setup(void){//必要に応じて画面を反転しますanalogReference(INTERNAL); u8g.setRot180(); button_init(); relay_init(); init_timer1(); digipot_init(); } void loop(void){update_display(); calc_VI(); if(Switch1 ==0){rc1_latch(); Switch1 =1;増分デジポット(); } if(Switch2 ==0){rc2_latch(); Switch2 =1; decrement_digipot(); } delay(100); }
コードバージョン1.0.1ベータ C / C ++
プレビューなし(ダウンロードのみ)。
コードVer1.0.2ベータ版 C / C ++
テキスト/ボックスの配置のバグ修正過負荷トリップのバグ修正
次のリリースでは、さらにいくつかのバグが修正される予定です。
プレビューなし(ダウンロードのみ)。
コードver1.0.3 C / C ++
電源投入時の出力リレーの無効化のバグ修正電源投入後の自動設定出力電圧5.00vのバグ修正
プレビューなし(ダウンロードのみ)
回路図
ホワイトボードに描かれています! 




製造プロセス