[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
GPLd PCB Library ( was Re: gEDA-user: Free GNU/Linux hardware design tools)
> Once in the open source domain it becomes the responsibility of it's
> users to enhance, maintain and document. With that in mind I am
> releasing a paper on Land Pattern Design for PCB.
This is probably the time to mention that I am writing a GPLd
PCB library generator. It implements all of IPC-SM-782A.
Just for the fun of it, I decided to write it in terms
of 3D modeling. That lets it do nifty things like:
- If your package is non-standard, put in its dimensions and
the library widget will generate a SMT land pattern for it, based
on the rules in IPC-SM-782A.
- It is able to generate a 3D (VRML) representation of the package
and its lands.
It is planned to be a stand alone module, with some sort of a standard
interface (SOAP or similar?). Input will be either a package
designation or package dimensions. Output will be VRML representing
the package and its lands. Filters will be used to convert the VRML
into the desired format.
Given the nature of the interfaces, it should be possible to set
the library up as a networked server, serving land patterns and
so on to EDA tools. Alternatively, it can be run as a stand alone
command line program, possibly with a graphical front end, and
used to generate a PCB library in your favourite format. Yet again,
it should be possible to write a 'compatibility layer' and integrate
it directly into an EDA tool.
So far, I have entered and verified all the required data from
IPC-SM-782A. I have also written a set of classes which can represent
at least some of the available packages.
Work is continuing on expanding the set of classes until they can
represent every package in the standard. Work has also started on
the classes which generate a land pattern, given the package
representation.
In the last month or so development has come to a halt due
to other commitments, but I hope to have another burst of activity
soon and get it finished and released.
As a taster, some of the output from what I have written so far
is appended to this email. Cut and past the VRML to a file and
view it with something like 'freewrl'
Best wishes
John
EXAMPLE OF AN SOIC PACKAGE
---------------------------- START - CUT HERE ----------------------------
#VRML V2.0 utf8
PROTO metal [ # prototype definition
exposedField SFFloat ambientIntensity 1
exposedField SFColor diffuseColor 0.5 0.5 0.5
exposedField SFColor specularColor 0.5 0.5 0.5
exposedField SFColor emissiveColor 0 0 0
exposedField SFFloat shininess 0.5
exposedField SFFloat transparency 0 ]
{
Material {
ambientIntensity IS ambientIntensity
diffuseColor IS diffuseColor
specularColor IS specularColor
emissiveColor IS emissiveColor
shininess IS shininess
transparency IS transparency
}
}
PROTO plastic [ # prototype definition
exposedField SFFloat ambientIntensity 1
exposedField SFColor diffuseColor 0.1 0.1 0.1
exposedField SFColor specularColor 0 0 0
exposedField SFColor emissiveColor 0 0 0
exposedField SFFloat shininess 0
exposedField SFFloat transparency 0 ]
{
Material {
ambientIntensity IS ambientIntensity
diffuseColor IS diffuseColor
specularColor IS specularColor
emissiveColor IS emissiveColor
shininess IS shininess
transparency IS transparency
}
}
Transform {
children [
NavigationInfo { headlight TRUE }
DirectionalLight {
direction 0 0 -1
}
Transform {
translation 0 0 0
rotation 1 0 0 0
children [
Transform {
translation 0 0 0.25035
children [
Shape {
geometry Box { size 1 2 0.4993 }
appearance Appearance {
material plastic { }
}
}
]
}
Transform {
translation -1 0 0
rotation 0 0 1 0
children [
Transform {
translation 0 -0.875 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 -0.625 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 -0.375 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 -0.125 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 0.125 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 0.375 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 0.625 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 0.875 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
]
}
Transform {
translation 1 0 0
rotation 0 0 1 3.14159
children [
Transform {
translation 0 -0.875 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 -0.625 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 -0.375 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 -0.125 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 0.125 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 0.375 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 0.625 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
Transform {
translation 0 0.875 0
rotation 1 0 0 0
children [
Transform {
translation 0.125 0 0
children [
Shape {
geometry Box { size 0.25 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.2 0 0.150175
children [
Shape {
geometry Box { size 0.1 0.15 0.30035 }
appearance Appearance {
material metal { }
}
}
]
}
Transform {
translation 0.575 0 0.25035
children [
Shape {
geometry Box { size 0.85 0.15 0.1 }
appearance Appearance {
material metal { }
}
}
]
}
]
}
]
}
]
}
] # end of children for world
}
---------------------------- END - CUT HERE ----------------------------