---SPINDLEのPWM制御 (その2) (8)

ーーMACH パラレルポートでのPIDコントロールーー
 パラレルポートでの,PIDコントロールについて,調べました。
 Smooth Stepper では,うまくいかなかったのですが,
 パラレルポートでは,うまくいきました。
  kernel Speed 100Hz
  Moter Control
    Use Spindle Motor Output と PWM Controlにチェック
  Special Function
    Closed Loop Spindle Control にチェック
    P→1.6 I→1.0 D→1.0
  PWMBase Freq 100
  Index 入力 ポート 1の11ピン
  PWM 出力 ポート 1の14ピン
 の設定で試してみました。
 入力した回転数に,MACHの方で,追従していく様子が確認
 できました。
 MACHは,やはり優れ物です。
 PIDの設定を最適化すれば,応答速度等,よくなるような気が
 します。
 最初デフォルトの
   P→0.25 I→1.0 D→0.3
 でやりましたが,入力回転数に追従する時間が多少かかり
 ました。Pを1.6に増やしたら,かなり追従までの時間が
 短くなりました。一端上がって,下がります。
 念のため外部の回転計でも回転数を計測しましたが,
 MACHの表示とほぼ同じでした。
 パラレルポートでは,確認できましたが,Smooth Stepperで
 実施するには,なにか設定があるのでしょうかね。

 

 私が確かめたのは,写真のような実験環境です。

 

 パラレルポートにジェンダーコネクターをつなぎ,ジェンダー
 コネクターから引き出した線に各信号線を結線しであります。
 今回使ったPWMのコントローラーは,◯華製のもので,
 PIDコントロールしないと,MACHからのPWM信号よりかなり
 高めの回転をします。
    2019年6月18日の記事
 で確認した,IRF740等のFETを使うと,きっと,応答速度
 もよくなるのかと思います。

振り子--スイング

 ポケモンgo等のゲームで,歩く距離を稼げるのうたい文句
 で,ちょっと前にAmazonで購入しました。

 

 最近,システム側で,この装置の検出を組み込んだみたいで,
 以前のようには,距離を稼げなくなりました。
 そこで,ダメ元で,ちょっと分解してみました。中には,
 コイルが。

 

 振り子の裏側はトランジスタとおぼしき半導体が。

 

 という簡単な構造でした。
 ネットでくぐると,多分下記のような,回路ではないかと
 想像できました。

 

 この動作原理はちょっとわかりませんが,
 簡単な構造だったんですね。
 分かる方なら,ちょっとの改造で,規則的な振り子の運動
 を,不規則なものに改造できるんでしょうね。
 ちなみに,システムに感知されないように,不規則な動き
 ができるようになったものが,発売になってます。

自作デジポット(デジタルポテンショメーター)---(3)

ーーーグレイコード(3)ーーー
 A相とB相の信号を使えば,回転方向を検出できることは,
 理解できました。
 これをプログラムで実現するには,いくつか方法がある
 ようです。
 自作のMPG関連では,B相の立ち上がりを検出し,それを
 DFFのICにいれて,回転方向を検出してました。
 今回は,別な方法でやってみようかなと思います。
 基本的な考え方は,◯月の取説にあったように,前回と
 今回の2回のサンプリングをして,その組み合わせの全部
 から回転方向を決める方法です。
 エンコーダーから,出力されるグレイコードをバイナリ変換
 して,前回と今回の2回のサンプリングの差を取って,+1
 の場合は時計方向,-1の場合は逆時計方向としてもいい
 のですが,バイナリ変換するのにビット操作が必要なので,
 私にはちょっと苦手かなと思います。
 それで,組み合わせを全部拾い出し,それをインデックスに
 して,回転方向を決めるのが私には分かり易いかなと思い
 ました。
 前回グレイコード(2)記事の表から,前回と今回の
 サンプリングの可能性を考えて見ます。
 可能性は,次のようになります。
  
  時計回転
  前回→今回
  00 →00 動かない(0)
  00 →01 時計回転(+1)
  00 →11 一つ先に移動(エラー)
  01 →01 動かない(0)
  01 →11 時計回転(+1)
  01 →10 一つ先に移動(エラー)
  11 →11 動かない(0)
  11 →10 時計回転(+1)
  11 →00 一つ先に移動(エラー)
  10 →10 動かない(0)
  10 →00 時計回転(+1)
  10 →01 一つ先に移動(エラー)
  逆時計回転
  前回→今回
  00 →00 動かない(0)
  00 →10 逆時計回転(-1)
  00 →11 一つ先に移動(エラー)
 
  10 →10 動かない(0)
  10 →11 逆時計回転(-1)
  10 →01 一つ先に移動(エラー)
  11 →11 動かない(0)
  11 →01 逆時計回転(-1)
  11 →00 一つ先に移動(エラー)
  01 →01 動かない(0)
  01 →00 逆時計回転(-1)
  01 →10 一つ先に移動(エラー)
 全部で16通りありますので,前回を2ビットシフトして,
 今回と合計すると,その数値がインデックスの数値として
 使えることになります。エラーを100とすると,
  m[(前回<<2)+今回]=数値
  m[0000]=0
  m[0001]=1
  m[0011]=100
  m[0101]=0
  m[0111]=1
  m[0110]=100
  m[1111]=0
  m[1110]=1
  m[1100]=100
  m[1010]=0
  m[1000]=1
  m[1001]=100
  m[0010]=-1
  m[1011]=-1
  m[1101]=-1
  m[0100]=-1
 のようになり,[ ]内を16進数に直すと,
  m[0]=0
  m[1]=1
  m[3]=100
  m[5]=0
  m[7]=1
  m[6]=100
  m[F]=0
  m[E]=1
  m[C]=100
  m[A]=0
  m[8]=1
  m[9]=100
  m[2]=-1
  m[B]=-1
  m[D]=-1
  m[4]=-1
 のようにすることができます。この配列を使えば,
 回転方向の検出ができることになります。

