セレナC27を買って良かったなぁと思う機能の一つにオートブレーキホールド機能がある。これ、信号待ちや渋滞で一旦停止し、それなりにブレーキペダルを踏み込み停止したとき、その踏力相当をキープしてくれるというもの。
この機能使うと、ホント付いていない車に乗るのが億劫になる。
しかし、唯一の不満はエンジン始動時自動で有効にする設定がないこと。
今回はこのオートブレーキホールド機能を自動で有効にするユニットを製作した。
構成の検討
エンジン始動後、オートブレーキホールド機能はボタンを押して有効にする。それなら、有効ボタンを勝手に押しちゃえばいいじゃん!という安易な考えで検討する。
要件定義
- エンジン始動後10秒待機
- オートブレーキホールド機能有効SWが手動で押されていないか?
- 押されてたら何もしない
- 押されていなかったら、1秒間有効SWを押したことにする
- 次にエンジン始動するまでは勝手に切り替えない
回路構成
定義した要件から検討した回路図。
シーケンス動作をディスクリートで組むのが面倒だったため、PIC10F200を使用した。
有効SWはMOSFETで0V引きして押された時と同等の信号電位にしている。
有効状態のインジケータは、車のユニットはLEDを0V引きして点灯させていた。しかしユニット内部に電流制限抵抗器がいるのか、定電流ドライブしてるのか、インジケータ点灯状態でも6V程度だった。そのため当初PICの入力ピンに100kΩを直列に接続してインジケータのモニタとしていたが、常時有効状態と誤認しうまく動かなかった。そのためフォトカプラのLED側をインジケータと並列に入れ、ユニットに電流を引いてもらうことでインジケータの状態を取得できるように変更した。
電源部は12V→5V降圧だが、電流がほとんどいらないのでTL431相当のシャントレギュレータで5V生成した。シャントレギュレータだと、入力過電圧を真剣に考えなくてよいので回路が簡単になる。逆接防止と万が一の過電流防止のため、ダイオードとポリスイッチの保護回路を挿入した。本器は外部から見えないところに押し込む予定なので、パイロットランプなどは一切つけなかった。
マイコンが小さいので、基板にICSP用のパッドを準備した。
制御プログラム
定義した要件をつらつらとプログラム化。
PIC10F200はSOT23-6パッケージのため小型で、こういった簡単な制御にはうってつけ。プログラム/データメモリがそれぞれ256ワード/16バイトだが、今回の用途程度ならばC言語で組んでも余裕で入り切った。
さすがにC言語で組んだので、プログラム/データメモリ 使用量は52ワード/7バイトとなった。
/***********************************************************************
* \file main.c
* \bref オートブレーキホールド_自動有効
* \version Ver 1.0
* \date 2017/10/28
* \author imenihs
* \note XC8 Ver 1.43 or higher
***********************************************************************/
#include <xc .h>
#define _XTAL_FREQ 4000000UL
void stop(void);
void init(void);
/***********************************************************************
* \fn void main(void)
* \bref main関数
* \param なし
* \return なし
* \pre 注意など
***********************************************************************/
int main(void)
{
init();
__delay_ms(10000);
//有効ボタンが押されてなく、オートホールド無効状態か?
if((!GPIObits.GP1) && (GPIObits.GP0))
{
//無効なので,有効にする
GPIObits.GP2 = 1;
__delay_ms(1000);
GPIObits.GP2 = 0;
}
stop();
return;
}
void stop(void)
{
while(1)
{
SLEEP(); //お休みなさい
}
}
/***********************************************************************
* \fn void init(void)
* \bref PIC初期化
* \param なし
* \return なし
* \pre 注意など
***********************************************************************/
void init(void)
{
if(!(STATUS & 0b00011000))
{
//パワーオンではないので,動作停止
stop();
}
OPTION = 0b10001000; //ピンプルアップ有効
TRISGPIO = 0b00001011; //GP2のみ出力
GPIO = 0x00;
}
基板作成
CADで図面を書いて、elecrowで基板化してもらった。しかし初版の基板は動作確認せずに発注したので(見切り発車)動かなかった・・・
オートブレーキホールドのインジケータ点灯・消灯の電位の関係から設計を変更した。
以下の図は設計変更済み。
コネクタは大量在庫しているXHコネクタもどきを使用した。
基板実装
基板は発注してから10日ほどで届いた。部品点数も少ないのでサクサク作れる。
ケース格納は面倒になったので、熱収縮チューブで済ませた。
車への搭載
シフトレバー周辺を分解し、接続先配線と基板の貼り付け格納場所を検討。
オートブレーキホールドのスイッチユニットにつながる配線と、基板の配線は以下のように接続した。
- M41 10P(青):ABHSW
- M41 11P(黄緑):ABHSW_ING
- M41 12P(黒):GND
基板の電源はナビ裏のACCからもらってきた。
配線がシフトノブに絡まったりすると事故の危険などが考えられるため、引き回し経路と処理は適切に実施すること。
動作確認
組み込み終わったら、エンジンをかけて10秒ほど待つ。オートブレーキホールドのインジケータがオレンジに点灯すれば完成。
快適なドライブが待っている。
コメント