投稿

5月, 2025の投稿を表示しています

【充電回路】TP4056 保護回路付き

イメージ
DW01の保護回路の動作を確認し、 https://funasover.blogspot.com/2025/05/dw.html TP4056の単体での充電回路の動作を確認 https://funasover.blogspot.com/2025/05/tp4056.html  をしたので二つを合わせてみる。保護回路が搭載されていない安いLiPoを使う事を想定すると保護回路も用意する。 【回路図】 【ブレッドボードでのテスト】 【動作】 基本的には、保護回路がない時と同じ動作を確認。 こうなると、保護回路側のnch-mosfetがちゃんと動いているのでB-とGNDが短絡して動いているので問題ないと思うが、やはり保護回路側がちゃんと動作しているかの確認は必要かと。 左が充電中。右は充電終了後。 保護回路越しでも動作を確認。

【充電回路】TP4056(保護回路は電池側)

イメージ
  充電IC TP4056。たぶん買った方が安いはずだが、自分の回路に組み込みしたいので準備。 【回路図】 データシート https://dlnmh9ip6v2uc.cloudfront.net/datasheets/Prototyping/TP4056.pdf に掲載されている通りの回路。 電源はUSB(携帯の古い充電器2A)から取得。テストなので、USB-Cの5.1kの抵抗はつけてはいないが、回路はいたってシンプル。1.2kの抵抗で充電電流を決めて、それ以外は充電状態を示すLEDのみ。 ブレッドボードに組んだのがこの状態。 テスト利用したバッテリーは、充放電の時間が短くて済む250mAhの小さいもので、保護回路がバッテリー側に用意されているタイプをまず利用。 【動作】 バッテリーを接続せず、電源に接続すると両方のLEDが点滅する。 B+とGNDの間に、10uFのキャパシターを接続していると赤側CHRGEは細かく点滅する。 ”Coruscate”瞬くという意味。 充電中は、青色STANDBYのLEDが消えて、赤色CHRGEのみ点灯。 充電が完了すると、赤CHRGEが消えて青色STANDBYが点灯。 電池の電圧が、テスターでモニタしていたが4.25Vになったところで、充電を停止。

【充電回路】保護回路DW01の動作確認

イメージ
前にやろうといろいろ調べていたが実行に移らなかった バッテリーからの給電でデバイスを動かせるようにと。 目標仕様は、USBから充電しながら、USBから給電されている時は、充電しながらも使える。そして、安いバッテリーを使う事を想定して保護回路も用意する。 【充電制御ICの選択】 電子工作専科  電源回りについてバイブル的に読ませていただいている神サイト。 その中から、TP4056を選択。TP4056とセットでよく使われている保護回路がDW01、DW01からの信号で遮断を実際にするNchのMOFET、FS8205A。この組み合わせにした。 アマゾンで大量かつ安価に売られているので、いざという時は部品はそちらから調達できる。 【データシート】 https://dlnmh9ip6v2uc.cloudfront.net/datasheets/Prototyping/TP4056.pdf https://cdn.sparkfun.com/assets/learn_tutorials/2/5/1/DW01-P_DataSheet_V10.pdf https://www.ic-fortune.com/upload/Download/FS8205A-DS-12_EN.pdf 【DIP化】 まずは、変換基板を用いて、DIP化。TP4056はICの裏が放熱のためのPADがついているが、それが、使った変換基板は、中央付近でスルーホール、それもホール金属が露出していたので、短絡するかもと間に、放熱が劣化するが、カプトンテープを挟んで絶縁。 【DW01の回路動作の確認】 まず、DWO1側のみ動作を確認する事を実施する。 神サイト に沿って、DW01の動作の確認をする。しっかり動作を理解しておこうというのが目的で。神サイトのように、電子負荷(アマゾンで3~4千円)を買うのもな・・・とテスタとかよくある計測器でやってみる 負荷には、10KΩの抵抗を付ける3~5Vとかの範囲ならほとんど電流は流れない。 回路自体は、B+は負荷に直接つながっているが、GND側とバッテリーのマイナスはFS8205AのソースS1,S2を介している状態。ゲートを操作する事で、S1,S2間が導通したり、遮断されたりという事で制御をするというのがざっくり動作原理。 ブレットボードで回路を組んでみた。 今回のテストでは、B+、B-...

3~4V→5V 昇圧回路 ME2108A50PG

