USB充電と自動オン/オフにより、「スマート」カー電源を5vにはんだ付けします

私は怠け者で、快適さが大好きなので、あらゆる種類の自動化が大好きです。 DVRを持っている車では、ナビゲーターを使用することがあります。携帯電話やタブレットを自分や家族/友人に充電する必要があることがよくあります。 これらのニーズの結果、車全体がワイヤーと充電器で覆われているため、Tからシガーライターを引き抜く方法と、次の充電器がシガーライターの接触を失ったかどうかを常に考える必要があります。 もちろん、車の中でワイヤーとチャージのボールがゆっくりと形成され、これは審美的に楽しいだけでなく、中毒者を引き付けることができます。



ある時点で、すべてが疲れてしまい、普遍的なことをすることになりました。



チャレンジ:






解決策:


解決策は非常に明白です。 自動化と何らかの電圧変換器用のマイクロコントローラーですが、変換器には論理レベルの作業をオン/オフする機能が必要です。



車の中での配置は少し複雑でした。最初はカップホルダーにUSBを挿入したかったのですが、このアイデアを捨てました。 審美的に喜ばない、グラスを入れない、そして次のワイヤーのかせは幸せではなかった。 次に、アームレストとそこにある引き出しに注目しました。 それがあなたが必要としたものでした! 引き出し自体は引き出されています-つまり、簡単に手入れができ、肘掛け自体に多くのスペースがあります-それは、電子機器が静かに収まることを意味します USBコネクタはボックスの側面に簡単に挿入でき、不要な充電ワイヤはコネクタから引き抜かずに引き出しに隠すことができます。



充電用のUSBコネクタに加えて、DVRには電力が必要でした。 これを行うために、ワイヤーがアームレストからバックミラーに引き伸ばされ、別のUSBコネクタがミラーに接着され、DVR用のコネクタが接続されました。



コネクタの配置ですべてがはっきりしていれば、電子機器に小さな問題がありました。



最初はLM2596です。



これはあなたの仲間ではありません

前に、eBayのLM2596チップに組み立てられた安定化電源のハンカチをいくつか注文しました。 大電流(自分の-10W)で充電するにはiPadの充電が必要でした。 私は充電を行い、すべてが完璧に機能し、充電は約2.1Aから5.1V(入力電圧約12-13V-UPSバッテリー)を出力しましたが、マイナスが1つありました-非常に暑かったです! ボード全体が加熱されたため、プラスチックボックスが溶け、ボード自体が暗くなっていました( ラジエーターそこ固定されていたにもかかわらず)。 効率を測定した結果、大電流では効率が約60%であることがわかりました。

さらに悪い点は、そのような中国のハンカチには独立した制御脚がなく、マイクロ回路の一方の脚をボードからはんだ付けし、配線をはんだ付けする必要があることです。

LM2596上のモジュールをどうするかは明確ではありません。






KIS-3R33S-中国の「変換」技術の奇跡。



ウールeBay、私はしばしばいくつかのKIS-3R33Sモジュールに会いましたが、その説明では3Aを提供することが示されました。 モジュールのコストも印象的でした-10個購入すると、各モジュールは送料無料で約50〜90セントかかります。 Yandexを読んだ後、これはMP2307チップ上の非常に優れたモジュールであり、調整可能なコンバーターに変換でき、添付ファイルからは2つのコンデンサー(入力用と出力用)しか必要ないことが明らかになりました。

そして重要なこと-2Aの負荷でも、まったく熱くなりません!

販売されているすべてのモジュールははんだ付けされています。 彼らがそのような量でそれらを得る場所は完全に理解不能です;)

技術 チップパラメーターMP2307
入力電圧-4.75-23V

出力電圧-0.925-20V

最大連続出力電流(短期)-3A(4A)

変換周波数-340kHz

効率-最大95%

短絡および過熱に対するビルトイン保護

制御入力

一般に、約5セントで多数のモジュールが購入され、作業が沸騰し始めました。



PSUの準備。



