エンジンECU

自動車のメカニズム(エンジン制御編)

下記のノートからのスピンオフです。

最近のエンジンはコンピュータ制御されています。

コンピュータの中でどんなことが行われているか紹介したいと思います。


【進角・遅角】

エンジンの制御は回転数と同期して行われることが多く、制御の基準点をエンジンのクランクの位置からどれだけズラすかで表現することが多いです。

進角は早める方向、遅角は遅れる方向にズラすことを意味します。

基本的な噴射・点火制御の基準点はピストンが最も上に来たときのクランクの位置(最上死点=TDC)を基準にします。


【点火制御】

通電時間がスパークプラグで放電→点火するためのパワーチャージで、通電OFFのタイミングが点火タイミングです。

バッテリーやオルタネータの電圧は12〜14Vなので電圧を上昇させる必要があり、1次コイルに印加した電圧を2次コイルで昇圧する仕組みです。

基本的にはノックセンサーを使ってノッキングをするギリギリのタイミングを狙って点火します。

昔は1つのコイルで作った電力をディストリビューター(分配器)という装置でスパークプラグの本数分に分配しており、点火タイミングもディストリビューターが握っていました。

点火タイミングはエンジン回転数との相関が強いので遠心力で接点の位置をズラすガバナーという装置がディストリビューターに内蔵されていました。


【噴射制御】

インジェクターという噴射装置を使います。

基本的には後述するソレノイドが中に入っていて噴射するタイミングや噴射量を自由に行えるようになっています。

特にきめ細やかな制御を行いたい場合はピエゾ圧電素子を使ったピエゾインジェクターを使ったりもします。

主にディーゼルエンジンでよく使われますがガソリンエンジンに採用する例もあります。

噴射は通電時間≒噴射時間で噴射量を制御します。

基本的には流入吸気量と理論空燃比から計算された燃料の量に合わせた噴射時間で噴射します。

昔はキャブレターを使って混合気を作っていました。


【理論空燃比】

理論空燃比とは正しく完全燃焼する空気と燃料の比率です。

空燃比はA/F(読み:エーバーエフ、A=AIR=空気、F=FUEL=燃料)とも呼ばれます。

燃料は濃すぎても薄すぎてもいけません。

具体的に言うとガソリン1gに対して空気14.7gがベストバランスになります。
この比率を理論空燃比と言い、ストイキメトリー(略してストイキ)と呼ぶこともあります。

燃料がストイキよりも濃いことをリッチ、薄いことをリーンと言います。

この調節具合は燃調とも呼ばれます。


【EGRバルブ制御】

EGRは排気ガスを再循環させるシステムです。

EGRはポンピングロスの低減や燃焼温度の低減(=NOxの低減)に役立ちます。

最近はEGRクーラーを装備している車も多いです。

EGRは燃焼温度を下げたい時に役立ちますが、上げたい時には邪魔になります。


【モーター制御】

モーターはHブリッジ回路とポジションセンサーを使ったフィードバックを制御を行うことが多いです。

電動スロットバルブや連続可変バルブ制御などに使います。

フィードバック制御は古典制御理論の始祖です。

ポジションセンサーの値を見て狙いよりも開いていれば閉じ方向に、狙いよりも閉じていれば開き方向に回転します。

ポジションセンサーはバラツキが大きいのでゼロ点補正が必要なのと、電圧値がピッタリと安定するわけではないので、ハンチングを防ぐ必要があります。


【ソレノイド】

一般に馴染みの深い言葉を使うとコイルの事です。

電子制御では電気を使って物理的な運動を起こすために使います。

油圧制御の為のバルブに用いたり、インジェクターを動作させたりします。

モーターに入っているのもソレノイドです。


【ノック補正】

ノックセンサーを使いノッキングが起こったかどうかを判定し、点火タイミングを遅角します。

ノッキングリタードとも呼ばれたりします。

基本的にはノッキングが起こるギリギリの点火タイミングが効率が良いので、ノッキングが起こると少し遅角し、ノッキングが起こらないと少し進角します。

ノッキングが起こったら、その時の進角の進み具合を学習します。

ピストンが上昇する速度は回転数に依存しますが、燃料が燃える速度は一定なため、点火タイミングは回転数毎に学習する必要があります。

エンジンの温度が変わっても、吸気温度が変わっても、燃料が変わっても、燃焼室内のデポジットによる形状変化でもノッキングの起こりやすさは変わるので、学習は常に行う必要があります。


【空燃比フィードバック】

