🗐 電装工芸日記 - 舞台照明機器の製作とか -

能登半島地震で被災された方々にお見舞い申し上げます。

or 管理画面へ

タグ「器具の製作」を含む投稿[71件](4ページ目)

Icon of admin
 LED-Bar のフタを装着してみました。外形に狂いはありますが、気持ちよくハマりますのでヨシとします。
 重要なのは強度です。オベタを取り付けた状態で少々手荒に扱っても平気でありたい。本体との接合は大丈夫そうですが雌ネジがもつかな。
 雌ネジはインサートと追加工したワッシャで構成します。インサートは真鍮製で内M8-P1.25/外M10-P1.0、ワッシャは真鍮製の外径φ25-内径φ8.5-3.0tにM10-P1.0のタップを切った物です。インサートだけでは強度不足と思われるので、ワッシャ2枚で本体を挟んで接着しつつ締め込みます。真鍮製を使うのは、鉄ほど錆びず、ステンレスほど雄ネジを痛めず、接着性が良いからです。
 まるで作ったように書いていますが、インサート、ワッシャ、タップの入荷待ちです。

#ガチ工作 #器具の製作
Icon of admin
 中華電機の LED-Bar を使っています。購入当時1本1万円少々と格安でした。
 この手の製品はビームライトとして作られているのが大半ですが、買ったのは広角タイプ。公称25度ですが、ここまで広角なのは案外希少です。付け外し可能な拡散レンズオプションを作ってLHQの代わりとしても使っています。半減角の計測は難しいですが、印象としては45~60度くらいです。

 便利に使えていますが、安いだけあってイロイロな問題があります。
 入荷数の1割くらいが最初から動かないのは中華電機アルアルですが、両端のフタが貧弱なプラ製で丁寧に扱わないと簡単に割れてしまいます。このフタは横ネジの取り付け部も兼ねているので割れてしまうと使い物になりませんが、このところ割れまくって稼働数が減ってしまい対策を考えないといけません。
 金属プレートを作るのが強度的に望ましいですが、形状的に外注が必須でコストが掛かり過ぎます。とりあえず3Dプリンタで試作します。ABSで肉厚に作れば実用強度になるかもしれません。フィラメントも安いもんじゃありませんが、金属プレートを外注するよりは安く済むと思います。
 早速、出来るだけ肉厚にした形状をプリントしましたが行けそうな感じです。修正はありますが追い込んでいきましょう。

#ガチ工作 #器具の製作
Icon of admin
 FT232RL の送信終了を把握する方法が見つかりません・・・。FT232RL 内のキャッシュが空か(送信がアイドル状態か)という意味です。
 どうやら、FT232RL は Break 送信の指示を受けると問答無用に Break 状態に切り替えてしまうようなのです。DMX512 では送信フレームの折り返しを示しますのでキャッシュデータの一つとして扱って欲しいものですが、FT232RL では強制リセットに等しい扱いなのだろうと思われます。
 出来ないなら出来ないで発想を変えてみましょう。

#器具の製作
Icon of admin
 FT232RL の Windows ドライバである FTD2XX.DLL について解説している本家の資料を読めるようになってきました。
「D2XX Programmer's Guide」
 C言語の勉強をした成果だと思われます。

 私が求めているのは FT232RL がすべてのデータを送信しきってアイドル状態にあるかどうかです。
 先の getstatus( ) は、パソコン側のドライバにデータが残っているかを得るものらしく違うようです。
 私が使わせて頂いている ftd2xx.py は ftd2xx.dll のラッパーですので ftd2xx.dll の解説を読んで ftd2xx.py の本文を読めば何がどうなっているかおおよそ検討はついてきました。
 けれど、FT232RL のセッティングや受信状況を読み取る方法はあっても送信状況を読み取る方法が見つかりません。

 Open DMX USB の 仕様書を見つけるしかないのかなぁ。
 本家の ENTTEC を探しても見当たらないないんですよね・・・。

#Python #器具の製作
Icon of admin
 共有メモリを使う場合、読み書きが衝突しないように配慮しなければなりません。
 今回は情報が一方向ですから比較的簡単ですが、よく考えないとトラブルのもとです。
 一番簡単なのは、DMX512 の値の配列の共有メモリと読み書きフラグの共有メモリを使う方法です。読み書きフラグは送り側がセットし受け側がクリアします。送り側はフラグがクリアならば共有メモリに書き込んでフラグをセットし、受け側はフラグがセットしてあれば共有メモリから読み込んでフラグをクリアします。
 双方の待ちを考慮しないとといけませんが、送り側が受け側のフェーズ時間の数倍でチェックをすれば遅延は1フレームです。何よりも Queue に比べ処理時間が短く情報の渋滞も起き難いことを優先しましょう。

#Python #器具の製作
Icon of admin
 Python での Open DMX USB の制御は8時間経過でも正常に動いている様子。
 不定期に一瞬の不整合が起きているとしても確認の方法がありません。とりあえずこんなもんでいいのかな?
 この後は Class 化と Thread 化をします。Thread 間通信は Queue ではなく 共有メモリを使いましょう。共有メモリは Tuple を FIFO で使うような便利なことは出来ませんが、今回は数値の配列を一方向で渡すだけですので、速度が期待できる共有メモリがいいでしょう。
 下記は Thread ではなく Prosess の例題ですが、共有メモリのさわりが分かりやすい。
「Pythonでプロセス間の値の共有」

#Python #器具の製作
Icon of admin
 Python で Open DMX USB を動かすことに成功しました。
 setbreakon と setbreakoff の挙動は予想の通りでした。
 以下がテストソースです。
 slot1 と slot512 を 0 から255 までカウントして終了します。
