---オシロスコープのプローブ---

 オシロスコープを使っていろいろやってましたが、ある時
 に、波形がパルス状になりました。

黄色の線が本来の波形だと思いますが、赤のように
 変形してしまうようです。
 周期が長くなるとこの傾向が強くでるようでした。
 調べている対象物が原因かなと思いましたが、どうも違う
 ようでした。
 オシロのマニュアルを見たり、周波数をいろいろ変えてみて
 くらべてみました。
 周波数が低くなるとその傾向が強いので、どうもプローブの
 特性のようでした。
 周波数が高いと、変形はめだちませんが、

 周波数が低くなると、○をつけた部分で、立ち上がりは上に、
 立ち下がりが下にひっぱらられるように変形するようです。
 上の写真よりもうちょっと低い周波数では、顕著になります。

 ます。プローブの特性だったんですねえ。一つまた、勉強し
 ました。

---SPINDLEのPWM制御 (基本周波数の変換) (2)---TIMER1の設定

 setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); // 262ms
 の262msは、262msごとに割り込みをかける意味ですが、
 なぜ、262msなのか、意味が分からず、あれこれ調べて
 ました。
 ある本で、
 「PICのクロックを8MHZとすると最長262msのタイマー値を
 得ることができます。」
 の記事を見つけました。
 やっと262msの意味がわかりました。次のように計算します。
 タイマーの基準のとなる時間は、
      (1/クロック周波数)×4
 で求められます。私が、プログラムに使っている16F88の
 クロックは8MHzなので、
      (1/8Mhz)×4=0.5μs
 「1」をカウントするために必要な時間は、0.5μsですが、
 プリスケラ-(分周)との組みあわせで使います。
 プリスケラ-を8とすると、「1」をカウントするための時間は、
       0.5μs×8=4μs
 になります。
 TIMER1には、16ビットのカウンターを使うので、
 最大、
   16進数でFFFF(一桁を表すのに4ビット使うので、
                      4桁で16ビット)
   10進数で65535回
 を数えることができます。
 目一杯数えると、
   4μs(一回カウントするための時間)×65535回
                =262140μs
       262140μs=262.14ms
 ということで、262msの時間がかかります。
 やっと262msの数値がでてきました。
 これを使うにあたっては、カウンターをセットする必要が
 あります。
 次のように、二つのレジスタを使って設定します。
 が、
       TIMER1H=0XFF
       TIMER1L=0XFF
 のように、設定すると最大の0XFFFF(16進数)の65535
 の設定ができます
 アップカウンターなので65535を数えるには、
       TIMER1H=0
       TIMER1L=0
       
 のようにします。
 それでは、目的の数値を設定するには、
 どうすれはいいのでしょうか。
 TIMER1Hには、4桁の数字の上位の2桁を、TIMER1Lには、
 4桁の数字の下位2桁をセットしますので、上位2桁と
 下位2桁を取り出す必要があります。
 たとえば、10進数で、8546の85を取り出すには、
       8546÷100
 をやって、小数以下を切り捨ててしまえば、目的の「85」
 の数値を取り出せます。
 これと同じことを、ビットをずらすという命令を使って実現し
 ます。ビットをずらす命令は、2進数で考えますので、
 4桁の数値を2進数にすると16桁になります。
   ○○○○ ○○○○ ○○○○ ○○○○
 赤が目的の数値ですので、右に8こずらすと、
   ○○○○ ○○○○ ○○○○ ○○○○
   
 となり、ずらした後には、0が挿入されますの、これで目的
 の上位2桁を取り出せます。これをするには。
         8546 >> 8
 とします。つまり、85をTIMER1Hにセットするには、
       TIMER1H=(8546 >> 8)
 とすればいいわけです。
 では、下位2桁を取り出すにはどうすればどうすればいいで
 しょうか。
      8546-8500
 をすれば、46の数値がとりだせます。これを実現するのに、
 やはり2進数で考えます。マスクをかけるというような言い方
 をしたりしますが、「and」という演算をします。二つの数値を
 比べて、次のような出力になりますから、
    0と0は0
    1と0は0
    0と1は0
    1と1は1
 
 次のように、16進数で「OOFF」(2進数で0000000011111111)
 とのAND演算をします。

 

 
 
 すると上位2桁が0になって目的の下位2桁の数値が取り
 出せます。実際は、次のようにします。
     TIMER1H=(8546 & OX00FF)
 これで、下位2桁の「46」をセットすることができます。
 8546回数えさせるためには、
    TIMER1H=(8546 >> 8)
    TIMER1L=(8546 & OX00FF)
 と言うように、2行に分けて、記述します。
 
 難しかったです。ここまで理解するのに、3日ぐらいかかり
 ました。

