So-net無料ブログ作成
Altium Delphi Script ブログトップ
前の20件 | -

能動的なスクリプト [Altium Delphi Script]

これまでのスクリプトは基板上の情報を収集してそれを整理するものが殆どでした。
それはスクリプトというものの性質上、能動的には動作しないのではないかと勘違いして
いましたが、そうではないようです。
部品のREF番号を回転するスクリプトでは位置を勝手に移動している訳ですから。

今回のスクリプトでは基板上の部品のプロパティを操作しているので、色々とアイデアを
出しやすいでしょう。

今はまだ部品の位置を0.01mm単位で移動してインチ/ミリの影響による位置ズレを補正する
ぐらいしか浮かびませんが、他にもアイデアを考えておきます。

元のスクリプトがVBなのですが、慣れるとDelphiの方が処理しやすいのでそちらに移植する
ことも同時に必要です。


nice!(0)  コメント(0) 

PnP内の紛らわしいパッド [Altium Delphi Script]

ピックアンドプレースファイルにてパッドだけで部品ではないフットプリントも出力されて
マウント業者としては紛らわしいデータです。

パターン設計者からすると(川上の)回路設計者から、わかりにくい部品表を貰うことが多いのですが
それと同じことを川下にも行っていることになります。

DelphiスクリプトでPnPファイルを生成するプログラミング内でそういったものは、部品とは別の
ものと区別できるフットプリント名で定義されていればIF文で除外できます。
(短めのフットプリント名の場合は誤検出するので他の項目とANDを取らないとNGです。)

データ生成工程のループを、その時だけは登録処理をしないで抜ける必要があるので
GOTO文を利用すればいいでしょう。
DelphiではVBAとは違って事前にLabelでラベル名を宣言してからその名前を利用するようです。

http://www.delphibasics.co.uk/RTL.asp?Name=Goto

Delphi_Prog_Goto.png

nice!(0)  コメント(0) 

PnP内の認識マーク [Altium Delphi Script]

認識マークをフットプリントとして登録し、基板上に配置した場合の欠点としては
ピックアンドプレースファイル内にその情報が計上されてしまうことです。
回路設計会社側から提出される部品表に載っていないので問題なさそうですが、逆に情報が
一致していないという問題があります。

弊社では単純にランドを配置してクエリーでレジストなどの処理をしているのでそれには
当たりません。
しかし、放熱器などはフットプリントとして登録して配置しているので同様の現状となります。
回路図側にはREF番号やその型番がないのでPCB側で処理することが多いのですが、シルク文字も
非表示しにしているので、PnPファイルとしても不自然です。

PnPファイルをスクリプトで作成した場合は、コメントやフットプリント名などをIF文でチェック
すれば、それをNOTESなどの欄を作成し記載すればいいでしょう。
前出の放熱器の場合はNOTES欄に「Heatsink」となるように処理しています。
他の機構部品で基板上にREF番号がない場合も、実装するのであれば同様に処理する必要があるでしょう。

ランドだけのチェックポイントや半田ブリッジでスイッチするランドなどもプログラミングで
検出して記載可能です。
しかし、基板設計会社によってその各欄の法則が違うので自社でプログラムの修正が必要でしょう。

その後もマウント機のソフトウェアなどについて記載されているサイトをチェックしていますが
その準備中にすでに部品表があった方が良さそうです。
回路設計会社側からスムーズに正確な部品表が提出されていることを望みますが、そうでない場合は
やはりPnPにBOMを添付した方がいいでしょう。

PnP_Notes.png

nice!(0)  コメント(0) 

PnP_Reportスクリプトの修正 [Altium Delphi Script]

色々修正してきましたが、今回はSimple BOMを出力するモードを追加しました。
「Run Process」をスクリプトに書き換えたものを三番目のラジオボタンの機能の中に
チェックボタンとして追加しました。
これで一段落ついた感じがします。

ラジオボタンの選択によって非表示とされ、全体は見えないのでDelphiスクリプトのプログラミング
時の画面のキャプチャー画像を載せておきます。
背景の黒い点はプログラミング時のボタンや文字など配置時の目安にするグリッドです。

