google-site-verification: google3bd66dd162ef54c7.html
fc2ブログ

DVDのスピンドルモーターを低速回転させる-続編

◆まえがき
以前DVDのスピンドルモーターを低速回転させましたが、回転速度に少しムラがあるのが気になっていました。

セルシンを作った時も回転ムラの問題があったのですが、この時のモーターは3相(3ポール)のコイルに対して磁石は1対。つまり1回転の中で磁気的にロックされるポジションは1つしか無いので、まあ仕方ないかなという感じでした。

一方で、このDVDのモーターは1回転で磁気的にロックされる位置が6箇所あります。つまり、もっと滑らかに回転出来るはずなのに、目に見えるような回転ムラが発生するが残念でした。

回転ムラを減らすには、マスダンパーを付けるなどのメカニカルな対策が考えられますが、電気的な駆動条件の調節で対策出来ればそれに越したことはありません。

そんなことで、駆動力と回転速度を運転中に変更出来るようにして、その効果を確認してみました。

◆回路図
回路図
VR1とVR2でモーター電流と回転速度を運転中に変更出来るようにしました。

モーター電源は最大1.5Aくらい流れるので別ルートから供給しています。回路図に示していませんが、Arduino NANOの電源はUSB電源など別系統から供給する必要があります。パワーを上げないならモーター電源をNANOの+5Vから取る手もありますが、その場合はボードの電流供給能力に注意する必要があります。
・外観
ブレッドボード

◆プログラム
Arduino UNO/NANOで使うことを想定したスケッチです。
// DVDスピンドルモーターの3相アナログ駆動テスト
// 可変抵抗で駆動パワー、回転速度を指定可能にした
// 20230427_3PhaseMotorDrive

int ax;          // モーターの角度

void setup() {
  pinMode(8, OUTPUT);          // 動作速度測定用
  pinMode(7, INPUT_PULLUP);    // 回転方向設定(HIGH or LOW)
  Serial.begin(115200);
  ax = 0;                      // 角度設定変数(0-360度で指定)
  angle(ax);                   // ホームポジションに移動 
  delay(1000);
}

void loop() {
  if (digitalRead(7) == HIGH) {  // 回転方向スイッチがOFFなら
    ax ++;                       // CW
    if (ax > 360) {
      ax = 0;
    }
  } else {                       // OFFなら
    ax --;                       // CCW
    if (ax < 0) {
      ax = 360;
    }
  }
  angle(ax);                     // 指定角度に回転
}

void angle(int a) {                     // 指定された位相でコイルを駆動.位相は度の値で指定
  int r, s, t;
  float pow_r, pow_s, pow_t;
  float magPow;
  int  rotInt;                          // インターバル

  magPow = 120.0 * analogRead(A0) / 1024.0;             // 磁界の強さ設定 (130us)
  rotInt = 500 * (1.0 - analogRead(A1) / 1024.0) - 30;  // 回転速度決定、値は0.1usステップ、-30はオフセット補正(130us)
  if (rotInt < 0) {                                     // 負の値になった時の後始末
    rotInt = 0;
  }

  pow_r = cos(PI * a / 180.0);          // 位相に相当するパワーを設定(175us)
  pow_s = cos(PI * (a + 120 ) / 180.0); // 位相 +120度            (175us)
  pow_t = cos(PI * (a - 120 ) / 180.0); // 位相 -120度            (175us)
  r = (pow_r * magPow) + 125;           // 振幅125±magPowでスイング(255近傍は怪しいので避ける)
  s = (pow_s * magPow) + 125;
  t = (pow_t * magPow) + 125;
  analogWrite( 9, r);                   // アナログ(PWM)出力
  analogWrite(10, s);
  analogWrite(11, t);
  delay100us(rotInt);                   // 指定時間待機して回転速度を調整
  Serial.print(magPow); Serial.print(", "); Serial.print(rotInt); Serial.print(", ");
  Serial.print(r); Serial.print(", "); Serial.print(s); Serial.print(", "); Serial.println(t);
}

void delay100us(int t) {           // 引数*100μs 待機
  // delayMicroseconds は16383us以上の値が設定出来ないのでこの関数を使う
  for (int i = 0; i < t; i++) {    // 指定回数
    delayMicroseconds(100);        // 100us待機
  }
}
PWMで三相のパワーを調整してモーターを駆動するようになっています。

37, 38行目のAnalogReadで可変抵抗の値を読み、励磁パワーと回転速度を設定しています。

回転速度は1回転当たり4.7秒から1分45秒の範囲で変更可能になっています。

angle( ) の関数内でモーターのコイルの励磁条件を設定しており、コメント内に書き込んである(130us)などの数字はその行の実行時間です。cosの値を計算するのに175us掛かっているのがこの関数の実行時間の足を引っ張っています。ここをテーブル参照方式などに変更すれば、処理時間を短く出来て最高回転速度をもっと上げることが出来るはずです。

