ドライブレコーダー MBDR-1 制御回路の製作
このドライブレコーダ(\3980)は、安いし便利な機能もあるんだけど、そのままでは使えないシロモノでした.
この製品の便利な機能とは?
●5分ごとにこまぎれにしたAVIファイルをマイクロSDカードに生成してくれる
●8GBのSDカードだと2時間ぐらい撮影できるんだが、SDカードが満杯になったら、旧いファイルから順に消して、新しいAVIファイルを記録してくれる.この機能はドライブレコーダーには不可欠でしょう.
●自動車のフロントガラスに取りつけるためのアタッチメントが付属している
この製品がそのままではドライブレコーダとして使えない理由は?
●内蔵Liバッテリーが役立っているのかどうか不明
●電源をブチッと切ると、SDカードのデータが壊れてしまい、フォーマットしないとダメになってしまう
●つまり、この製品をドライブレコーダとしてつかうには、クルマのエンジンをかけたあとで、録画ボタンを押し、クルマを降りる時にはあらかじめ、録画停止ボタンを押してから、クルマのエンジンをオフしなければならないのです.けれど、クルマから降りるときにはそんなことまでケアしないので、結局撮影したデータが壊れてしまうということになります.
この製品をドライブレコーダとして満足につかうために必要な制御回路とは?
ドライブレコーダには、こういう動作をさせる必要があります.
●クルマの+12Vがオンされようがオフされようが、データが壊れないこと
●クルマの+12Vがオンになったら、自動的に録画開始すること
●クルマの+12Vがオフになったら、自動的に録画停止すること
そのためにやったことは、
●クルマのヒューズBOXから常時+12Vを取り出して、それをドライブレコーダの主電源とする
●キー+12Vは、録画開始/録画停止の信号源としてのみ利用する
●しかし、常時+12Vをドライブレコーダに直結するのは危険で、この製品は、非録画状態でも100mAぐらい電流を消費するみたいなんです.1weekぐらい放置したらバッテリーが上がりかねません.そこで、キー+12Vでリレーをオンさせて、ドライブレコーダの電源をキッパリとオン/オフさせました.
●STM8Sの待機時消費電流は、実測で1.5mAぐらいなので、これならバッテリー上がりを心配することはないです.
●フローチャートはこんなかんじになります.とくに説明はいらないと思います.
回路図説明と完成品の外観
回路図はこちらです.(別ウインドウ)
外観はこちら
です.
(別ウインドウ)
ドライブレコーダ本体は5Vで動作しますので、常時12V→5Vに変換する電源回路があります.ちなみに、ドライブレコーダの録画時には200mA消費するので、この7805は、1.4Wぐらい消費するわけでして、それなりに熱を持ちますが、めんどくさいので放熱版はとりつけてません.そのかわりプリント基板にネジ止めして、多少は放熱にケアしました.写真はネジ止め加工する前の写真です.
キー12Vを5Vに変換するのは、抵抗分圧でもよかったのですが、クルマの+12Vって、高速道路走行時には18Vぐらいまで上昇することがあるかもしれないので、STM8S
の入力限界5Vを超えちゃうとSTM8Sが壊れるかもしれないので、キチンとレギュレータで5Vに変換しました.
STM8S discoveryのIO
port設定は、
PB6
キー12Vを5Vに変換した信号を入力
PB1
リレー駆動出力
PB3
録画スイッチ駆動出力
PD0
ついでにLEDインジケータを点滅
PE3
割り込みモニタのつもりで出力ポート宣言したけど、なにもcodingしてないな....
orz
この制御回路とドライブレコーダは、常時+12Vを主電源としますので、待機電力が大きいとクルマのバッテリーが上がってしまう危険があります.そこで、ドライブレコーダの電源はリレーでキッチリと切断します.制御回路は常時目覚めていなくてはいけませんので、STM8Sの低消費電流さに依存します.実測したところ、1.5mAしか喰わないので、問題ありませんでした.私のクルマは2009年型のホンダフィットなのですが、停車時のイモビライザがLEDをピコピコ光らせているので、そのLEDの消費電流が10mAぐらいと推測しますので、STM8Sが1.5mAなら問題ないだろうというわけです.
STM8S
を省電力化するために、CPUクロックを、内蔵128kHzという遅いクロックにしています.
この製品の録画スイッチは、押して録画、押して停止
という仕様です.録画スイッチにハンダ付けして線を取りだして、トランジスタのスイッチで遠隔操作しています.ただし、この録画スイッチ遠隔操作が回路的にめんどくさかったのは、この録画スイッチの回路が、3.3Vへのプルアップをオンオフさせるという変則的な仕様だったため、ドライブレコーダ側にプルアップ型のトランジスタスイッチを設置せざるを得なかったことです.そのために、少し変な回路になっています.
ソフトウエアの説明
ST visual developのprojectフォルダをおきます.(lzh)
自分で手を加えたのは、main.c、
stm8_interrupt_vector.c、 stm8s.h、 stm8s_conf.h
の4つだけです.
その他の.cや.hは、FWライブラリからのコピーです.
main.c のポイントのところ
●#define
PRS_Hz 128000
CPUクロック=128kHzに設定した意味
●#define INT_Hz
10 タイマで0.1秒ごとに割り込みする意味
●#define ARR
(int)((float)PRS_Hz/(float)INT_Hz)
0.1秒ごとに割り込みさせるには12800回カウントすればよいってことになります
●CLK_ClockSwitchConfig(
CLK_SWITCHMODE_AUTO, CLK_SOURCE_LSI, DISABLE,
CLK_CURRENTCLOCKSTATE_DISABLE );
CPUクロック=128kHzにするおまじないです
●GPIO_Init(ほにゃらら)
GPIOを出力設定しています
●TIM2_TimeBaseInit( TIM2_PRESCALER_1, ARR-1
);
タイマ設定です.クロックプリスケーラ=1に設定することで、プリスケーラを不要にし、12800-1回までカウントするようにタイマ回路に命令しています.
●TIM2_ITConfig(TIM2_IT_UPDATE,
ENABLE);
タイマ割り込み許可
TIM2_Cmd(ENABLE);
タイマ動け!
enableInterrupts();
CPUの割り込み受付許可
●@far @interrupt void
Tim2Update_isr(void)
タイマ割り込みで0.1秒ごとに飛んでくるルーチン
●TIM2_ClearFlag(TIM2_FLAG_UPDATE);
次の割り込みのためにフラグを消す
●GPIO_WriteHigh(GPIOD,GPIO_PIN_0);
LEDインジケータをオフする
●cnt++; if(cnt==10){
10カウントすなわち1秒ごとにシーケンスを進める意味
●switch(seq)
フローチャートの通りにシーケンスを書いてあります
●sw=1
リレースイッチをオンしています
●keyed12v=GPIO_ReadPin(GPIOB,GPIO_PIN_6);
if(keyed12v==1)
キー12Vの監視
●rec=1;
記録SWをオンして、1秒後にオフしています
●bit_pat = (rec<<3) + (sw<<1); //
GPIOB [3]=rec [1]=sw
[0]=keyed+12V
GPIO_Write(GPIOB,bit_pat);
GPIOポートへリレーと記録スイッチの制御信号を出力する意味
stm8_interrupt_vector.c のポイントのところ
extern
@far @interrupt void Tim2Update_isr(void);
main.cで定義した関数をexternしておきます.
{0x82, Tim2Update_isr}, /* irq13
*/
タイマ2の割り込み信号はIRQ13に接続されていますので、割り込みルーチンを、IRQ13にヒモ付けしておきます.
stm8s.h のポイントのところ
/* #define STM8S208
*/
/* #define STM8S207 */
#define
STM8S105
これのコメントを外す
/* #define STM8S103 */
/* #define STM8S903
*/
stm8s_conf.h
のポイントのところ
#define _CLK
(1)
FWライブラリをつかうペリフェラルのコメントを外す
#define _GPIO (1)
#define _TIM2
(1)
それぞれに対応する、.cと.hを、FWライブラリフォルダから、コピーして、projectに追加してください.