2024年3月10日日曜日

自作CPUで遊ぶ 21

コロナに感染してしまった。 ... orz 
最初は妻が発熱の症状になり、二日後に私も発熱した。発熱の具合としては私のほうが重く40℃超まで上がった。全身は痛むし・ガタガタ震えるほど悪寒はするしで非常にシンドかった。熱は3日目位から下がり今は平熱に戻っている。鼻水や喉の痛みや疲労感があり、頭が少しクラクラしているが回復して来ている。 5日間の休養期間も終わったので月曜からは仕事に復帰できそうだ。


さて、CNCだが当初は下図のように*_en信号で動作のON/OFFを制御するようにしていた。
この方法だけだとX/Y軸を同時に加減速制御しながら正確にパルス数のパルスを発生させるのが面倒なので、生成するパルス数( = 移動量)と起動パルスを与えて動作するモードも追加することにした。また、手動送りで移動させる場合などは前者の方法が向いているので両方の制御方法に対応させることにした。前者が手動送り用、今回追加するのがプログラム動作用だ。
以下はプログラム動作モードをシミュレーションした結果だ。 スピンドルがP0(x0,y0)からP1(x1,y1)への移動指示が来た場合ソフトウェアはこれをX, Y各軸の移動量に変換しその値を設定してkickすることになるがこれをシミュレートした。 この例ではXの移動量(= パルス数)を1000、Yのそれを3000とした。P0→P1への送り速度を1000000、加速度を100とした。(テキトーな値) これからX/Y各軸の設定値を図のように求めた。
波形最下部のXY-AXIS speedはX/Y各軸の速度をテストベンチで合成(y = sqrt(X速度^2 + Y速度^2))した結果だ。 以下は加速部の拡大。X/Y軸の加速期間は一致しており、定速時の速度は設定値に一致している。
以下は減速部の拡大。X/Y軸の減速期間はほぼ一致しており、停止時の総パルス数(*_pcnt)は設定値(*_pnum)に一致している。
以下は手動送り動作をシミュレートした結果。 速度や加速度などのパラメータは上記のままで、x_feedを1にしてX軸のみを動作させている。x_feedが1になると加速し、設定速度に達すると定速動作に以降しx_feedが0になると減速して停止する。総パルス数は加速開始から減速終了(停止)までなので、この動作の場合はx_feedが1の期間よりも余分にパルスが発生(移動する)ことになる。
上記以外にもRTLに若干の変更を加えた。具体的にはzumi32のプログラムのデバッグ効率を上げるためにUARTを追加した。これをZYNQ-PSのUART0と接続した。
これでzumi32側のプログラムからのデバッグメッセージをPS側(Petalinux)で見ることができる。 以下はプログラムの例だ。1秒周期のタイマー割り込みの割り込みハンドラ内からprintf関数を使って"Hello World 数字\r\n"文字列を送信させている。 このprintfは30〜40年くらい前にスクラッチから作成したもので最終的にsend_str()をコールする。(引数は表示する文字列) 浮動少数型には対応していないが今回のようなデバッグ用途には十分使える。
Petalinux側はminicomを動かした。
正常にメッセージを受信している。

0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...