2017年04月26日

DiSEqCコントローラ その後

FPGAを使ってH-Hマウントの制御を行うコントローラを設計しています。
H-Hマウントには同軸ケーブルに、電源重畳でコマンドを送ることで制御しますが
このコマンドがDiSEqCとして規格化されています。この制御方法には、位置を記憶させて「何番の位置に」というモードと、
何度の方向を向きなさい、というモードが有ります。
何番の位置に、というのがDiSEqC 1.2、何度の方向を、と言うのが
DiSEqC 1.3の仕様になります。
DiSEqC 1.3の場合はアンテナのある位置(緯度/軽度/標高)と
視たい衛星の緯度から、三角関数等を用いてアンテナを向ける方向を
計算する必要が有ります。
FPGA内のZ80でこれを計算させようとすると、もともとZ80には
AND/OR等の論理計算と引き算・足し算しか出来ませんから、結構大変な
作業になります。また、プログラム用のメモリもFPGA内のものしか有りません
ので結構大変です。
そのため、計算用のハードウェアをバスに接続させるように設計中です。
数値は16bitでの計算が主になるのでIOマップドだとアクセスが面倒になるので
メモリマップドにしています。
実装した計算用ハードウェアは
・乗算
・除算
・sin計算
・tan計算
・arc tan計算
です。更に、16bitの数値をBCD化、その逆を行う回路もハードで作ったのですが、
かなりのゲート規模になってしまいFPGA容量を越えてしまったのでこれは
乗除算+ソフトウェアで対応することとし、ハードウェアからは削除しました。
それとメモリの一部をconfig用フラッシュから書き換える回路も作成し、
バンク切り替えの手法で(毎回フラッシュからシリアルでコピーするので時間は掛かるが)
かなり大きなプログラムでも対応出きるようにしています。
これで現状90%程度の使用率です。
まだいくつか実装出来ていない機能も有りますが、何とか収まりそうな状況です。
posted by プー at 22:20| Comment(0) | 海外衛星放送 | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください