前にちょっと書いたけど、水晶発振子のモデル化のための測定についてもうちょっと詳しく書いておく

LCRメータでCpを測る

Cp=1.95pF @100kHz

VNA で測ってもいいけどキャリブレーションが面倒なのでLCRメータを使うのが楽 (値が小さいのでLCRメータでもキャリブレーションはすること)

VNAでfs/fp/Rsを測る

fs/fp


VNA のポート1ポート2に直列で水晶発振子を繋いで、共振周波数付近をさがす。最もゲインが大きいところがfsで、小さいところがfpになる。

fs=9.9985Mhz
fp=10.0126Mhz

Rs

VNAのポート1に水晶発振子を繋いで、直列共振周波数 (fs) 付近で測る。fs 付近だと(共振しているので)水晶が純抵抗に近くなり精度が高くなる。

Rs=12.8Ω

Cs/L を求める

以下のように Cs L を求める

f_s = 9.9985
f_p = 10.0126
R = 12.8
C_p = 1.95e-12

C_s = C_p * ( (f_p**2) / (f_s**2) - 1)
L = 1 / (4 * (Math.PI ** 2) * (f_s ** 2) * C_s)
console.log({C_s, L}); //=> { C_s: 5.503702932046284e-15, L: 0.04603790760936647 }

LTSpice でモデル化してみる

求められた R/Cp/Cs/L を使って等価回路を作り、周波数特性を見てみる。

LTSpice の結果は信号源の出力に対する比なので、負荷の電圧を見る場合にVNAとスケールをあわせるには2倍 (電圧 +6dB) する。

  • LTSpice: -1.04dB
  • VNA実測: -1.31dB

ダイナミックレンジの関係で並列共振周波数の値は参考にしかならない。

ref

  1. トップ
  2. tech
  3. 水晶発振子のモデル化

Beagle Bone Black + Machinekit での CNC 制御 (Sable-2015)で機械仕様から各軸のSCALEを求めていたが、(いまさら) テストインジケータを買ったのであらためて計測して誤差を修正することにした。

元々の SCALE は

200 * 8 * (1/1.5) #=> 1066.6666666666665

X=-1066.667
Y=1066.667
Z=1066.667

Z軸

誤差±0.01/0.4mm

修正不要と判断してそのまま

X軸

誤差-0.01mm/0.4mm (2.5%)
バックラッシュは0.005mmぐらい

SCALE =  -1093.333333

Y軸

誤差-0.01mm/0.4mm (2.5%)
バックラッシュが0.01mmある

SCALE =  1093.333333


そもそもXとYの直交が出てるのかとかも測定して調整しなおしてみたいけどやってない

Sable-2015 は全体的にアルミなので、マグネットベースをとりつけられるところがモーターぐらいしかなく結構やりにくい。

  1. トップ
  2. tech
  3. Sable-2015 のキャリブレーション

HS2234 という名前のレーザー式タコメーターをAliexpressで買った (1300円弱)。2.5rpm〜99999rpm まで測れるという触れこみ。電源が単4電池なので(この手のありがちなのは9V電池)ちょっと優しい。

接触で測ることはできず、非接触のみ。

  • 対象までの距離 50mm〜500mm
  • 精度 ± 0.05% rdg + 1 digital

特に使いかたで難しいところはない。説明書 (中国語と英語) がついてくる。おそらくあまり複雑なことはせずパルスをカウントしているだけなので、再帰反射テープはつけないとダメっぽい (付属する)。

あんまり近付けると受光部にレーザー光が入らないので気をつける必要がある。

カウント精度チェック

シグナルジェネレータで duty cycle 10% のパルスを発生させ、LED を光らせて HS2234 の受光部にあてる。

rpm は周波数に60を乗じるので、100Hz のとき 6000rpm になる。

  • 1666Hz (99960rpm) → 表示 99954
  • 1500Hz (90000rpm) → 表示 89995
  • 1000Hz (60000rpm) → 表示 59997
  • 167Hz (10020rpm) → 表示 10019rpm
  • 100Hz (6000rpm) → 表示 5999rpm
  • 1Hz (60rpm) → 表示 59.9rpm
  • 0.5Hz (30rpm) → 表示 29.9rpm
  • 0.1Hz (6rpm) → 表示 5.9rpm

パルスが理想的なら十分な精度そう。なんかどうも必ず-1カウント低い値が出ているような気もするが……

表示が安定するまで若干時間がかかる。0.5s ごとに表示を更新するみたいだけど5秒〜30秒ぐらいやらないと安定しない。

回転計のアルゴリズムの考察

この回転計はおそらく単純にパルスをカウントして演算しているだけなので、周波数カウンタと同様の原理といえる。

