2023年8月13日日曜日

自作CPUで遊ぶ 4

ジャンク箱を確認したら今回使っている以外にもHDD用スピンドルモーターが5個出てきた。電極は殆どが4極だが1つだけ3極の物があった。電極間抵抗を測ると全て同じ値なのでコイルはデルタ型の接続になっているんだろう。
コイル抵抗は全部違っていて(多分品種毎に異なる)、Nidecのが1.8Ω、JVCのが1.6Ω、CAO*が3.3Ω、JBY*が1.2Ωだった。これらはコモン端子とその他の端子間の抵抗値なのでコイル1個の抵抗値だ。また、デルタ型の電極間抵抗は2.8Ωだった。デルタ型の電極間は Rと2R の並列回路として見えるのでR1個当たりに換算すると、2.8Ω = r // 2r = r(2/3) → r = 2.8 (3/2) = 2.8 * 1.5 = 4.2Ω の筈だ。抵抗値が大きいということはコイルの巻数が多いことを意味するのか?もしそうなら抵抗値が大きい方が回転数も大きいかも知れない。。。(ホントか?) 後で動かしてみようと思う。 モーターの駆動波形と実際のモーターの回転数を見たくなったのだが、所有しているデジタルオシロスコープは2CHでCH数が足りないのと、ちょっと測定結果をグラフ化したりしたかったのでロジック・アナライザーで測定することにした。このロジアナは2014年にこのブログで開発したもので、Lattice社のMachXO2-7000評価ボードにロジアナの自作IPを実装した。アクイジションメモリとして16MBのSDRAMをウラ面に無理やり実装している。(以下は当時撮影した写真)
SDRAMは150MHzで動かしている。これに対してロジアナはCH数24、サンプリング速度は100Mspsなので一見スループットが不足するように見えるが、このロジアナは取得したデータをValue Change方式でSDRAMに格納する。この方式はデータ圧縮の効果があり(詳細は当時のブログを参照) 圧縮の程度はデータの変化率に依存するが常にサンプリング周波数に近い速度で変化する信号を測定でもしない限りはまあまあ使える。  このロジアナで使用した評価ボードはLH2232HLを搭載しておりPCとはこれを介してUARTで通信する。UARTは8Mbpsで動かした。また、この後にMachXO2-7000搭載のFPGAボードを自作しこれにもUSB I/F用にLH2232HLを搭載したがFPGAとは非同期FT245モードでも通信出来るようにした。 このモードは非同期8bitパラレルでデータをやり取りするので測定データのアップロードを高速に行うことが可能であり、実際UARTモードよりも6.7倍程度高速に転送できた。今回はモーターの起動からSDRAMの最大容量までデータを取得したい。そのためアップロードするデータ量も多くなるので上記写真の機体ではなく後者のFT245モードが使える方のボードを使用することにした。
モーターの回転数はフォトインタラプタを使って測定することにした。具体的には1箇所穴の空いたボール紙で作った円板をモーターに貼り付け、この穴をフォトインタラプタのスリットに通過させた。
ロジアナの制御は専用のGUIアプリで行うが、久しぶりに起動しようとしたら使っているwxWidgetsのライブラリのバージョンが古すぎて起動しなかったため wxformbuilderでGUIを再編集・生成してビルドし直した。信号はモーターの駆動信号(drv_A, drv_B, drv_C)とフォトインタラプタの信号(Sensor)を採取した。 SDRAMを全領域使って起動時から11秒程度の期間のデータを取得できた。単純に100Mspsの速度でデータを取得した場合、(4*1024*1024)/100e6 ≒ 42msecの期間しか採取できないが、上述の圧縮効果により260倍の期間のデータを取得出来ている。
このGUIアプリには波形の表示機能は無い。その代わりVCDファイルを出力するのでこれをGtkWave等を使って波形表示を行う。以下は取得した信号の波形だ。モーターに貼り付けた円板の穴は1つだけなので1パルス/1回転発生する。従って、このパルスの周期を測れば回転数を求められる。また、前回 drv_A, drv_B, drv_Cに1秒毎にパルスを与えてモータパルス12個で1回転するとしたが、波形からこれが正しかったことが判った。
GtkWaveのExport機能を使って波形データをTIM形式でファイルに出力し、テキストエディタで信号毎のCSVファイルに編集してlibreofficeのcalcに読み込み、回転数に変換してグラフ化した。横軸は起動してからの経過時間、縦軸は回転数 [rpm] だ。
緑色のグラフ(real)はフォトインタラプタの信号から算出した回転数、オレンジ色のグラフ(drive)はdrv_Aの周期から算出した回転数だ。 これを見るとFPGAの駆動に対してモーターの応答に遅れがあることが判る。また、回転速度の上げ方が粗すぎるようだ。モーターの回転数にリンギングのような振動があるのも判る。このリンギングはモーターをちゃんと固定していないのと円板が若干偏心しているのも影響している可能性がある。何れにしろ、測定の分解能が高いのでこの辺の挙動が観測出来ている。なかなか面白い。  … でだ。 どうやったらもっと旨く動かせるんだろう? この系で測定しながら試行錯誤すれば出来るのかしら?


0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

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