イメージ
 Liポリマーのバッテリーを電源とするが、5VでないといけないICを駆動する必要があり、昇圧回路が必要に。 昇圧回路を作った事がないので、ここしばらく通勤途中とかの時間で調べてみた。 ① MC34063 定番らしい。秋月とかでも購入が可能。また、TJ34063AGDやNJM2360ADといった互換のICも入手可能。日本国内でも入手しやすい。しかし部品点数は少ないといいながらも結構ある事とそのため面積も結構かかる。一つ手元にもっておくと便利なIC。今回は5Vと決め打ちでよく、12Vなどに昇圧する必要がないし1Aというよな電流を取り出す必要がないという事で、自分でLTspiceでシュミレーションする事までやってみて採用するつもりでいたんだが今回は採用を見合わせ。また設計する機会があった時にメモだけ。 ・設計時に各部品のパラメーターを計算してくれるソフト https://sourceforge.net/projects/mc34063uc/files/1.1.0/ ・LTspiceでのシュミレーション https://note.com/amr1/n/n6847344cad15 ② ME2108A50PG 中華ICで5V決め打ちになるが、小型でかつ部品点数が少ない。アマゾンとかで売っているモジュールに採用されているIC。 電圧が5V出力とICの選択で決め打ち、かつ周波数も180kHzと固定なので、非常に部品点数が少なくて、小型にできる。という事で今回はこちら。 【データシート】 https://www.lcsc.com/datasheet/lcsc_datasheet_2410121321_MICRONE-Nanjing-Micro-One-Elec-ME2108A50PG_C236798.pdf 【部品】 メインのICはAliExpressで調達。 中国大陸からようこそ。 それ以外は秋月でも入出可能のため秋月から調達。 末版のME2108A50PGの50が出力電圧を示して、ME2108A33PGなら3.3V。その他、5.6V出力なども用意されている。出力が可変ではないので、出力に合わせてICの型番を変えて用意する必要がある。可変したい場合は、MC34063を使うのが吉。 【回路図】 基本的にはデータシートに載っている回路構成で回路図を書いてみた。使う部品の値は、ネ...

スーパーファミコン コントローラーの無線化プロジェクト:2コン対応準備(テスト)

イメージ
 準備段階という事で、2コン対応が完了しているものではありません。 【2コンへの対応(P/S、CLKのタイミング)】 2コンへの対応に向けて、SFC本体から送られてくるP/Sのタイミングを見てみたが、1コン、2コンともに、同じタイミング。 同じようにクロックも確認したが同じタイミングで入ってくる。 一つのICからの出力を分けているだけと思われる。(中身の回路を追った訳ではない) DATだけを2系統用意すればよくて、その他は1コンの信号を基にすれば十分 【ESPのダイレクトにGPIO書き込みと読み込み】 digitalWriteやdigitalReadを使うと一つのGPIOを順に操作する事になるので、一度に設定、一度に読み込みを実装できるようにしないといけないなあ~とテスト #define myPin1 14 #define myPinBit1 (1<<myPin1) #define myPin2 12 #define myPinBit2 (1<<myPin2) #define readPin1 4 #define readPinBit1 (1<<readPin1) #define readPin2 5 #define readPinBit2 (1<<readPin2) uint32_t regvalue= 0 ; void setup () {   Serial . begin ( 115200 );   pinMode (myPin1,OUTPUT);   pinMode (myPin2,OUTPUT);   pinMode (readPin1,INPUT_PULLUP);   pinMode (readPin2,INPUT_PULLUP); } void loop () {   WRITE_PERI_REG ( PERIPHS_GPIO_BASEADDR + 4 , myPinBit1 | myPinBit2);   regvalue= READ_PERI_REG (PERIPHS_GPIO_BASEADDR + 0x 18 );   Serial . println (regvalue, ...

スーパーファミコン コントローラーの無線化プロジェクト:動作バージョン1

イメージ
動作のバグが残っていた(  https://funasover.blogspot.com/2025/04/blog-post.html )スーパーファミコンのコントローラー無線化プロジェクト。 多少力技だが一旦の問題解決、完全動作。 本来は、BLE通信で低消費電力に作るべきだと思うが、まずまずはWiFiを利用している点はあしからず。BLE化は後ほど。また現時点ではブレッドボード品。BLE完了時点で基板を起こそうかと。 【以前の課題】 https://funasover.blogspot.com/2025/04/attachinterrupt.html SFC本体が発するP/Sのパルスを検出して、ボタン状態を本体に送り込む際、パルスの検出時間にバラつき(ジッター)があり、どうする事もできず。 おそらく、ESP-IDFなどの開発環境で開発すれば回避できるかもしれないが、お手軽Arduino環境下ではお手上げ。 【解決手法】 ESPのArduino環境下でのGPIOインターラプトは使えないのであれば、別のマイコンという事でCH32V003を使う。ESPとの間はSPIで通信。肝心なCH32V003のGPIOインターラプトのバラつきは非常に小さい事を動作を確認済み( https://funasover.blogspot.com/2025/05/ch32v003gpio-external-interrupt.html#more ) ICが一つ増えるが、50円のIC、上の図ではP/Sをレベルコンバーターを通しているが、CH32V003は5VトレラントのGPIOピンをもっているので、トランジスタを1つ割愛はできるので、トータルではフットプリントや部品点数もあまり変わらない。 【作製ステップ1】 コントローラー回路 現時点では、電源をバッテリーから取るという回路ではなく、USBから給電しているのであしからず。D1,D2,D5を用いているが、これは任意。スケッチの方も用いるピンに合わせて変更する。 ArduinoIDEスケッチ(コントローラー側) #include <ESP8266WiFi.h>   // WiFih> #include <WiFiUdp.h> #include "ESP8266TimerInterrupt.h"...

[CH32V003]GPIO EXTERNAL Interrupt

イメージ
GPIOによるインターラプト。 サンプルはネットで見つける事ができるのですが、 GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3);   この1行がよくわからないので調査。インターラプトに設定するピンを素直にPC3とかPD1とか指定させてくれれば良いのに、GPIO_PinSource3??? https://www.wch-ic.com/downloads/CH32V003RM_PDF.html EXTI0~EXTI7の8個の外部インタラプトが用意されている GPIO(Px0~Px7(x=A/B/C/D))に設定ができる ただし、EXTI0ならPx0と数字の部分が一致していないといけない。 EXTI0にPA0を割り当てると他のPB0,PC0,PD0に設定する事ができない。 という事か。 さっそくテストをしてみる。

