アルドウィーノを使った
オープンソース、オープンハードの
ローコストECU

テージのECUが壊れて
いるみたいなので
Speeduinoに装換します。


その13:ハーネスの作製の続き
SMT32_megaCPUボード



2024年
7月21日

PCBWAYで作製したSTM32_megaの基板深センから出荷されたとの連絡がきました。


マウザで購入の表面実装のDIPSWと470Ωの0.1%抵抗が到着しました。PSoC5LP評価ボードは送料調整用です。


部品の内、Speeduino下基板の接続用ピンソケットの注文が抜けてけていたので秋月に発注しました。



7月23日
STM32_megaの続きです。秋月のピンソケットが到着しまた。左は表面実装の緑LEDです。


部品基板とも日本に来ています。26日までには揃う予定です


Speeduino下基板の2枚目をデュアルホイール用に改造しています。赤枠が追加のコンパレータです。



7月24日
STM32_megaの基板部品到着しました。予定より少し早かったです。


部品の検品中ですが、オペアンプの数を間違えて、数量が足らないです。他にも不足があるかもしれないので、後で一括で追加発注します。


7月25日
STM32_megaボードの部品の実装開始します。初めに、今回、一番小さい緑枠の集合抵抗からです。2mmx1mmに4素子入っています。ピッチは0.5mmです。後で、実体顕微鏡で半田の状態を確認します。


続いて、単品の抵抗コンデンサ1608サイズで拡大鏡があれば付けられます。その後、スイッチSDカードスロット、CPU以外の半導体も実装しました。



7月29日
STM32_megaの部品実装中ですが、部品不足の原因が分かりました。部品表をアップロード後、基板を3枚作るので、全ての部品数を3倍するところを間違えて、全ての部品が3個づつ発注してしまったのが原因でした。それでも主要部品以外の抵抗などMOQが50とか100なので多くの部品が多めに届いたということでした。不足分はマウザに発注済みです。


STM32_megaで動かす準備として、ポートアサイン確認しています。左はinit.cppのコンフィギュレーション部です。これをコピーして、右のCALCに入れてテージ用設定との違いを確認します。


マウザに発注してあった、不足分部品到着しています。



7月31日
マウザの不足部品オペアンプロジックCPUコネクタの順にハンダ付けして部品実装完了しました。USBコネクタは下ボードと干渉するので実装しません。他にアナログ入力用のオペアンプも半分の2個のみ実装しました。CANも使う予定が無いので未実装です。また、USBーUARTのFTDIはSTM32のネイティブUSBを使ってファームのアップロードを行い、運用時はUARTのブルートゥースを使うので未実装です。


USBコネクタ代わりはMEGAボードと同様に、半田面アングルピンヘッダを実装します。



8月1日
STM32で動かす準備です。STM32F407の日本語リファレンスマニュアルがあるので、ブートモードについて少し勉強しておきます。



BOOT0ピンをHIGHにすると、ブートモードになり、内蔵されているシステムプログラムが走ります。システムプログラムは予め決まっている通信ポート(今回はUSB)をスキャンして通信を開始し、内蔵フラッシュにプログラムを書き込みます。今回のSTM32_megaボードのBOOT0スイッチオルタネートなので、押しながら電源投入するか、リセットを解除する必要があります。



8月3日
STM32で動かす準備の続きです。STM32_mega基板がUSBデバイスとしてPCから認識されることを確認します。通常のUSBコネクタは気圧センサと干渉するため未実装で、代わりに裏側にアングルのピンヘッダが実装されています。



BOOT0スイッチを押しながらPCにUSBケーブルを接続すると、デバイスマネージャにSTM32ブートローダが出現します。


STマイクロのフラッシュ書き込みツールを起動して、インターフェースのUSBを選択します。


USBのプロダクトIDベンダID、固有シリアル番号が表示され、USB通信ができていることが確認できます。


コネクトボタンを押すと、コード領域のメモリダンプが表示され、FFが読み出されて、内部フラッシュが初期状態であることが確認できます。用意されているバイナリプログラムのダウンロードは行わず、USB確認のみにします。3枚とも良好でした。



8月7日
STM32_megaはBMWの4輪用なので、init.cppの不要なポート設定をコメントアウトして、コンパイルしました。ワーニングが出るものの、正常終了します。


STM32CubeProgrammerでボードにプログラム書き込みます。


PlatformIOでビルドされたバイナリ選択ます。


正常に書き込み終了しました。


電源を再投入するとハートビートLED点滅しているので、正しく書き込めていると思われます。LEDの制限抵抗は予め大きくしていたのですが、まだ明るいので更に大きくした方が良さそうです。元々、LEDはケースに入れると見えないです。


