
このページはISAのMOZボードを廃止して
STM32F103ボードに変更する
過程を
紹介していきます。
<その1>
2025年
2月4日
現在稼働しているシステムは四半世紀も前なので制御ボードがISAです。ISAコネクタの載っているマザー(FA用では新品が買えますが高いです)も年々入手難になっているので、ここでシステムの改修をしたいと思います。変更点は、ホストOSをFreeBSDからWindowsへ、PCはデスクトップからノートへ、制御ボードは自作MOZボードからSTM32+uCNCへ、制御アプリも自作のXアプリからWindowsで動くgcode senderに変更すれば良さそうです。ステッピングモータドライバユニット以降はそのまま使います。因みに、改修後はガレージのレーザ加工機とほぼ同じ構成になります。レーザ加工機はアルドウィーノMEGAですが、今回はSTM32です。Speeduinoと似てます。下は現在のシステム全体構成です。MOZボードにZ80が載っていて3軸ステッピングモータを動かしています。また、サウンドブラスタボードは壊れて外しているので、ジョイスティック/ロータリーエンコーダは使えないです。旋盤の方の制御方法も要検討です。

下はMOZボードのブロック図です。FIFOを介してZ80にコマンドを送り、ステータスを受け取ります。Z80で動いているのは3DのDDA(デジタル差分分析)プログラムです。ホストのOSはFreeBSDなので、FIFOを制御するデバイスドライバを介して制御しています。

下はMOZボードのISAコネクタ付近です。8255とFIFOが見えています。

2月5日
今回、ステッピングモータ制御のファームウェアはuCNCを使います。uCNCはアルドウィーノUNOで動くGRBLが元ですが、今は32bitコントローラを使います。ebayで32bitのステッピングモータ制御ボードを検索すると
STM32は少なく、下のESP32が圧倒的に多いようです。ESP32の方がwifi接続が簡単だからでしょうか?

下はSTM32の制御ボードですが、これしか見つからないです。さらに日本に送れないかもとのこと。今回はステッピングモータドラ
イバが外付けで、ボードに載っている必要は無いのでSTM32ボードに接続するI/Fボードを自作した方が良さそうです。因みに、STM32F103は
Cortex−M3、ESP32はXtensa(懐かしい響きです)です。

2月6日
ヤフーショッピングでSTM32F103C8T6のbluepillボードを購入しました。5個で2400円で、安いです。

bluepillボードが到着したので、早速、マーキングを確認します。STM32F103はクローンコントローラがたくさん存在します。載っているものはSTMのロゴがあり本物みたいに見えます。互換コントローラのAPM32F103を良くききますが、このサイトによるとAPMはARMのライセンスは取ってないみたいです。

uCNCの開発環境を確認しておきます。PlatformIOで開発できます。プラットフォームはArduinoでテージのSpeeduinoのSTM32と同じです。

2月7日
2010年にも一度、ISAを廃止しようとしました。ステッピングモータをARMのLinuxマシンで制御する計画でした。たった1ページしかなく、途中でとん挫してます。ホストPCとソケット通信でデータを送受信する予定だったと思います。

2月8日
uCNCのソースをPlatformIOでビルドしてみます。ボードをbluepillに設定してビルドすると、Gitが無いのでインストールしろというエラーで止まります。必要なファイルをGitでネットから入手する仕組みのようです。

指定のサイトからGitをインストール後、無事、ビルドできました。

できたオブジェクトの場所を開いてみます。53KBと思ったより、小さいです。ちなみに、STM32F103C8T6のフラッシュ容量は64KBです。

2月9日
プログラムのビルドができたので、STLINKでボードにダウンロードしようとしたところ、
CPUIDが違うというエラーでストップします。嫌な予感がします。

ネットで検索するとPlatformIOのコミュニティで同じ不具合が報告されてい
て、対処方法もありました。ちょっと昔なので設定ファイルのディレクトリ構成が変わっていて、難儀しましたが、無事解決しました。

クローンの紹介ペー
ジで確認すると、載っているのは中国製クローンのCS32F103C8T6のようです。マーキングはSTMなんですが、流石に、5枚で2400円はクロー
ンだったようです。クローンでもちゃんと動けば良いですが〜因みに、このフラッシュ容量は128KBのようです。

2月10日
uCNCのファームが怪しいbluepill互換ボードに書けたので、早速Universal g−code Senderをインストールして接続してみます。緊急停止ボタンやドアスイッチなどの入力ポートが通常状態でないとアラームが出てアイドル状態にならないので、臨時にジャンパ線で通常状態にすると無事、アイドル状態になりました。uCNCのWikiサイトのFAQに対処方法が載っていました。

