太原理工大学现代科技学院
课程 实验报告
专业班级
学 号
姓 名
指导教师
实验三 Protel99SE印刷电路板的设计
一.实验目的:
1.了解有关印刷电路板的基础知识和对PCB编辑器的初步认识
2.掌握PCB编辑器的基本操作
3.掌握元件、焊盘、导线等对象的放置方法和属性设置
4.掌握双面板进行手工布局的整个操作过程,要特别掌握电路板布线框的绘制,元件封装库的加载和对布局进行调整的操作方法
5.掌握手工布局和手工布线的操作步骤
6.掌握由原理图生成网络表
7.理解电路板的物理边界和电气边界的区别及绘制方法,了解由向导生成电路板的过程
8.掌握PCB各种常用报表的功能与生成方法
9.掌握PCB的打印输出的操作过程,掌握分层打印和叠层打印的操作方法
二.实验内容
1.在实验1创建的设计数据库下,新建一个PCB图文件,命名为“你的姓名全拼_甲乙类放大器.pcb”(比如:Lixiaofang_甲乙类放大器.pcb)。
2.分别设置可视栅格、捕获栅格、元件栅格和电气栅格的数值,并在工作窗口练习体会四种栅格的区别。
3.人工设计“你的姓名全拼_甲乙类放大器.pcb”印刷电路板。
4.使用电路板生成向导,再创建一个“你的姓名全拼_甲乙类放大器.pcb”印刷电路板。
5.分别生成“你的姓名全拼_甲乙类放大器.pcb”的电路板信息报表、NC钻孔报表和元件报表。
6.将“你的姓名全拼_甲乙类放大器.pcb”的顶层、底层和顶层丝印层分层打印出来。
7.打开一个PCB文件,使用Edit | Jump命令,练习跳转到不同的对象。
8.打开一个PCB文件,在PCB管理器中按上面所讲知识,分别浏览网络和元件;练习对网络元件和焊盘的编辑、选取、放大和跳转等操作。
三.实验步骤:
1. 在实验1中的设计数据库的Documents下,新建一个PCB图文件,命名为“你的姓名全拼_甲乙类放大器.pcb”。
2. 按菜单操作Design | Options,分别设置可视栅格、捕获栅格、元件栅格和电气栅格的数值,并在工作窗口练习体会四种栅格的区别。
3. 人工设计“你的姓名全拼_甲乙类放大器.pcb”印刷电路板,
具体步骤如下:
a) 打开实验1绘制的“你的姓名全拼_甲乙类放大器.sch”文件
b) 执行操作Design | Create Netlists,生成网络“你的姓名全拼_甲乙类放大器.net”文件
(3) 在新建的“你的姓名全拼_甲乙类放大器.pcb”文件中,执行操作Design | Load Netlists(加载网络表),找到“你的姓名全拼_甲乙类放大器.net”文件并加载
(4) 如果加载网络表报错,分析原因,返回“你的姓名全拼_甲乙类放大器.sch”原
理图中进行修改。
(5) 重新生成网络表。
(6) 返回“你的姓名全拼_甲乙类放大器.pcb”文件中,再次加载网络表,如果没有错误,点击“Execute”按钮,至步骤(7);如果网络表仍然有错,重复步骤(4)、(5),直至无错,至步骤(7)。
(7) 将PCB文件的工作层调到“KeepOut Layer”,在元件外围画布线框。
(8) 采用群集式方式自动布局,执行菜单操作:Tools | Auto Placement | Auto Placer中的“Cluster Place”
(9) 全局自动布线完成元件的布线,执行菜单操作:Auto Route | All | Route All;如有兴趣,可手动布局布线试一下。
(10) 将人工设计的“你的姓名全拼_甲乙类放大器.pcb”PCB图粘贴到实验报告中(需截图)。
4. 采用向导设计“你的姓名全拼_甲乙类放大器.pcb”印刷电路板:新建一个边长为1500mil的正方形电路板,在电路板的四角开口,尺寸为100mil×100mil,无内部开口,双层板,过孔不电镀,使用针脚式元件,元件管脚间只允许一条导线穿过,最小走线宽度为10mil,走线间距15mil。加载Advpcb.ddb中的PCB Footprint.Lib元件封装库。
实施如下步骤:
(1) 按照向导一步一步创建PCB电路板。
(2) 在创建出来的电路板上,重新加载“你的姓名全拼_甲乙类放大器.net”网络表。
(3) 使用统计式方法进行自动布局,执行菜单操作:Tools | Auto Placement | Auto Placer中的“Statistical Place”,并使用手工方法对布局进行调整。
(4) 采用全局自动布线,执行菜单操作:Auto Route | All | Route All。
(5) 将向导设计的“你的姓名全拼_甲乙类放大器.pcb”PCB图粘贴到实验报告中。
5. (选做)分别生成“你的姓名全拼_甲乙类放大器.pcb”的电路板信息报表、元件报表和NC钻孔报表,并将上述报表粘贴到实验报告中。
实现步骤如下:
a) 执行菜单Reports | Board Information,点击“Report”按钮。
b) 在设计数据库的Documents下,创建CAM文件,双击“CAMManager1.cam”,在向导中选择Bom文件(元件报表),选择报表格式为“Spreadsheet”,元件排列格式为“List”,其他默认,结束向导。在生成的Bom Output 1上右键单击,选择“Generate CAM Files”,即生成元件报表文件。
c) 在设计数据库的Documents下,创建CAM文件,双击“CAMManager1.cam”,在向导中选择NC Drill文件(NC钻孔报表),选择单位“Inches”,数据格式为“2:3”,其他默认,结束向导。在生成的NC Drill Output 1上右键单击,选择“Generate CAM Files”,即生成NC钻孔报表文件。
6. (选做)将“你的姓名全拼_甲乙类放大器.pcb”的顶层、底层和顶层丝印层分层打印出来。
具体步骤如下:
a) 执行菜单操作:File | Print/Preview,生成“Preview你的姓名全拼_甲乙类放大器.ppc”文件,
b) 在“Preview你的姓名全拼_甲乙类放大器.ppc”编辑器中,执行菜单操作:
c) Tools | Create Final,点击“Yes”按钮,分别浏览“你的姓名全拼_甲乙类放
d) 大器.pcb”的顶层、底层和顶层丝印层,
e) 将上述工作层的打印版粘贴到实验报告中。
四.实验结果
五.思考题(1、2小题必答,其他任选4道回答)
1.绘制印刷电路板图一般包括哪些步骤?在各步中主要完成什么工作?(必答)
答:1)进入电路板图编辑环境,呈现电路板图设计环境;
2)电路板图环境设置,完成画紫色框为自动布局和自动布线做准备;
3)载入网络表,用来检测设计是否有错;
4)自动布局使原件都放在边框内;
5)手工调整布局,进行边框调整,视图调整,原件调整。
6)自动布线;
7)手工调整布线,使布线更合理;
8)机械尺寸调整,用来调整板型尺寸和焊盘尺寸;
9)存盘退出,对设计的板进行保存;
10)送电路板厂加工。
2.在Protel 99 SE系统中,提供了哪些工作层的类型?各个工作层的主要功能是什么?(必答)
答:
3.什么是印刷电路板?它在电子设备中有何作用?
答:印刷电路板是覆盖有导电图形层的绝缘板。在电子设备中作用包括:1)提供各种电子原件固定、装配的机械支撑;2)实现各种电子元器件的布线和电气连接;3)提供所需要的电器特性;4)为元件插装、检查、维修提供识别字符和图形。
4.在印刷电路板中,焊盘与过孔的作用有何不同?
答:焊盘就是元件的引脚。焊盘上的号码就是管脚号码。焊盘的号码必须与原理图中元件的引脚一致否则就会出现缺少网络节点的错误。焊盘的号码、尺寸、位置十分重要,如果错了电路板也就不能使用了。
5.在进行PCB设计中,装入网络表和元件发生网络宏错误时,应如何解决?
6.简述 Protel 99 SE提供了哪些元件布局的规则?群集式和统计式布局方式各适用于什么场合?
7.在Protel 99 SE系统中,导线与连线有何区别?
答:导线的执行操作Edit | Move | Drag。连线用Wire命令而不是用Line(/)命。导线有电气特性。
8.PCB中可视栅格、捕获栅格、元件栅格和电气栅格的区别是什么?
9.在PCB文件Browse PCB浏览器的视窗中拖动虚线框(如图1),看看工作窗口有何变化?缩小虚线框之后,工作窗口中的图有什么变化(缩小或放大)?
图1 Browse PCB浏览器的视图窗口
10. 打开一个PCB文件,在工作窗口按住鼠标右键,光标是不是变成手形?移动它,工作窗口有何变化?
附:实验1中的“甲乙类放大器”电路原理图,及其元件表:
甲乙类放大电路电路原理图 甲乙类放大电路电路原理图元件表
第二篇:CAD二次实验报告3
CAD开发实验(四)
实验三 AutoCAD图形块的创建与应用
一、主要内容
1、创建块定义及插入块参照
2、创建带有属性的块定义及插入带有属性的块参照
3、在对话框中查看块定义的图标
4、在当前文件中插入外部文件中的块
5、在当前文件中插入其他DWG文件
二、学时安排:2学时
三、预习内容
理解块的含义,回顾块和带属性块的定义
四、AutoCAD图形块的创建与应用
4.1创建块定义及插入块参照
4.1.1 创建块定义
代码://创建块
public Document pDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
[CommandMethod("CreateBlock")]
public void CreateBlock()
{ Database acCurDb = pDoc.Database;
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{ BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
OpenMode.ForWrite) as BlockTable;
// 创建新的块表记录
BlockTableRecord acBlkTblRec = new BlockTableRecord();
string blkname = "三角点";
acBlkTblRec.Name = blkname;
acBlkTblRec.Origin = new Point3d(0, 0, 0);
Point3d pCenter = new Point3d(0, 0, 0);
//创建中心点
DBPoint pDBPt = new DBPoint(pCenter);
//创建圆
Circle pCir = new Circle(pCenter, new Vector3d(0, 0, 1), 0.25);
//创建三角形
Polyline pTri = new Polyline(4);
pTri.AddVertexAt(0, new Point2d(0, 1), 0, 0, 0);
pTri.AddVertexAt(1, new Point2d(0.866, -0.5), 0, 0, 0);
pTri.AddVertexAt(2, new Point2d(-0.866, -0.5), 0, 0, 0);
pTri.AddVertexAt(3, new Point2d(0, 1), 0, 0, 0);
//给定块的原点
acBlkTblRec.Origin = new Point3d(0, 0, 0);
//将图形实体添加到块表记录
acBlkTblRec.AppendEntity(pDBPt);
acBlkTblRec.AppendEntity(pCir);
acBlkTblRec.AppendEntity(pTri);
//将块记录添加到块表
acBlkTbl.Add(acBlkTblRec);
acTrans.AddNewlyCreatedDBObject(acBlkTblRec, true);
// 提交修改并销毁事务
acTrans.Commit();
}
}
4.1.2插入卡块参照
→
代码: //插入块
[CommandMethod("InsertBlock")]
public void InsertBlock()
{
Database acCurDb = pDoc.Database;
// 启动一个事务 Start a transaction
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
BlockTable acBlkTbl = acTrans.GetObject(
acCurDb.BlockTableId, OpenMode.ForWrite) as BlockTable;
// 以写方式打开模型空间块表记录
BlockTableRecord acBlkTblRec = acTrans.GetObject(
acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
//获取三角点块,并创建块引用
BlockTableRecord pBlockTableRecord = acTrans.GetObject(
acBlkTbl["三角点"], OpenMode.ForRead) as BlockTableRecord;
BlockReference bref = new BlockReference(
new Point3d(10, 10, 0), pBlockTableRecord.ObjectId);
BlockReference bref2 = new BlockReference(
new Point3d(30, 30, 0), pBlockTableRecord.ObjectId);
acBlkTblRec.AppendEntity(bref2);
acTrans.AddNewlyCreatedDBObject(bref2, true);
acTrans.Commit();
}
}
4.2创建带有属性的块定义及插入带有属性的块参照
4.2.1 创建带有属性的块定义
→创建一个名为“三角点”的带属性块的记录,包括以下实体:
Ø 一个点
Ø 一个圆
Ø 一个三角形
Ø 一个名为三角点的属性
代码: #region 创建带属性的块
[CommandMethod("CreateAtrrBlock")]
public void CreateAtrrBlock()
{ Database acCurDb = pDoc.Database;
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{ BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
OpenMode.ForWrite) as BlockTable;
BlockTableRecord acBlkTblRec = new BlockTableRecord();
string blkname = "三角点";
acBlkTblRec.Name = blkname;
acBlkTblRec.Origin = new Point3d(0, 0, 0);
Point3d pCenter = new Point3d(0, 0, 0);
//创建中心点
DBPoint pDBPt = new DBPoint(pCenter);
//创建圆
Circle pCir = new Circle(pCenter, new Vector3d(0, 0, 1), 0.25);
//创建三角形
Polyline pTri = new Polyline(4);
pTri.AddVertexAt(0, new Point2d(0, 1), 0, 0, 0);
pTri.AddVertexAt(1, new Point2d(0.866, -0.5), 0, 0, 0);
pTri.AddVertexAt(2, new Point2d(-0.866, -0.5), 0, 0, 0);
pTri.AddVertexAt(3, new Point2d(0, 1), 0, 0, 0);
Polyline pPl = new Polyline(2);
pPl.AddVertexAt(0, new Point2d(0.9, 0), 0, 0, 0);
pPl.AddVertexAt(1, new Point2d(4.5, 0), 0, 0, 0);
//定义属性
Point3d pPosition = new Point3d(1, 0.2, 0);
AttributeDefinition pAtrDef = new AttributeDefinition(
pPosition, "洼地", "三角点名", "输入三角点名", acCurDb.Textstyle);
pAtrDef.Height = 1;
Point3d pPosition2 = new Point3d(1, -1.2, 0);
AttributeDefinition pHVaue = new AttributeDefinition(
pPosition2, "0.00", "高程值", "输入高程值", acCurDb.Textstyle);
pHVaue.Height = 1;
//给定块的原点
acBlkTblRec.Origin = new Point3d(0, 0, 0);
//将图形实体添加到块表记录
acBlkTblRec.AppendEntity(pDBPt);
acBlkTblRec.AppendEntity(pCir);
acBlkTblRec.AppendEntity(pTri);
acBlkTblRec.AppendEntity(pPl);
acBlkTblRec.AppendEntity(pAtrDef);
acBlkTblRec.AppendEntity(pHVaue);
//将块记录添加到块表
acBlkTbl.Add(acBlkTblRec);
acTrans.AddNewlyCreatedDBObject(acBlkTblRec, true);
CreateBlockIcon cbi = new CreateBlockIcon(acBlkTblRec.Name);
acTrans.Commit();
}
}
#endregion
4.2.2 插入带有属性的块参照
代码:
#region 插入带属性的块
[CommandMethod("InsertAtrrBlock")]
public void InsertAtrrBlock()
{
Database acCurDb = pDoc.Database;
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
OpenMode.ForRead) as BlockTable;
BlockTableRecord acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
OpenMode.ForWrite) as BlockTableRecord;
BlockTableRecord pBlockTableRecord = acTrans.GetObject(
acBlkTbl["三角点"], OpenMode.ForRead) as BlockTableRecord;
BlockReference bref = new BlockReference(
new Point3d(10, 10, 0), pBlockTableRecord.ObjectId);
acBlkTblRec.AppendEntity(bref);
acTrans.AddNewlyCreatedDBObject(bref, true);
foreach (ObjectId id in pBlockTableRecord)
{
Entity ent = (Entity)acTrans.GetObject(id, OpenMode.ForRead, false);
//打开当前的对象!
if (ent is AttributeDefinition)
{
AttributeReference attRef = new AttributeReference();
AttributeDefinition attDef = (AttributeDefinition)ent;
attRef.SetPropertiesFrom(attDef);
attRef.Height = attDef.Height;
attRef.Rotation = attDef.Rotation;
attRef.Tag = attDef.Tag;
if (attDef.Tag == "三角点名")
{
attRef.Position = new Point3d(11.3, 10.3, 0);
attRef.TextString = "洼地";
}
else if (attDef.Tag == "高程值")
{
attRef.Position = new Point3d(11, 8.8, 0);
attRef.TextString = "65.99";
}
if (!bref.IsWriteEnabled)
{
bref.UpgradeOpen();
}
bref.AttributeCollection.AppendAttribute(attRef);
//通知事务处理添加新创建的属性参照
acTrans.AddNewlyCreatedDBObject(attRef, true);
}
}
acTrans.Commit();
}
}
#endregion
4.3在对话框中查看块定义的图标
代码:[CommandMethod("ViewBlock")]
public void ViewBlock()
{ ViewBlockfrm pViewBlockfrm = new ViewBlockfrm();
pViewBlockfrm.acDoc = pDoc;
pViewBlockfrm.Show();
}