理想をいえば反射材からのパルスではなく波形の繰り返し成分から周波数成分を見つけてほしい。FFT して成分解析すればできそう、だけど言うほど簡単ではないのだろうなあ。

  1. トップ
  2. tech
  3. HS2234 レーザータコメータ (回転数計)

プーリー駆動の付け替えで、24V 時 10000rpm と 4300rpm を切り替えられるということになっている。自分の環境ではこの加え、PWM コントローラによる電圧可変である程度回転数を変えられる (M3 S5000 みたいな) ようにしている。

pru_generic の pwm_period

BeagleBoneBlack + Machinekit で動かしていて、PWM 出力は pru_generic のものを使っている (ハードウェアPWMではない)。PRU の実行サイクルは 100kHz (10000ns) ごとなため、あまり高い周波数で PWM 出力ができない。

使っている PWM コントローラの入力周波数は1kHz〜10kHz 周期でいうと 1000000ns-100000ns なので、1kHz のPWM周波数でやれば分解能が最も高くなる。が、PWM 周波数が可聴域の高感度な周波数だとうるさいので悩ましいところ。

なんとなくやる気が沸いたのでプーリーの設定を machinekit 側 GUI で切り替えできるように作りこんだ。回転数計もそのうち(再び)組込みたい。

実測

pwm_period を変えたケースでも試してグラフ化してみた。オープンループ・フィードバックなし負荷なしでただ回しているだけなのでここにさらに切削抵抗が加わると減速する。

  • 使っているコントローラのせいか、最大電圧が22Vぐらいなので本来はもうすこしスピードが出ると思われる
  • あまりリニアに変化していない
  1. トップ
  2. tech
  3. Sable-2015 のスピンドル回転数

機械式(バネ式)のエッジファインダー (芯出しバー)。Φ6のものは少なくて若干高価。1000円ぐらい。材質は非磁性、チタンコートとして書いてなかった。

精度は 0.003mm らしい。

太さの計測


先端の精度は完璧。接触で使うので多少摩耗していくだろうから最初に測っておくのは大事

使いかた

600〜800rpm でまわしながら使う。ワークから離れたところでは自由なので先端がブレて動く。ワークに近付くにつれてブレが収まり、ある点を超えると急に大きくブレる。この急に大きくブレた点がワークと接触したところ。

手順としては一度あててから戻し、ゆっくりあてなおす。急に動いたところで止めて、半径をオフセットさせて原点を設定する。

これだけ小さくてもZ軸の余裕がない機械だと結構ぎりぎりになる。

備考

電子式のエッジファインダはΦ20〜しかない。機械式で最小のものはΦ6、通常はΦ10のようだ。

  1. トップ
  2. tech
  3. Φ6 エッジファインダー

Aliexpress で300円ぐらい。ステレオのグラウンドアイソレータ。結構小さくていい感じ。内部的には(開けてないけど)トランスが2つ入っているはず。

広域ノイズを入力して通過した信号をオシロスコープで FFT して見てみた。入出力に導通がないのはチェック済み。

ノイズ源のせいか 22kHz まではあまりよくわからなかった (トランスなら低域で減衰があるはずだけど) ので、使わないが 500kHz まで広げてみると以下のような感じで300kHzぐらいに共振が見える。トランスの測定方法がよくわからないので、測定方法 (入出力インピーダンス) のせいかもしれない。

  1. トップ
  2. tech
  3. 3.5mm ジャック・グラウンドアイソレータ


ミツトヨ(mitutoyo) レクタンギュラゲージブロック セラミックス製 0級 25mm 613635-02 - ミツトヨ(Mitutoyo)

ミツトヨ(Mitutoyo)

5.0 / 5.0

なぜか2600円ぐらいで売ってたので買ってしまった (単品)。0.01μm オーダーで精度が出ている 25mm のブロック。ジルコニアセラミックでできていて

  • サビない
  • 経年変化しない
  • 摩耗しにくい

ので個人でも扱いが比較的楽。熱膨張係数は 9.3±0.5 (10^-6/K) で鋼の熱膨張係数 (10.8±0.5) と近いので、同様の雰囲気に置いておけば20±4℃ぐらいなら 100mm でも誤差が1μm未満に収まる。(ただしセラミックのほうが熱伝導率が低いので、より長い慣らし時間が必要)

マイクロメータの検査に使える。このマイクロメータは出荷時検査で 25mm のとき +1μm なので、これであってる (マイクロメータ側の誤差)。

ゲージブロックは絶対に個人ではいらないレベルのものだけど文明が滅びても正確な長さを示してそうなので気分が良い。

  1. トップ
  2. tech
  3. 25mm ゲージブロック