O2センサーやA/Fセンサーを使って排気ガス中の酸素や燃料との比を検出し、燃え残った燃料が多ければ薄くし、酸素が多ければ燃料を多くします。

O2センサーの場合は酸素の有無を検出するためピーキーなので制御が少し荒っぽくなります。

A/Fセンサーの場合は空燃比の値が検出できるためより緻密な制御を行うことができます。


【燃料カット制御】

最大回転数(レブリミット)に達したり、最大速度に達したりした時に、燃料噴射を停止することで、エンジンの力がそれ以上出ないようにする制御です。

燃費を良くしたり、エンジンブレーキの効きを良くしたりする為にも、アクセルペダルを踏んでなくてエンジンがある程度高回転で回っている時に燃料カットをします。

この燃料カット回転数は制御が緻密に高度になるほど低くすることができます。

燃料カットはエンストの危険性があります。

エンストしてしまうと復旧するまでエンジンの出力を使った機能は使えません。

エアコンやブレーキアシストや油圧のパワステなんかは使えなくなってしまいます。

またエンストはユーザークレームに繋がるのでメーカーも神経を尖らせている部分です。

しかし燃料カット回転数が低ければ低いほど燃費は良くなるので出来るだけ低くしたいのがメーカーの本音です。

最近の車はアイドリングストップが当たり前になっているので、停車時の特にエンジンを回す必要がなければエンジンを停止しますが、この時も燃料噴射を停止します。

エンジンを回す条件はエアコンやブレーキペダルの踏み具合、ハンドルの切れ角、バッテリーの充電量など多岐にわたり複雑なので他のECUからの指令で行われることもあります。

特にハイブリッドトランスミッションの車は制御対象が多く複雑なのでパワートレインが統合的に制御され、エンジンECUは統合ECUからの要求に応えるよう制御されます。

アイドリングストップも開始を少しでも早めるため、車速が落ちてくると停止前からエンジンの停止をする制御もあります。(アイドルコースト制御と言います)

イモビライザーが認証できなかった時も燃料を噴射しないことでエンジンが掛からなくなります。

イモビライザーについては下記のノートを参照ください。


【始動時増量補正】

冷間始動時はエンジンの温度が低く火がつきづらいので、燃料の量をプラグがかぶらない程度に増量します。

キャブレターを使っていた時代では始動時の濃い燃調は空気の量を絞ることで実現していました。

古い車にはチョークレバーというものが付いていて、空気を手動で絞っていました。

【水温補正】

水温が低いときには燃料噴射量を増量し、高い時には普通に戻したりします。

また水温が高すぎるときに燃料を多めに吹いて気筒内を冷却し、ノッキングを防いだりします。(ただし燃費は悪くなる)


【触媒早期暖気補正】

触媒の温度を上げるために排気温度を上げる制御をします。

方法としては噴射する燃料の量を増やし、熱量そのものを上げ、点火タイミングを遅らせることでエンジンのクランクを回すのに使われる熱量を減らし、排気温度を上げます。

EGRを使うと排気温度が下がってしまうので、EGRバルブは閉じます。

さらに温度を上げるために、燃料をリッチにしてわざと燃料が燃え残るようにして、排気管内に空気を入れて排気管内で燃焼する2次エア制御を行う車もあります。


【ISC(アイドルスピードコントロール)制御】

アイドル時はペダルから足を離しユーザーからの指令が無いのでエンジンが停止しないように自動的にエンジンの回転を維持する制御を行います。

ISCはその名の通り目標回転数の制御になります。

目標回転数より低ければ吸気量を増やし、目標回転数より高ければ吸気量を減らします。

最近の車は電動スロットルが当たり前なので、スロットル開度を操作して吸気量をコントロールします。

ちょっと前の車はISCバルブを用いて制御していました。

クランクに負荷が入ってくるとエンストしてしまうし、回転数が低すぎてもエンジンの振動が大きくなってしまいユーザーが不快になってしまいます。

回転数が高すぎると燃費が悪くなってしまうので、できる限り低くしたいという要求もあります。

電気負荷やエアコンの負荷に応じて目標回転数を増やします。
また、冷間始動時などの水温が低い時も目標回転数を増やします。


【目標トルク制御】

エンジン制御が高度になってくると、ユーザーのペダルの踏み具合から要求トルクを求めます。

ユーザーのペダル操作は加速度を制御したいが、運転負荷はユーザーの運転のみで変わるものではありません。

電力をたくさん消費すればオルタネータで発電する負荷は増えます。

