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

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

or 管理画面へ

タグ「電子工作」を含む投稿(時系列順)[94件]

Icon of admin
たまたま目にしたYouTube動画の中でプリント基板製作の話しがありました。jlcpcbですが、小さめの基板なら100円/枚だとか。p板.comさんに初めてお願いした時は価格破壊だと思ったのに更にその1/10です。
p板.comさんはオーバースペックな程良質な基板を作ってくれますので高いとは思いませんが、感光基板より安く作れるなら使わない手はありません。納期も早いみたいだし。

同様の製作会社は他にありますが、共通点は中国の工場であることとガーバーデータをネット入稿することです。
ならば、まずはガーバーデータを起こすことから学習です。
ガーバーデータならEAGLEとKiCadがフリーウェアの双璧な感じですが、完全フリーのKiCadが情報も多く良いようです。
YouTubeに良い解説があるのでそれで勉強です。





この動画にあるPCBGoGoよりjlcpcbの方が安いようですが、PCBGoGoは日本語ローカライズされていたりわかりやすようです。

#電子工作
Icon of admin
空き時間にプリント基板製造屋さんのことを調べてみました。
ネットには様々なご意見があります。参考にはなりますが、どこがいいかは簡単にわかりません。
というより、中国系のプリント基板製造屋さんはどこも大差ない印象です。同じ物を作っても数枚のオフ日のDIY者にとって・・・ですが。
・価格は両面10x10cm以下が最低ロッド5枚で600円前後(標準納期)。
・製品の精度も仕上がり感もレビューを読む限り似たり寄ったり。
・出荷は早いところで受注後1日遅くても4日。違いと言えば違いだが、入手までの期間の大半は輸送なので実質の納期は送料が左右する。それにもましてオフ日のDIY者にとって2-3日の違いは誤差の範囲。
・10x10cmを越える大きめの物は価格差が開くけれど、そもそもが安いので悩む程の価格差でもない。
決定ではありませんが、先の書き込みにリンクしたYouTube動画で推しのPCBGoGoが分かりやすい解説がある分いいのかなぁ~くらいの感じです。

