ロータリーエンコーダの信号変換

CPLDを利用して、ロータリーエンコーダの信号変換器を作った
つかったCPLDはザイリンクスのXC9572(たまたま手元在庫あり)

ロータリーエンコーダーのA相とB相を検出して2逓倍or4逓倍(選択可)の
CCWとCWを出力する機能
また、出力パルス幅は5usec or 15usecを選択可
出力信号はオープンコレクタ(2SC1815) 入力電源は9~24V(7805)で組み込んだ

16MHz水晶と74HCU04でクロック源をつくり同期信号をCPLDに取り込む
そのクロックで同期して出力するようにVHDLで回路をつくった

完成後、動作確認しているときにACサーボノイズで誤動作(信号無でONと認識してしまう)した為、
入力用レベル変換(電源電圧→5V)トランジスタのベース抵抗前に1000pFのコンデンサを挿入
その後誤動作は確認されず
オシロで信号波形見た所、ノイズ除去を確認

とりあえずロータリエンコーダ信号変換器の完成
心配なのは24V電源の場合7805が熱くなる点、ヒートシンクで熱対策?しているのでOKとしよう

a0147557_1393171.jpg

[PR]

  # by komoremi | 2009-12-10 01:40 | 電子交錯

PICでUSBだも8(USBメモリ書込速度実験4編)

PICでUSBメモリに書き込む速度の実験(マイクロチップのファイルシステム)
バイナリで33KHz擬似AD値(AD取込で値を+1していく)を書き込んだ
512byte毎に書き込む処理

C#でバイナリファイルをテキストファイルへ変換するプログラムを作成
値をグラフ化
a0147557_0262755.gif

33KHzAD値バイナリ書込み
階段状になってしまう


a0147557_027065.gif

20KHzAD値バイナリ書込み
階段状になっていないが、サンプリング数30000付近で値が飛んでしまう

その後、15Khzや10Khzや5Khzで実験を行ったが、サンプリング数30000付近で
値が飛んでしまう現象を確認

サンプリング数を2000000個で確認すると、書込みが間に合わないのは30000辺りのみと分かった
但し、33Khzや20Khzや15Khzでは値が飛んでしまう状況が他の箇所でも数箇所確認された

10Khzの状態では上記減少はサンプリング30000付近以外では確認されていない

この状況はマイクロチップ社のライブラリに問題があるというよりも、USBメモリ自体に
なにか問題があるか、私がUSBホストプロトコルを理解していないせいであろうか、、、
機会があったら別のUSBメモリで試してみようと思う
とりあえず、このシステムを利用してデータを保存する内容が一秒間に最大500個程度なので
問題ないだろうと思う
[PR]

  # by komoremi | 2009-12-08 00:39 | PIC-USBホスト

PICでUSBだも7(USBメモリ書込速度実験3編)

24FJ64GB002でUSBメモリを書き込むテストの追記

バイナリで書き込めるかの確認(AD取込速度33KHz)
mainルーチンで書き込むプログラムを作成
バイナリデータで擬似アナログ値を書き込めているようだ
ここでやばそうな問題発生
アナログ値のバッファを640word以上にするとコンパイルが通らない
リングバッファで書き込み処理を行っているので512wordで処理が間に合わなければ
どうせ間に合わないので一先ずよしとしよう

メモリ不足で先行き不安、、、、
a0147557_2442556.gif

(↑USBメモリにバイナリで書き込んだものをバイナリエディタで開いたところ)
[PR]

  # by komoremi | 2009-12-07 02:46 | PIC-USBホスト

PICでUSBだも6(USBメモリ書込速度実験2編)

USBメモリにデータを書き込む命令

     FSfwrite(myData,1,510,myFile);

の前後にLEDを点灯、消灯させて
命令の実行時間を測定した(LEDデバック万歳である)
510byteデータを書き込む処理時間は、10.2msecなり
この測定結果を元にUSBメモリに書き込む限界速度byte/secは
1000÷10.2*510 = 50Kbyte/sec

但し、上記処理は33KHzでタイマー割込みとAD変換割り込みを行っている状態
割込処理へ飛んだり戻ったりする処理が33KHzで発生している状態での測定結果

こういった処理がUSBメモリへの書込み処理を遅らせている可能性もあると認識している

アスキーコードではなくバイナリで書き込めば間に合うのか?と思ったが
上記測定結果から考えると、16bitバイナリデータだと 25KHz/secでのアナログデータの取込が
限界になる計算になる

これは明日にでも実験してみよう

a0147557_15224878.gif

[PR]

  # by komoremi | 2009-12-06 15:25 | PIC-USBホスト

PICでUSBだも5(USBメモリ書込速度実験1編)

PIC24FJ64GB002を使ったUSBHOSTのUSBメモリ書込み速度の実験

33KHzでAD変換している状態で、そのAD値をUSBメモリに全部書き込む処理が間に合うか?

結果)  撃沈、、、

33KHzのデータは一秒間に33000データある
AD変換値を10bit(0-1023:4Byte)として、そのデータをアスキー変換して
改行コード(2Byte)を入れ一秒間に何バイトのデータになるかを計算すると
33000×6 = 198000(Byte)
約200Kbyte/secが間に合わないって事なのか、、、

実験方法)
AD値割込み箇所に0-9999まで加算するようにプログラム修正
85個分データ(6×85=510Byte : 6は4Byte+2Byte:改行)データが溜まったら
USBメモリへ書き込み指令(mainルーチン内)
加算分をグラフ化して直線グラフになるか?

実験結果グラフ)

a0147557_39381.gif

ならねぇ 階段状になってしまうのであった

うーん、、、っと、アスキー変換してるから無駄があるってことだ
バイナリで書込みをすれば間に合うのか?近いうちに実験してみるです
[PR]

  # by komoremi | 2009-12-06 03:17 | PIC-USBホスト

PICでUSBだも4(USBメモリ情報読出編)

マイクロチップ社のファイルシステムを使って、PICでUSBメモリのDISK情報を読み出した
使う関数は FSGetDiskProperties(&disk_properties)

FSIO.cに使い方が記述してありました

 FS_DISK_PROPERTIES disk_properties;
 disk_properties.new_request = TRUE;
   do
   {
     FSGetDiskProperties(&disk_properties);
   }
 while (disk_properties.properties_status == 
 FS_GET_PROPERTIES_STILL_WORKING);


FS_DISK_PROPERTIES構造体にUSBメモリ情報が格納される
この関数を使って、安売USBメモリのディスク情報は以下のとおり

a0147557_1122441.gif


読み出すのに5秒位かかる、、、そんなもんなのかなぁ?
USBメモリのディスク空き容量を読み出しながら書き込みをするというシステムは
比較的高速なシステムには不向きってことなんだろうか?
たまに読み出して内部で空き容量を計算しながらやるシステムでよしとしよう

他のUSBメモリでも色々試してみたいけど、手持ちのUSBメモリがないのであった
[PR]

  # by komoremi | 2009-12-05 01:19 | PIC-USBホスト

PICでUSBだも3(Mass Storage編)

とりあえずPICでUSBホストの手始めにマイクロチップ社のサンプルコードを
自作基板用に変更してプロジェクトを作成
UART1とUART2とADプログラムはデバイスモードのまま
30KHZでAD取込している状態でUSBホストプログラムを実装する手順でサンプルコードを作った

ヒープメモリがねえよ!とか、関数定義してねえよ!とか、変数初期化してねえよ!とか
コンパイラに怒られながら移植完了

コンパイルが完了して、、
!!!っ!!
プログラムメモリ70% データメモリ50%使用です、、大食らいだ
うーーん
これで色々な事しようと思ったらプログラムメモリに余裕がない
プログラム下手なワタクシとしてはヤタラコードが長くなるプログラマーな訳で、先行き不安

プログラム書き込み後、先週特売で買ってきた980円バッファローUSBメモリ4Gを自作基板に装着。
おぉ、、USBメモリの青色LEDがなんか知らんけど点滅してる、、、あっ消えた!

すんなりテストテキストファイルがUSBメモリに書き込まれました
さすがメーカ純正サンプルコード
FatFSでもやってみたいが、果たしてワタクシの能力で出来るのであろうか、、、

PIC24FJ64GB002よりプログラムメモリの大きいDIPタイプのPICが欲しい

a0147557_17402958.jpg

a0147557_17404615.jpg

[PR]

  # by komoremi | 2009-12-04 17:42 | PIC-USBホスト

PICでUSBだも2

ナンツッテナーオシロのソフトがある程度完成しました
ただ、時間軸がおかしい
1Khzの矩形波を入力して上の波形がただ描写するだけ
下の波形がトリガーがかかった状態の波形
1KHzになってない、、若干ずれてる、、
当初、MSChartをつかって描写するつもりでC#をゴリゴリしてましたが、
ヘルプファイルをみて悩んでの繰り返し、、
結局PictureBOXに書き込むプログラムにしました
1Khz波形になってないのは描写データの座標計算がどこかおかしいんだろうと思う

当初、PIC24FJ64GB002を購入した理由はUSBデバイスとして利用する為ではなく
USBホストとして使う為だったので、
PICでオシロはここら辺で頭悩ますのをやめます
明日から時間の合間見つけて、USBホストでゴリゴリやるのが目標

a0147557_181621.gif

[PR]

  # by komoremi | 2009-12-04 01:08 | PIC-USBデバイス

PICでUSBだも

PIC24FJ64GB002を買いました
早速、USBデバイスでCDC通信

ついでに久しぶりにC#でナンツッテナーオシロスコープを製作中
PICでAD変換してPCに垂れ流し通信するんだけど、AD数値30KHzでCDC通信に限界がくる
うーーーん、、、
USB通信自体を割込みすればもっと早くできるのかぁ?

ま取りあえず、最初の投稿だから記念に写真でも投稿

a0147557_2347949.jpg

現在製作中

a0147557_1223027.jpg

オペアンプで5Vの信号をPICにとりこむ
USBホストとデバイスを両方リレーで切り替えるつもりでしたが、使用したリレーが振動に弱いため、
誤動作しまくり、、、
当初、なぜ通信が切れるのかサッパリ分からず半田を総点検
叩くと通信がとまる症状に悩まされ1日が過ぎた始末でした
結局リレーをやめ、ジャンパーでホストとデバイスを切り替えるようにした
[PR]

  # by komoremi | 2009-12-02 23:48 | PIC-USBデバイス

SEM SKIN - DESIGN by SEM EXE