---SPINDLEのPWM制御 (基本周波数の変換) (1)---

 諸兄の作ったプログラムを、穴の開くほどながめていました。
 タイマー0、タイマー1、タイマー2、外部割り込みを使ってます。
 一部、数値の意味の分からないところもありますが、同じもの
 が時間をかければできそうな気がしました。
 ちなみに、それぞれの割り込みは、
  タイマー0・・・・・・MACHからのPWM信号の有無の検出
             出力用PWMの初期設定
  タイマー1・・・・・・マニュアルでのLCDとLEDの点滅
  タイマー2・・・・・・MACHからのPWM信号のHとLの時間
             の計測
  外部割り込み・・・PWMの一周期の検出とDUTY比の計算
             PWM信号の有無の検出(追記)
 をしてるようです。
 分からなかったのが、タイマー2がPWMの信号も生成して
 るはずですが、割り込みにも使われているので、ここがわ
 りませんでした。
 PWMの生成と一緒にタイマー2の割り込みも実行できる
 ようで、やっと、その資料も見つけました。
 ちょっと、離れると、細かい設定の仕方を忘れてしまいます。
 諸兄のCコンパイラーは、CCSのようで、私が使っているのは、
 無料のHI-TECH-Cなので、割り込みや細かい記述(文法)が
 違います。また、いろいろあさりながら、楽しみます。

---SPINDLEのPWM制御---

 sable2015のスピンドルに、ブラシレスモーター(模型用)や
 ちょっと前に発売になった専用の20VのDCモーターを使った
 りしてます。
 どちらにも一長一短があるのですが、DCモーターの方が静か
 なので、こちらを使おうかと思いました。
 ブラシレスモーターは、既存のインターフェースを使って、速度
 制御したことがあるのですが、DCモーターということで、
 秋月の「PWM(スイッチング方式)DCモーター速度可変キット」
 を使って、マニュアル操作とMACHからの制御の切り替えができ
 ないかと、思いつきました。
 マニュアルは、簡単に接続すればいいのですが、MACHから
 となると、一工夫が必要なようです。
 MACHからのPWMで直接モーターを制御するには、
 問題があると諸兄のHPにはあります。
 「周波数の設定は任意に変えられる。 高くも設定できるのだが、
 階調が低下するので実用的ではない。
 例えば、カーネル周波数が35KHzの場合にPWM周波数を1KHzに
 すると階調は35段階だ。
 殆んどの人が聞こえない15KHzを選ぶと階調は2.3段階になって
 しまう。」

 この意味がなんとなく分かりました。秋月の「PWM(スイッチング方式)
 DCモーター速度可変キット」は、PWMの基本周波数は、10KHz
 と記載があります。
 詳しいことは分かりませんが、搭載してあるパワーMOSFETを制御
 するにあたって、この周波数が最適なんでしょうね。
 とすると、諸兄が言っているように、MACHで、基本周波数を高く
 すると、階調の問題が・・・・・・・・・・・・・・・。
 カーネルの周波数を25000Hzとして、MACHの設定を、
 「PWM(スイッチング方式)DCモーター速度可変キット」と同じ
 10kHzにすると、おおよそ、低・中・高の3段階ぐらいの切り替え
 しかできないことになってしまうようです。
 階調のことを考えると、MACHの基本周波数を低めにして、
 コンバートの回路でもつくる必要があるんでしょうね。
 一つまた、勉強しました。

---旋盤の不具合---

 初めて購入して、あれこれ工作に使っているFL350Eですが、
 またしても、不具合です。

 

 X軸のステージ(赤矢印)が、0.5~1.0mm程度、がくっと
 手前に動くようになりました。
 ここは、X2互換機フライスと同じで、リテーナーで、シャフトを
 受けている構造で、強く締め付けると、ハンドルが回らな
 くなります。
 X2互換のフライスは、リテーナーを自作、スラストベアリング
 を埋め込んで、いくらしめこんでも、スムーズに回るように、
 改造しました。
 旋盤は、どうしましょうか。スペースが狭く、リテーナーに
 二つのスラストベアリングを埋め込むには、無理があります。
 どうしましょうかねえ。構造を考えながら、考えましょう。

 

 メタル軸受けのようで、赤線のガタがあります。
 切削を始めると、黄色矢印の方向に押されて、狂いがでま
 す。
 ずっと使い続けると、リテーナーの受け部分が摩耗して、
 ガタがでるんでしょうね。ハンドルのねじをいくらしめても、
 このガタをとることは、できません。構造的な欠陥ですねえ。
 加工が少なくできそうなのは、前後に
 スラストベアリング(赤部分)を入れて、後ろから、引っ張る
 構造にすると大丈夫でしょうか。

 

 こんな構造なら、できそうですね。早速必要な部分を採寸して、
 部品の調達をします。

