SOARISTO工房 Logo
BMW Archive

 前回の続きです。

 順番が逆になりましたが、「ライトコントロールエレメント」に来ている信号を解析し、制御回路に必要な信号を取り出します。 (本来であれば、こちらを先にやっておくべきでしたが)0xF9C7

HID Fog-Lamp Switch

 WDS上では、6本の信号が接続されているように見えますが、
(上記の回路図には、うち4本の信号が記されています)

HID Fog-Lamp Switch

 実際には、コネクタX10164には、8本の信号が来ています。

 テスターのリードを挿して、動作確認をしてみます。

HID Fog-Lamp Switch

 残り2本の信号の意味が不明のため、「ライトコントロールエレメント」の内部基板にテスターを当てて、解析します。

 なお、リバースエンジニアリングの結果は、公開いたしません。
(公開すると、すぐにパクるヤカラが湧くので)0xF9D1

HID Fog-Lamp Switch

 解析の結果、「スモールランプ」の点灯状態の検出に、“ちょっとした工夫”が必要であることが分かりました。

 これに合わせて、使用するPICを「PIC10F220」に変更するとともに、制御回路とコントロールプログラムも変更します。

 前回の続きです。

 ここのところ、いろいろと立て込んでおりまして、なかなか前に進みませんが、

HID Fog-Lamp Switch

 とりあえず、コントロールプログラムが完成しました。

HID Fog-Lamp Switch

 「ジャンピングワイヤー」という名のとおり、もの凄い“空中配線”状態になってますが、まぁハードの動作確認用ということで。0xF9C7

 ちっぽけな回路ですが、想定どおり動いた時の感動は、一入(ひとしお)です。少なくとも、“ショップにお任せ”になっているヒトには、味わえない「歓び」でしょう。
(いまのところ、どこのショップにも売ってないですし)0xF9D1

HID Fog-Lamp Switch

 フロントフォグランプの制御回路です。回路としては、非常に簡単です。
(電源回路等は、省略しています。また、抵抗等の型番も、省略しています)

 ブレッドボードを使ってデバッグしていた時に、気付いた点を一つ。

 リセット直後、I/OポートがInputに設定されたとしても、リレーが誤動作しないよう、パワーMOSFETのGate側にプルダウン抵抗を入れておいたのですが、リセット直後、なぜかリレーが動作してしまいます。

 もちろん、リセット直後のイニシャライズルーチンでは、I/OポートはOutputに設定しているのですが。

 しばらく悩んだのですが、理由は非常に簡単でした。(当たり前といえば、当たり前な理由でしたが)

 I/Oポートは、Outputに設定した直後は、“High”の状態になってるようです。(データシートによると、“Unknown”なのですが)

 よって、I/Oポートの入出力方向を設定した直後、Outputにしたポートについては、初期状態を強制的に設定(この場合は“Low”に設定)することにより、解決できました。

 勘違いの元は、リレーの動作状態の確認用にと設置した「パイロットランプ」(高輝度青色LED)でした。

 パイロットランプは、リセット直後は点かないので、リレー制御用のポートも“Low”になっているものとばかり思い込んでいたのですが、パイロットランプの制御は負論理でした。(“High”で点かなくて当然なのでした)0xF9C7

 ちなみに、試しにI/OポートをInputに設定したままにしておいても、リレーは誤動作しないので、プルダウン抵抗を入れた意味は、ちゃんとあるようです。

 ということで、これでハードとソフトは完成しました。

 つぎは、基板の作製と、ライトスイッチユニットへの実装です。
(いつになることやら・・・)

 前回の続きです。

HID Light Switch

 とりあえず、ブレッドボード上に、評価用の回路をささっと組み付けて、PICのプログラムを開発します。

 ボード上の左下にある2つのタクトスイッチは、それぞれ「スモールランプ」と「フロントフォグランプスイッチ」を模しています。

 これら2つの入力が同時にONになった時に、パワーMOSFETを使って、フォグランプ用のリレーを駆動させます。あわせて、パイロットランプとなる「高輝度青色LED」を点灯させます。

 フォグランプスイッチを押す毎に、フォグランプが「OFF→ON」または「ON→OFF」となる(トグル動作する)ようにします。

 また、フォグランプスイッチからの入力は、チャタリングが発生するものとし、その対策として、40msの判定時間を設けます。

 さらに、フォグランプスイッチが、何かの拍子で押し続けられた場合、単純なトグル動作のロジックでは、出力が発振してしまう(高速にONとOFFを繰り返してしまう)ため、この対策も組み込みます。