早速、CPUボードをSTM32_megaボードに入れ替えてSpeeduinoを動かしてみます。まだ細かい所は未チェックですが、噴射、点火などの基本的な所は動いているようです。クリックすると約1.8Mバイトの動画をダウンロードします。


8月8日
STM32_megaとアルドウィーノMEGAの動作クロックはそれぞれ168MHz8MHzで大きく違っています。双方ともRISCなので基本命令は1クロックで処理していると思われます。エンジンの回転数が上がると、ECUのプロセッサは忙しくなっていきます。TunerStudioに″Main loops per revolution″というシステムパラメータのゲージがあり、処理がどのくらい忙しいかを表示できます。それぞれ8000rpm(133Hz)で比べてみました。156となり、クロックの比率は21倍なので、ほぼ動作速度に合っています。左がSTM32_mega、右がアルドウィーノMEGAです。因みに、アルドウィーノMEGAの赤ゾーンになっています。プロジェクトを開始した1年前にアルドウィーノMEGAでは非力だと思い、Tennsyボードを使ったDropBearを調査しました。この時は既にCPUボードが入手不可で諦めた経緯がありました。



8月10日
STM32_megaボードの動作確認を進めます。今回アナログ入力のオペアンプバッファは半分のみ実装しています。元々のSTM32_megaの回路は16入力ですが、今回使用するのは6入力です。


O2センサの入力にA8を使っているので、ジャンパでA7に繋ぎ代えています。A5、A6、A7は未使用なので、オペアンプは半分実装でも問題ないです。


エンジンエミュレータと繋いで各機能動作確認をします。左上の赤枠O2センサの代わりのスイッチで、0V、0.5V、1Vを出力します。その下はマップ選択スイッチです。実車では右ハンドル予備スイッチ です。下げるとLOW(0V)になり、セカンダリマップが選択されます。中央下はブルートゥースモジュールでSTM32_megaでもUARTを使う FTDI版をビルドすればブルートゥースでPCと通信できることを確認しました。


エンジンエミュレータからの0.5VでO2センサのAFRゲージ緑枠のように理想空燃比になり、スイッチによりAFRが変化することを確認しました。



セカンダリマップの切替ポートをD24LOWに設定します。動作確認は特定のマップ値をプライマリと異なる値にして選択を切り替え、噴射量変わることを確認しました。



LED輝度が高いので制限抵抗大きくしました。5V電源は51KΩ、ハートビートLEDは43KΩに変更しました。元々は470Ωでした。アマゾンで購入の1608抵抗セットはEIA−96表記で分かりにくいです。



8月11日
STM32_megaはボード上にマイクロSDスロットがあり、オンボードでSDカードへログが取れるはずです。ただし、ソースコードのコメントによると実験的に実装されているようです。また、アクセスは1ビットのSPIモードで行われます。Tennsyボードはフルの4ビットでアクセスできるようです。Speeduinoのフォーラムに質問したところ、無償版のTunerStudioでも、SDログが取れるそうです。現状はSDカードは認識されているものの、ログメニューにSDログの項目が出てこないです。



ディゼーブルになっているメニューも出すオプションがありました。


SDログのメニューが出てきますが、依然としてグレーアウトしています。引き続きフォーラムやり取りしてみます。


8月12日
別の不具合としてMiniTerminalの動作がおかしいです。ヘルプやリアルデータの表示はされず、リターンの入力に対してタイムアウトと思われる応答を返します。唯一、’’のプロトコルバージョンの応答”002”のみ正常表示されます。



8月14日
TunerStudioのメニュ−はspeeduino.iniに記述されていて、PCにmainController.iniとしてコピーされて使用されている事がフォーラムで判明しました。そこで、強制的SDメニューを出す設定に修正してみました。下の修正をすると
Tennsyボードと同じ設定になります。


修正語、SDメニュー出てきました。


SDをフォーマット後に再初期化ボタンを押すとSD Errorの表示が出ていますが、SDの容量は正しく表示されているので、全く動いていないわけでは無いようです。また、RTCもPCの時間を設定できて、電源再投入後に誤差が大きいですが、時間がバックアップされています。



8月15日
STM32_megaはYouTubeのpazi88さんの動画で紹介されていて、質問受け付けています。メッセージを介して質問をしたところ、現状で実験的な部分は無く、SDカードのログは正しく動作しているとのことでした。こちらのハードウェアかソフトウェアのビルド環境に問題があると思われます。初めに、TunerStudioのSDメニュー出ない原因を探ってみます。下のmainController.ini赤枠にならないので、メニューが表示されないと思われます。赤枠の意味はpinLayoutをインデックスとしてboardHasRTC配列を参照したときに0より大きければ真になるということ思われます。ここでpinLayoutはボードの種別番号です。boardHasRTC配列はボードがRTCを持っているがのフラグ配列です。


