車の復活に向けた電子工作(4) Arduinoのタイマ割り込み と隼のメーターのレスポンスの悪さ | そうそう変わるもんじゃねえな (前略、ドイツにて。あらため)

そうそう変わるもんじゃねえな (前略、ドイツにて。あらため)

ゆるーく日常をつづります。と言いながら、6年ぐらいほったらかしにしていたブログ。2018年に入ってから思うところあって復活したけれど、とりあえず三日坊主の危機は脱出。でも、あまり更新しないなぁ。

マイコンで何かを制御したいと考えたとき、最終的にやりたいことから

必要なものを洗い出してそれを習得する。

 

やりたいこと:

車両のエンジン回転数や車速をCAN経由で古い車のメーターを使って表示させたい。

先日、古い車両のメーターの例として初代GSX1300R 隼のメーターを引っ張り出してきて調査した結果、0V-5Vの矩形波で動くことを確認しました。隼は私が20代後半~30代前半で登場したわけですが、衝撃的でした。が、すでに25年近い月日が経過しているのですよね。(しみじみ)

車の復活に向けた電子工作(3) 初代GSX1300R 隼のメーター解析。 | そうそう変わるもんじゃねえな (前略、ドイツにて。あらため) (ameblo.jp)

 

 

Arduinoを使って、メーターを駆動させるにはArduinoで矩形波を出力させる必要があります。可聴帯域の矩形波ならばtone関数でも実現できますが、いろいろと制約があるので、今回は使いません。

 

王道のタイマ割り込みをするにあたって調べたところ、R4系の標準ライブラリにはFspTimerというclassがあり、こいつを使うことで、タイマの割り当てやタイマ割り込み処理などを簡単に設定できるようです。

 

例のごとく、ルネサスのアプリケーションノートやWebから、FspTimerを使ってLチカさせているようなスケッチ探してきて、それをデジタル11番や12番ピンを叩くように改造するパターンで、プログラム(スケッチ)を書きあげます。

 

割り込み間隔は、お試しで50μs毎に設定し、割り込みごとにカウンタを回して目的の周波数の周期の半分以上の時間経過を条件に出力ポートのレベルを反転してカウンタをゼロにするだけの「基本中の基本」的なタイマ割り込み。

これならシンプルゆえに割り込みを5μs毎にしても取りこぼしなく動くでしょう。隼のスピードメーターの300km/h付近の周波数(400Hz前後)で、分解能を1Km/hを実現しようとすると、最終的にはそのぐらいの割り込み処理が必要だけど、まあ、時速300km/h出すわけでもないし、50μsの割り込みでも、タコメーターは、10000min付近で100min-1の分解能があるので、今のところは50μs毎の割り込みで充分かなと思ってます。

 

プログラム(スケッチ)は書くまでもないので、省略。

 

というか実験的に動かすだけだからと、あまりにもプログラムが汚すぎて、お見せできるような状態ではないというのが正しいです。

 昔々のポケコンで1行basicプログラムというものがありまして、そのノリで、条件判断を4重入れ子ぐらいにしたものを1行で書いちゃったりとか、まあ読みづらいです。今どきの判りやすいプログラミングを真っ向から否定するような書き方なので、、、、。

 

まあ、そんなこんなで、とりあえず動作確認し、一定の間隔で、uint16_tで読み取った車速やエンジン回転を使って50μs毎に発生する割り込みをカウントしながら、矩形波を車速用と、エンジン回転用の2チャンネル分作成し、出力することはできました。

 

 

Arduinoから2000rpmと40Km/hに相当する矩形波の同時出力

Arduinoから4000rpmと80Km/hに相当する矩形波の同時出力

 

ただし、微妙に応答性が悪いことが気になりました。

これはArduino側の問題ではなく、初代GSX1300R 隼のメーターの問題です。

 

タコメーターは2000min-1→4000min-1に動く際に、最初の0.2秒で3200min-1まで動いてから、指針が4000min-1で完全に止まるまでに0.7秒要しています。

車速は40m/h → 80km/hの変化に対して、0.2秒で58km/h(変化量は18km/h)、0.4秒で63km/h(0.2秒から0.4秒までの変化量は5km/h)、となって、速度指示値が止まるまでに信号を入れて1.7秒かかりました。

 

まだ、詳細にメーターの構造が解析できていませんが、おそらくメーター側の電子回路側でレスポンスを落としていますが、針の脱調を避けるための加速度制御ではないように思います。

 

隼の整備書を読むと、メーターの駆動には、(構造的には)3相ステッピングモーターを使っているようなのですが、励磁回路が少し特殊で、2相同時通電で、回転角センサで2相間の電流にフィードバックしているようなのです。

ステッピング角内の任意の角度にローター(針)を動かすために、3相の磁気回路の2相を同時に使って2相間の磁力を電流(電力)制御してステッピング各以外の任意の角度にローター(針)を動かしているようです。 2つの磁気回路の磁力差でローターの角度を決めている状態なので、ローターとステーターの空隙が大きく、ブレーキトルクなんて議論できるようなレベルではないです。特に2相の中間にローターがいるときの空隙が最も大きく、保持トルクは弱いです。 だから、針を大きく動かすときは素早く動かせるのだけど、そこから先の針の位置の調整に時間がかかるというメーターのようです。

 

果たしてこれをステッピングモーター駆動といえるのかどうか悩ましいです。と、同時にメーターとしてのレスポンスはどうしようもないということです。インターバル撮影で記録したメーターの針の動きの写真を並べますが、初代隼のメーターは、エンジンと車体の能力に対して動きが追従できていないです。

 

隼とは、0-100km加速2.6秒とかいうような乗り物です。このスピードメーターでは動きが間に合っていません。タコメーターは、ゼロヨン負荷条件(1速)ならば、動きとしてはぎりぎり追従できるかなぁ、という状態ですね。  

 

 

0.0秒=2000min-1、40km/h  →  4000min-1、80km/hの信号を入れた瞬間。

0.1秒

0.2秒

0.3秒

0.4秒

0.5秒

0.6秒

0.7秒ここでタコメーターがようやく4000min-1で安定。

1.0秒

1.7秒 速度も目標値(80km/h)に到達して安定。

 

 

今考えているのは、追従性が悪いメーターでも、先読み制御でコントロールすればレスポンス上げられないかな、ということです。オーバーシュート気味に変化させるというか、エンジン回転に対してのメーターの指示値の応答遅れを疑似的なPID制御でどうにかできないかな、と思っています。でも、トルクが足りなくて、オーバーシュート気味に目標値を設定しても追従スピードが上がらないかもしれませんが。。。。

 

今やっている実験のゴールは隼のメーターのレスポンスをよくしたい、といういう話ではないので、どこまで取り組むか悩ましいところですが、隼のメーターの隅っこに「NS」というロゴがあるので、製造は日本精機でしょう。日本精密製のメーターはいろいろな車に使われているので、同じ構成のメーターを載せた車両で、メーターの応答遅れを改善したい、と思っている人には、(疑似)PIDで解決することができれば、面白いかな、と思います。