デフォルトでは、KIS-3R33Sモジュールは3.3Vに設定されているため、モジュールを少し調整する必要があります。 このモジュールを変更するためのさまざまなオプションがあります( たとえば )が、最小限の変更で対応することにしました。 データシートKIS-3R33Sスキームを使用して、次の変更リストをコンパイルしました。



  1. モジュールを開きます
  2. 赤でマークされた抵抗とツェナーダイオードを取り外します。 (いくつかは黄色でマークされたコンデンサを取り外します-私はしませんでした)
  3. ADJモジュールの負と入力の間に「出力」抵抗(0.125ワット)Rをはんだ付けします(後でケースを閉じることができるように)。 抵抗器は紫色です。 抵抗値に応じて、公称値が9.1kom〜10komの抵抗器には、異なる電圧(それぞれ5.28V〜5.15V)があります。 この抵抗は、すでに設置されている3.3k抵抗と直列に接続され(つまり、抵抗の合計抵抗は3.3 + 9.1 = 12.4になります)、抵抗R1と並列に接続されます。
  4. モジュールを元に戻す
  5. ほぼ指定された容量の電解コンデンサをモジュールの入出力にはんだ付けします。 コンデンサの電圧は小さくすることはできませんが、大きくすることはできます。


コンバーターを全負荷で動作させたくないので、2つのコンバーターを使用することにしました。1つは2つのUSB + USBを持ち、DVRに電力を供給し、2つ目は2つのUSBのみです。



原則として、すべてがすでに機能し、充電できます。自動化が必要ない場合は、読み終えることができます:)



マイクロコントローラー



電源は最も単純であるため、作業のロジックを実装する必要があります。 車の車内ネットワークの電圧でエンジンを始動するかどうかを制御するのが最も簡単であるように思えました。 車の中でテスターと座った後、次のデータを受け取りました。



個別の要素で電圧制御を行うことは可能でしたが、製造容易さ、小型サイズ、機能性のハードコアが必要でした 。 同様に、 フリックホイッスル、光と音の効果がタスクリストにあったので、私はAttiny13A MKを使用することにしました。



管理スキーム。




スキームは単純なようです。 MKの入力に必要な電圧を設定しやすくするための、従来のチューニングである抵抗RV2。 LS1 Bipperは通常のコンピューターで、LEDとボタンもコンピューターです。 回路全体はKrenki(78L05)によって駆動されます。 MK出力はKIS-3R33Sモジュール制御に接続されています-高レベルがオンになり、低レベルがモジュールをオフにします。



プログラム


プログラムは最も難しいタスクであることが判明しました。 私はアセンブラーが得意ではなく、主に例からCを知っています。 プログラムを何度も書き直して必要な機能を実現し、使用可能なメモリに収めました。その結果、MKメモリは100%占有されました。

作業のロジックは次のとおりです。



