「回路系技術資料/シャットダウン回路」の編集履歴(バックアップ)一覧はこちら

回路系技術資料/シャットダウン回路 - (2010/09/27 (月) 10:19:17) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

*シャットダウン回路 LiPoの電源を監視して、自動的に電源を落とすもの。 可変抵抗で調節するので、2S~6S程度ならいけます。 (7V~24V) プログラムを調節すれば、LiFe用にもなります。 そのままのプログラムでも電圧監視型なので、可変抵抗を調節すればLiFeも使えます。 #image(P1030088_2.jpg,width=500,title=シャットダウン回路外観) #image(shutdown.jpg,width=500,title=回路図) やっていること。 -まず3端子レギュレータ7805でマイコンの電源と基準電圧の確保 -電源電圧を分圧し、これをA/D変換する -電源電圧が一定の電圧以下ならFETの動作を停止させる(モータの起動時を考えて、一定時間以上であれば停止するようにする) -一定以上なら残りの電圧をLEDを使って表示 動作実験結果: 電源電圧12V~9V、2A 問題なく動作、3端子レギュレータの発熱が気になる程度 部品リスト -基板(小さくてもよい)1枚 -配線(できれば太いものを)赤黒、任意 -3端子レギュレータ7805(ドロップ電圧が高くても問題なし)1個 -可変抵抗50kΩ(図面上では10kΩとなっているが、それくらいなら問題なし)1個 -電解コンデンサ 耐圧30V以上 容量220uF(なるべく大きいものを)1個 -PIC12F675(A/D変換機能さえあればよい)1個 -LED 1個 -抵抗1kΩ 2個 -抵抗10kΩ 2個 -2SK3163 1個 -2SC1815 1個 PICの開発には、PICkit2とmikroCを使用。 -&ref(shutdown.c){Cソース} -&ref(shutdown.hex){HEXファイル} ということで、後は実機に搭載して実験します。
*シャットダウン回路 LiPoの電源を監視して、自動的に電源を落とすもの。 可変抵抗で調節するので、2S~6S程度ならいけます。 (7V~24V) プログラムを調節すれば、LiFe用にもなります。 そのままのプログラムでも電圧監視型なので、可変抵抗を調節すればLiFeも使えます。 #image(P1030088_2.jpg,width=500,title=シャットダウン回路外観) #image(shutdown.jpg,width=500,title=回路図) やっていること。 -まず3端子レギュレータ7805でマイコンの電源と基準電圧の確保 -電源電圧を分圧し、これをA/D変換する -電源電圧が一定の電圧以下ならFETの動作を停止させる(モータの起動時を考えて、一定時間以上であれば停止するようにする) -一定以上なら残りの電圧をLEDを使って表示 動作実験結果: 電源電圧12V~9V、2A 問題なく動作、3端子レギュレータの発熱が気になる程度 部品リスト -基板(小さくてもよい)1枚 -配線(できれば太いものを)赤黒、任意 -3端子レギュレータ7805(ドロップ電圧が高くても問題なし)1個 -可変抵抗50kΩ(図面上では10kΩとなっているが、それくらいなら問題なし)1個 -電解コンデンサ 耐圧30V以上 容量220uF(なるべく大きいものを)1個 -PIC12F675(A/D変換機能さえあればよい)1個 -LED 1個 -抵抗1kΩ 2個 -抵抗10kΩ 2個 -2SK3163 1個 -2SC1815 1個 PICの開発には、PICkit2とmikroCを使用。 -&ref(shutdown.c){Cソース} -&ref(shutdown.hex){HEXファイル} プログラムにはコメントは入っていないので、ここで解説。 #highlight(){{ #define stop_count 100 //ここで停止時間の指定 大体1が20msくらい #define LED GPIO.GPIO2 #define OUT GPIO.GPIO1 unsigned short voltage; unsigned short count; unsigned short time1; unsigned short time2; unsigned short flag; unsigned short pres; void interrupt(){ if(INTCON.T0IF){ INTCON.T0IF=0; flag|=0x01; if(!ADCON0.GO_DONE){ ADCON0.GO_DONE=1; } } return; } //割り込み処理 //mikroCでは、interrupt関数が自動的にアドレス4番地に指定される //A/D変換の開始と、時間計測を行っている void init(){ TRISIO=0x39; GPIO=0x00; ANSEL=0x61; ADCON0=0x01; OPTION_REG=0xD7; INTCON=0xE0; return; } //I/Oポートの初期設定 main(){ init(); //まずは初期設定 OUT=0; LED=1; count=0; pres=0; while(1){ if(PIR1.ADIF){ //A/D変換の終了が確認できた場合 PIR1.ADIF=0; voltage=ADRESH; //一時データを格納 if(voltage<=127){ //測定電圧が2.5Vを下回った場合 time2=0; if(count>=stop_count){ OUT=1; while(1); //一定時間以上なら無限に終わりません }else{ count++; } }else{ count=0; time2=voltage-127; } } if(flag&0x01){ //フラグ確認 pres++; //プリスケーラ if(time2>=51){ //測定電圧が3.5V以上 LED=1; time1=0; //LED点灯 }else if(time2==0){ //むしろ2.5V以下 LED=0; //LED消灯 }else if(time1>=time2){ //点滅タイミング time1=0; LED=!LED; }else if(pres==0){ //点滅カウント time1++; } } } } }} ということで、後は実機に搭載して実験します。 ---- #comment

表示オプション

横に並べて表示:
変化行の前後のみ表示: