7月のブログ更新が大幅に放置されていた原因は秋の地区運動会にあり、いまは電気工作よりも くす玉づくり の試作に励んでいる日々なのですが、最終的に「直径1mのビーチボールを型にしてボーガスペーパーを木工ボンドで貼り付けまくって厚みと強度を確保する」という製法になりそう。。。
くす玉づくりは皆さん苦労されているみたいなので、うまくいったら記事にしようと写真を撮りながら作業を進めております。
さて前編の記事がないのに、今回 (後編) と銘打ってしまいましたが
2017/07/16 QC2.0 モバイルバッテリーで 9/12V 生成し、デジカメ・DMC-G7 に給電
2017/07/20 QC3.0 モバイルバッテリーで半端な電圧を生成し、デジカメ等に給電
の続きとなります。
QC3.0 のモバイルバッテリーに対して定まった手順で信号を送れば、5V 未満の電圧を給電させることができるものの、最初の 1.25秒 はデフォルト 5V がそのまま出力されてしまうため、4.2V みたいな電圧を必要とするデジカメを相手にすると最初の 1.25秒 の間に壊してしまう可能性があるので何とかしないといけない、という課題が残っておりました。
ということで今回の回路図
米粒AVR・ATTiny10 の PB0/PB2 をそれぞれ D+/D- の制御に用いるのは前回と同じですが、PB1 を出力のスイッチにしてみました。
いつもハイサイドスイッチな回路ばかり出してますが、今回はサボってローサイドに甘んじてます。
あと作動灯も追加してみました。
(電圧を気にしないですむよう、抵抗ではなく 1mA な定電流ダイオードを使って LED の電流制限)
/* * USB-QC3.cpp * * Author : wakwak_koba */ #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> /* QuickChargeに対して出力電圧を指定する。 PB0:D+ PB2:D- */ void QC3_decrement(const int count) { for(int c=0; c<count; c++) // -200mv/count { _delay_ms(50); // TGLITCH_V_CHANGE:50ms(40ms〜) PORTB &= 0b11111011; // PB2:LOW(D-:0V) _delay_us(200); PORTB |= 0b00000100; // PB2:HIGH(D-:3.3V) } } void QC3_increment(const int count) { for(int c=0; c<count; c++) // +200mv/count { _delay_ms(50); // TGLITCH_V_CHANGE:50ms(40ms〜) PORTB |= 0b00000001; // PB0:HIGH(D+:3.3V) _delay_us(300); PORTB &= 0b11111110; // PB0:LOW(D+:0.6V) } } void QC3_continuous(const float voltage) { if(voltage > 5.0) QC3_increment((voltage - 5.0) / 0.2); else if(voltage < 5.0) QC3_decrement((5.0 - voltage) / 0.2); } int main(void) { DDRB |= 0b00000011; // PB0:出力(LOW)、PB1:出力(LOW) _delay_ms(1250); // 1.25秒 DDRB |= 0b00000100; // PB2:出力(LOW) _delay_ms(2); // 2ms // Continuous Mode PORTB &= 0b11111110; // PB0:LOW(D+:0.6V) PORTB |= 0b00000100; // PB2:HIGH(D-:3.3V) QC3_continuous(4.2); _delay_ms(100); PORTB |= 0b00000010; // PB1:HIGH }
モバイルバッテリーに対して 4.2V を指示し、その 100ms 後に MOSFET を ON にして実際の給電を開始しています。