ライトを点けたり、熱線を点けたり、ヒートシーターを点けたりすれば、ユーザーのアクセルペダル操作とは関係なく電力消費量は増えます。

上り坂でも勝手に高負荷になりますし、エアコンのコンプレッサーが働けばエンジンの負荷は増えます。

ハイブリッドトランスミッションであればモーターとの出力の混合もあり、ペダル操作=エンジン出力ではありません。

統合的な目標トルクを設定します。

通常のトランスミッションであっても変速ショックを抑えるためにトルクダウン制御を行います。

目標トルクに応じてスロットル開度を変化させ、入った空気量を計測して空気量に応じた制御を行いますが、間に合わない場合は点火時期の遅角でトルクダウンをします。


【自己診断機能(ダイアグ)】

OBDという言葉を聞いたことがありますでしょうか?

OBDはオンボードダイアグの略で北米から始まった規格です。

北米には車検制度が無いことから車の故障をユーザーに知らせる必要性が高く、そのため自己診断機能の充実が図られたのですが、今や全世界に使われています。

車に付いてるOBD2コネクタはOBD1の段階で統一されていなかったコネクタ形状を統一したものです。

主に以下のような診断項目があります。
・センサーの故障検出
 オープン故障やショート故障、特性故障を検出します。
・失火検出をします。


【コンピュータの自己診断機能】

コンピュータが自分自身の確からしさを検出します。

ローレベルなものではROMのチェックサムによるチェックやRAMの書き読みチェックなんかがあります。

もう少し高度なものになると、必要な処理を全て通ったかを検査したり、CAN通信で定期的に行われる通信が途絶えていないかをECU同士で検査しあったりします。


【制御ソフトウエアの構造】

エンジンに限らずメカを制御するソフトウエアはリアルタイム制御が必要です。

PCやスマホのプログラムでは処理が重くなるという現象がありますが、エンジンの回転と同期が必須のエンジン制御プログラムでは処理落ちは機能不全につながります。

計算負荷が高すぎて処理が追っつかない時はリセットするように出来ています。
(ウォッチドッグリセットと言います)

リアルタイム制御では、PCのようなイベントドリブン制御ではなく、主に時間同期で処理を行います。

時間の間隔は制御内容によって異なり、応答性の高い処理が必要であれば短い時間で、そうでなければ長い時間を空けて処理を行います。

さらに応答性を問われる処理であれば割り込みで処理します。

安全に関わる装置のためRAMの内容が化けたり、リセットしたりしても、すぐに復旧するように常に演算し、更新しています。

学習機能は情報が化けてしまったときに復旧の妨げになるため、多重に記録し整合が合わない場合は破棄して初期値を使用したり、3つ以上持たせて多数決したりします。


【制御で良く使われるロジック】

〈テーブル補完〉

よく「ECUのマップが〜」ということを聞いたことがあるかと思いますが、このマップの正体がテーブル補完です。

ある値に対応した別の値を導き出すのに使われます。

例えば温度センサーの電圧値から温度を算出したりするのに使われます。

温度センサーで使われるサーミスタは温度が高くなると電圧が低くなり、その変化も線形ではなく、曲線の性質を持っています。

テーブル補完ではテーブルに記載されている数値との間は線形ですが、テーブルを細かくすることで曲線に近似した変換が行えます。

例は1次元ですが、主に2次元以上のものがマップと呼ばれることが多いです。
制御が高度になるほど多次元のマップを使うことになります。


〈ヒステリシス〉

2値出力(スイッチのON/OFFなど)を行う際、判定基準の閾値が1つだと値がフラフラすると出力が頻繁に切り替わってしまいます。

制御を行う際、外乱に追従し細かくON/OFFを行ってしまうと問題があるケースでよく使われます。

制御で扱う値は、リアルタイムに値が変化するので、人間が見て同一方向にしか変化していないように見えて、小刻みに上下運動を繰り返すものが多く、閾値付近の挙動が安定しないものが多いからです。

例えば、登坂などで大きい出力を要求された場合のエアコンコンプレッサーOFFを行う制御があります。

アクセル操作が絶妙に閾値付近をふらついた場合、エアコンコンプレッサーのクラッチが細かくON/OFFしても意味はないので、OFFになる閾値とONになる閾値に差をつけてON/OFFが頻繁に起こらないようにします。


〈なまし〉

こちらも外乱に対する追従性を緩やかにするものです。

なまし演算自体は下記のようなものになります。

更新値 = 現在値 + ( 目標値 - 現在値 ) × 係数

目標値に対して遅れて追従するような動きになります。

