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

アナログ時計を逆転させる方法の補足説明

 100円ショップのアナログ時計を逆回転させるテクニックは結構試される方が多いようです。具体的な方法については、私のこれまでの記事を追えば判るようにしていますが、すごく判り難くなっています。

 また、市場にはいろんなムーブメントが出回っていて、私の記事と同じに作ってもうまく動かない場合もあるようです。

 これでは良くないので、自分自身の頭の中の整理を兼ねて逆転時計を作る場合の注意点などをまとめてみます。

▼逆転時計のデモ

 以前の記事で使った動画です。できるだけこの時の回路とプログラムで解説したいと思います。なお、プログラムはArduino UNOで動かしています。

 時計は一相パルスモータで動いています。普通の一相モータだと回転方向が決まりませんが、時計の一相モーターでは、静的な磁気回路の中心をずらすことで回転子の停止位置にオフセットが付くようになっています。

 回転子の停止位置にオフセットが付いていればドライブは簡単になります。つまり、駆動するパルス波形を以下のようにすることで、正転/逆転が自在に可能になります。

 ということで、こんな波形でドライブすればOKですが、まだまだややこしい話があるので調整手順を含めて順に解説していきます。

▼駆動パルス波形
波形
 正転の場合は、T1のパルス幅で極性を交互に変えてコイルに通電します。T2を短くすれば高速で動きます。

 逆転の場合は、短時間(T3)パルスを加えた後で極性を逆転したパルスを長め(T4)に通電します。これって、ちょっと手前に引っ張って相手に抵抗させておいて、その力を使っていきなり反対側にひっくり返すような動きになっているのだと思います。

 とにかく時計を正逆自在に動かすには、この図にあるT1からT5まで5種類の時間を決めてやる必要があります。

▼実験用の回路図
逆転時計回路図

 Youtubeの動画の状態の回路図です。動画ではスイッチは無く、ジャンパーピンを手でGNDに挿したりしてますが。

 Arduino UNOの9,10ピンから時計のコイルに接続します。時計は1.5Vの電池で動いているのでArduinoから5Vを加えたら壊れちゃいそうです。また、コイルからのキックバック電圧も怖いので、直列抵抗を入れています。
 この抵抗R1の値は回路図に書いてあるように、あらかじめコイルの抵抗をテスターで測っておいて、コイルに1.5Vが印加されるように計算で求めます。まあ後で調整できるように可変抵抗にしておく手もありだと思います。

 以下、T1からT5までの決定方法を解説します。 調整はデモプログラムを走らせることで行い、値の変更はコンパイル/書き込みで行います。

◆T1の決定方法
 T1はプログラムではcwPulseの値で決めており、9行目の値を変更します。単位はmsで初期値は17msです。
 SW1をGND側に入れてデモプログラムを走らせると0.5秒間隔で正回転パルスが出ます。うまく動かない場合はcwPulseの値を変えます。マージンを見るために正常に動く範囲を確認し、その中心値をT1とします。

 これでT1はOKになったので、残りの値を決定します。そのためにはSW1をオープンの状態で起動した後でGNDに切り替えます。うまくいっていたらYoutubeに投稿した状態で動くはずです。

◆T2の決定方法
 T2はプログラムの49行目のdelay(25);の値として入っています。 単位はmsで初期値は25msです。
 値を小さくすると高速になりますが、最初は誤動作してわけがわからなくなるでしょうから、100msあたりで始めた方がいいです。全体が落ち着いてきたら、値を小さくして高速化します。

◆T3,T4の決定方法
 T3はccwPulse1、T4はccwPulse2で指定します。プログラムの10,11行目です。単位はμsで、初期値はT3=3500μs、T4=12000μsになっています。
 ちゃんと動いているかどうか判り難いので、T5の値を大きくしてから始めるといいでしょう。T5の値は、プログラムの58行目のdelay(50)で50msになっていますが、最初はこれを200msくらいにして調整すると良いと思います。

 何しろココが最大の山場です。T3とT4の最適値は関連性があるような気がしていますが実は私自身も良く判っていません。T3は2000から5000くらいの範囲に最適値があるような気がします。T4は8000から24000μsくらいの範囲に最適値があるような感じです。適当なステップで試行錯誤を繰り返し、その結果をT3とT4のマトリックス上に○×を書くことで、うまく逆転する範囲が見えてくるので、その中心をT3,T4の値としました。

