電圧可変型のDCDCコンバータ作ってみた
今回は絶縁型DCDCコンバータを試作してみました。

目標仕様は電源電圧(50V)の直流信号を0〜電源電圧まで可変させるというもので
一応ブレッドボード上ですが、動作させることができたのでその記録的なもの
回路構成はPWM信号を出力してやって目標電圧に近づくにつれてduty比を減らしていくというもの。
ノイズとか心配ですが熱くなったらやめようかと思います(適当w)
50V出力(正確には47Vくらい)

25V出力(正確には21Vくらい?)

結果としては当たり前ですけど普通に出力されます。
交流結合で電圧変動を見てみましたが結構ノイズ?が乗ってるみたいですね。知らんけど
(ブレッドボードなので仕方ないです)
原理までは確認できたので、今度は基板に起こしてみようと思います。
今はアナログ回路で無理やり実現しているので、マイコン制御できると楽しいかもしれませんね。
これでやっと出力可変ができる。
それではまた。
Arduino同士でSPI通信をさせたい
ArduinoでSPI通信をさせてみたくなったので簡単な通信をさせてみる
今回はMEGA(マスタ)とUno(スレーブ)を使って通信させてみる
接続表
Master |
Slave |
|
|---|---|---|
SCK |
D52/ICSP3 |
D13/ICSP3 |
MISO |
D50/ICSP1 |
D12/ICSP3 |
MOSI |
D51/ICSP4 |
D11/ICSP3 |
SS |
D53 |
D10 |
マスタ側のスケッチ
#include<SPI.h>
void setup() {
//通信規則
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV4);
SPI.setDataMode(SPI_MODE2);
SPI.begin();
Serial.begin(9600);
digitalWrite(SS,HIGH);
}
int OutData = 12;
void loop() {
byte InData=0;
//送信
digitalWrite(SS,LOW);
SPI.transfer(OutData);
digitalWrite(SS,HIGH);
//受信
digitalWrite(SS,LOW);
InData = SPI.transfer(0);
digitalWrite(SS,HIGH);
Serial.println(InData);
delay(500);
}
スレーブ側のスケッチ
#include<SPI.h>
byte receiveValue;
void setup() {
//通信規則
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV4);
SPI.setDataMode(SPI_MODE2);
SPCR |= bit(SPE);
pinMode(MISO,OUTPUT);
SPI.attachInterrupt();//SPI割り込み
}
void loop() {
// put your main code here, to run repeatedly:
}
ISR(SPI_STC_vect){
receiveValue = SPDR;
SPDR = receiveValue;
}
まずは初期設定から
#include
通信規則?のようなものは一応すべてのSPIデバイスに同じことを書いておかないと通信ができない(ことがある)らしい。一応わかる範囲で説明を書いておく
◇SPI.setBitOrder(order);
order:MSBFIRST:8bit目から送信する
LSBFIRST:1bit目から送信する
◇SPI.setClockDivider(divider);
divider:クロック源からの分周比の設定。2,4,8,16,32,64,128分周まで設定できる
◇SPI.setDataMode(mode);//SPIクロックLOW
mode: SPI_MODE0(アイドル時のクロックがLow、立ち上がりでサンプリング)
SPI_MODE1(アイドル時のクロックがLow、立ち下がりでサンプリング)
SPI_MODE2(アイドル時のクロックがHigh、立ち上がりでサンプリング)
SPI_MODE3(アイドル時のクロックがHigh、立ち下がりでサンプリング)
◇ SPCR |= bit(SPE)
SPEにb01000000がセットされていてSPCRの7bit目に1をセットしてそれ以外のビットは変更しないということらしい。知らんけど
◇SPI.begin();
マスタ側だけに記述するらしい
通信方法
digitalWrite(SS,LOW);//通信したいSSピンをLOWにする
InData = SPI.transfer(0);//受信した値をInDataに代入する
digitalWrite(SS,HIGH);//通信が終わったらHIGHに戻す
◇ISR(SPI_STC_vect)
SPI通信がされると実行されるプログラムらしい
dsPICのコンフィグ設定
TL594とか位相シフトPWMとかに使われるPWM信号が作りたいのでConfigについて色々しらべてみました。STMマイコンとかでもあったけどそっちもめんどくさそうなのでPICでやってみます。
まずPICというものでLチカをしただけなので「何となく動くんだな」ってくらいでした。
Configの設定情報も少ないので色々調べながらやっています。
FBS
//ブートセグメント(プログラム書込領域らしい)設定
BWRP・・・Boot Segment Write Protect
訳すとブートセグメントを書き込めないようにするか?と聞いているらしい
もちろん書き込めなくなっては意味がないので「WRPROTECT_OFF」
BSS・・・Boot Segment Program Flash Code Protection
プログラムが書かれているフラッシュメモリの保護をどうするか?と聞いてるらしいのか?
ここは何もしなくていいでしょう「NO_FLASH」
FGS
//FBSのセット定義らしい
よくわからいのでデフォルトのままでいいでしょう。
(セキュリティがあったためにバグっても嫌ですし)
FOSCSEL
//クロック源の設定
時間の基準となるクロックを決めるもの。
<外部クロック使用時>
FRC・・・外部クロック、ただのRC回路のクロックで約7.37MHz
FRCPLL・・・外部クロック、FRCにPLLを通したもので速度調節可能
PRI・・・外部クロックを使う設定
PRIPLL・・・外部の発振信号にPLLを掛けることで周波数を調整可能
SOSC・・・外部クロック(32.768kHz)をつけて高精度な1秒を出すことができるそうです(外部クロックとかでバラつかないのかな?)
LPRC・・・低電圧(2.5V程度?)型のRC発振(回路。通常は使わないほうがいいだろう
FRCDIV16・・・内部クロックを16分周したもの?よく知らんけど
FRCDIVN・・・外部クロックをN分周したもの?分周させたい時用?
IESO
//起動時のクロック指定
簡単に言うと起動時をFRCで起動して、その後ユーザー指定のクロックに切り替えるか?
今回は「OFF」
POSCMD
//発振源の種類選択
NONE・・・内部発振源
EC・・・CMOS,TTXのクロック
XT・・・低速水晶クロック
HS・・・高速水晶クロック
ていうことらしい
OSCIOFNC
//クロック出力するか?入出力ポートとするか?
IOL1WAY
//再構成を許可する?よくわからないので「OFF」
FCKSM
//クロックをモニタするか?よくわからないので「OFF」
動作クロック周波数の計算
N1・・・入力クロック / a
M・・・b
N2・・・出力クロック / c ・・・N2の式変形すると
(N2はクロック源の周波数らしい)
Fosc = Fin ・M / (N1×N2)
多分間違っている箇所があるかも?
昇圧回路を作ってみる
IH用の実験用電源がないので、ちょうどいい機会だから「アナログ可変電源でも作ってみるか」ってなったわけでDCDCやらPFCやらを調べているところです。
昇圧回路は以前に失敗してそれから怖くてやらなかったんですけど、「またやってみるか!」ってなったわけで今回はパワエレなんかでお馴染みのものを作ってみました。(基板がないんでブレッドボードで原理的なところまで)
12Vでは110Vくらいまでしか上がらなかったんで入力電圧足んないんじゃね?ってことで24V突っ込んでみました。これがいきなり200Vクラスまで上がったんでストップしたんですけどマジで上がったwww(当然のことだけども)
ということで141Vはもちろんイケたんですけどちょっとした電力も動かせないかもしれないのでぼちぼち調べていきます。(LとかCとかの容量も適当だし)
IH基板製作中
ブログを更新してなかったですが、IH基板作ったりブレボ上でハーフブリッジ で誘導加熱できないか試作してみたりしました。
<PSFB-ZVS基板>
沿面距離をかなり開けて高電圧・大電力に対応できる基板を何とか作成しました。(動くかどうかは知らない)
最終的にはPFC回路の電源を突っ込む可能性があるので、400V耐圧で考えています。(爆発しないでほしいなw)
<ブレボ上でハーフブリッジ 誘導加熱>
ブレボでできないかな〜と安易な考えから 空芯コイルで誘導加熱っぽいものを試作しましたが、どうもドライバICの発熱がヤバくて(火傷した)充電容量が低いMOSFETをつけて何とかドライバ部分はできました。
出力は何とかされんですけどでも、アレだとフィルタ回路かまさないとマズいかもですね(フィルタ回路いじったことないからな...)
フィルタ回路がない時と超テキトーなフィルタをつけた時の波形を載せときます。当然フィルタがない時は矩形波ですけど...
また、進展があったら更新します。


IHのスイッチング基板設計
現在ZVSのIH回路の動画を見て作ってみたくなったので始めてみようと思います。
でも、共振回路?フィルタ回路?やら何やらがわからないんでひとまず基板作成中
いろいろ試行錯誤しているんですけどね。
<仕様のようなもの>
周波数:500kHz付近で動作させようかな
制御方式:フェーズシフトフルブリッジ とかいうやつ
制御信号はアナログ回路で無理やり的な感じに制御信号は出力しています(これじゃADアンプ?)
素子:SiC-MOSFET
品質重視で作りたいんで、今回はメイドインジャパンで作ってもらおうかと...
また何か進捗があれば書いていきます。
それでは・・・
(ドローンでPID制御やら何やらがわからなくなってきたんで一旦中断しています)
Arduinoでモーター駆動させた
詳細は後日画像付きでアップする予定ですが
ESC
ESCの使い方がそもそもわからなかったけど(初期化をしないと使えないらしい)デューティー比50%くらいで回して
何msか待機すると初期化が完了するらしいです。(今回使用したモーターだけかも...)
XBee
無線通信モジュール(XBee)UARTという通信方式を使うところから悩んだけど案外簡単だった。
XBeeの電源は3.3VだけどUARTの信号に気づかずそのままやってたら
何個かXBee壊してしまいました(;´д`)トホホ…
無線化!!
そうして何やかんややっている内にどうにかモーター回すだけですけど無線通信はできました。あとは機体の基板作ってコントローラ(もしかしたら
プレステのを使うかも)作る予定です。
姿勢制御とか大変そうwww
(一応、9軸センサ、SDカードは予習してあるから大丈夫なはず...)
プリント基板作りたいけど中国には頼めないしな〜、種とか届いたら嫌だしwww