XIAO ESP32C3でPWM出力してみた。
ESP32C3でPWMを出力しようとしたらどうやらArduinoで使っている「AnalogWrite()」が使えないので
その代わりに「ledc」というLEDを制御する記法があるらしいので、その記録を残しておく。
<セットアップ用関数>
bool ledcAttachChannel(uint8_t pin, uint32_t freq, uint8_t resolution, int8_t channel);
引数:ピン番号、周波数(Hz)、分解能(bit)、チャンネル
LEDCには16個の「チャンネル」というものが存在しているみたい。
<出力用関数>
bool ledcWrite(uint8_t pin, uint32_t duty);
引数:ピン番号、Duty比(bit)
<PWMをゆっくり可変>
bool ledcFade(uint8_t pin, uint32_t start_duty, uint32_t target_duty, int max_fade_time_ms);
引数:ピン番号、開始Duty、目標Duty、開始→目標までにかける時間(ms)
全体コード
#define PWM_PIN D0 // PWMを出力するピン #define PWM_FREQ 1000 //PWMの出力周波数 #define PWM_RESOLUTION 10 //分解能(bit) #define LEDC_CHANNEL 1 //PWM出力に使うチャンネル void setup(){ pinMode(PWM_PIN , OUTPUT); ledcAttachChannel(PWM_PIN , PWM_FREQ , PWM_RESOLUTION , LEDC_CHANNEL); ledcWrite(PWM_PIN, 0x01FF); } void loop(){ }
動作 D0ピンから1kHzのPWM(1kHz,50%)が出力される。
ホタルの光プログラム
while(1){ ledcFade(PWM_PIN , START_DUTY , TARGET_DUTY , 1000 ); delay(1000); ledcFade(PWM_PIN , TARGET_DUTY , 0 , 1000 ); delay(1000); }
但し、複数のチャンネルを使用すると立ち上がりとかで同期されていないらしいので注意が必要
(できるのかもしれない)
ArduinoでI2C
マイコンで比較的よく使うI2Cについてわからなくなって調べることが多いので
超簡単に備忘録を書いてみる。(Arduino編)
初めに
void setup(){ Wire.begin(); }
書き込み時
Wire.beginTransmission(DEV_ADDR);//スレーブアドレス Wire.write(0x01);//レジスタのアドレス Wire.write(0x1A);//書き込むデータ Wire.endTransmission();//通信終了
読み込み時
Wire.beginTransmission(DEV_ADDR); Wire.write(0x01);//読み出す最初のアドレス Wire.endTransmission(); WIre.requestFrom(DEV_ADDR,4);//4バイト読み出す。 while(Wire.avaliable()){//4回読み出す。 x = Wire.read(); }
【正弦波インバータ製作記録】不完全燃焼編
正弦波インバータが何とか完成しました。
(嘘です、はい)
ですが、控えめに言って
「難しい」
一応貧弱負荷なら動くのですが、多分100W電球なんてつけようものなら燃えることでしょう。
設計したDCDCの選択ミスったw
今年からはDCDCばかり作ってます。
(バカだからよくわかんないけどけど作るのに1年用した。)
何してたんだろうなw
【正弦波インバータ製作記録】50Vインバータ完成し、そして...
こんにちは
季節もとうとう秋になってしまいました。
いきなりですが、ついにやっと正弦波インバータが完成に近づきました。
50Vインバータはできました。
まだ壊れて欲しくないんで1W程度の負荷しか入れていませんが一応できたと言うことにしましょう。(というかまだ改善点が山積しているので基板を作り直してからの確認とします。)
問題点1
DCDCの出力を160Vくらいまで昇圧した時にインバータ回路部とかのリンギングとかでMOSFETが壊れないか心配
(一括Cスナバで済めばいいんですけどね。)
一応80Vくらいかけた時は100VをオーバーしてるMOSFETはなかったと思う。知らんけど
・正弦波インバータのLCフィルタの調整がイマイチ
(少し高調波が乗っているし...)
・DCDC実験中にもあったことだけど、負荷変動時の制御パラメータとかノイズ対策とかがイマイチ
(制御はブレボでやってるから仕方ないか...)
DCDCコンバータの制御を詳しく教えて欲しい人がいればブログにしみてもいいかも
そして立ち上がるのに10秒くらいを要する
【正弦波インバータ制作記録】壊れなくはなったけど、なんか変だ!!
どうも、こんにちは
久々の更新になります。
タイトルの通りですが、あれから壊れる原因をいくつか探してみた結果
ゲートドライブ周りの耐圧不足でした...
見直したところ
①昇圧型絶縁電源の過電圧問題(制御問題)
起動直後の昇圧用MOSFETのVGS(CH1)とVDS(CH2)
電圧めちゃめちゃ高いですね〜
②インバータのリンギングの原因(PWMのゲインが高すぎ問題)
以前に見せたリンギング対策の記事でPWMの最小と最大の対策をしましたら少しは治りました。多分周波数特性とか...
③インバータの配線インダクタンス対策(スナバCで対応、CRスナバは無しにしたいな〜)
で、リトライしましたが電圧が下がっちゃう問題!!
昇圧の目標電圧を80Vに下げて確認中
ちょうど電圧が上がって急激に下がっているところがインバータ駆動した瞬間ですね。
(オーバーシュートも出てるし昇圧回路の制御いじらないとダメかな〜🥺)
てな感じでただいま製作中です。(何なんでしょうねw
正弦波インバータ出来た???
どうもこんにちは
今回は90Vな正弦波インバータ(抵抗負荷だけど...)一応できたけど壊れた(泣)んでその話を簡単にしていこうと思います。
前回に
"
141Vを正弦波にする部分はそんなに苦じゃなかったですね。(まだわからないけども...)
"
なんてことを言っていましたが、Hブリッジの部分で躓いています。。。(前言撤回)
DCの120Vくらいをインバータに突っ込んで正弦波交流を出してみたんですが、それならなんとか動いていたんで「大丈夫じゃね?」って調子に乗ったのが仇となり、141Vくらいの電圧を入れた途端、DC電圧が下がって動作停止した。
ん?
ど、どうした?
インバータを動作させないと動作するのにインバータを動作させた途端DC電圧が下がる。。。
って感じで回路を調べるとインバータのMOSFETの一つとドライバIC周辺(IR2302)が壊れてしまってましたね、はい。
修理して動作を見ていくと...
リンギング的なのが多いじゃないか!?
って感じで150V入れると壊れるので、あと一歩のところまで来てこれに悩まされることになろうとは...
ユニバーサル基板でインバータ作ってる人はなんでスナバつけてないのに動くのか不思議すぎてフシギソウですねw
次回はスナバ回路に初挑戦してみようと思います。
インバータスイッチA_ハイサイド
インバータスイッチB_ローサイド
インバータスイッチC_ハイサイド
インバータスイッチD_ローサイド(電源から一番遠い場所だからリンギングが一番多いのかもしれない)
※CH1:ゲート
CH2:ドレインソース
正弦波インバータ作ってみてる(DCDCコンバータの話)
以前に誘導加熱の記事の中でインバータを作ってみたいと書いてたので、正弦波インバータ作ってみました(動いたけど壊れた...トホホ)
バッテリーで駆動したいということもあったので、12V→141Vを作るDCDCコンバータとやらも挑戦してみました。。。
ですが、このDCDCが難しいんですわ...
一応 東芝 のYoutube上にある動画で回路構成などが解説されてますが、大変奥が深い内容となっているので割愛します(めんどいだけ...)。
141Vを正弦波にする部分はそんなに苦じゃなかったですね。(まだわからないけども...)
っていう感じでインバータ作ってますので完成したらうpする予定です(コケたら頓挫かもだけど...)。