boardHasRTC配列の定義は8ビット符号なしの128個の配列です。ボードの種別が128個あるという事です。


以下でboardHasRTC配列に値が代入されています。スペース区切り(スペースの数もまちまち)で非常に見にくいです。


以下でpinLayouts(ボード名)が定義されています。


以下でpinLayoutsから、pinLayout定義されています。pinLayout何番目のボードかを表すインデックスです。


一旦、boardHasRTCpinLayoutsを1行毎のテキストにして左側に、init.cpp内のboardIDとソースのコメントを右側に並べて表計算に入れてみました。pinLyaoutboardIDが一致して、BMW PnP(SMT32_mega)のboardHasRTCがになっていることがわかります。0より大きいので条件を満たしているはずですが、メニューは表示されません。不思議です。因みに、RTCを持っているのはSTM32_megaの他はTennsyを使ったDropBearSTM32F407Bloackボードを使った3種のみです。



8月16日
STM32_megaボードにはST−LINKのコネクタがあります。元となった BlackボードにはJTAGが付いていたのですが、大きいので縮小して緑枠SWD(Serial Wire Debug)が実装されています。JTAGの4線よ り少ない2線式で、GNDが必要なので3線を接続する必要があります。Visual Studio CodeでもST−LINKを使ってデバッグできるようです。500円位で中国製のST−LINK2互換のケーブルが売っているので買ってみます


良く考えたら、手持ちのNucleo32のSTM32F401REボードST−LINKが付いてるので、買わなくても良かったです。左の赤枠ST−LINKです。切り離せるように切り込みが入っています。


STM32F401REの回路図を確認しておきます。ショートピン解放すると、ターゲットと切り離されてST−LINKとして使えるようになっています。ボード上に6極のSWDピンヘッダがあり、P2:SWCLKP3:GNDP4:SWDIOを使えば良いようです。



8月18日
PlatformIOのデバッグ機能STM32F401REボードで確認しておきます。ST−LINKが付いているのでplatform.inidebug_tool=stlinkを追加する必要があります。


Lチカをちょっと修正してローカル変数追加しました。ちょっと動作が遅いですが、ブレーク後にカーソルを変数に近づけると緑枠のようにローカル変数の参照できました。また、再実行、各種ステップ実行も正常動作しました。STM32_megaのSDログの不具合もデバッグできそうです。



8月20日
STM32_megaをSWDを使ってデバッグする準備です。SWDコネクタはケースに入れると裏側になってしまうので、3ピンのアングルコネクタを半田面に付け替えました。STM32F401RE評価ボードのショートピンを解放するとSWDデバッガ部がターゲットと切り離されてST−LINKとして使えるようになります。
STM32_megaとSWDデバッガを接続するケーブルを作って接続します。


初めに、Lチカで正しくデバッガが機能することを確認しましす。STM32_mega用のLチカプロジェクトを作ってボードをSTM32_megaの元になったblack_f407veに設定し、platform.inidebug_tool = stlinkの1行を追加しました。


STM32F401REボードの時と同様にブレーク変数参照など、デバッガが正しく動くことを確認しました。


8月21日
他の2枚のSTM32_megaボードもSWDコネクタを裏側に付け替えました。




8月22日
VSCのデバッグ機能勉強中です。赤枠のコンソールはCLIでコマンド入力できますが、そのままGDBでした。下の例ではdata変数のアドレス中身が表示しています。ただし、1ライン編集コマンド動かないようです。



8月24日
限定的ですが、SDログ取れるようになりました。以下、手順の箇条書きです。
1.PCでexFatでフォーマットしたSDカードを入れて、Speeduinoの電源投入します。

2.TunerStudio起動します。この時点でSDコンソールのSDカードのトータルサイズ不明になります。予めPCでファイルコピーしてもファイル名は表示されません。(この後、ログ開始ボタンを押すとSDエラーになります。一度、SDエラーになると
Speeduinoの電源を切らない限りそのままです

.″Format SD Card″ボタンでSDカードをフォーマットします。

.Reset and waitボタンでSDカードの読み直しを行うと、SDカードのトータルサイズ正しく表示されます。

.″Start SD Log″ボタンを押してログ開始して、停止すると、正常ログが取れ、ファイル名表示されます。(ブート時からログ開始、外部端子によるログ開始はSDエラーになります。エンジン回転数によるログ開始は動作良好です。正しく取れたログはUSBを介してPCにダウンロード可能です。ただし、ブルートゥース経由では大きいファイルはエラーになりました。)

Speeduinoの電源を再投入すると、再びSDカードのトータルサイズ不明になり、フォーマットする以外にログを再度を取ることはできないようです。どうも、このダイアログでフォーマット後でないと、SDカード情報を正しく得られないのが原因のようです。なので、手順1は行なわなくてもログは取れます。