◆T2,T5の設定
 ここまで来たら単発パルス送りは大丈夫な状態になっているはずなので、T2,T5の値を小さくしていって高速化すればOKです。
 以下はここまでの説明に使ったプログラムで、Youtubeに掲載した動画に使ったものです。
/*
  100円ショップのアナログ時計を正転/逆転させる
 Pin8:モードスイッチ
 Pin9,10:時計ステッピングモータコイルへ220Ωを経由して接続
 2013.11.9 ラジオペンチ
 http://radiopench.blog96.fc2.com/
 */
boolean flag=true;                  // 駆動極性フラグ
unsigned int cwPulse = 17;          // 順回転パルス幅 標準は17mS
unsigned int ccwPulse1 = 3500;      // 逆回転パルス幅1
unsigned int ccwPulse2 = 12000;     // 逆回転パルス幅2(値の上限は16383)

void setup() {                
  pinMode(13, OUTPUT);         // 動作表示LED 
  pinMode(9, OUTPUT);          // conect coil thrugh 220Ω
  pinMode(10, OUTPUT);         // coil return
  pinMode(8, INPUT);           // 動作モード設定スイッチ
  digitalWrite(8, HIGH);       // weak pull up pin 8

  while(digitalRead(8)==LOW){  // 8ピンがHIGHになるまで
    cwP();                     // 順回転させて秒針の位置あわせ
    delay(500);
  }
}

void loop() {
  while(digitalRead(8)==HIGH){    // 8ピンがLOWになるまで待つ
  }
  for(int p=5; p<=15; p+=5){      // 適当にデモ運転
    cw(p);
    delay(300);
    ccw(p); 
    delay(500);
    ccw(p);
    delay(300);
    cw(p); 
    delay(500);
  }
  cw(60);
  delay(500);
  ccw(60);
  delay(1000);
}

void cw(int n){                       // 指定パルスだけ順回転
  if(n !=0){
    for(int x = 1; x <=n; x++){
      cwP();
      delay(25);                      // 順回転速度設定
    }
  }
}

void ccw(int n){                      // 指定パルスだけ逆回転
  if(n !=0){
    for(int x = 1; x <=n; x++){
      ccwP();
      delay(50);                      // 逆回転速度設定
    }
  }
}

void cwP(){                           // 順回転パルス発生
  digitalWrite(13,HIGH);              // LED flash
  flag = ! flag;
  if (flag == true) {
    digitalWrite(9, HIGH);            // coil drive foward
    delay(cwPulse);                   // wait 
    digitalWrite(9, LOW);             // coil drive end
  }
  else {
    digitalWrite(10, HIGH);           // coil drive revers
    delay(cwPulse);                   // wait
    digitalWrite(10, LOW);            // coil drive end
  }
  digitalWrite(13,LOW);               // LED flash end
}

void ccwP(){                          // 逆回転パルス発生
  digitalWrite(13,HIGH);              // LED flash
  flag = ! flag;
  if (flag == true) {
    digitalWrite(9, HIGH);            // coil drive foward
    delayMicroseconds(ccwPulse1);     // wait 
    digitalWrite(9, LOW);             // coil drive end

    digitalWrite(10, HIGH);           // coil drive revers
    delayMicroseconds(ccwPulse2);     // wait 
    digitalWrite(10, LOW);            // coil drive end
  }
  else {
    digitalWrite(10, HIGH);           // coil drive revers
    delayMicroseconds(ccwPulse1);     // wait 
    digitalWrite(10, LOW);            // coil drive end

    digitalWrite(9, HIGH);            // coil drive foward
    delayMicroseconds(ccwPulse2);     // wait 
    digitalWrite(9, LOW);             // coil drive end
  }
  digitalWrite(13,LOW);               // LED flash end
}

 以下はお願いですが、100円ショップのアナログ時計の正転逆転駆動可能な条件をまとめてみたいと思っています。
 つまり、実際にうまく動いたT1~T5の値と抵抗値を集めたいと思います。こういう情報を集めることでこれから挑戦される方の参考になると思います。
 情報をお持ちの方はコメントで教えていただくと、他の方の参考になると思います。
 連絡は、以下の情報があると嬉しいです。不明なところは書かなくて結構ですが、私の場合だと、こんな感じになります。

T1=17ms, T2=25ms, T3=3.5ms, T4=12ms, T5=50ms, コイル抵抗=90Ω, R1=220Ω, ポート電圧=5V

【9/17追記】
 皆様から頂いたコメントを記事にまとめました。
カレンダー
07 | 2014/08 | 09
- - - - - 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
31 - - - - - -
プロフィール

ラジオペンチ

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

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