目次
2011年度分はMeRLサーバのほうにあります。
http://merl.ec.t.kanazawa-u.ac.jp/diary_private/index.php?kawakami
最新の3件を表示しています。 コメントページを参照
この間320x480で正しい結果が得られたが、それを640x480にするとうまく動かない。
症状としては常に重心が0, 0で、内部のx方向の累算完了フラグも立っていなかった。
詳しく各信号を見てみると、各列に入力するセレクタ用のxの値が、本来であれば639まで増えるところ329あたりまでしか増えていなかった。つまりそのせいでx=639を条件としていた累算完了フラグが立たず、それ以降の計算ができていなかった。
xはy方向の加算完了フラグが1の間中1ずつ増えるようにしているが、このyのフラグが途中で0に落ちていた。それがx=329あたりのタイミングだった。
原因としてはそのyのフラグを制御している部分の単なる記述ミス。
FVALが0に落ちた後(1フレーム分の転送が終わった後)、LVALに同期してフラグを立てるが、次のLVALの立ち上がりで0に落ちる記述になっていた。(LVALが落ちている間だけxが増加して、それが329。)
ここを修正。
悩んでいた値がうまく出ない問題だが、accumlaterに各列の回路から取り込むタイミングをposedge CCLKからnegedgeにしたら期待している動作となった。バスが長いからサンプルする前の不定な値を取り込んでいたのかも?
ゲーテッドクロックになるが、意図的だから今回は良い。
320x480では正常動作。640x480を論理合成中...→うまく動かない(2013/06/05参照)
FPGAの中の数値をどう読み取るか、UARTの実装やChipScopeの導入も考えたら簡単に1bitずつ外に出せば手軽だと思い、実装してみた。分かりやすくて良い。
module outValSerial (clk, dataIn, dataOut, en, n_clr); input clk, en, n_clr; output reg dataOut; input [26:0] dataIn; reg [26:0] dat; reg [4:0] cnt; wire en_1; reg flag; registor dff1(.d(en), .q(en_1), .clk(clk), .n_clr(n_clr)); always @ (posedge clk or negedge n_clr) begin if (n_clr == 0) begin dat <= 0; cnt <= 0; flag <= 0; dataOut <= 0; end else begin if (en == 1) begin if (en_1 == 0) begin flag <= 1; dat <= dataIn; dataOut <= 1; // start bit end else begin if (flag == 1) begin if (cnt < 26) begin dataOut <= dat[0]; dat <= dat >> 1; cnt <= cnt + 1; end end end end end end endmodule
(※解決 : 2013/05/31)
先生からdividerがsignedになっているのが原因でないかとアドバイスをもらい確認したが、設定ではunsignedとなっていた。また割る数/割れれる数にいろいろな数値を設定したところ全て予想通りの動作をしたため、除算器は悪くなさそう。
重心を出すのにsx/s, sy/sの計算をするが、そのsにまず着目して調べてみると、どうやら謎の初期値を持っていることが分かった。
領域が全て0(白)の場合でも1831など、どこから出てきたのか分からない値が出ている。x方向の累算器がおかしい?
重心を求める回路をFPGAに実装してみたが、挙動が正しくない。まずy方向だけ見ている。
XilinxのDivider Generatorを使用。
黒い領域の重心がちゃんと求められているように見えるが、端の方に行くにつれ求められた重心は中心に戻ろうとする。
不審な点
先生に相談しデータシートを確認したところ計算時に補数を使う可能性があるから1bit余分に確保しておくと良いとある。
そこでやってみたが、効果なし。
悩み中
output reg aaa = 1;
という記述は言語仕様上可能だが、実際にFPGA上でその動作になるかは分からない。
多くの場合0となる。
そこで、最初から1が欲しいのならば、
FFは立下りは原理的に検出できないので、negedgeのエッジセンシティビティを記述してもINVを通した信号に変換(=内部的にposedge)される。
この遅延が問題となることもあるからなるべく使わない方がいい。
ただしリセット時の信号はOK。
もしnegedge使いたいなら2倍のクロックを用意して、0/1と変化するようなステートマシンにすると良い。(立ち上がりが0, 立下りが1など)
・レンズには2種類ある
・切断用
・刻印用
・フットスイッチ(左) : ブロア
必ず使用時に動かす
・レンズまでの距離はテーブルの昇降で調整
・動き方には2種類
・ラスタモード : 刻印
プリンタのような動き
・べクラモード : 切断
・作図ソフトはコーレルドロー
起動時のキャンバス範囲がレーザーカッター実機の加工範囲と一致
塗りこんだデータはラスタ
線のみはベクタ
線幅を極細線にする
線幅があるとラスタと認識されてしまう
・加工
加工したいデータを選択→印刷(VLS350)→環境設定
マテリアルデータベースとマニュアルがある
・マテリアルデータベース
材料の種類と厚みを指定するとDBから推奨値を自動で決めてくれる
パワーとスピードを変更可
・印刷対象は選択範囲になっていることを確認
・本体の電源投入前にトランス(本体の横)の電源を入れる
これで100V→110Vの変換。電源入れてないとソフトがフリーズする。そうなったらPC再起動するしかない
・左下の緑のランプ(アイドルランプ)が点いていれば電源入れていい
通信が確立しているということ
・電源投入は本体側のボタンでもPC上のボタンでもどちらでも同じ
・スタートボタンが緑なら準備完了
・フォーカス合わせ
・レーザ位置確認(PCソフト上でボタン押して可視光レーザON)
・フォーカスツールで高さ合わせ(テーブルの昇降による)
レンズ部分のフタを開けて合わせる
・燃えやすい材料の場合、ノズルをセット
一度レンズを外さないといけない
アクリル板なら8mm厚以上は付けたほうがいい
他にも紙、木材など
・必ずブロアをON・。手を入れて吸い込んでいるか確認すること
・加工してみて弱かったら、スピートを落とすかパワーを上げる
・一度に8種類の加工が可能
ソフト上の8色に対応
加工順はマニュアル調整の画面に表示されている順になる
・自動で内側の部分から加工される
・リロケートビューで位置移動可
・初めて加工する材料の時はマテリアルデータベースを使って試して、それから手動で調整してみる
その設定は保存可能。Save→Load
・15分くらい連続稼働させると特性が安定する。最初は強い?
もし大規模な時間のかかる加工をするなら15分くらい慣らし運転をしてからのほうがいいが、通常は気にしなくていい
・加工可能なもの : ライターであぶって燃えるものに限る
ステンレス、チタン、鉄への刻印くらいなら可能
耐熱、クリスタルガラスなら切断のためのガイド線いれなどにも使える
塩ビ、ポリカーボネートは有毒ガズ発生のため加工禁止
・下のハニカム形状のテーブルのせいで切断面下部にカエリと呼ばれるレーザー反射痕が付く。6mm間隔くらいで1mmくらいのが傷が付く
防ぐためには何か下に噛ませてテーブルから浮かせればいい
・アクリル板を彫った時に白い粉がたくさん付いた
焦点距離をずらしたり、ある人は自転車用のオイルを塗って回避しているらしい。この辺はノウハウがあるらしい
・切り口を滑らかにしたいときにも焦点距離を下に3mm程度ずらしたりするといい
・レーザーワークスのブログにたくさん加工例がある
・フェルト(化学繊維)は火が出ないからそのまま加工OK
・アクリル加工中は一番出火の可能性高い
出火した場合、まず真っ先に本体ドアを開ける。レーザーも止まるし、大抵は火も止まる。それでも消えない時は設置予定のCO2消火器をかける
・メンテナンス
・初めにトランスの電源を落とし、USBも抜く
・自分が使う前に汚れ具合とかチェックするのが大事
・アクリルとか切ると粉とか付く
・特にレーザー発射部、各ミラー
一番ひどいのは切断面に近いところのミラー
・曇ってるとそこに熱が溜まって割れる
・エアダスターで飛ばして、クリーナーで拭く
専用のクリーナーもあるけど、メガネ用の濡れティッシュでもOK
・たまにベアリングが走るx, yのレールを綿棒で拭く
・テーブルの中にゴミ入ってると燃える。外して掃除
テーブルにコネクタ有り。ちゃんとはまってないと「フィクスチャーをはめて」とのエラーが出る