### Open DMX USB test ###
import ftd2xx as ftd
import time

if __name__ == '__main__' :
 baudrate = 250000
 word_length = 8
 stop_bit = 2
 parity = 0
 purge_tx = 2
 try :
  d = ftd.open( 0 ) # Open first FTDI device
  d.setBaudRate( baudrate )
  d.setDataCharacteristics( word_length, stop_bit, parity )
  d.purge( purge_tx )
  channelVals = bytearray( [ 0 ] * 513 )
  channelVals[ 0 ] = 0 # start code
  for i in range( 256 ) :
   try :
    channelVals[ 1 ] = i
    channelVals[ 512 ] = i
    channelbytes = bytes( channelVals )
    # Send Slot
    cstart = time.perf_counter_ns( )
    d.write( channelbytes )
    while time.perf_counter_ns( ) - cstart < 22800000 :
     pass
    # Break Time
    d.setBreakOn( )
    cstart = time.perf_counter_ns( )
    while time.perf_counter_ns( ) - cstart < 192000 :
     pass
    # Mark After Break
    d.setBreakOff( )
    cstart = time.perf_counter_ns( )
    while time.perf_counter_ns( ) - cstart < 12000 :
     pass
   # Press Ctl+C to Exit
   except KeyboardInterrupt :
    break
  d.close( )
 except :
  print( 'No Device' )

 time.sleep() は求める精度に足りないので time.perf_counter_ns() を用いています。
 0 から 255 のカウントが5.9秒強で終わるので 43fps くらい。ほぼ規格最大値です。
 本当にコレでいいのかわからんけど、モヤモヤしてたのがスッキリした。

#Python #器具の製作
Icon of admin
 Open DMX USB の BreakTime について考えていたところ PIC の BreakTime についてもアイデアが出ました。
 拡張ミッドレンジPIC16系の EUSART には Break 機能があります。ただし、11bit分の L を出力して StopBit(H) を出すまでが一連の動作なので2回繰り返しても DMX512 の BreakTime にはなりません。今は I/O ピンをプルダウンしておき、入出力設定(TRIS)を Input(Hi-Z) にしてから捨て送信をすることで BreakTime を作っています。
 本題です。DMX512 の BreakTime は 最小 88usec ですから 250kbps なら 22bit 分の連続した L を出力すれば成立します。PIC16系の EUSART の Break が DMX512 の BreakTime に使えないのはこれが理由ですが、BaudRate を変更した Break を出力したらよくね?ってのが今回のアイデアです。手段を問わず、L 送信が 88usec 以上ならいいのです。私の理解が間違っていなけば、アイドル時なら BaudRate をバイト送信毎に変更しても EUSART は正しく動くハズです。単純計算なら BaudRate を半分にすれば規格値が出ます。現状でも BaudRate の調整だけで 1/50 くらいには出来ますから十分な BreakTime を作れると思われます。もちろん、BaudRate を 1/3 以下にして Break ではなく 0x00 を通常出力しても同じことです。こちらの方が汎用性が高いかも。受信も併用する構成ではNGですけどね。
 この方法が成立すればプルダウン抵抗は不要です。たった一つの抵抗ですが、部品を減らすことは絶対の正義ですので検討する価値はありそうです。

#PIC #器具の製作
Icon of admin
 オレメモです。
 Open DMX USB が期待通りに動かないのは BreakTime が正しく出ていないのが原因かと予想しています。
 FTD2xx には setbreakon と setbreakoff がありますのでこれを使うのが肝だと思われますが、これらのコマンドを実行するだけでは求める BreakTime に至らないのだろうと思われます。
 違うライブラリを用いたソースコードでは Break を有効化するコマンドが2回と Break 無効化するコマンドが続きで書いてありましたので FTD2xx では Break に関するコマンドを発行すると1バイト分の送信が行われるのかな?と思っていました。2バイト分ですと BreakTime の最小時間と等しいですからね。
 検証しないとわかりませんが、setbreakon と setbreakoff は FT232RL の動作モードを変える( setbreakon を実行すると待機状態が L となる / setbreakoff を実行すると待機状態が H に戻る)だけで Break の時間を確保するものではないってのが現在の予想です。テストプログラムでは setbreakon を2回、setbreakoff を1回実行していましたが、setbreakon と setbreakoff の間に空送信か待ち時間を入れてみようと思います。まずは time.sleep( 0.001 ) (Windowsだと15msec前後になる)を差し込むことから始めて setbreakon の状態で空送信をしたらどうなるかです。

#Python #器具の製作
Icon of admin
 「ftd2xx.py」を使って Open DMX USB から DMX512 が出るか試してみました。
 うまくいかない・・・。
 値は表示されますが、テストプログラムでは値を変化させているのにそれが出ません。Break Time あたりに問題があるように思いますが、オシロスコープかロジアナで信号波形を見ないとわかりません。
 波形を見るにはテスト環境を整えないといけませんので空き時間にちょっとお試しってワケにはいきません。しばらくお預けです。
 そんでも、値は一応表示されるのであまり遠くないところにいるような気がします。

 頑張って読み解くしかない本家の資料
「D2XX Programmer's Guide」

#Python #器具の製作

■当面の課題

桜のライトアップの季節です。花粉症の季節でもあります。
自分は平気ですが、花粉症の部下は死にそうな顔をしています。

編集

■全文検索:

複合検索窓に切り替える

■複合検索:

  • 投稿者名:
  • 投稿年月:
  • #タグ:
  • カテゴリ:
  • 出力順序:

■日付検索:

■カレンダー:

2023年10月
1234567
891011121314
15161718192021
22232425262728
293031

■カテゴリ:

■最近の投稿:

最終更新日時:
2024年5月2日(木) 08時23分44秒