PonyProgのAdovコードとfuzy
/***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Professional Automatic Program Generator Chip type : ATtiny13a AVR Core Clock frequency: 4,800000 MHz Memory model : Tiny External RAM size : 0 Data Stack size : 16 *****************************************************/ #include <tiny13a.h> #include <delay.h> #define ADC_VREF_TYPE 0x00 unsigned char iter3=10; unsigned char i,POFF, sec, nobeep; //POFF -      ; // Read the AD conversion result unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCW; } // void beep(unsigned char on) { //  PORTB.2=1; // ,    if(!nobeep)DDRB.0=1; // on*100  while(on){on--; delay_ms(100);} //    PORTB.2=0; DDRB.0=0; } //   void on() { if(POFF!=0)return; //  PORTB.4=1; iter3=10; beep(5); POFF=1; } //   void off() { //  - ,  -  if(iter3 > 1) { //         ,   delay_ms(30000); iter3=1; return; } //   if(PORTB.4)beep(30); //  PORTB.4=0; if(POFF) POFF--; iter3=1; } // External Interrupt 0 service routine //    interrupt [EXT_INT0] void ext_int0_isr(void) { // Place your code here //    beep(1); //   ,     if(!PINB.4) { on(); POFF=0; } //   ,       +1      //  ( 2- ,  ) else { // +1    iter3=iter3+20; //     i=8; while(!PINB.1){ i--; delay_ms(250); //   2- .? ! if(i==0) { //,   ,             beep(1); iter3=0; //  2,         . //   ,       . POFF=2; } } } } // Declare your global variables here void main(void) { // Declare your local variables here // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Func5=In Func4=Out Func3=In Func2=Out Func1=In Func0=Out // State5=T State4=1 State3=T State2=0 State1=T State0=0 PORTB=0x10; DDRB=0x15; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 1,172 kHz // Mode: Normal top=FFh // OC0A output: Disconnected // OC0B output: Disconnected //TCCR0A=0x40; //TCCR0B=0x02;//x05;   TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 4,688 kHz // Mode: CTC top=OCR0A // OC0A output: Toggle on compare match // OC0B output: Disconnected TCCR0A=0x42; TCCR0B=0x05; TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // External Interrupt(s) initialization // INT0: On // INT0 Mode: Low level // Interrupt on any change on pins PCINT0-5: Off GIMSK=0x40; MCUCR=0x00; GIFR=0x40; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=0x00; // Analog Comparator initialization // Analog Comparator: Off ACSR=0x80; ADCSRB=0x00; DIDR0=0x00; // ADC initialization // ADC Clock frequency: 600,000 kHz // ADC Bandgap Voltage Reference: Off // ADC Auto Trigger Source: ADC Stopped // Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: Off DIDR0&=0x03; DIDR0|=0x08; ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83; #asm("sei") //  DDRB.0=0; while (1){ delay_ms(1000); //  13.8 -  if( (0.0048828125*read_adc(3)) >=3.42) on(); //  11.8        if ( (0.0048828125*read_adc(3)) <3.23 || !iter3 ) off(); //  13.3 -   else if( (0.0048828125*read_adc(3)) < 3.38) { // ?   if(PINB.4) { nobeep=1; beep(1); nobeep--; //  if(iter3 == 10) { if(sec==1) // 3   for(; sec<4; sec++) { beep(2); delay_ms(200); } } if(sec>=180) { iter3--; sec=0; } sec++; } //    ,       POFF=0; } //      else if(iter3 > 1) PORTB.2=1; }//end while }
      
      





PonyProgプログラマーの場合、ヒューズは次のように設定する必要があります









「正しい」充電。


デュアルUSBが使用され、一方のUSB出力の各ペアでは、中央の接点が短絡されているため(ほとんどのデバイスはUSBに接続されず、充電されていることを理解します)、2番目のデバイスにはプルアップ抵抗があり、Appleデバイスが接続されていると見なします彼らの母国の電荷に迅速に充電されます。

Appleデバイスが「ネイティブ」充電を認識する方法。
多くの方法。 オプションとして:

非ネイティブから「ネイティブ」の電荷を取得するには、データ接点に2.00Vと2.70Vの電位を印加する必要があります

これらの宗派の最も単純な仕切り:



そのような値がない場合は、分圧器や抵抗器の他の値を計算できます



サムスンのデバイスには充電の「 カスタム回路 」もありますが、ショートした中間接点があっても、SGS2電話は600mAを消費しました。これは充電には十分だと思います。



車内の設計と配置。


概略的には、すべてが次のようになります。





私は既存のボックスの下で支払いを行い、LUTomを行いました。

血、勇気








4個のUSBがボックスに適切に配置され、LEDが近くに引き出され、ビッパーの音がよく聞こえるように穴(1mm)が作られました。



そしてコインの裏側。 アルミニウムの箱の中には、制御盤と2つのコンバーターがあります。 ボックスは、アームレストに挿入されているボックスの底に粘着テープで接着されています。





そして、車の中ではすべてが文化的に見えます(私はまだ通常ボタンを付けていません:)。





鏡は少し悪いです。





アームレストにあるシガーライターから食べ物を取りました。 コネクタのすべての接続。システム全体を簡単に引き出して、アップグレードのために持ち帰ることができます。



今では、細いワイヤーを使用することで、すべてをより美しくできることを理解しています。 おそらく春にやり直すでしょう。



回路、プログラムソース、ファームウェア、ボードクラフトを含むアーカイブは、 ZIPでダウンロードできます



PS。 2週間、私はこの投稿を書くつもりでしたが、始めようと思ったのは同じような記事だけでした。



All Articles