从Multisim主菜单中选择工具»元器件行唯亮向导,启动元器件向导。
通过这一窗口,输入初始元器件信息(图1)。选择元器件类型和用途(仿真、布局或两者兼具)。
完成时选择下一步>。
图1-THS7001元器件信息
至页首
3. 步骤二:输入封装信息
a) 选择封装以便为该元器件选择一种封装。
注意:在创建一个仅用于仿真的元器件时,封装信息栏被置成灰色。
图2-选择一种管脚(第1步(共2步))
b.) TSSOP20 from the Master Database. Choose Select when done.选择制造商数据表所列出的封装。针对THS7001,从主数据库中选择TSSOP20。完成时点击选择。
注意:如果知道封装的名称,您也可以在封装类型栏内直接输入该名称。
图3-选择一种封装(第2步(共2步))
c.)定义元器件各部件的名称及其管脚数目。此例中,该元器件包括两个部件:A为前置放大器部件,B为可编程增益放大器部件。
注意1:在创建多部件元器件时,管脚的数目必须与将用于该部件符号的管脚数目相匹配,而不是与封装的管脚数目相匹配。
注意2:对于THS7001,需要为这两个部件档宽的符号添加接地管脚和关闭节能选项的管脚。
完成时选择下一步。
图4-定义多部件的第1步(共2步)。
图5-定义一个多部件的第2步(共2步)
注意:如需了解如何在NI Ultiboard中创建一个自定义封装,请查阅《在NI Ultiboard中创建自定义元器件》。
4. 步骤三:输入符号信息
在定义部件、选择封装之后,就要为每个部件指定符号信息。您可以通过在符号编辑器(选择编辑)中对符号进行编辑或者从数据库中拷贝现有符号(选择从DB拷贝),完成符号指定。在创建自定义部件时,为缩短开发时间,建议您在可能的情况下从数据库中拷贝现有符号。您也可以将符号文件加载到符号编辑器中。本指南中THS7001涉及的符号是作为文件被包括进来的。
a.)为前置放大器设备加载符号:
选择编辑以打开符号编辑器。
一旦加载符号编辑器之后,选择文件»打开并找到保存指南文件的地方。选择preamp.sym。所加载的符号如下面的图6所示。
注意1:除了常见的关闭管脚和接地管脚,其他管脚的名称均带有前缀“PA”这样便于区分前置放大器部分的管脚名称和可编程增益放大器部分的管脚名称。
注意2:为确保共享管脚能够在获取环境中正确工作,它们必须在不同部分具有相同的名称。此外,在步骤4中它们必须被分配给COM(公共)部分。
图6-前置放大器符号
选择符号编辑器。如询问是否保存,选择“是”。
前置放大器符号现在将被显示在预览框中。如果您打算与世界各地的同事共享这一元器件,那么同时为该设备创建ANSI和DIN符号是个不错的选择。仅须简单地选中拷贝至…,然后选择唯一可见的选项Section A (ANSI) or Section A (DIN)。
b.)为PGA加载符号。
选择设备B并选择编辑以启动符号编辑器。
选中文件»打开并找到保存指南文件的地方,选择preamp.sym。所得到的符号如下面的图7所示。
图7-可编程增益放大器符号
关闭符号编辑器。如询问是否保存,选择“是”。
注意:如果此时Multisim窗口未在此出现,按附录B中的故障排除部分所列出的说明 *** 作。
PGA符号显示在预览框中。如果您打算与世界各地的同事共享这一元器件,同时为该设备创建ANSI和DIN符号是个不错的选择。仅须简单地选中拷贝至…,然后选择唯一可见的选项Section A (ANSI) or Section A (DIN)。
完成时选择下一步。
5. 步骤四:设置管脚参数
该元器件的所有管脚在步骤4中列出,并如下面的图8所示。Multisim在运行电气规则校验时会使用管脚参数。在为数字元器件选择正确的管脚驱动器时同样需要管脚参数。您也可以在这一步骤中给元器件添加隐藏管脚。所谓隐藏管脚是指那些不出现在符号中、但可以被模型和/或封装使用的管脚。
图8-管脚参数
a.)完成如下面表1所示的管脚表格。
表1-THS7001管脚参山渗数
完成时选择下一步。
至页首
6. 步骤五:设置符号与布局封装间的映射信息
在步骤5中,实现可视符号管脚和隐藏管脚与PCB封装间的映射。
图9-符号与管脚间的映射
a.)利用数据表作为参考完成如下面表2所示的映射信息。
注意:管脚17为SHDN和PA_SHDN共享,管脚1为DGND和PA_GND共享。
表2-符号与封装间的映射
完成时选择下一步。
注意1:属于同一个管脚互换组的管脚可以在电路板布局中被自动互换,以最大化布线效率。通常,芯片会具备几个接地管脚。将这些管脚分配给一个管脚互换组,Ultiboard PCB布局工具将给网络表做注解,以改进该电路板的物理布局。
注意2:此外,一些芯片会具有多个同一类型的元件(74HC00包含4个完全相同的数字NAND门)。为改进布线,这些门可以被分配至同一个门互换组。
THS7001的PCB封装中没有两个管脚是重复的。相应地,也没有两个完全相同的门。因此,管脚与门的互换信息保持空白。
7. 步骤六:选择仿真模型
在创建一个用于仿真的元器件时,您必须提供每个部件的仿真模型。您可以利用如下四种方式获取或创建新的模型:
· 从制造商网站或其他来源下载一个SPICE模型
· 手动创建一个支电路或原始模型
· 使用Multisim Model Maker
· 或者编辑一个现有模型
Multisim提供了Model Maker,可以根据其产品手册数据值为若干种类的元器件创建SPICE模型。Model Maker可用于运算放大器、双极结晶体管、二极管、波导以及许多其他元器件。关于各种Model Maker的更多信息,敬请查阅Multisim帮助文件。
对于THS7001,您将使用制造商提供的SPICE兼容模型,前置放大器和PGA部分有不同的模型可使用。
注意:创建一个仅用于布局的部件时,无须完成步骤6和步骤7。
a.) .选中A部分页面,选择从文件加载。找到包含指南文件的文件夹,点中sloj028.cir并选择打开。用于前置放大器的SPICE模型将被加载并显示在A部分的页面中(如下图所示)。
图10-用于THS7001前置放大器级的SPICE模型
b.) 选择B部分页面,并选中从文件加载以加载用于PGA级的SPICE模型。找到包含指南文件的文件夹,点中sloj029.cir并选择打开。该SPICE模型显示在元器件向导步骤6的B部分页面中。
图11-用于THS7001 PHA级的SPICE模型
完成时选择下一步。
至页首
8. 步骤七:实现符号管脚至模型节点的映射
必须将符号管脚映射至SPICE模型节点,以确保Multisim可以正确仿真该元器件。
对于所有的支电路或宏模型,模型节点一般都在SPICE模型的头文件中有说明。其中一行声明该模型为一个支电路模型,后面跟着列出要与外部电路连接的模型节点的模型名称。
对于THS7001,放大前置的模型节点和PGA的模型节点分别在sloj028.cir和sloj029.cir中列出。
现在我们来分析一下前置放大器的头文件和.SUBCKT行:
现在必须将符号管脚名称映射至模型节点。应特别注意模型节点的顺序。
a.)完成前置放大器部分A的管脚映射表,如下面表3所示。
表3-用于前置放大器的符号至模型节点的映射
b.)点击B部分的页面,并完成PGA 部分B的管脚映射表,如下面表4所示。
表4-用于PGA的符号至模型节点的映射
完成时选择下一步
9. 步骤八:将元器件保存到数据库中
一旦完成所有前述步骤,将元器件保存至公有数据库或用户数据库。
a.) 选择您希望保存元器件的数据库、组和族。如果所选择的组中当前没有族,通过选择添加族创建一个新的族。
b.)选择完成以完成该元器件的创建。
注意:您可以通过从Multisim主菜单中选Tools » Database » Database Manager,在数据库管理器中自定义一个新族的图标。
图12-将元器件保存至数据库
创建成功。
10. 步骤九:测试Multisim中的新元器件
在完成元器件的创建和保存之后,该元器件便可以在Multisim中使用。为测试这一元器件,使用包含在该指南中的THS7001 Tester.ms9文件。利用U2a和U2b分别替换您的新元器件的部分A和部分B。若要替换一个元器件,双击该元器件,然后选择替换。然后找到保存元器件的数据库位置,并选中。选择相应部分。
下面的图13至图16描述了测试电路所期望的响应。
图13-测试电路前置放大器的波特响应
图14-增益设置为“111”的PGA的波特响应
图15-前置放大器的时域响应
http://www.ni.com/tutorial/3173/zhs/
在单文档视图(SDI)结构中,视图一般用来显示数据。但是,有时也希望在视图中显示按钮或其他的控件,以满足用户的需要。VC6.0没有直接给出在视图中添加按钮的向导(或许有,我没找到)。下面我将给出一个手动添加按钮并使按钮具有响应事件 的功能。第一步:添加一个按钮
1、首先在**View.h中定义一个按钮标识
#define ID_BUTTON 100
2、 其次给C**View类添加一个成员变量
CButton m_myButton //这条语句写在**View.h的类的定义中,要声明为PUBLIC类型
3、然后创建按钮实例
m_myButton.Create(_T("示例按钮"), //按钮的caption属性,按钮的显示
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON, // 按钮也是一种窗体,同样谈老有窗体风格,这些常量通过或运算使按钮达到一定的效果,这些常量的含义可以参考MSDN。
CRect(20,320,50,340), //这个参数指出按钮在视图中的位置和按钮的大小。
this, //这个指针指向按钮这个窗体的父窗体
ID_BUTTON) //这是刚才为按钮定义拆侍李的常量,按钮的控制ID
4、然后调用函数m_MyButton.ShowWindow(SW_HIDE)这个函数根据参数的样式显示按钮,此时的参数表示隐藏按钮,如果要显示按钮,可以以SW_SHOW作为参数,这样,就是在想用到按钮的时候调用函数m_MyButton.ShowWindow(SW_SHOW)显示出按钮。
说明:按钮在C**View::OnCreate()函数中初始化。这个函数是当窗体被创建的时候调用的一个初始化函数。像按钮这样的对象在这个时候初始化是比较合适的。
int C**View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1
m_MyButton.Create(_T("示例按钮"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON,
CRect(20,320,50,340), this, ID_BUTTON)
m_MyButton.SetIcon(AfxGetApp()->LoadIcon(ICON_SAVE)) //给按钮加载一个图标
m_MyButton.ShowWindow(SW_HIDE)
return 0
}
第二步:消息函数
此时的按钮是不能响应任何消息的。下面我们手动添加按钮的消息。
1、声明函数原型
在C**View类的声明中声明一个protected类型的函数
//{{AFX_MSG(CSoftView)
afx_msg void OnMyButton()
//}}AFX_MSG
通常的做法,也是VC6.0向导的做法,会将消息处理函数声明在//{{AFX_MSG(CSoftView)~~~ //}}AFX_MSG标记中,当然,在VS.NET 2003中,我们将看不到这个标记。真正起作用的是afx_msg,它表明随后的函数是一个消息处理函数。
2、函数的实现
下面实现函数,显然,这个函数也是C**View类的一个成员函数,所以在**View.cpp中实现
void C**View::OnMyButton()
{
MessageBox("你点击了我")
}
3、如果这个时候你就运行程序的话,按钮依然不会响应任何事件。因为事件的产生的消息是交给视图的,所以我们需要把消息从视图传给按钮,实现起来很简单,在**View.cpp中找到如下的标记:
BEGIN_MESSAGE_MAP(C**View, CView)
END_MESSAGE_MAP()
在这个标记中写入如下代码:ON_BN_CLICKED(ID_BUTTON, OnMybutton)
这句代码是说,让ID_BUTTON所指的对象响应单击(旅迟ON_BN_CLICKED)事件,事件的处理函数是OnMybutton。这是MFC的消息映射机制。对于这个机制,在此不多说,待后续。
到此,一个可以响应单击事件的按钮就创建好了。如果要响应其他事件,可以按照这个方式创建,只需要改动这个过程中的第3步,将ON_BN_CLICKED改成希望响应的消息类型就可以了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)