So-net無料ブログ作成
  • ブログをはじめる
  • ログイン
Altium Delphi Script ブログトップ
前の20件 | -

高速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) 

VIAやPADの抵抗値 Part.2 [Altium Delphi Script]

VIAの熱抵抗も計算できるようにスクリプトを修正しました。

前の記事で、内径0.45mmで厚さ1.5mmのVIAは100となっていますが
このスクリプトで計算すると99.8となり、誤差の範囲でしょう。

発熱体の直下に存在するVIAの数でこの値を割れば、それがトータルの熱抵抗となります。
直下ではない場合は、基板の上下の熱移動ではなく拡散なので、VIAの数のカウントからは
外す必要があります。

その部分の計算は難しそうでまだトライしていません。

VIA_TR_Calc.png


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

VIAの熱抵抗 [Altium Delphi Script]

こちらの記事の下の辺りにVIAの熱抵抗が書かれています。
http://www.tij.co.jp/analog/jp/docs/analogsplash.tsp?contentId=49908

内径0.45mmで高さは1.5mmと通常のサイズとは少し異なりますがその値が
100℃/Wとなっています。

16個のVIAを打っていれば100/16で約6.25℃/Wとなります。
1Wの場合は、僅か6.25℃のロスで部品面から半田面に伝えることが可能です。

これを検証して、これまでのスクリプトに追加する予定です。


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

VIAやPADの抵抗値 [Altium Delphi Script]

主に穴径の直径が小さいVIAでは以前から抵抗値が気になっていました。
電流が流れる場合は複数のVIAを打ちますが、大きなVIAを数個の方がいいのか
小さなVIAを多数打った方がいいのかの判断がつきません。

そこでそのスルーホール部分の銅の抵抗値を計算するスクリプトがあったらいいのでは
ないかと考えました。

計算のしやすさもありますがそのメッキ厚は25ミクロンをデフォルトにします。
その場合は穴の断面では両側となるので0.05mmとなるからです。
仕上がり径が0.5mmの場合はメッキ前の下穴は0.55mmという意味です。

銅パイプの抵抗値という計算なのでアニューラリング部分については計算に入れない
ことになります。

Via_Calc3.png

続きを読む


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

自社のスクリプトの分類 [Altium Delphi Script]

これまで作成してきたスクリプトを分類することで、まだ作成していないスクリプトを作成するための
参考にします。

1.スクリプトを作成し始めた頃は、「Altium Designer」の操作をより楽にするという「Utility」という
 感じでした。
 プログラムの内容としては、「Delphi Script」というよりは「Run Process」を連続で記述している
 ものでした。

2.その次に作成したものは「Altium Designer」にない操作をスクリプトで実現するという「Tool」と
 いうジャンルでした。
 プログラム内にはメニューフォームがあるものが多くなっています。

3.昨年に作成したものはあるジャンルの「Footprint」を作成するものが殆どでした。

4.これ以外のものがないかと考えていましたが、「Transmission line」などの計算をするものでした。

これらのうち、1.と2.の境界は微妙なので同じ分類にしていいのかもしれません。
4.の計算をするようなジャンルで何かできないものかを思案中です。


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

今更のDelphiなのか [Altium Delphi Script]

「Altium Designer」におけるDelphi Scriptに関しては殆どの方が興味がないようです。
使用しているものとしてはこれほど便利なものはありません。

Delphi自体は20年ぐらい前のもので、その当時のボーランド社がマイクロソフト社に負けた形と
なっています。
プログラマーとしては今更、MS-DOSでプログラミングしているような印象となるのでしょうか。

Delphiに関係する情報やAltium社からのドキュメントが非常に少ないのですが、プログラミング
初心者でVBしか知らない私でも特に問題なく作成できているのでハードルはそれほど高くないです。

基板設計者は人が作成したものを利用するだけで、自ら作成するという考え方がないのか
がわからずにいます。


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

Delphi Script内のメッセージ [Altium Delphi Script]

メニューフォームは英語で作成していますが、エラーや処理工程のメッセージなどは
場合によっては日本語を使用しています。

しかし、英語でグーグル検索すると弊社のブログがヒットすることが多くなってきたので
メッセージもなるべく英語に変更しようとし始めました。

現状で修正したバージョンは「SOIC_Creator」スクリプトだけです。

ブログの記事もそれに対応する為に「続きを読む」以降に英語での記述もしていきますが
その点はご了承ください。


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

ガルウィングのリード幅 [Altium Delphi Script]

SOP、SSOPなどのフットプリントを作成するスクリプト内ではリードピッチとリード線幅は関連が
あるので自動にしています。
しかし、メーカーによっては大幅に異なっていたり、別のフットプリントを作成することに利用
する場合は変更したくなります。

メニューフォームの一部を修正してプログラムの修正も行いました。
「Lw」がその部分です。
しかし、画像の修正はしていないのでLwが何なのかはわからないかもしれません。

SSOP_GULL_Lw.png

これでDFNなどの部品外形の下書きは可能ですが、パッケージの内側にまでは
入れません。
SON、DFNはQFNも含めて別途、専用のスクリプトで対応するほどの使用頻度でもないので
このスクリプトで対応することにしました。



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

PDF画面でのスクリプト表示 [Altium Delphi Script]

「Altium Designer」でスクリプトを実行している時に部品の寸法図をPDFで見たい場合が
多いでしょう。

これまでは別のPCでPDFを表示させて数値入力していました。
しかし、同じPCでバックグランドでPDFを見ながらでもスクリプトは表示できるようです。
同じ画面内で目線を移動させるのが最小限なのでミスを減らすことができます。

下記のようなフットプリント作成スクリプトでは最終的には「Altium Designer」のライブラリー内の
どこに配置するかをクリックする必要があるのでそのライブラリーの画面に表示させないといけません。

SOP_PDF_HSOP.png

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

DFNとQFNパッケージのスクリプトが欲しくなる [Altium Delphi Script]

どちらもフットプリントの雛形は作成しているのですがメーカー推奨のもので作成していて
自社規格とはいいづらいです。

両者は似たタイプで放熱パッドがあるというのも似ています。
一緒でタブで切り替えるメニューで作成すれば便利でしょう。

これからパターンの設計基準に準拠した法則を見つけなければいけません。
QFNの場合はシルクがコーナーだけになるでしょうが、その位置を確定させるのが
プログラムとしては面倒そうです。


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

シンプルBOM生成スクリプト [Altium Delphi Script]

あまり意味はありませんが、DelphiスクリプトでシンプルBOMを生成するには
下記のスクリプトを実行すればいいでしょう。

Procedure GENE_S_BOM;

var
board : IPCB_Board;

begin

board := PCBServer.GetCurrentPCBBoard;
if (board = nil) then exit;

{ Set ------------------------------------}

ResetParameters;
AddStringParameter('ObjectKind','Report');
AddStringParameter('KInd','SimpleBOM');
AddStringParameter('Target','Document');
RunProcess('WorkspaceManager:GenerateReport');


{ Redraw ------------------------------------}

ResetParameters;
AddStringParameter('Action','Redraw');
RunProcess('PCB:Zoom');

end;


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