#電子工作
Icon of admin
切った貼ったの工作も大好きですが、ちょっと胃モタレ気味(w
電子工作にガチで取り組みたい今日この頃。
仕掛品ラックを作らないと作業スペースがありませんので、工作部屋の整理整頓が自宅での優先作業となりますが・・・

優先して手をつけたいのはDMXのパッチマシンです。
どれくらいの規模にするかはRaspberryPiを主軸にしたハードウェアの処理能力によりますが、小規模なディナーショーや野外コンサートで過不足なく使えるものにしたいとイメージしております。
以前、DMX切替機を頼まれて作ったことがあります。フェスで卓を2枚組んでどちらを使うか選択するための装置です。信号はBreakTimeを見て切り替えを行いますので受信側にとっては値が変わっただけのことになり、コネクタの抜き差しで稀に起こるパケットエラーからのアオリが発生しません。本卓とバックアップ卓の切り替えみたいな用法も出来ますので、可能ならこういった機能も搭載したいものです。

今思い付いたのですが、Art-NetなどのEtherNetベースなら切り替え器簡単かも。
debian系のOSでなら、3つのNICをbridge接続し、2つを卓側にし、1つを受信側にします。LinuxでHUBを作る方法の応用です。
で、卓側のNICの1つをiptablesで全DROP(NICは生きているがIPパケットをすべて破棄)にするのです。受信側にはもう1つのNICのパケットしか行きません。
切り替えは一端卓側のNICを2つとも全DROPにしてから有効にしたい方だけ改めてACCEPTにする手順です。
iptablesの設定変更だけで可能ならbashを数行書けば出来てしまいます。
ちょっと乱暴な方法に感じますが、これは実験してみたい。

#電子工作
Icon of admin
小屋付の増員で小規模なコンサートの対応をしています。演者が入るまでヒマです。

pythonでArt-Netを扱うための下調べ。
InputとOutputを一台に組み込むには少々矛盾があります。二つ以上のNICに同じゼグメントのIPアドレスを設定しつつゾーンは別でなければならないからです。単にIPアドレスだけで送受信をしたらどっちが対象か不明瞭です。
pythonでsocketを使うのが基本構成となりますが、socketのインスタンスにインターフェイス指定してバインド出来るらしいので解決しそう。setsocketoptを使います。

#電子工作
#python
Icon of admin
 レガシーDMX512の出力インターフェースを作るには少し工夫が必要です。
 RaspberryPiでもPICでも使えるインターフェースで十分な速度を持つのはSPIです。I2Cは便利ですがPICが最大400kbpsなので1ユニバースしか扱えません。
 かといって、高速のSPIで複数のPICで扱うのはかなり難しい。解決するにはロジックICを用いた分岐回路を用いるのが良さそうですが、ICが5個くらい必要なので実装面積に問題があります。
 ならばGALを使うのはどうかと。FPGAやCPLDの祖先であり、今回の構成に丁度良いスペックです。何と言っても安い。
 ただし、GALはすでに過去の物で開発は終わっています。決して多くないニーズに応えて生産されているだけですし、開発ソフトウェアも正規対応がWindowsXP止まり。
 されど、10個未満のTTL-ICで組む様な事を1個で組めるのは便利ですし、数十MHzまで対応するので、RaspberryPiなどのLinux系小型マイコンの外付け回路を組むには丁度良いと思います。
 便利そうですが微妙なので導入を控えていましたが、改めて調べたところ書き込み装置などの開発用品が安くなっていたので、この際環境を整えてみましょう。
 RaspberryPiとPICとGALを組み合わせれば製品が作りやすくなるような気がします。

#電子工作
Icon of admin
 RaspberryPiからレガシーDMXを出力する方法を妄想しています。
 直接出すのは無理があります。UARTはありますが、2系統出すのが関の山。BreakTimeも出しにくい。
 ならば、RaspberryPiからはSPIで出力し、PICで250kbpsのUARTに変換するのがいいかなと。

 RaspberryPiからCS(チップセレクト)を使ってPICを選択するのがノーマルな方法ですが、レガシーDMXを出来る限り数多くだすには効率が悪い。SPIを休みなく送りつけたらPICは処理しきれませんので1ワード毎に休み時間を入れないといけない。また、PIC1個毎に一気にデータを送り付けるにはPICがデータをキャッシュ出来なければなりませんが、512バイト以上のメモリを持ったPICは選択肢が少なくピン数も多い。
 しかるに、SPIを普通に使ったら2系統扱うのが限界だと思われます。

 で、考えた方法が、複数のPIC(レガシーDMX1系統に付き1個使用)がRaspberryPiから1個に見える方法です。
 RaspberryPiからは複数のユニバースのデータを適切に並べ替えて一気に送出します。RaspberryPiにとっては一番ストレスが無い方法です。
 もちろんPICはこれを捌くことが出来ませんから、RaspberryPiとPICの間に仕掛けを入れます。

 SPIはクロック同期型の送信方法ですからデータ線の他にクロック線があります。受信はクロックによって実行されますので、CSがアクティブでも、データ線に変化があっても、クロックが伴わなければ何も起こりません。通常ならCSを用いて受信先を決定しますが、クロックの出力先を仕分けても同じことです。
 送信が始まって1から8カウントの間は1番目のPICへSPIのクロックを送り、9から16カウントの間は2番目のPICへSPIのクロックを送り・・・以下末番のPICまで繰り返します。RaspberryPiから送信があっても、クロックが行かない受信器にとってはワードとワードの間の休み時間でしかありません。
 これなら、送信するRaspberryPiからはPIC達が1個に見え、受信するPIC達には自分宛のデータがだけが届きます。RaspberryPiが休みなく送信してもPIC側は他が受信している間に処理を進められますし、RaspberryPiの送信タイミングが適切であれば受信したSPIのデータをUARTに渡すだけでPIC内でのスタックは不要です。ピン数が少ないPIC12F1822でも対応可能ということ。

 これを実現するクロックの仕分けは汎用ロジックICで行います。
 バイナリカウンタ74HC4040
 3to8 ラインデコーダ TC74HC138
 この二つです。
 数日前はGALを使おうかと思ったのですが、16ピンの汎用ロジック2個で可能ならこちらの方がいいかと。ファームウェア書かなくていいし、安いし、30年以上確実に動くし。

 バイナリカウンタはクロックをカウントして2進数相当の出力をするICです。これにSPIクロックを入力し、下から4~6bit目の出力を使います。SPIクロックの8倍周期でカウントされる3bitのバイナリと見なせます。
 8倍周期の3bitのバイナリをラインデコーダに入れます。ラインデコーダは入力された3bitのバイナリに相当するピンだけ出力します。このデコーダにSPIのクロックも入れれば8カウント毎に送り先が切り替わるクロックが出力されます。
 SPIのモードは74HC4040の特性に合わせてmode3がよいと思われます。

 文章で伝わりにくいのは承知していますが、アイデアがまとまってスッキリした。
 オレメモってことで。

 整理しきらないとモヤモヤして本業が手に付かなかったので回路図を描いてみました。気分スッキリ。
 折角なので揚げてみました。
 クリックして表示されるモノはぼやけてしまいますので、回路を追いたい方はサムネのリンク先の画像本体をダウンロードして見てください。
20220307150548-admin.jpg
 追記
 回路図に間違い発見!
 74HC4040のCLKにはSPI_CLKが入らないといけません。
 74HC4040から74HC138のA,B,Cに行くのもQ4,Q5,Q6です。なら74HC4020でもいいな。
 データは手直ししましたが、ここに再アップするのは面倒。まぁいいか。

 さらに追記
 クロックカウントの考え方が根本的に間違っているような気が・・・74HC4040(4020)のカウントの進み方がズレてね?最初のビットをサンプリングする前に1カウントされてしまうぞ。
 ならばSPIをmode0で使えばいいか?mode0ならアイドル・ローだから74HC138ではなく74HC238か?
 考え直し。

#電子工作 #RaspberryPi
Icon of admin
 RaspberryPiでレガシーDMXを送出する装置のクロック切替器の回路図を訂正しました。
 細かい誤植の訂正とロジックICの変更です。
20220308175658-admin.jpg
#電子工作
Icon of admin
 SPIでレガシーDMXを出力する回路の基本要素は揃いました。PICをプログラムして実験する段階です。
 本業が忙しくなってしまったので棚上げですが、PICの基本設計は進めましょう。
 PICは12F1822を使います。PIC12とありますが、PIC16系の8ピン版と思っていい製品です。

 ピンアサインは次の通りです。
 拡張ミッドレンジPICにはモジュールのアサインピンをある程度切り替えられる機能があります。
 TRISとはI/Oピンの入出力方向を設定する要素です。

  VDD
  VSS(GND)
  RA0 TX_Pilot_LED TRIS-OUTPUT(汎用I/Oとして使い、送信が行われるとLEDを点灯させます)
  RA1 SPI.SCK TRIS-INPUT
  RA2 SPI.SDI TRIS-INPUT
  RA3 DMX.RESET TRIS-INPUT
  RA4 USART.TX TRIS-OUTPUT(ただし、BreakTimeを作るためにINPUTにすることがあります)
  RA5 CSC1 TRIS-INPUT(クロックの設定は優先順位が高いので、TRISはどちらでも機能します)

 これには隠れたコツがあります。
 SPIを使うならSPI.SDOがあります。使わないI/Oですがどこかにアサインしなければなりませんので、USART.TXと同じRA4にアサインします。被って出力がおかしくなりそうですが、SPIよりも優先順位が高いUSART.TXが出力されますから大丈夫。逆だったら困りましたけどね。

 クロック発信子にはクリスタルオシレータ(8MHz)SG-8002DC(3.3V)を使います。普段はPIC1個に対し水晶発振子を1個使うのですが、今回は同じクロックレートで動く複数のPICを1枚の基板に載せますので、部品点数を減らす意味も含めてこれを使います。PICのI/Oピンも減るし。

#電子工作
Icon of admin
 PICでDMX512を出力する際、面倒なのがBreakTimeです。
 一般的なUARTでDMX512の様に長いBreakTimeが使われることは無いためか、PICにはそのような機能がありません。何らかのチカラ技で作らないといけません。

 私が最終的にたどり着いた方法は、

1)USARTが出力されるI/Oピンをプルダウンしてアイドル・ローにしておく。