◆動作テスト
全体
ターンテーブルに載せる物を変えたりしてテスト。

パワーを調節することで、(目で見る限りは)回転ムラを感じない駆動条件に設定することが出来ました。なお、パワーを下げ過ぎるとスリップして回転停止。パワーを必要以上に上げると回転ムラが発生し、またモーターが加熱します。

・動画(ツイッター)
回転数を調整している様子です。

◆HDDのスピンドルモーターを回す
面白いので、同じ回路を使って壊れたHDDのスピンドルモーターを回してみました。コイルはY結線になっていてピンは4本出ているので、中点以外の3ピンに接続します。(中点はピン間の抵抗を測定すれば判ります)

HDDのスピンドル

HDD
流軸のスピンドルを低速で廻したのでは本来の性能は出ませんが、それでもそのあたりに転がっている軸受けよりは精度が高いと思います。

◆まとめ
駆動パワーを調整することで回転ムラを目立たなくすることが出来ました。作品をデモする時などにあれば便利かも知れません。

こういうエレメカ物は対策の効果が目で見て判るので、いじっていて楽しいですね。
関連記事

コメントの投稿

管理者にだけ表示を許可する

No title

ウチのPC、なぜか(Linuxのせい?)Twitter動画が見れない…残念orz。

低速回転といえば、電子レンジのターンテーブル用のユニットは4〜5rpmで、展示用などの回転台によろしいかも。

鍛冶屋さん、こんにちは

ツイッターの動画、うちのlinuxのfirefoxでは見えましたが相性みたいなものがあるんでしょうか。このブログの設定が関係しているのかも知れないので、頭に入れておきますね。

電子レンジのターンテーブルならトルクがありそうで、大きな物も軽々と回せそうですね。

No title

ブラウザは”Pale Moon”を使っています。一応Firefox系らしいのですが...(たんにPCのリソース不足?...、Youtubeはメッチャ遅いけどなんとか見れます^^;)。
⇑は、Firefoxの古い(あれこれ出来る)アドオンが今でも動くんですよ。

鍛冶屋さんへ、

Pale Moonというブラウザですか、いろいろあるんですね。
ちなみにうちのfirefoxはLubuntu上で動いているもので、古いネットブックに入れてます。普段はWin11かAndroid タブレットを使っているのですが、いろんな環境持ってた方が何かと安心です。

ちなみにこのコメントはそのfirefoxで書いてますが、画面が狭いけど何とか使えてる感じです。

ブラウザ

私はWindows10でFireFoxメインですが、
FireFox、Chrome、Edge、PaleMoon、WaterFox のどれでも動画再生出来ました。
Linux系は派生版を昔あれこれ試しましたが、使い勝手が今一つ満足出来ず、結局使っていないから不明です。

回してみました

http://igarage.cocolog-nifty.com/blog/2023/05/post-51a2fc.html

こんな回路(タイマーの使い方)とスケッチで回してみました。

re:ブラウザ

mytoshiさん、いろいろなブラウザで確認して頂いてありがとうございます。このくらいOKならとりあえず大きな問題は無さそうです。

re:回してみました

居酒屋ガレージ店主(JH3DBO)さんありがとうございます。
リンク先拝見しました。プロの手に掛かるとこんなふうになるんですね。もの凄く参考になります。

No title

mytoshiさん。

今時(?)のLinuxは、操作性もほぼWinと同じですよ。
自分は、特に軽量系のをを使っているのですが、フォルダをルートにコピペするだけでインストールも不要です(まさに置くだけ)。Winとの共存も可能(Winに全く影響もなく)ですので、お試しあれ^^)。

鍛冶屋さんへ

鍛冶屋さん、ありがとうございます。
WEB閲覧専用なら良いのかもしれませんね。
私は手持ち全てのWin機をSSD化してからはスピード等何も問題感じないため、慣れていて汎用性があるWindowsのままです。

昔tryしたのは、LinkStathionのRAID基盤が駄目になってデータを読み出せなくなり、Linux系OSなら読み出せそうだと知ったからです。
それ以来データバックアップはシンプルなUSB-HDDに行っています

その後2018年にはREGZAで録画しているHDDが不調になり下記OSをtryしてみました。
回復に使いたいツールのほとんどが有料版しかなくて結局頓挫です。
Linux Bean
Puppy Linux
Xubuntu

re:回してみました

100us割り込みの中で3相PWM出力を処理するように手直し。
十分、間に合いました。
http://igarage.cocolog-nifty.com/blog/2023/05/post-51a2fc.html

re2:回してみました

100us周期の割り込みとなるとCPUは大忙しになりそうですが、それを動かしちゃう技術力は凄い。
回路はまだ残してあるので早速動かしてみて、問題なく動くことを確認しました。えらく速くまで回りますね。
カレンダー
08 | 2023/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。
記事の内容のご利用は読者の自己責任でお願いします。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード