スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

簡易リニアエンコーダ-。

簡易リニアエンコーダ-を作ってみました。

磁石はラバー磁石で以前の「リニアエンコーダーを作ってみた。」とゆう記事内で使った二六製作所さんのWebshopで購入した着磁ピッチが2mmの物。S極とN極で4mm幅です。

ホールICは秋月電子で売っているAllegroMicroSystemsのA1324を直交エンコーダーなので2つ使用。
AD変換ICを使いA1324のアナログ電圧をデジタルへ。
それをMCUへ読み込み、しきい値を入れポートをON/OFFさせて出力しました。

A1324_LTC1298_Arduino1.jpg
A1324_LTC1298_Arduino2.jpg

この画像はAD変換にLTC1298を使用し秋月Arduino互換機にてのオシロの画面です。
LTC1298は2チャネル入力があり、データ出力はシリアル通信。
画像では綺麗に波形が90度ズレて出力されてますが、コレ以上のスピードで移動させるとAD変換が追いつかないのかパルスが飛びます。
ArduinoIDEを使ったATMEGAに、シリアル通信とパルス生成をさせてますが、AD変換が遅いのか、シリアル通信が遅いのか、、、、、。。。

A1324_AD7820_ATMEGA1284P_1.jpg
A1324_AD7820_ATMEGA1284P_2.jpg

で、これがAD変換にAD7820を各ホールICに一つづつ使用し、パラレル通信にてATMega1284PをC言語にてプログラムしたものです。
ATMega1284Pを使ったのはI/Oピンが秋月Arduino互換機では足りなかったので。。

通信自体がパラレルで8ビットなので、入力自体とても速く処理できて、AD7820の最大変換速度で変換、読み取りができているようです。

結構な速度で移動させてもパルスが追随しているようですが、何らかの要因(磁石の具合?)でパルスが飛びます。
まだまだ実験は必要なようです。。


ADコンバータのデジタル出力を閾値を決めA1324の出力1周期(4mm)に対して8個に分割。
(ON-OFF-ON-OFF-ON-OFF-ON-OFF)
約0.5mmに分解し、それを位相が90度ズレた位置(この場合センサ中心位置間6mm)にもう一つホール素子を追加すると更に1/4の分解能になります。

大体0.125mm位になってればいいなぁ^^;
最終的には実機に取り付け寸法をキッチリ計りながら閾値の調整をしなければなりません。


センサが90度ずれている事で進んでいる方向も解ります。
MCUの中には直交エンコーダー用のインターフェースを備えている物もあります。


ラバー磁石のの正確度ですが、まだ測ってないのでなんとも、、なのですが、カタログに寸法が謳ってある日本製の物なので、多分相当オーバースペックなのでは??と踏んでの実験です。。

実際ラバー磁石を2枚重ねて磁極をずらして行くと、きっちり4mmづつズレて行きますし。。^^;


電子回路的にもプログラム的にも、もっと詰められる部分は沢山あります。

結構いろいろと考慮せねばならぬ所があり、なかなか手ごわいです。


ラバー磁石、丸いものに巻きつけるとロータリーエンコーダーになりますね。


磁石とホールICとADコンバータとマイコン、面白いです。



2/8追記。

XMegaの32Mhz作動と、クロックで数値更新可能なADCを使ってみました。

A1324の5Vの信号をオペアンプを使いADCに合うように調整。

結構な速さでも、A1324の波形を8等分した波形は抜けること無く追随してきます。

ADCの読み込み用クロックパルスの周波数は385Khz。

周期で書くと約2.6μS。

これはプログラム自体の1回の実行速度で、パルス出力→2つの数値の読み込み→エンコーダーパルスの発生のサイクル。
Cでプログラムを書いたので、アセンブラで書けばもっと速くなるかも。また、Cでも、もっと速く動かす書き方があるのかも。
ADの性能を使い切るまでは全然行ってないので安価なADCでも結構いけるのかもしれません。

使用したADCの分解能は8ビットで、8ビットAVRを使用した場合、最も効率よく処理出来そうだったから。



32ビットのARMなMCUを使えばよりビット数の多いADCをより高速に処理できるとは思います。また、MCU内蔵のADCを使えば外付けの部品も不要ですね。。


プログラム自体はとても簡単なものなので、このように高速で、単純な作動をさせるにはCPLDやFPGAの方が効率よくAD変換してパルスを発生させることが出来るのかも。

2/10追記。

プログラムの条件判断の記述をif~else文から、switch~case文へ変更した所、読み込み用のクロックパルス周波数が785Khzに。

メインルーチンの1サイクルの実行速度が約1.3μSになりました。

実質倍の作動速度。

ソースコードは長くなってしまいましたが、実行速度は速く。

記述の仕方で相当変わるものですね。

外付けのADCを使用してるのですが、ちょっと作動速度を犠牲にすればXmega内蔵のADCでも良いかもしれません。。






スポンサーサイト

テーマ : 自作・改造
ジャンル : コンピュータ

コメントの投稿

非公開コメント

ライセンス
アクセスカウンター
プロフィール

あきらひとし。

Author:あきらひとし。
木工用CNCルーターフレームと、ステッピングモータードライバを作ってみました。
たぶん記事は一般的な人には殆ど必要のない事ばかりなの、かも。

モーターは回るだけでも楽しい。制御(速度、トルク、位置)できるともっと楽しい!

メールフォーム

名前:
メール:
件名:
本文:

リンク
最新記事
カテゴリ
スポンサードリンク
スポンサードリンク 
スポンサードリンク
オンラインカウンター
現在の閲覧者数:
検索フォーム
RSSリンクの表示
最新トラックバック
最新コメント
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。