HID Light Switch

 Microchip Technology社から無償で提供されている統合開発環境、「MPLAB IDE」(Integrated Development Environment)を使って、プログラムを書いているところです。

 「PIC10F200」のインストラクション数は33種類と、非常にシンプルですが、ニーモニックも分かりやすいため、すぐに覚えられます。

 実はその昔、大学院の学生だったころ、ゲームプログラマーのアルバイトをしていました。当時はZ80やi8086の全盛期で、四六時中、寝る間も惜しんでプログラムをゴリゴリ書いていました。それらに比べれば、はるかに簡単です。
(懐かしい・・・)0xF9C6

 なお、ソースプログラムは公開しません。公開すると、まったく同じモノを作って、ネット上で商売始めちゃう姑息なヤカラが湧くので。

 前回の続きです。

 PICにプログラムを書き込むためには、専用のツール(PICライター)が必要となります。

HID Light Switch

 今回は、秋月電子通商さんの「AKI-PICプログラマー Ver.4」を購入しました。

HID Light Switch

 Ver.3.5は、組立キットになっていますが、Ver.4は、完成品になっており、ソフトウェアをPCにセットアップすれば、すぐにでもPICにプログラムを書き込むことができます。
(その他に、ACアダプタ、USB/シリアル変換ケーブルが必要となります)

HID Light Switch

 今回使用する「PIC10F200」(写真右)を含むPIC10シリーズは、僅か6ピンという“世界最小”のPICマイコンです。
(写真のPDIPパッケージは、8ピンですが、そのうち6ピンしか使われていません)

 これでも、チップ内部に4MHzのクロックを内蔵し、処理能力1MIPSを持つ、歴としたRISCプロセッサです。
(ちなみに、秋月電子通商さんで、1個70円でした)0xF9C7

#その昔、大学院の論文輪講で、当時有望視され始めたRISCプロセッサのテクノロジーについて、必死こいて英語論文を読んでいた頃を、懐かしく思い出します。
(それが、いまや70円ですよ、70円っ!!)

 「PIC10F200」は、プログラム用に256ワードのフラッシュメモリと、16バイトのデータメモリを持っています。また、外部入出力用に、4つのI/Oポートを持っています。
(その他、8ビットのカウンタを、1つ持っています)

 これだけあれば、今回の「フロントフォグランプ制御装置」のロジック(前回参照)を実装するには、十分過ぎるほどのスペックです。

 なお、「AKI-PICプログラマー Ver.4」は、標準の状態ではPIC10シリーズに対応していません。ボードのファームウェアを、Ver6.70以上にアップデートすることにより、PIC10シリーズに対応させることができます。

 また、PIC10シリーズは、PIC12シリーズとは若干ピンアサインが異なるため、ボード上のソケットにそのまま挿入して書き込むことができません。

 今回は、マニュアルを参考に、ICソケットとスルホール基板とを組み合わせて、(写真左)のような書き込みアダプタを作成しました。

HID Light Switch

 念のため、「PIC10F200」をセットした状態で「リード」し、内部のフラッシュメモリに正常にアクセスできることを確認しておきます。

 0xFF番地に書き込まれている、内蔵クロックのキャリブレーション用のデータが読み出せれば、ひとまずOKです。

 前回の続きです。

 M3 Coupeに、HIDフォグランプ(withハイワッテージバラスト)を無理矢理付けてしまおうというこの企画ですが、

Light Switch

 これまでに、純正の「ライトスイッチユニット」に、DMM(Digital Multi-Meter)などを当てて解析してきた状況をまとめると、以下のようになります。