PnP_Rep_V2_SCR.png

nice!(1)  コメント(0) 

作成日時のヘッダー [Altium Delphi Script]

スクリプトで色々なピックアンドプレースファイルを作成できるようになりましたが
その素性をわかりやすくなるようにヘッダーをつけました。
しかし、それだけでは勿体ないので作成日を入れられるようにしようと試みました。

現状ではDelphiの情報は少ないので、そのコードと結果を2段で示しておきます。

PnPout.Insert(0,'Date : ' + DateToStr(Date))
Date : 2018/12/29

PnPout.Insert(1,'Time : ' + TimeToStr(Time))
Time : 21:15:30

Insertでファイルの0行目(0=先頭、1はその次)に日付をインサートする記述です。
通常はスクリプトで調べた情報を追記する形が多いのですが、そのデータソートすると
各項目を最初に入れられないので、最後に先頭に追加する形となります。


nice!(0)  コメント(0) 

PnPファイルと一緒にBOM [Altium Delphi Script]

パターン設計が完了するとピックアンドプレースファイルを出力して一緒に送る場合が多いでしょう。
しかし、その時点で回路設計者から部品実装会社に部品表が提出されているとは限らないでしょう。
定番部品の部品手配が部品実装会社の場合は部品表が届いていないというのは不安です。

そこでPCBCAD側から部品表を出力して同梱する方がいいでしょう。
しかし、「Altium Designer」からの部品表出力はバージョンによっては自動ではなくて手順が必要です。
その代わりになるのが昔から地味ながら存在している「Simple BOM」です。
この「Simple BOM」を同梱すればいいでしょう。
ただ、AD18ぐらいからはこの「Simple BOM」がメニューからも消えてしまいました。
そこで、「Run Process」の情報をスクリプトに書き換えて処理します。

弊社ではガーバーデータのフォルダ内にFABという製造用フォルダを設けています。
その中にサブフォルダとしてBOMを作ってそこに入れています。

続きを読む


nice!(0)  コメント(0) 

PnP_Reportスクリプト [Altium Delphi Script]

ピックアンドプレース(PnP)ファイルを生成する2つのスクリプトを合成してメニューで選べるように
しようとプログラミングしました。
スクリプトで出力することで、パターン設計をしているALtium Designerのバージョンに依存せず
安定したピックアンドプレース(PnP)ファイルを顧客に提出できます。

いざプログラミングを始めると、当初の考えとは違ってAD14風、AD18風、アドバンスという3つから
ラジオボタンで選択できるようにするのがベストだと感じました。

3つ目をアドバンスにしたのは省略するとADになるからで、ファイル名の作成時にADの文字を追加
しても違和感がありません。All Data(TOP/BOTの両面)の略とも取れます。

AD14では2行目が空白行になっているのでそれに準拠しました。チェックボタンでダミーの
Ref-xyとPad-xyを追加できますが内容はMid-xyと同じです。

AD18では2行目が空白行は止め、部品のセンターの名前がMid *ですがCenter*に変更しています。
3種類の中では一番コンパクトです。

アドバンスではSMDかどうかをチェックし「Type」という項目を設けて表示し、更にコメント欄を
左から3番目とし、フットプリント(2番目)の横に移動して部品の内容を再確認しやすくしてあります。
顧客によってはトップとボトムを別々のファイルにして欲しいという要望もありますがそれにも
チェックボタンひとつで対処ができます。


ファイル名は、それぞれ*_AD14、*_AD18、*_ADです。その*_ADのデータを各面で分割したものは
名前が長くなるので単純に*_TOP、*_BOTとしてあります。

このスクリプトはSummer09では動作しないようですが、それ以外のAD14-19までは問題なく
動作します。

PnP_Report.png


nice!(0)  コメント(0) 

PnP関連のスクリプト2種の合成 [Altium Delphi Script]

2種類のPnP関連のスクリプトをその都度、選択するというは面倒です。
そこで、メニューフォームを作成してラジオボタンで選択する方がいいでしょう。

しかし、それだけでは済まないでしょう。
SMDの場合(SMD)
TOP/BOTを別のファイルとして出力するかの選択も必要でしょう。

