Arduinoを使ったStepUpコンバータ
専用IC(MC34063A等)を使ってステップアップした方が簡単で手間が省けるのですが、明るさをAVR側からコントロールするのがどうにも面倒な気がするので実験してみます。
まあ、ニキシー点灯させるなら専用ICで電圧調整したところをPWMでスイッチすれば人間の目にはいい感じになるのではないかと思うのですが…。
実際の所はニキシー自体をダイナミック点等しているところに持ってきてさらにPWMで明度コントロールとか考えると面倒なのではないかと思うのです。
一様、電圧測定部は抵抗分圧で200Vまでは測定できるようにしています。
ただし、電圧がおおきになるとどうしても誤差が出てきてしまうようで考え直したほうがいいかもしれません。
狭い範囲での電圧コントロールであれば誤差を抑えることができるので大丈夫なのですが…。
ではでは、例によって構成は以下の様になります。
■回路図
※:肝心のarduinoを入れるの忘れましたけど…、PWM発生部はPWMピンに接続/電圧測定部はアナログピンに接続です。
■スケッチ
設定した電圧まで周波数を上げて設定電圧以上になったら周波数を下げる様にしてあります。
トランジスタの耐圧に注意してください、ひたすらリミットを考えずにあげますので最悪破裂する可能性があります。
Dutyは50%に固定していますが変化させてもいいかもしれません。
その場合には”OCR2B”の値を変化させてあげればDutyが変化しますが試した限りではあまりいい結果ではありませんでした…。
// 抵抗分圧回路(Resistor divider)
// HV–R1(39k)–SENS–R2(1k)–GND
// 測定可能電圧0-200V
// レジスタ値の初期設定
#ifndef cbi
#define cbi(PORT, BIT) (_SFR_BYTE(PORT) &= ~_BV(BIT))
#endif
#ifndef sbi
#define sbi(PORT, BIT) (_SFR_BYTE(PORT) |= _BV(BIT))
#endif
#define HV_SEN_PIN 0 // 電圧測定ピン
#define HV_PWM_PIN 3 // PWM出力ピン
#define HV_LED 13
#define HV_ADJ 0.93 // 誤差処理
#define HV_SET_VOLT 150 // 設定電圧
long HV_val=0,HV_hz = 490;
void setup() {
// Setup Serial
Serial.begin(19200);
// PinModeSetup
pinMode(HV_PWM_PIN, OUTPUT);
digitalWrite(HV_PWM_PIN, LOW);
pinMode( HV_LED, OUTPUT);
digitalWrite( HV_LED, LOW);
analogReference(DEFAULT);
// Initial HV_hz
TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS20);
OCR2A = 128; // CPU_Mhz/128
OCR2B = OCR2A / 2; // 50%-Duty
}
void loop() {
// HV_PWM_hz Setup
boolean HV_Flag;
int HV_Count = 0;
float HV_Volt = 0;
while ( !(HV_Count > 16 && int(HV_Volt) < HV_SET_VOLT) ) {
//while (int(HV_Volt) != HV_SET_VOLT || ( HV_Count < 16 && int(HV_Volt) > HV_SET_VOLT ) ) {
if (int(HV_Volt) < HV_SET_VOLT ) {
if ( OCR2A != 255 ) {
OCR2A = OCR2A + 1;
if ( !HV_Flag ) ++HV_Count;
HV_Flag = true;
} else {
continue;
}
} else {
if ( OCR2A != 0 ) {
OCR2A = OCR2A – 1;
if ( HV_Flag ) ++HV_Count;
HV_Flag = false;
} else {
continue;
}
}
OCR2B = OCR2A / 2; // 50%-Duty
digitalWrite( HV_LED, !digitalRead( HV_LED ) ); // HV_LED
delay(500); // ResponseTime
HV_Volt = float(analogRead( HV_SEN_PIN )) * float(HV_ADJ) * 200 / 1024; // VoltageCheck
// Debug Print
Serial.print( “OCR2A:” );
Serial.print( OCR2A, BIN);
Serial.print( ” OCR2B:” );
Serial.print( OCR2B, BIN);
Serial.print( ” HV_Count:” );
Serial.print( HV_Count );
Serial.print( ” PWM_hz:” );
Serial.print( F_CPU/OCR2A);
Serial.print( ” HV_Val:” );
Serial.print( analogRead( HV_SEN_PIN ) );
Serial.print( ” HV_Volt:” );
Serial.println( HV_Volt );
}
digitalWrite( HV_LED, LOW);
}
■参考サイト
【コラム】愉しみを数ボルト (2) パワーMOS-FETを使おう | パソコン | マイナビニュース http://news.mynavi.jp/series/volt/002/index.html
コメントはまだありません。