磁気エンコーダでターンテーブル制御
磁気ロータリーエンコーダでDCブラシレスモーターの制御ができることを知ったので、ターンテーブル制御にも使えるはずと考えた。3個のホールセンサによるローター角検出では相位置をピンポイントで検出することしかできないが、このエンコーダを使えばモーター軸の回転角を12bit分解能で読み取ることができる。ブラシレスモーターの駆動制御は次ステップの課題として、まずは回転速度の検出器としての応用を試みる。
こんなもの↓を作った。
磁気ロータリーエンコーダはAS5601チップを使ったもの。AS5601はインクリメンタル信号出力があるので、このパルスを速度検出信号として使う。PIC (12F1822)はAS5601をI2C接続して設定コマンド(初期設定)を送るため。ターンテーブルの回転数を検出するためにモーター軸の回転を直接計測したいところだが、プラッターの下にあるモーターの軸端にはどうしてもアクセスできないので、このような車輪を回転するプラッタの縁に押し当てて回転させることにした。
■ 回路図
ターンテーブル制御回路は±5V電源で動作しているので、AS5601のパルス出力0-5Vを0V中心の信号にトランジスタでレベルシフトする。LEDは回転動作の確認用。
■ PICプログラム
I2C接続が必要なのでMSSPを設定する。MCCを使えば簡単。I2Cクロック設定は400kHz。
ピンアサインもMCCで。
I2C通信コマンドはMCCが生成した関数を使い、バイトデータの送受信を行う。ソースコートはこれ↓だけ。Write1ByteRegister()による設定書き込みは、インクリメンタル出力Bのパルス数が一回転あたり16となるように設定するためのConfiguration registerのABN Mapping設定値の書き込み。
main.c
■ テスト
ターンテーブル回転時の速度パルスとそれによる速度制御信号のオシロ計測結果。速度パルスの間隔が速度制御信号に変換されるので、速度パルス幅にムラがあると速度制御信号も揺らぎが大きくなる。
まずは、従来の光学式速度センサによる計測。速度制御信号(水色)が細かくばらついている。これは速度パルス(黄色)の間隔にばらつきがあるため。速度パルスの間隔が揃わないのは、速度センサのターゲットにしているストロボパターンの縞の間隔にばらつきがあるため。
これに対して、今回の磁気エンコーダによる速度センサによる計測。速度制御信号はかなりなめらかになった。ゆっくりと揺らいでいるのはターンテーブル回転数にムラがあるためであろう。
■ 課題
・車輪にはタミヤのΦ30プーリーを使った。これにOリングを嵌めて仕上がり径が31mm(プラッター外径が310mmなのでその1/10)になるのを狙ったが正確ではない。ここが正確であればプラッター一回転で車輪は正確に10回転(=160パルスを検出)となるが、そうでないと回転数制御誤差となる。プラスチックではなくアルミなどの金属製プーリーが欲しいところ。
・前述のように、モーターの軸端を直接エンコーダで検出するのが理想であるが、モーター軸の下端はカバーでおおわれている。構造が不明であるが何等かのスラスト受け構造になっているだろうから軸端はフリーではないであろう。もし軸端にエンコーダがつけば、モータ角度の検出ができるのでデジタル制御で正弦波駆動ができると思う。せっかくアナログでできているのだからわざわざデジタルでやることもないか。
■ 磁気ロータリーエンコーダでターンテーブル制御はうまくいったのか?
光学式速度センサとの置き換えでターンテーブル制御はそのまま動作した。(プラッター一回転のパルス数が216から160に変わったので、回転制御クロック周波数は120Hzから88.8Hzへ変更した)
光学式パルス信号はどうしても間隔ムラができるが、磁気エンコーダはきれいなパルス信号を出してくれるので精神的に気持ち良い。音も良くなったように錯覚する。
2024.3.20
磁気ロータリーエンコーダでDCブラシレスモーターの制御ができることを知ったので、ターンテーブル制御にも使えるはずと考えた。3個のホールセンサによるローター角検出では相位置をピンポイントで検出することしかできないが、このエンコーダを使えばモーター軸の回転角を12bit分解能で読み取ることができる。ブラシレスモーターの駆動制御は次ステップの課題として、まずは回転速度の検出器としての応用を試みる。
こんなもの↓を作った。
磁気ロータリーエンコーダはAS5601チップを使ったもの。AS5601はインクリメンタル信号出力があるので、このパルスを速度検出信号として使う。PIC (12F1822)はAS5601をI2C接続して設定コマンド(初期設定)を送るため。ターンテーブルの回転数を検出するためにモーター軸の回転を直接計測したいところだが、プラッターの下にあるモーターの軸端にはどうしてもアクセスできないので、このような車輪を回転するプラッタの縁に押し当てて回転させることにした。
■ 回路図
ターンテーブル制御回路は±5V電源で動作しているので、AS5601のパルス出力0-5Vを0V中心の信号にトランジスタでレベルシフトする。LEDは回転動作の確認用。
■ PICプログラム
I2C接続が必要なのでMSSPを設定する。MCCを使えば簡単。I2Cクロック設定は400kHz。
ピンアサインもMCCで。
I2C通信コマンドはMCCが生成した関数を使い、バイトデータの送受信を行う。ソースコートはこれ↓だけ。Write1ByteRegister()による設定書き込みは、インクリメンタル出力Bのパルス数が一回転あたり16となるように設定するためのConfiguration registerのABN Mapping設定値の書き込み。
main.c
#include "mcc_generated_files/mcc.h" #include "mcc_generated_files/examples/i2c_master_example.h" #include "mcc_generated_files/pin_manager.h" #define slvadr 0x36 //The 7-bit slave address of the AS5600 is 0x36 (0110110 in binary). #define OUT LATA4 void main(void) { // initialize the device SYSTEM_Initialize(); I2C_Write1ByteRegister(slvadr, 0x9, 0b0011); while (1) { OUT = (I2C_Read1ByteRegister(slvadr, 0x0c) & 0b1000)? HIGH : LOW; } }
■ テスト
ターンテーブル回転時の速度パルスとそれによる速度制御信号のオシロ計測結果。速度パルスの間隔が速度制御信号に変換されるので、速度パルス幅にムラがあると速度制御信号も揺らぎが大きくなる。
まずは、従来の光学式速度センサによる計測。速度制御信号(水色)が細かくばらついている。これは速度パルス(黄色)の間隔にばらつきがあるため。速度パルスの間隔が揃わないのは、速度センサのターゲットにしているストロボパターンの縞の間隔にばらつきがあるため。
これに対して、今回の磁気エンコーダによる速度センサによる計測。速度制御信号はかなりなめらかになった。ゆっくりと揺らいでいるのはターンテーブル回転数にムラがあるためであろう。
■ 課題
・車輪にはタミヤのΦ30プーリーを使った。これにOリングを嵌めて仕上がり径が31mm(プラッター外径が310mmなのでその1/10)になるのを狙ったが正確ではない。ここが正確であればプラッター一回転で車輪は正確に10回転(=160パルスを検出)となるが、そうでないと回転数制御誤差となる。プラスチックではなくアルミなどの金属製プーリーが欲しいところ。
・前述のように、モーターの軸端を直接エンコーダで検出するのが理想であるが、モーター軸の下端はカバーでおおわれている。構造が不明であるが何等かのスラスト受け構造になっているだろうから軸端はフリーではないであろう。もし軸端にエンコーダがつけば、モータ角度の検出ができるのでデジタル制御で正弦波駆動ができると思う。せっかくアナログでできているのだからわざわざデジタルでやることもないか。
■ 磁気ロータリーエンコーダでターンテーブル制御はうまくいったのか?
光学式速度センサとの置き換えでターンテーブル制御はそのまま動作した。(プラッター一回転のパルス数が216から160に変わったので、回転制御クロック周波数は120Hzから88.8Hzへ変更した)
光学式パルス信号はどうしても間隔ムラができるが、磁気エンコーダはきれいなパルス信号を出してくれるので精神的に気持ち良い。音も良くなったように錯覚する。
2024.3.20