[CH32V003] 48MHzの設定

イメージ
 CH32V003が安い!それなりに高機能!という事で使いはじめた。 EVTのサンプルプログラムには     printf("SystemClk:%d\r\n",SystemCoreClock);     printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() ); というのが入っていて、システムクロックをシリアルに表示するようになっている 何気なく見ていると24MHzであると表示されている。 CH32V003だとスペック上は48MHzであるが半分で動いている事になる。 これを48MHzにするには? main,c等が格納されているUserのフォルダに、system_ch32v00x.cというファイルがある このファイルで、設定ができるとのこと。 それを開いて、 とコメントアウトされているのを とHSE をコメントアウトして、HSIのコメントアウトをはずす。 するとシステムクロックが48MHzに設定できる。 24MHzの際のSPIの通信をキャプチャーすると160usecぐらいかかっていたのが、およそ100usecと半分近くになる事が確認できる。半分にはならないのは? 実は詳細は、 50円マイコンCH32V003Fを使う(4): クロック設定を読み込む | mcuXfamilyのブログ を見ると書いてくださっている通りですが・・・ せっかく水晶振動子なしで48MHzのクロックで動かせるMUPなので、動かしたい!という事でた面した記録 内部クロックに切り替えることでPA1,2もGPIOとして使える GPIOをめーいっぱい使いたい場合 https://github.com/shippoiincho/tk80_ch32v003

[ CH32V003]  CH32V003 のSPI SPI -- ESP8266 SPI slav

イメージ
 CH32V003 でのSPIは結構難しいという話で、あまり良い解を紹介しているものではないのであしからず。とりあえず最低限の事をやるといった状態なので。 前回、ESP8266をSPIのスレーブにして、Arduino Nanoをマスターをして通信することをテストした。 https://funasover.blogspot.com/2025/05/esp8266-spi-slaveesp8266spi.html Arduino Nanoは、互換品でも最近は、パンデミック以降半導体不足以降結構なお値段。そこでATmega328P単体をを購入して使うようにしているが、購入時に、以前からCH32シリーズ気になっていたのでポチリと一緒に注文していた10個かっても400~500円ですから。 ATTinyの愛用者ですが、それよりはるかに安く、容量、クロックともに優れている。 Lチカとかの基本動作は、他のサイトに任せるとし、SPI中心に。

[ ESP8266 SPI slave] ESP8266をSPIのスレーブにする方法

イメージ
ESPをSPIのスレーブにする事を試みる。ESPをマスターとしてSPIのICと通信するのはなんてことなく簡単でネットで調べれば例題がいやと出てくるが、スレーブ化するのには情報が少ない。 先人の方々の情報収集したところ、ESP8266のArduinoIDEのライブラリーが存在する。制約はあるようだが使わせていただき、ライブラリーをテストしてみる。  https://github.com/esp8266/Arduino/blob/master/libraries/SPISlave/examples/SPISlave_Test/SPISlave_Test.ino 【テスト1】 ライブラリーといっても、特に取り込みする訳でなくて、8266のライブラリーを取り込むとすでに含まれている。SPISlave_Testの方をESPにそのままアップロード。SPISlave_SafeMasterの方をArduinoNanoに。Nano側のMasterはloopの中を少し編集はしてやった。 void loop () {   delay ( 1000 );   send ( "Are you alive?" );   delay ( 1000 );   send ( "Hello Slave!" ); } Hello Slaveを送りつけるように少し編集。Helloが最初のsetupの一回だけなんで、入れてみたというだけ。 デバイス的には、コメント欄にあるとおりに     GPIO    NodeMCU   Name  |   Uno   ===================================      15       D8       SS   |   D10      13       D7      MOSI  |   D11   ...