PV用DCDCコンバータ開発(12) PICソフトのバグ取り

昨日からどん詰っていたおっきなバグが取れた。

誤 adchannel=(ADCON0&=0b00001100)>>2;

正 adchannel=((ADCON0)&(0b00001100))>>2;

肝は「&」とするところを「&=」としてしまったこと。&はビットのアンド演算、&=はビットのアンド演算をした結果をADCON0というパラメータに格納する。

う~~~ん、、、分ってしまえば当り前なのだが、他の部分からコピペしてきて流用した部分だったので、なかなか見つからなかった。

最初の1回だけAD変換した後、ADが起動しないという症状だったので、怪しそうなパラメータの値を追いかけたところ、ADCON0の0ビット目が1(AD有効)であるはずなのに0(AD無効)になっていることを発見し、上記バグにたどり着いた。

通常のプログラムでは、算術演算を多用するが、ハード制御では、ビット演算を多用するので、こんな感じでバグが潜む。1日、悩んでしまった。。。。ま、次にこんな事が起きれば、すぐに発見できるというノウハウを修得したと前向きに考えることにしよう。

バグが取れ、AD変換割込みの制御部も完成。次は、制御ロジックの検証だ。

パワーFETのドライブをテスト用に簡略化した回路で試してみたが、やはり、2SC1815という定番トランジスタ一つで10Aも流せるFETをドライブするのは少々無茶で、PWM波形がなまりまくり。FETをもうひとつはさんでドライブしないと無理なようだ。

しかし、そうするとPWM制御信号の正負が反転してしまう・・・・と思ったら、PICの制御ビットの設定で、正論理/負論理は反転が可能だ。やはり、CPU制御の柔軟性はすばらしい。。。。

とりあえず今晩は気持よく寝られそうだ。おやすみなさい~~~

20121015001

(プロからのアドバイス) 釈迦に説法シリーズです。

気がついた点をお話します。大電流を扱うPWMは、効率や制御性を狙ってRISE/FALLを速くしていくと、大きなノイズを出すことがあります。あまり欲張りすぎないこと、またしっかりとしたノイズ対策が必要です。アース、パスコン、過剰で悪いことはありません。

どんなに優れた設計でも確率的には必ず壊れます。家の中に入れて常時使うものですから、万一誤動作した場合にシステムを安全に停止できるように設計しておくことが大切です。WDタイマの活用や、I2CやA/Dを使った、ちょっとした温度センサー等、兎に角ヤバそうな事態を察知することが必要です。

(私) ノイズ対策は大切ですよね。自宅だけならまだしも、隣近所に迷惑かけたら洒落にならないですものね。
今回は、スイッチング周波数は40kHzとあまり上げていません。立ち上がり下がりもオーバーシュートアンダーシュートで素子の許容電圧を超えないように設計してます。といっても、いつもいつも計算するの面倒なので、安全サイドの定数で試して実測して適切な値を決めるといういい加減な方法なんですが(^.^;

部品はいつかは壊れるということは肝に銘じて置かないとなりませんね。素子が壊れるときに短絡か開放かも考えながら部品選びをしないとなりませんし。電力関係は火事に直結するので、留守中に使うには、相応の対策は必須でしょう。定常的に使えるようになるまでに、きちんと保護回路も設計しようと思います。これからも、色々とアドバイスお願いします。

前回へ  次回へ

(Visited 225 times, 1 visits today)
スポンサーリンク

シェアする

フォローする