2)BreakTimeは0x00の空送信で作る。ただし、0x00送信でもStopBit(H)が発生するので、以下(3)の方法で消す。

3)BreakTimeの空送信が始まってからStopBitが始まるまでの間(Lが続く間)にTRIS(I/Oピンの入出力方向を決めるフラグ)を入力に切り替える。入力にするとI/Oピンがハイインピーダンス(Z)になり、プルダウンされているためRS485ドライバに届く信号はLを維持する。

4)BreakTimeの時間に相当する空送信する。

5)BreakTimeの終わりというか次のフレームの送信開始前に0x00を送信してTRISを出力に切り替える。0x00送信のStopBitがMarkAfterBreakとなる。ただ、MarkAfterBreakは少し長い方が安定するので、0xCO(b11000000)などのMSB詰めの数値を使ってMarkAfterBreakを長くしてもいい。

 といった内容です。
 これならタイマー処理をせずにBreakTimeを作れます。

 BreakTimeを表すデータをBreakTimeZero、BreakTimeZeroの始まりのバイトをBreakTimeNose、最後をBreakTimeTailと勝手に呼んでますが、RaspberryPiからのSPIデータをBreakTimeTailから始まるモノにしておけばPIC側の処理は凄く簡単です。

0)RaspberryPiからRESET信号(実際にはCSを用いる)をPICに送り、PICはこれを見て送信カウンタをクリアしてUSART.TXピンのTRISを入力に切り替えておく。アイドル・ロー。

