プライマリーポンプの交換

 タナカのチェーンソーのプライマリーポンプが劣化して,亀裂が
 入りました。

 

 早速交換しようと思い,近くのHCに行きましたが,値段が高いので,
 買うのを止めました。いろいろ調べて見ると,同じ純正のものでも,
 値段にばらつきがあります。
   近くのHC     1440円+税
   実家近くのHC  1160円+税
   amazon      2299円
 でした。
 レビューを読むと製造中止のコメントも見られるのですが,
 社外品?だと安いです。
 ちなみに以前友人の刈払機のものを交換するときに買ったお店
 では,同等品が
     590円
 でした。
 どうしようとおもいましたが,ダメ元で,amazonの安い物も注文
 しました。
 これ
 5個で,598円+100円(送料)でした。
 まあ,これも多分,中華製でしょうかね。どの程度保存できるのか
 分かりませんが,残りは,予備として,とっておきます。
 うまく使えるといいのですが。

PWM信号発生器のシリアル通信

 過日,いろいろ試すのに◯mazonkから,PWM信号発生器を購入し,
 便利に使ってました。

 

 商品の説明にもシリアル通信ができると記述があり,基盤の裏
 にも TXD RXD の記述があるので,外部からコントロール
 できるのかなと思ってました。
 手持ちのシリアル通信のアダプターに接続し,PCから,あれこれ
 やってみました。
 最初「テラターム」でやりましたが, FAIL の文字が帰ってくる
 だけで,通信はできているようでしたが,うまくいかないようでした。
 「シリアル通信ソフト」というソフト名のプログラムをベクターから
 DLして,試してみると,あっけなく通信ができました。
 (起動にあたっては,管理者権限で起動しないとだめでした。)
 難しいプロトコルが必要かとおもいましたが,簡単なコマンドで,
 制御できるようです。

 

 写真は, ”read” のコマンドで,設定の状態を読んでいます。

   F055 → 周波数
   D090 → DUTY%

 と,表示されている数値を読み取ることができました。
 ちなみに,設定するには,

  周波数 001→999     F*** (ex F090 →90Hz)
  周波数 1.00→9.99   F*.**(ex F1.45 →1.45KHz)
  周波数 10.00→99.9  F**.*(ex F10.45 →10.45KHz)
  周波数 1.0.0→1.5.0 F*.*.*(ex F1.4.6 →146KHz)
  DUTY  1→100       D***(ex D090 →90%)
  read    設定データの読み取り

 でした。まだ,やっていませんが,PICからもコントロールでき
 そうなので,これを使った方が,手軽にPWMの信号のコントロール
 できるかもですね。

---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を使うと,きっと,応答速度
 もよくなるのかと思います。

自作デジポット(デジタルポテンショメーター)---(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
 での話題が多くなってるような気がしました。

---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と基盤接続の自作のコードの一本が
 コネクターの部分で,断線してました。
      あーあ,あーあ,
      ジェジェジェジェッ 
 でした・・・・・。

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

 以前作っておいたPWMの基本周波数変換のプログラム
 XC8 V1.35 用に書き換えました。
 PWMの発生器で動作も確認しましたが,大丈夫なようで

 す。元になった諸兄は,変換後の周波数は,少なくとも
 20kHz必要だと書いていましたが,私は,
     100Hz→→10KHz
 にしてみました。まだ,基板に組んでないのですが,
 実験基板で,実際のコントロールがどうなるか確認して
 みたいと思います。参考までに,下記がプログラムです。
  main.c
 例によって,コメント,ゴミ等が沢山あります。