通常の場合(Normal)
ADからのPnPと同じものにするのか、SMD/THD(IMD)を区別するためにTypeの項目を設けるのか。
(THD(IMD)とはディスクリート部品のことです。)

こちらでも、TOP/BOTを別のファイルとして出力するかの選択です。

恐らくSMD<--->Normalの切替がラジオボタンで、Typeの項目追加がチェックボタンに
なるでしょう。
TOP/BOTを別のファイルとしてどう出力するのか、プログラミングで悩むことでしょう。


nice!(1)  コメント(0) 

PnP関連のスクリプト2種の改版完了 [Altium Delphi Script]

DelphiスクリプトによるPnP出力するこちらのマクロの再修正が完了しました。

SMD専用ですが、ディスクリートを含めた通常のPnPで、SMD/THDを区別をする2種類を用意しました。
PnP_ALL2.PAS
PnP_SMD2.PAS

Component.detailの部分は下記のようにしてREF番号とコメントを抽出して記載してあります。

******************************************************************
DET := Component.detail ;
// REF
DES := Copy (DET , 11 , Pos(' Comment:',DET) - 11 ) ;
// Comment
CMT := Copy (DET , Pos(' Comment:',DET) + 9 , (Pos(' Footprint: ',DET) - Pos(' Comment:',DET) - 9 )) ;
******************************************************************

これによりREF番号を調整するためのSCHとのリンクも不要です。
EXCELでコメント欄を修正するマクロも不要となりました。

危うく途中で断念するところでしたが粘ってよかったです。

プログラム的には、内容を追記する方式なのでREF番号がバラバラだったのでソートしました。
それに伴いヘッダー部分を後から追加する方式に変更しました。


nice!(0)  コメント(0) 

SMD専用PnPスクリプトの改造 [Altium Delphi Script]

通常はREF番号の全部をピックアンドプレースファイルとして出力されますがこちらのスクリプトでは
SMDだけを出力してくれます。

以前にも触れたのですが、このスクリプトは項目名や順序や表記方法がオリジナルとは少し違っています。
その項目などはある程度は修正していたのですが、一番の欠点がフットプリントのREF番号ではなくて
SCH項目のREF番号なのです。
つまり、REF番号を手動で修正したコンポーネントの場合はここが違ってしまいます。
配置したものの全部が同じになっていることを確認できるものでないとNGで重複などが起きます。

また、オリジナルはフットプリント名が無かったのでその記述をしようと探し、やっとそれが下記の記述で
あることがわかりました。
Component.Pattern

他には、XY座標を小数第3位で丸めて(Round関数)、その後にmmの文字を挿入しました。
Rotationが360の場合は0に修正しました。

AD14.3での動作確認はしていますが、Summer09では動作しませんでした。


nice!(1)  コメント(0) 

高速OPAMP周辺の浮遊容量 [Altium Delphi Script]

高速OPAMPで特性が出ないので入力部分のランドから部品面および半田面のべたGNDを
1mm程度は離すように言われたことがあります。
ポリゴンカットアウトで対応していました。
高速OPAMPは入力インピーダンスが高いのでその近辺のノイズを増幅してしまうから
なのかと勝手に理解していました。

Stray_OP_Ex.png

しかし、トラ技SPにて浮遊容量が0.5PF程度でもf特性の高い部分で落ち込みがでるとの
記載がありました。
毎回、計算するのが面倒なので単純に向き合った導体同士のコンデンサとして計算する
スクリプトを作成してみました。
0.6mmx1.5mmのランドの面積は0.9平方mmということで計算してみると0.022PFでした。
書籍に書かれているものに比べて一桁少ない値でしたが、実際には影響はでなくなり
改善しているのでこの値でも影響がでるのでしょう。
部品面は銅箔厚が断面積となるので部品面のべたの影響は少ないのかもしれません。

Stray_C_Scr.png



nice!(0)  コメント(0) 

マイクロストリップラインの切り欠き率の続き [Altium Delphi Script]

Altium社のマイクロストリップラインの切り欠き率にはインサイド部分にも数値を入力する
ことが可能です。

