GPS事始め(4)外部アンテナをつける
アンテナのケーブルは3m長でコネクタはSMAです。底面はこうなってます。
aiendoのGPSアンテナ [GPS001-SMA-ML]と同じではないかと思いますが、未確認です。
落札したのはこの外部アンテナとSMA-IPEX変換ケーブルのセットです。
変換ケーブルは今現在(2016/06/23)ヤフオクで出品されてます。
またaitendoさんにもあります。
これを今実験に使ってるケースに組み直しました。みっともない穴が開いてるのは見ないでください^^;;;
左側のはアマゾンで入手したUSBシリアル変換モジュールです。
これでアンテナだけ好きなところ置けるので、使いやすくなりました。
Sky Viewです。室内でも常時十個前後の衛星をキャプチャしてます。ただし私の住居は木造ですので鉄筋などでは違ってくるとは思いますが、確かめようがありません。
なお写真右上に写ってるのはDTMFデコーダです。これについてはいずれ・・・
GPS事始め(3)u-centerを使う
設定には u-center を使います。私はu-center ver.8.16を使ってます。
GPSモジュールのタイムパルスを利用するのが目的ですので、周波数を変更する必要があります。
u-center のメニューから "View"→" Configuration View"とし、TP5(Timepulse5) をクリックします。
設定画面が出るので、ここで周波数を変更します。
ここまではトランジスタ技術2006年2月号118ページと同じなのですが、二つある周波数設定窓の説明がどうも違ってるようです。
下側の Frequency Locked はGPSにロックした場合の出力周波数で、上側はロックしていない場合の出力周波数です。
実験で確かめました。
u-center 設定ソフトの使用方法 にも同様のことが書いてあります。
下図では実験のためロックが外れたときにわかるようにわざと2Hz に設定してあります。
GPS事始め(2)TIMEPULSE用バッファを入れる。
トランジスタ技術2016年2月号に詳しく載ってます。でもダブルオーブンのオシレータにまでは手が出ません(多分)
秋月から超高精度がうたい文句のVM39S5Gが出てます。
これをPLLのVCOに使った例としてはセッピーナさんの
超高精度・温度補償型水晶発振器VM39S5GをPLLのVCOとして使う
超高精度VCTCXO・VM39S5GをPLLでGPSに同期させてみた
という記事が大変参考になります。
このオシレーターモジュールは出力が12.8MHzです。できれば10MHzでやりたいので別の方法を考え中(ダブルオーブンのオシレータは使わずに・・・)
前置きが長くなりましたが、まずはGPSモジュールからTIMEPULSE出力を取り出します。
そのままではちょっと怖いのでバッファを入れました。手持ちの74HCT04です。
74HC04は閾値が約VCC/2ですが、74HCT04はTTLレベルなので今回の目的にはちょうどいいです。まぁ74HC04でも動くと思いますが。
回路図、というほどのものではありませんが^^;;
出力は二つ出してます、そのほうが何かと便利だろうと思ったからです。
GPS事始め(1)
ロジックアナライザをバラす。
しかも分解し回路図まで調べておられるのでびっくり、中身がPSoCでなじみのサイプレスのCY7C68013Aと知ってさらにびっくり。
私には分解する勇気がなかったのですが、思い切ってばらしました。
基板裏面、サーマルビアの数に違いがあります。
2N7000を使った増幅回路:シミュレーションだけです
ロータリーエンコーダの覚え書き。
ロータリーエンコーダの出力は二つあって二進数で表すと0~3となります。
ここで使ったロータリーエンコーダはデテント有りでデテント位置では両出力ともにオープンなのでプルアップしていれば出力は3になります。
下図のように回す方向によって
3→2→0→1→3
または
3→1→0→2→3
と変化します。
How to use a quadrature encoderでは下図のような配列を使って回転方向を検出してます。
Xについては次のようにあります。
X represents a disallowed state and would most likely occur if the encoder outputs are changing too quickly for your code to keep up.
Normally this should not happen.
In my code I put a 2 here.
When I get an output of 2 I know that I got an error, perhaps due to electrical noise or my code being too slow.
If you replace X with 0 then the disallowed state will be ignored.
思いついてGoogle翻訳を使うとこうなりました。
Xは、許可されていない状態を表し、コードが追いつくためにするためのエンコーダ出力があまりにも急速に変化している場合は、最も可能性の高い発生します。
通常、これは起こるべきではありません。
私のコードで私はここ2を置きます。
私は2の出力を得るとき、私はおそらく、電気的ノイズにまたは私のコードが遅すぎるという、エラーを得たことを知っています。
あなたは0でXを交換する場合は、許可されていない状態は無視されます。
他の翻訳サイトも試してみましたが、この場合はGoogleが一番まとも^^;;まぁ余計なことですが。
前回の記事のスケッチではX=2とした配列をコメントアウトしてX=0とした配列を使ってます。
//const int QEM[] = {0, -1, 1, 2, 1, 0, 2, -1, -1, 2, 0, 1, 2, 1, -1, 0};
const int QEM[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
Arduinoでロータリーエンコーダを試す(2)
Arduinoでロータリーエンコーダを試す(1)
検索して見つけました。
How to use a quadrature encoder
このサイトの記事を基にして、とりあえずこのような回路で実験。ロータリーエンコーダは秋月のと同等品です。
EX-ORを使わずに済ませたいのですが、まずは動かしてみてからです。
ロータリーエンコーダは停止位置から次の停止位置まで回すとスイッチの状態が4回変化します。(注クリック感ありの場合)
実験の様子。
上の行左の数値はスイッチの状態が変化した回数、右はそれを4で割ったもの、すなわ回した回数です。
下の行の数字は割り込み回数。スイッチの状態が変化するたびに割り込みが発生するので、チャタリングが無ければ上の数字と一致するはずですが、実際にはチャタリングがあります。でもソフトでうまい具合に除去できます。ソフトで追いつけないような場合は別でしょうけど。
Arduinoシュミットトリガインバータ
(ATMega日本語データシート41ページより引用)
この閾値を調べてみました。
次のようなスケッチを用意します。
void setup() {
pinMode(4, INPUT);
pinMode(2, OUTPUT);
noInterrupts();
}
void loop() {
digitalWrite(2, 1 - digitalRead(4));
}
D4を入力に、D2を出力にします。
ループ内でD4入力を反転させてD2に出力します。これでインバータになります。
ATmegaの入力はシュミットトリガですから、これでソフトウエア・シュミットトリガインバータになります、74HC14などと比べて遅延時間が桁違いに大きいですが・・・。
次のように回路を組みます。
シュミットトリガインバータを使った発振回路になります。遅延時間を無視できるように大きめのCRを使いました。
実際にはあちゃんでいいのを使いました。
オシロでの観測波形。
矩形波がD2、三角波がD4。
発振周期は1.3mS、閾値VT+は2.6V、VT-は2.2Vと読めます。
シュミットトリガインバータを使った発振回路の発振周期はこちらの記事の4ページから5ページを参考に計算すると、Vcc=5Vとして1.4mSと計算できますのでほぼ合ってます。