応答性はなまし係数に依存します。


【近年の制御ソフト開発】

モデルベース開発というものが増えてきています。

おそらくMATLAB(マトラボと読みます)がほぼ独占状態で使われています。

これは制御構造をブロックで記述すると、制御ブロックに応じたプログラム(コード)を自動生成します。

自動生成コードは人が読むにはかなり苦しいコードであるため、制御コードそのものを人が見てチェックすることは難しく、エミュレーターでコードを実行して制御結果をチェックし正当性を確認します。

この開発はプロトタイピングが容易で、制御を考えた人がコード作成者に依頼~完成を待たずして試すことができるので、正規品のECU開発の前に自由度の高い試作ECUでの開発で使われます。


【ECUに使われるCPU】

ECUで行う制御にはマイクロ秒単位の精度で入力を検知したり出力を変化させる必要があるので、専用のハードウェアが必要になります。

このようなハードウェアを組み込んだCPUはMCU(Micro Controller Unit)ともワンチップマイコンともSoC(System on Chip)とも呼ばれます。

例えば前述のように水温をセンシングしたりするにはA/D値を入力できる必要があります。

クランクセンサーで気筒を判別する際には高精度なタイマーと割り込みを用いる必要があります。

燃料噴射や点火の制御のように高精度に制御パルスを出力するには高精度タイマーで動作するポート出力が必要になります。

OBDの通信にはCAN通信が必要なのでCAN通信用のハードウェアも必要になります。


【求められる性能】

エンジン制御は車の根本的な機能の制御です。

ECUは「Electric Control Unit』の略ですが、車でコンピュータが使われ始めたのはエンジン制御が最初なので「Engine Control Unit」とも呼ばれていました。

暴走すれば命が危ないし、動かなくても命が危ないです。
(アメリカなどでは周りに施設のないとてつもない長い道があって、エンジンがかからないだけで命の危険を伴う場所があります。)

暴走を避けるためには、何らかの故障があっても強制的に停止する機能が必要です。

出来るだけ車が動かせるように、多少の故障があってもなんとか動く必要があります。

幅の広い動作環境での動作を求められるため、ロバスト性を求められます。

イモビライザーなどの盗難防止装置とも組み合わされるため、耐タンパー性能も求められます。


【フェイルセーフ】

フェイルセーフというのは何らかの故障に対して、システム全体が機能しなくなるのではなく、前述のように出来るだけ動かすが異常な動作はしないことです。

電動スロットルを例にとって説明します。

スロットルが開きっぱなしになると、エンジンは暴走してしまいます。

スロットルポジションセンサーが狂ってしまい、常に開いていない方の値を示していたら、あまり開いていないと判断して開く方向にモーターを動かして最終的には全開になってしまいます。

これを防ぐためにはセンサーを多重化して、複数のセンサーが違う値を拾ってきたら異常と判断します。

異常と判断してから全部閉じたり燃料カットを行えば暴走は防げますが、このままでは車を動かすことは出来ません。

車を動かすためには複数のセンサーの開いている方の値を信用して制御を行えばある程度走ることは出来そうです。
(故障自体は検出できるのでエンジンチェックランプをつければ整備を促せるし、OBDの記録をつければどこが故障か判断するのに役立ちます)


【フールプルーフ】

フールプルーフ(fool proof)というのはバカでも扱えるという意味です。

エンジンECUに限った話では無いですが、誰もが扱う機械には重要な概念です。

例えば最高回転数で燃料カットを行うものフールプルーフです。

エンジンの回転を指示するのはユーザーですがそのユーザーがエンジンを壊すほどの指示(例えばアクセル踏みっぱなし)をするとエンジンは壊れてしまいます。

このような事態でもエンジンを破壊させないために燃料カットを行ってエンジンを保護します。

また、自動車の装置全体でもECUのプログラム構造でもフールプルーフには気をつけています。

例えば、誤った取り付け方をされた時に誤動作しないとか、誤った使われ方をした時にコンパイルエラーが出るようにするとかです。


【あとがき】

エンジン制御は車のコンピュータの中ではとても古いものですが、燃費=効率の要請が高まり、環境性能の要請もあるので、とても重要な役割を担いつつ、まだまだ進歩している分野です。

今回はあまり触れていませんが、ディーゼルエンジンはさらにきめ細やかな制御を要求されますが、燃費方向にも出力方向にもエミッション方向にもとても自由度の高いものです。

ディーゼルエンジンに関してはまた、別の機会に説明したいと思います。

この記事が気に入ったらサポートをしてみませんか?