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

  1. コメントはまだありません。

  1. トラックバックはまだありません。

 
%d人のブロガーが「いいね」をつけました。