Quick Charge 3.0 モバイルバッテリーで 9/12V 以外の半端な電圧を生成し、デジカメ等に給電

 前回、Quick Charge 2.0 対応のモバイルバッテリーを ATtiny10 で制御し、9V/12V の出力を指示する回路図とプログラム例を掲載 しました。
 Quick Charge 3.0 では 2.0 に加えて、9V/12V でない中途半端な電圧も出力することができますので、手持ちデジカメ C-8080 向けに 6.5V、DSC-WX5 向けに 4.2V をそれぞれ生成させてみたいと思います。


※回路図は 前回 のまま。ただし PB1 に繋いだ SW は未使用

/*
 * 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)
{
//	PORTB	|= 0b00000010;		// PB1:PULLUP
	DDRB	|= 0b00000001;		// PB0:出力(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(6.6);
}

 40ms 以上の「空白の時間」を設けたうえで 300μs ほどのパルスを D+/D- 使って与えてやれば、0.2V ずつインクリメントされたりデクリメントされたりするぽいです。
 0.2V 単位での指定なので 6.5V は無理で、6.4V か 6.6V のどちらかになりますが、そこまで精度は出ないぽいので、6.6V 指定にしてみました。


 ソース main() 内の QC3_continuous(6.6); のところを QC3_continuous(4.2); に変更することで、4.2V 出力になるのですが、5V 未満の電圧にする時、ひとつ大きな問題があります。


 その少し上のコメントを読んでいただくとわかりますが、ここに行き着くまでの間に 1.25s ほどの Wait が入ってます。
 つまり最終的に 4.2V になるものの、通電直後の1.25秒間は 5V が出力されてしまうのです。

6.6V 指定時でも通電直後は 5V が出力されてしまうが公称値より低いので、それほど心配いらない


 かなり嫌な仕様ですよね。。


 4.2V 出力になったことを確認したうえで DSC-WX5 に繋げてやればとりあえずいいのですが、私の買ったモバイルバッテリー は消費電力が少ないと5秒ほどで電源が切れてしまう節電仕様なため、いったん節電が作動して OFF のなったあとで ON にするとき、DSC-WX5 を外しておくのを忘れると1.25秒の間、5V が印可されてしまうという・・・


 かなり鬱な仕様ですよね。。


 次回はこの辺を何とかしようと思います。


(追記)2017/07/31
 続き を書きました。