自作デジポット(デジタルポテンショメーター)---(2)

ーーーグレイコード(2)ーーー
 グレイコードをWikipediaでは,
 グレイコード(英: Gray code、交番二進符号
 (こうばんにしんふごう、英:Reflected Binary Codeなどとも)
 とは、数値の符号化法のひとつで、前後に隣接する符号間
 のハミング距離が必ず1であるという特性を持つ
 よような事が書いてあります。なんの事やらと思いましたが,
 どうやら,連続する2進数の符号の変化が,一つだけする
 表記の仕方のようでした。
 ですから,通常の表記とは,違ってるようです。下記がその
 対比表です。

 

 通常の2進数では,
   3→4の変化で 0011→0100
 のように3箇所変化してますが,
 グレイコードでは,
   3→4の変化で 0010→0110
 のように,1カ所しか変化していません。
 この性質が,エンコード等のデータの変化を取り出すのに
 エラーが少なくなるとのような記載もありました。
 エンコーダーの出力をみてみると,その出力は,まさに,
 グレイコードでした。

 

 エンコーダーの出力を Hightを 1 Lowを 0 として,
 B相を1ビット目,A相を0ビット目とした,2進数の出力と
 見てみると,見事にグレイコードの出力になってました。
 なぜ,回転の出力をA相,B相の出力に分けてあるのか,
 なんとなく理解できました。

自作デジポット(デジタルポテンショメーター)---(1)

 ーーーグレイコード(1)---
 縁あって,X9C,AD5220というデジタルポテンショメーター
 を弄る機会に恵まれました。
 存在は,たまに見かけて知っていましたが,スピンドルの
 DCモーターのコントロールもなんとかできました。
 そこで,同じような原理で,自作してみようかなと思いたち
 ました。
 構想として,ロータリーエンコーダーや,タクトスイッチ等で
 アップ・ダウンができること。
 7セグLEDかLCDでモニターできること等,できればいいなと
 思ってます。
 そこで,いろいろ調べ始めました。手始めに,
 ロータリーエンコーターをあたりました。
 以前,自作のMPGを作成した時に,ちょっと,調べたのですが
 調べるといくつか分からないことがでてきました。
 まず目にとまったのが◯月の,
  http://akizukidenshi.com/catalog/g/gK-00083/
 の取説の記事で,
  現在の値をf(t1),一つ前の値をf(t0)とし,記号”<”を
  左ビットシフト,”+”を ex-or をそれぞれ表すものとし
  て,
    D=f(t0<1)+f(t1)
  という回転判別式を定義します。
  (1)時計回りの場合
     入力系列が 00,01,11,10・・・・・・であるので,
    D0=(00<1)+01=01     D1=(01<1)+11=01     D2=(11<1)+10=00     D3=(10<1)+00=00  の記述があり,演算結果の2ビットめを見ると,回転方向  を判別できると記載がありました。  ここで,なぜ,シフトするのか,なぜ,ex-orをするのか,  釈然としませんでした。  いろいろHPをあさりましたが,どうやら,グレイコードに  関係がありそうだということが諸兄のHPで分かりました。   ロータリー・エンコーダの使い方
  ロータリーエンコーダの使い方
  
 等を見て,シフトやex-or グレイコードに関係する
 ということがなんとなく分かりました。
 グレイコードについて,調べて見ます。

---SPINDLEのPWM制御 (その2) (7)

 いくつかのFETを使って,PWMで,モーターのコントロール
 をしてみました。
 4種類ほどですが,だいたい似たような傾向でしたが,
 一つだけ範囲の広いものがありました。
 IRF740というFETで,◯華製3040というCNCに使われている
 ものです。
 PWMの範囲が広いので,コントロールするには,やりやすい
 のではないかと思いますが,他のものよりも発熱量が多い
 ような気がします。

 

 ただ,今回は4つのFET全部同じ回路でテストしました。
 厳密に言えばきっと,使ってる抵抗等もFETの特性に応じた物
 だと結果が違う物になったかもですね。
 実家においてあったPCをもってきましたので,パラレルポート
 での,PIDのコントロールについて,調べてみようかと思います。
 過日SS(スムーズステッパー)の本家のフォーラムを覗いて
 みましたが,印象としてESS(イーサネットのSS)とMACH4
 での話題が多くなってるような気がしました。

根付きました。

 防犯カメラ設置のきっかけになった,レオナルド・ダビンチの
 バラですが,おられた幹を捨てられなくて,何本かに分けて,
 挿し木をしました。
 20本近く挿し木しましたが,そのうちの3本がどうやら大丈夫
 なようです。

 

 新しい葉っぱも出てきて,元気よく育ってるような気がします。
 大きな鉢に植え替えたいですが,もうちょっと,待って植え替え
 たいと思います。
 ただ,どうなんdねしょう,もともとのバラは,台木に接ぎ木
 がしてありました。
 接ぎ木しなくても,育つんでしょうかね。

値段の不思議

 ◯mazonでいろいろあさってましたが,どう見ても同じ製品が,
 とんでもない価格の差で販売されてました。

 

 

 なんと20倍の値段の差です。
 個数の差でもなさそうですが・・・・・・・。
 高い方のを買う方いるのでしょうか。

---SPINDLEのPWM制御 (その2) (6)

 いろいろやってますが,MACHからの信号でDCモーターを
 回す,回したモーターの回転数をMACH上に表示,の二つ
 は,どうにか達成することができました。
 ただ,MACHに入力した回転数と実際の回転数にかなりの
 開きがあります。
 MACHからのPWM信号のDUTY比を調べたところ,入力
 の回転数とほぼ比例していることがわかりました。
 そのPWM信号を入れている◯華製のコントローラーを調べて
 みると,入力のPWM信号のDUTY比と回転数は,比例関係
 にはなっていないようでした。
 よくわからないのですが,これは,もしかして,回路に使われて
 いるFETの特性に関係あるのかなと邪推しました。
 そこで,先達のHPを参考に,別なFETを使って,ドライバー
 を作ってみることにしました。
 どうなることやら・・・・・・・・・。
 ちなみに,◯華製のコントローラーと入力DUTY比の関係は,
 およそ,最高回転数9000RPMのDCモーターで,
 次のようでした。
  入力DUTY比   RPM   予想されるRPM
  4%     1283       360(9000×0.04)
  6%     2256       540  ・・
  7%     3049       630  ・・
 11%     4061       990  ・・
 14%     5003       ・・   ・・
 19%     6125       ・・
 25%     7000
 36%     8015
 69%     9000
 これでは,入力した回転数と離れてしまうのは,当たりまえ
 ですね。

---番外編---

 PICをあれこれいじってます。
 ところが,昨日,突然,PICへの書き込みができなくなりました。
 思いつくこと全てやりましたが,だめでした。
 それで,PICKITが故障かなと思い,安いの早速ポチりました。
 夜,また試してみようと,あれこれやると,
 原因が判明しました。PICと基盤接続の自作のコードの一本が
 コネクターの部分で,断線してました。
      あーあ,あーあ,
      ジェジェジェジェッ 
 でした・・・・・。