通常は使用しないでしょうが、顧客によっては幅W部分を切り欠いた45度の部分でも維持したい
と言われる場合もあるでしょう。

それに対応するためにスクリプトにインサイド部分の切り欠き率をWを維持するように
計算できるようにしました。

以前のカット幅x(mm)は直接的に理解しにくいので削除しました。
その代わりに配置したD-x(mm)は、処理前のパターン幅です。
これはWより小さい値になっているので、これをWに戻すための比率がCriです。

パターン幅が狭い場合は、Criが100%を超える場合があります。
Altium Designer側では100%以上の設定はできません。
どうしてもコーナーでもWの幅を維持したい場合はCriを100%で処理した後で手動で
ポリ・リージョンを修正するしかないでしょう。

Chamfer_Rate_Scr2.png


nice!(0)  コメント(0) 

マイクロストリップラインの切り欠き率のスクリプト [Altium Delphi Script]

前の記事でも触れたAltium社のマイクロストリップラインの切り欠き率の記事の中の
数式を利用してDelphiスクリプトを作成しました。

これで計算したパーセンテージを入力すれば、トラックのコーナー面取りが適正に(VSWRが1.1以内)
処理が可能となります。

記事ではMとなっているところをCr(Chamfer Rate)としてあります。
Cr = 52 + 65 * e (-1.35 * W/h)

これまではCr(M)の値は無条件に50%にしていましたが、実際に計算してみると60%台になる
場合(より余計にカット)もあります。

スクリプトでは、Crに併せてxの値(45度のセットバック値)も計算させています。

パターン幅が狭くて板厚が厚い場合はCr(M)の値が極端に大きくなります。
W/h が 0.25のように小さくないことも事前に調べておいてください。

Chamfer_Rate_Scr.png


nice!(1)  コメント(0) 

クロスハッチング時のマイクロストリップラインの板厚 [Altium Delphi Script]

以前の記事を具体的なスクリプトにしました。
まずはハッチングの状態がべたの何割となっているのか係数kを求めます。
0.1mmパターンを0.2mm間隔で配置すると0.75(3/4)になります。
(0.1/0.2mmという倍の関係でも縦横ハッチングするので交点部分があり0.5ではありません。)

それに比例して静電容量は減ります。

こちらの記事のRやベクトルを考慮したJωを無視すればL/Cの平方根になります。
つまり静電容量の平方根の逆数だけZの値が大きくなるということです。
クロスハッチングの影響でLに変化がないということが前提ではあります。

それを考慮し逆算して目的のZmesh(小さい値)を算出して、その値を実現するように通常の手順で
マイクロストリップラインを算出すればいいのではないかという案です。

あまりクロスハッチングが荒いと誤差がでるかもしれないのでパターン幅とハッチング間隔は3倍以内
に制限しています。

FR-4で50オームで計算した場合に、通常0.3mmの板厚みが、1:2のクロスハッチング(0.75)の場合では
0.25mmで実現可能という結果になりました。

大した差ではないように感じますが多層基板で、どうしようもない場合は0.05mmの板厚軽減でも
ありがたいことでしょう。

Mesh.png

nice!(0)  コメント(0) 

Altiumスクリプト内のDelphiのべき乗 [Altium Delphi Script]

非常に地味で回顧的な内容の記事です。

Delphiスクリプト内でべき乗を使いたいのでその関数はSQRのようですが、IDE画面では
通常動作の関数の色になりません。
動作自体は正常でした。
しかし、その点が不思議だったので調べてみました。

POWERという関数があって、Xのべき乗は下記のようにすればいいことがわかりました。
k:=Power(X,2) ;

カンマの後の数字を2以外に変えれば3乗なども簡単に処理できます。

このように変更するとIDE画面は通常の関数と認識してくれました。
こういう部分で、スクリプトのプログラミングは古いDelphi5ならではの苦労があります。


nice!(0)  コメント(0) 

べたアースの考え方 Part.2 [Altium Delphi Script]

デバイスからの熱を垂直と水平で別々に考える必要があります。
それを2層、4層、露出パッドの3種類で計算させます。