---MACH3からのPWM信号---

 MACH3からのPWM信号をパラレルポートで確認しました。
 Dsub25ピンから信号を取り出すのに、秋月の
    RS232 GENDER CHANGER
 を使いました。Dsub25コネクターを二つ組み合わせて、
 ストレートの結線を作ってももよかったのですが、細かい作業
 になるので、やめました。

 

 

 これの1ピン(出力)、14ピン(出力)、25ピン(GND)にブレッド
 ボード用の線をハンダ付けし、ケースの隙間から引き出して、
 ケースをとじました。

 

 これで、ショート等の事故が少なくなります。
 SmoothStepperと同じで設定で、回転数1000~10000まで、
 確認してみました。ポート1の14ピンに出力してます。
 回転数に応じて、きれいにパルスの幅が倍増していくの
 が確認できました。
 1000回転の設定で、パルス幅は、約1msです。

 

 5000回転の設定で、パルス幅は、約5msです。

 

 上限に設定した、10000回転で、約10msです。

 

 今回は、コントロ-ルボードを通さないで、パラレルポートから直接
 とりだしました。応答もよく、きれいな波形でした。
 実際のコントロールに使うには、いろいろ工夫がいるんだろうな
 と思いました。
 便利な道具も販売されているようで、MACHのPWM信号を
 電圧に変換するボードもあるようです。

 

---SmoothStepperからPWM信号---

 SmoothStepperはやはり、優れものでした。あれこれ、悩み
 ましたが、きちんと、PWMの信号が出ていました。
 あの大きさで、ポート2.5個分ぐらいのインターフェースを
 もっているのですから、しょうしょう高めでも納得です。
 ========================
 でも、パラレルポートって、どうなんでしょうか。もう、そろそろ
 時代の遺物の仲間入りでしょうか。もともとは、プリンター等
 のインターフェースですし、今では、プリンターは、USBで、
 パラレルポートは、使いませんから、パラレルポートの用途は
 特殊なものになりつつあるような気がします。ネットで検索
 すると、まだあるようですが、需要は、あるのでしょうか。
 =========================

 結局、SmoothStepperからのPWMの信号を確認できなかった
 のは、初歩的なMACHの操作ミスでした。
 今回も諸兄のHPをみながら、設定をしました。私の設定は、

 

 で、出力をSmoothStepperのポート2の17ピンに割り当てました。

 

 PWMを選択して、PWMBaseFreqを 100にしました。
 PullySelectionを、

 

 のように設定し、SmoothStepperのUSB SmoothStepper Configを、

 

 のようにしました。Base Hzがここにもあるので、SpindleSetup
 の数値と一応そろえました。
 この設定で、MACHのエラーもでなくなりました。
 PWMの信号が確認できなかったは、出力するための、
 Spindle Speedに希望の回転数を入力しないで、操作したから
 でした。ここで、はまったようです。
 設定を済ませた後、Spindle Speedをクリック、数値を入力リターン、
 F5(Spindle CW F5をクリック)で、あっけなくパルスが確認
 できました。
 たくさん参考になるHPを諸兄が作ってあります。

 ここや、ここ(11ページ~13ページ)
 を参考にしました。
 全部のピンを確認した訳では、ありませんが、Ports and Pin
 
 の設定で、PWMの設定をするのに、ポート1を選んで、Step
 だけの設定をして、Dirの設定を0のままにしておっくと、MACH
 に設定をしてくださいと怒られてしまいます。ポート2だと、そのま
 ま通ってしまいますので、もしかして、SmoothStepperは、Spindle
 の設定で、ポート1は考えてないのかな、と思いました。
 
 基本周波数の設定やらプーリーの設定やら、意味が分からず
 に設定しました。システムに見合った設定できるように、また、
 勉強です。

パルスジェネレーターの出力

 パルスジェネレーターの出力をオシロに入れてみましたが、
 メーカーサイトを見ると、いくつかの種類があるようです。

 

 プルアップしなくても、出力がでたので、オープンコレクタで
 はないのかな。CMOSかプルアップの出力なんでしょうか、
 この辺は、ちょっと分かりません。詳しい方は、きっと、すぐ
 分かるのでしょうが。

パルスジェネレーター

 思わずポチってしまいました。安くでていたパルスジェエレイ
 ターが目にとまりました。

 

 

 100パルス/一回転のもののようです。早速、オシロに入
 れて遊んで見ました。
 
 クリックの数に応じて、パルスがでます。
 今回は、A相だけオシロに入れましたが、B相も一緒に入れると

 

 回転方向に応じて、A相とB相のずれが観察できるはず。
 後日、確認してみたいと思います。

---SmoothStepperのインターフェース基盤---

 SmoothStepperをケースに入れるにあたって、将来の
 バージョンアップ?にそなえて、ポート2のインターフェース
 の基盤(たんなる変換)を作りました。
 でも、やってしまいました。左右を間違えて、しまいました。
 
 気をとりなおして、作り直しです。
 
 難しいことはわからないので、取り合えず、プルアップできる
 ように、抵抗もいれておきました。