1)SPIの最初のバイト(BreakTimeTail)を受信したら、USARTに渡して送信し、3bit分待ってからUSART.TXピンのTRISを出力に切り替える。以下、受信値を1バイト送信するごとに送信カウンタをインクリメントする。

2)512スロットを送信した後のバイトはBreakTimeNoseになる。ただ、PICのUSARTは1ワード分のキャッシュを持っているので、BreakTimeZeroの2バイト目をUSARTに渡した後(BreakTimeNoseが送信開始された後)、3bit分待ってからTRISを入力に切り替えてBrakTimeとする。送信制御は送信カウンタを用いる。

3)以下、SPIのデータが終了(RaspberryPiからのCSで確認)したら、送信カウンタをクリアしてSPIを受信待機にする。=>(1)に戻る。

4)BreakTimeZeroを送信する前にSPIが終わってしまったらエラー。TRISを入力に切り替えてBrakTimeにしておくなど、エラー処理を行う。

5)TRISの切り替えの前に3bit分待つのは、次の送信バイトの受け入れがStopBit中に可能になるからです。

 こんな感じかな。

#電子工作
Icon of admin
 昨日から3日間、ホール管理の増員です。増員と言っても規定による員数合わせなので実働は毎日30分ほど。
 ヒマっちゃヒマですが、リクエストが突然入ってくるので、頭を全振りする様な事は出来ません。
 そんな時は調べものやお勉強がいい。今日の課題はプリント基板CADのKiCadです。

 KiCadは以前ご紹介しましたが、フリーとは思えないほど良く出来たプリント基板CADです。回路図作成、基板デザイン、ガーバーデーターの出力まで一貫して作業出来ます。
 プリント基板の製造を外注し始めた頃は手ごろなプリント基板CADが無かったのでp板.comさんのCADLUS-Xを使っていましたが、p板.comさんを含めプリント基板屋さんならどこでもガーバーデーターで受け付けてくれますので、KiCadに移行しようと勉強中なワケです。

#電子工作

■当面の課題

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

編集

■全文検索:

複合検索窓に切り替える

■複合検索:

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

■日付検索:

■カレンダー:

2021年10月
12
3456789
10111213141516
17181920212223
24252627282930
31

■カテゴリ:

■最近の投稿:

最終更新日時:
2024年4月27日(土) 15時28分25秒