(「日高義樹のワシントン・リポート」風に)0xF8EB

  • M3 Coupe(E92)に、3 Series(E90系)用の「ライトスイッチユニット」を取り付けると、「フロントフォグランプ制御」以外の機能は、正常に動作する。
  • M3 Coupeにおいて、フロントフォグランプスイッチを押下しても、「足下モジュール」の所定の端子には、フロントフォグランプの電源電圧(信号名:55V)は出力されない。
  • 「ライトスイッチユニット」と「足下モジュール」との間は、車種別の専用ワイヤリングとなっており、M3 Coupeにおいては、フロントフォグランプの制御信号(信号名:S55V)は配線されていない。
  • M3 Coupeにおいて、「S55V」を強制的にアクティブにしても、「55V」には電源電圧は出力されない。
  • 「足下モジュール」は、M3 Coupe(E92)も3 Series(E90系)も、同じ部品番号のものが使われていることから、車種別にコンフィギュレーションを変えているものと思われる。

 よって、車体側の改造を必要最小限に抑えるためには、正規ディーラーにある「ダイアグシステム」(DISplusやGT1)を使って、車種別のコンフィギュレーションのうち、フロントフォグランプのビットを“1”にしてリビルドしてもらえば、済むことになります。

 しかしながら、いつもお世話になっている正規ディーラーさんとはいえ、さすがに本来の設定ではないコンフィギュレーションを行うことには抵抗があるでしょうし、第一、ワランティーの問題もあるため、設定変更をお願いすることは難しいと思われます。

 よって、今後予定しているM3 M-DCT用の「Active Shifter」の製作なども見越して、自力で解決することにします。

 題して、「M3 Coupe用フロントフォグランプ制御装置」と呼ぶことにします。
(「制御装置」とかいうほどの、たいそうなものではありませんが)0xF9C7

 制御装置のロジックは、以下のようになります。

  • 「スモールランプ」がONになっている時に、フロントフォグランプスイッチを押下すると、フロントフォグランプがONになる。
  • フロントフォグランプスイッチを押下する毎に、フロントフォグランプのON/OFFが切り替わる。

 「そんなの当たり前じゃんっ!!」と思えるほど簡単なロジックですが、これをインプリメントしようとすると、少し複雑なことになります。

 インプリメント上の注意点をまとめると、以下のようになります。

  • 「ライトスイッチユニット」等のロジック系は、+5V動作であるが、フロントフォグランプ等の電源系は、+12Vで動作させる必要がある。
  • 「フロントフォグランプスイッチ」は、タクトスイッチとなっており、スイッチを押下する毎にチャタリングが発生し、動作が不安定になることから、その対策が必要となる。
  • 車載用であることから、入力信号がオープンであったり、電源にノイズが混入しても誤動作することのないよう、フェイルセーフとしておく必要がある。

 なお、「スモールランプ」の換わりに、「イグニッション電源」を入力とすると、エンジンを回している時にフロントフォグランプを点灯することができ、「デイタイムランプ」としての機能も持たせることができます。

 以上の機能を、TTLなどの汎用ロジックICで実現しようとすると、かなりの部品点数となってしまいます。

 例えば、タクトスイッチのチャタリング対策には、CR回路とシュミットトリガが必要となり、タクトスイッチを押下する毎に出力をON/OFFさせるためには、フリップフロップが必要となります。

 ということで、今回初めて、PIC(Peripheral Interface Controller)を使うことにします。
(回路屋の諸先輩には、「こんな簡単なロジックなのに、なんでわざわざPICまで使うの?」と思われるかも知れませんが、M3 M-DCT用の「Active Shifter」の製作に向けての、練習台ということで)0xF9C7

Light Switch

 Microchip Technology社のPICには、現在最もよく使われているPIC16シリーズ/PIC18シリーズ(データ処理幅:8bit)を中心に、その上位のPIC24シリーズ(データ処理幅:16bit)、dsPICシリーズ(PIC24シリーズにDSPコアを搭載)や、その下位のPIC10シリーズ/PIC12シリーズ(データ処理幅:8bit)など、幅広い製品がラインナップされています。

 今回の制御装置は、非常に簡単なロジックであり、また基板サイズをできるだけ小さく抑えるため、ベースラインシリーズの中でも最も簡単な構成の、「PIC10F200」を使用することにします。