uCNCはほぼGRBL互換なので、ファームの選択はGRBLを指定すれば良いようです。ジョグパネルで各軸の送りができているので、実際にモータを繋げれば動いてるのでは?と思います。今のところ、クローンのコントローラでも問題ないです。

2月11日
X軸だけドライバを繋げてステッピングモータを動かしてみました。接続したのはSTEPとDIRの2本だけです。HeeksCNCが出力するGコードの先頭に工具登録、工具設定コードが有って、そのままではエラーで停止します。この行をコメントにすると問題なく動きました。クリックすると約1.7MBの動画をダウンロードします。

下の赤枠がエラーの出る行で、これをコメントにする必要がありました。

2月15日
Universal g−code Sende(UGS)に画像ファイルから輪郭抽出してGコードを出力する機能あるので試してみます。読み込める画像のフォーマットはJPEGとPNGです。今回はステンシルフォントを使って、以下のPNG画像を作りました。

UGSはデザインウインドで簡単な図形や文字が入力できますが、デザインウインドのメニューから赤枠の輪郭抽出のダイアログが起動できます。

ダイアログから画像ファイルを選択して読み込み、左のスライダで閾値や直線、カーブなど各パラメータを調整して画像が鮮明になるようにします。

抽出後はパスツールで切削の方法を選びます。今回は赤枠のレーザ加工用(輪郭線に沿って移動)を選択しました。その後、生成されたGコードをエクスポートします。

いつも、Gコードの確認で使っているNCVCに読み込んで確認します。正しく変換できています。UGSの輪郭抽出はスライダでリアルタイムに調整できるのも良いです。切削順は結構分散しています。
動画をキャプチャしました。クリックすると約1.2MBの動画をダウンロードします。

今使っている輪郭抽出はFreeBSDで動くautotraceです。autotraceはDXFに変換できるので、重宝しています。画像は予め、2値化しておく必要があります。パラメータの調整はCUIのため、変換後に都度確認が必要です。下はラズベリーパイのロゴマークです。

autotraceでBMPをDXFに変換するには以下のコマンドを使います。変換後にQcadに読み込み、不要なレイヤを削除する処置も必要です。1つの閉区間がレイヤになるため複雑な図だと厄介です。
$ autotrace -corner-surround 1 -input-format BMP -output-format DXF rpi2_log .bmp > rpi2_log.dxf

2月18日
上と同じラズベリーパイのロゴマークの画像をUniversal g−code Senderで輪郭抽出してみます。

左はパス1の内側データの輪郭、右がパス0の外側データの輪郭です。双方とも良好です。


GコードをエクスポートしてNCVCで確認すると、正しく表示されません。

どこで異常なのかトレースしてみます。赤枠の行に小数点の無いデータがありました。Gコードの永遠の課題、電卓型/従来型問題が発生です。

Gコードの座標は電卓型と従来型があって小数点の扱いが異なります。今で、HeeksCNCとUGSからGコードを生成して、NCVCで表示すると、この問題が出ます。Gコード内にどちらが使われているかを指示するコマンドは無いです。

NCVCの作者のページにスクリプトがありました。小数点を強制的に付けるperlのプログラムです。

早速、cygwinで変換してみます。

今度は正しく表示されました。大分前にもこの問題が発生しました。厄介です。この時はZ軸の値に強制的に小数点を付けるプログラムを作製して対応しました。

2月21日
STM32のI/Fボードの作製を開始します。ピンコネクタを購入してユニバーサル基板に半田付けしました。ステッピングモータドライバのフォトカプラのドライバには手持ちのデジトラRN1210を使います。このユニバーサル基板は高校生の時にバイト先のプリント基板工場のゴミ箱から拾ってきた基板です(笑)。

ヤフーショッピングで購入した40ピンのピンヘッダとコネクタ。10個セットで600円です。40ピンを20ピンに分割することはできないので、ちょっと無駄が出ます。

赤枠がSTMボード側、緑枠がステッピングモータドライバのフォトカプラです。R1とQ1がデジトラです。

2月23日
STM32のI/Fボードの続きです。ユニバーサル基板に少し部品を載せました。デジトラと外と繋ぐ50Pのピンヘッダです。緊急停止ボタンやドアスイッチなどの入力ポートはショートピンでGNDに落とせるようにしておきます。フォトカプラの電流制限は240Ωを使いテストを行いました。