VIAの熱抵抗と水平方向の熱抵抗を計算してオームの法則にしたがって積み上げます。
細かく処理するには微分、積分が必要になるので単純化しました。

水平方向の計算は面倒なので面積を半円や円に換算して処理しています。

THV_IMAGE.png

nice!(0)  コメント(0) 

基板の熱抵抗計算 [Altium Delphi Script]

VIAの熱抵抗がわかってもべたアースにそれを接続しないとデバイスの放熱は完結しません。
そこで基板のべたアースのパターンの熱抵抗を計算できないか検討に入りました。

参考にしたのは以前にVIAで紹介したページの次ページのこちらです。
http://www.tij.co.jp/analog/jp/docs/analogsplash.tsp?contentId=50617

放射状のパターンで抵抗ネットワークで計算しようとするものです。
そこまで厳密でなくてもいいので、2層べた、4層べた、露出パッドぐらいは計算したい
ものです。

THV_L2.png

nice!(1)  コメント(0) 

VIAの安全電流 [Altium Delphi Script]

常温より10度上昇した場合の電流値を安全電流とします。
VIAの内径から抵抗値などを計算するスクリプトがあるのでそれに更に追加しました。
参考なので計算結果は灰色で表示します。

基板の表層で35マイクロで幅1mmの場合は1Aということを応用します。
内径を開いて平面にして考えたいと思います。

内径1mmなら平面にすると3.14mm幅となります。
メッキ厚は25ミクロンが一般的なので35ミクロンとの差の25/35を係数にします。
厳密に内径はメッキ厚で広がった部分なので下記のようになります。

仕上がり内径 + 2 x メッキ厚

スルーホールの断面は筒状の銅パイプですが開いて平面にした場合より熱がこもるので
係数が必要です。

1/2(0.5) としたいところですが、0.3mm幅の場合は0.3mmAと記載される場合が多いので
他の値でも矛盾のないように、調整値として0.42にしました。

仕上がり内径が0.5mm幅の場合は

(0.5 + (0.025 x 2)) x 3.14 x 25/35 x 0.42 = 0.52

0.52(A)となりますが小数第一位になるように四捨五入するので結果は
0.5(A)となります。

VIA_I_Safe.png


nice!(0)  コメント(0) 

高周波でのPADやVIAの間隔のスクリプト [Altium Delphi Script]

べたアースなどにVIAを打つ場合がありますが、その間隔をどうするかを
周波数に関連して考察されたことがあるでしょうか。

海外の文献ではその基板が扱う周波数の波長を調べ、その1/20にすれば良いと書かれて
いました。
正弦波の一周期は360度ですが、その波形を18度ごとにGNDに何度も落すことでGND電位を保つ
という意味です。

ガードリングなどの場合はVIAを打つ間隔にに相当します。
そういうものがない低い周波数では取り付け穴PADの間隔でもあります。

100MHzであれば波長λは300cm(3メートル)なのでその1/20の150mm間隔で取り付け穴を
設けるという意味です。

3GHz(3000MHz)の場合は5mm間隔でVIAを設けるという意味です。
取り付け穴は間隔が狭いのでレジストを剥がして金属ケースにそのまま貼り付ける方法が
あります。

沢山のVIAをマシンガンのように打っても無意味ということではありません。
適当な間隔で打ってください。

べたアースのVIAは10mm間隔ぐらいにしています。
マイクロストリップラインの周囲の場合は高周波なので5mm間隔にすることが多いです。

Freq_Via_Pitch.png

nice!(0)  コメント(0) 

伝送線路の遅延時間のスクリプト [Altium Delphi Script]

以前にEXCELで作成していたものをDelphiスクリプトとして移植中です。
但し、複数の線路のMax/Minを調べるのではなく、単純に二つの線路の長さの違いを
Lとして、それから計算しています。

比誘電率は基板材料によって異なり、さらに実効誘電率の値をどうするか悩ましいので
プリセットすることにしています。

プログラムのチェックと準備ができたら、ダウンロード可能なように対応します。

DeLay_TXL_F.png
nice!(0)  コメント(0) 
前の20件 | - Altium Delphi Script ブログトップ