项目背景:
本项目为配合清华大学出版即将出版的“入门PCB设计的正确姿势”图书内容设计的DIY案例,让读者在循序渐进地学习PCB设计技能的过程中,结合实际的案例,体验教程中讲解到的一些核心技能要点。同时也通过这个案例,学会基于项目的需求,完成一个硬件项目从设计到实现的完整流程,包含方案设计、原理图绘制、PCB布局布线,发送Gerber文件制板,最终能够自己焊接、调试得到一个能够通过FPGA编程使用的作品。
通过这个项目能够学到的技能:
- PCB的规范化设计流程以及KiCad工具的使用;
- FPGA的应用及Verilog的编程;
- 通过直接数字合成(DDS)产生任意信号的工作原理以及外围模拟电路的设计;
项目需求:
项目名称:制作一个低成本DDS任意信号发生器
- 输出最高10MHz频率含量的任意波形,频率可调精度为1Hz;
- 输出信号幅度范围100mVpp - 8Vpp(10MHz时)可调,输出信号的直流偏移-4V ~ +4V可调;
- 波形参数的设置可以通过UART由上位机PC来控制;
- 通过PC的USB端口给板卡供电;
- 系统成本控制在100元以内;
项目方案:
DDS任意信号发生器可以有多种实现形式,比较直接的方式是购买现成的DDS芯片搭配单片机来实现,单片机通过SPI接口配置DDS芯片的内部寄存器,如下面截图中看到的Analog Devices Inc公司的一系列DDS器件覆盖转换率从25Msps到3.5Gsps,分辨率从10bit到14bit,且不同的芯片内部还有其它附加的功能。硬禾学堂也选择了其中的AD9837(与AD9833功能和管脚兼容)和AD9102做成了邮票孔的模块方便直接使用。创客玩家以及高校做电赛的同学们常用的器件就是AD985x系列的DDS芯片,转换率达到125Msps以上。
图1 Analog Devices Inc公司的DDS产品
用现成的DDS芯片的一个局限就是灵活度不够,每一个型号都有固定的功能,即便通过寄存器进行编程,也只能在该器件标定的功能范围内使用,要获得随心所欲的灵活性是很难的。多数的DDS芯片输出的波形有限,只是正弦波、三角波和方波等常规的波形,只有很少的器件(比如我们用过的AD9102)可以让你产生“任意波形”,也即该芯片内部有RAM,可以把你要产生的任意波形数据传输进去然后再通过高速DAC输出为模拟信号。
还有一个因素就是现有的DDS芯片相对都比较贵,能够实现“任意波形”的芯片就更贵,再搭配上外围的电路,将整个系统的成本控制在100元以内非常困难。
作为一款工程师自己设计、焊接的产品,综合考虑项目需求中的性能指标以及成本要求,基于FPGA + 高速DAC的方案就成了更优的选择,如下面的框图;
图2 低成本DDS任意信号发生器功能框图
按照项目的设计流程,确定了系统实现的方案,基于项目的功能和性能的需求来选择合适的元器件。
下面是框图中每个部分的核心器件的选用原则:
- FPGA可以从Xilinx、Intel/Altera、Lattice Semi三家中进行选择,选用原则:
- 资源能够实现DDS逻辑以及任意波形的波表存储;
- 运行速度能够驱动DAC的高速转换产生10MHz的模拟信号;
- 器件方便手工焊接(排除掉BGA封装的器件);
- 价格尽可能便宜;
- 供货没有问题;
- 高速DAC的选用原则:
- 10MHz的模拟信号必须选用高速(转换率25Msps以上)并行的DAC,转换率越高,得到的模拟信号每个周期的样点数越多,一般以10个点以上为好,且其混叠频谱距离被生成的信号越远,比较容易滤除;
- 100mVpp - 8Vpp的动态范围需要至少相当于12bit的分辨率(至少5bit用于生成波形、7bit用于100倍的动态范围调节),一种方案是直接采用12位的高速DAC,在数字域进行幅度的调节,第二种方案是采用内部参考电流可以有4:1以上调节空间的10位的DAC,第三种方案是采用8位以上分辨率的DAC,外部搭配一个压控增益放大器(VCA)进行输出信号幅度的调节;
- 现有集成电路可选厂商 - ADI、TI、Maxim、瑞萨、国产的3Peak等;
- 也可以用24颗精度达1%的电阻以R-2R的方式构成
- 价格足够低,使得整个项目的系统成本低于100元
- 运算放大器的选用原则:
- 输出8Vpp —》需要+/-5V双电压供电, 轨到轨输出
- 带宽足够,在10MHz时能够实现8Vpp的输出
- 可选厂商 - ADI、TI、美信、Microchip、本土厂商 - 3Peak、圣邦微等
- 电源变换的选用原则:
- 能够从USB输入的5V直流电压中产生FPGA需要的3.3V直流电压,电流200mA以内
- 能够从USB输入的5V直流电压中产生运算放大器需要的-5V直流电压,电流10mA以内
- 可选厂商 - TI、ADI、美信、Microchip、国产厂商 - 3Peak、圣邦微等
- UART通信及FPGA配置器件选用原则:
- 能够实现USB到JTAG的转换;
- 能够同时实现USB转UART的功能;
- 可用FT2233或带USB的单片机来实现,JTAG通过软件进行仿真;
- 可选厂商 - Cypress、FTDI、ST、NXP、Silicon Labs、南京沁恒等
综合性价比,最后确定下来核心器件如下:
功能 |
器件 |
估算价格 (参考BOM2BUY结果) |
FPGA |
Lattice Semi的XO2-1200-QFN32 |
45 |
DAC |
采用12个1K电阻、12个2K电阻构成的R-2R高速DAC,电阻的精度都采用1%或更高 |
1 |
模拟链路 |
1颗圣邦微的SGM8301或3Peaks的TPH2501,二者管脚兼容 |
3 |
电源变换 |
|
10 |
UART通信 |
南京沁恒公司的CH340E |
2 |
其它阻容、连接器 |
|
5 |
制板 |
双层快板即可,面积在10cm * cm之内 |
5 |
总计 |
|
71元 |
满足项目的设计目标 - 自己设计两层板,再发送到快板厂去打板,单品成本能够低于100元。
在项目的设计和调试过程中,需要用到一些工具,能够帮助高效地完成项目的前期验证以及最终的设计目标。
- FPGA设计工具 - Lattice Semi公司的Diamond,针对目前选用的器件免费使用,且安装便捷、编译快速,在设计PCB之前也可以迅速验证:
- DDS的构成
- FPGA的资源 - 逻辑资源、存储资源、管脚数、供电电压及电流
- FPGA能够达到的性能
- IP - PLL、Sine表、ROM等有现成的IP可以使用
- 模拟电路设计仿真工具:采用LTSpice或MultiSim
经过前期的仿真、验证确定了元器件以后的方案框图如图3所示:
图3 低成本DDS信号发生器的方案构成框图
基于项目的性能要求以及方案的论证,选定了具体的关键元器件的型号,在具体的电路设计中针对这些器件要注意哪些具体的指标呢?基于对这些指标的关注,才能在阅读这些元器件的数据手册进行原理图绘制的时候进行正确的电路搭配以及相互之间的连接,以下就是这些主要元器件需要关注的技术要点:
1 FPGA:Lattice的XO2-1200HC
- 内部资源 - 逻辑资源、Block RAM
- 时钟资源 - 外部时钟连接需要的管脚、内部时钟的频率
- 供电电压及范围
- 封装、特殊管脚的处理
- 编程的方式以及需要配置的管脚
2 高频运算放大器:圣邦微的SGM8301或3Peaks的TPH2501
- 带宽、增益带宽积
- 输入电压范围、输出电压范围
- 封装、管脚
- 供电电压及范围
3 USB接口器件:南京沁恒的CH340E
- 同USB端口的管脚连接方式
- 时钟的选用
- 供电电压要求
- 封装、管脚
4 5V转3.3V的低压差线性稳压器(LDO):Microchip的MIC5504-3.3或3Peaks的TPF740-3.3
- 支持的负载电流
- 纹波电压、PSRR
- 输入和输出电压差的最小值
- 管脚、封装,注意选择正确的型号
5 5V转-5V的电荷泵器件:TI的LM2776
- 输出电压范围:查看输入电压、负载电流和输出电压之间的关系
- 支持的负载电流:查看输入电压、输出电压和负载电流的关系曲线
- 纹波电压:评估一下开关噪声是否会对运放的性能产生影响
- 封装、管脚
- 外围关键元器件的使用,尤其是开关电容、输入/输出端的滤波电容
元器件库(原理图符号 + PCB封装 + 器件描述信息)的获取和构建:
原理图的绘制需要将所有本项目中用到的元器件的原理图符号事先准备好,PCB的布局布线也需要将所有本项目中用到的元器件的封装准备好,为了方便观察实际的效果,PCB的封装最好还要附带对应的3D模型,有了3D模型的帮助,可以大大降低设计中出现问题的概率。
正如在教程的正文中所讲,元器件库的来源有多个渠道,如果有现成可用的,而且是经过验证确保准确无误地元器件库,可以直接来用,如果找不到该元器件的库文件,那就自己创建。我们本教程使用的PCB设计工具KiCad自带丰富的元器件库,尤其是封装库以及相应的3D模型数据,几乎我们这个项目中用到的所有元器件都能够在KiCad的库里找到。有些元器件的原理图符号在KiCad的库里没有,但可以从一些资源网站上下载,比如Lattice的XO2-1200HC-QFN32,就可以在UltraLibrarian上查找到、并下载,且有3D模型。下面的图表中列出了项目中的主要元器件,司空见惯、所有CAD工具中都自带的电阻、电容和接插件就不再列出。
图4 从UltraLibrarian上可以下载XO2-1200HC-QFN32的器件库
项目中用到的元器件及构建渠道:
器件 |
型号 |
原理图符号 |
封装库 |
3D模型 |
FPGA |
XO2–1200HC-QN32 |
UltraLibrarian下载修改 |
QFN-32, KiCad库自带 |
KiCad库自带 |
USB-UART转换 |
CH340E |
根据数据手册自建 |
MSOP-10, KiCad库自带 |
KiCad库自带 |
高速运算放大器 |
SGM8301或TPH2501 |
同KiCad自带的ADA4841-1兼容,可以直接修改型号调用 |
SOT-23-5, KiCad库自带 |
KiCad库自带 |
5V-3.3V LDO |
MIC5504-3.3或TPF740-3.3 |
KiCad库自带MIC5504,TPF740可以使用同样的符号 |
SOT-23-5,KiCad库自带 |
KiCad库自带 |
5V - -5V 电荷泵 |
LM2776 |
KiCad库自带 |
SOT-23-6, KiCad库自带 |
KiCad库自带 |
16MHz晶体振荡器 |
25*20 |
KiCad库自带 |
KiCad库自带 |
KiCad库自带 |
射频插座 |
MMCX直立插座 |
KiCad库自带 |
KiCad库自带 |
KiCad库自带 |
电阻/电容 |
0603封装的器件 |
KiCad库自带 |
KiCad库自带 |
KiCad库自带 |
USB接头 |
USB_Micro-B_Molex-105017-0001 |
KiCad库自带 |
KiCad库自带 |
KiCad库自带 |
由上表可见,多数的元器件在KiCad官方带的元器件库里都能够找到,只是要能够找到合适对应的。
图5 主要元器件的原理图符号
图6 主要元器件的封装
原理图绘制:
找齐了所有元器件的原理图符号和封装,就可以开始绘制原理图了 - 放置元器件的符号,并根据电路工作的电气连接关系将相应的管脚用连线连接起来。图7为本项目最终的原理图,采用了A4大小的图纸,图纸的右下角标注了该项目的相关信息。由于电路比较简单,在一个A4页面中可以轻松放下,为阅读、维护方便,未采用层级方式。
元器件的排列按照左面数字信号入、右侧模拟信号出的信号流来设计,为方便调节,输出的模拟信号采取了两种方式对外连接 - 用杜邦线连接的间距2.54mm的插针和用射频线连接的MMCX插座。
在板子上放置了两个LED,一个用于指示3.3V电压的状态,另一个用FPGA的一根管脚驱动,可以通过编程FPGA的逻辑以“心跳”的方式指示FPGA的工作状态,这也是电路板上常用的状态指示方法,对于FPGA内部逻辑的调试有一定的帮助。
在关键的一些net上,即便已经通过“连线”将相应的管脚连接起来了,在这里同时也对它们标注了明确的net name,比如CLK、HB(意指heartbeat - 心跳的意思)、PWM_Offset等,以方便其他人读图的时候对电路的功能、每根信号线的功能容易理解,这些连线上添置了明确的Net Name,在PCB布线的时候也比较直观地看出相应的连线的用途。
图7 低成本DDS信号发生器的原理图
元器件的布局:
这个项目没有具体的外形尺寸的要求,因此设计者自我发挥的空间比较大,但还是要根据一些实际的情况来确定元器件的摆放:
- 为满足快板厂优惠打板的要求,尺寸要控制在10cm*10cm以内;
- 用以给板子进行供电和通信的USB插座要放置在板子的边缘;
- 用于输出DDS模拟信号的插座要放置在板子的另一侧的边缘;
- 用于给FPGA进行编程的JTAG插座最好位于板子的边缘,方便调试,且靠近FPGA芯片,便于PCB的走线;
- 本项目中有数字电路、模拟电路,可以大致分为两个部分,比如左侧为数字部分(从USB输入—》 FPGA输出)、右侧为模拟部分(从DAC输入到模拟信号输出),相关元器件按照这个信号流程进行排列;
- 为模拟运算放大器供电的5V—》-5V的电荷泵变换器放置在靠近模拟运算放大器的附近,以尽可能降低开关变换导致的高频噪声对周边的器件产生影响;
- FPGA的晶振靠近FPGA的时钟输入管脚;
- 每个器件电源上的去耦电容靠近相应的电源管脚;
- 阻、容器件规整摆放,方便后期布线并看起来美观;
图8 低成本DDS任意波形发生器的元器件布局
在做元器件布局的时候可以随时查看板卡的3D效果,能更直观地感受元器件的摆布是否合理,是否会给未来的调试、安装带来不必要的困难等。图9就是在本项目完成了元器件布局之后的3D效果。
图9 10MHz DDS任意波形发生器的元器件布局之后的3D效果图
PCB布线:
完成了元器件的布局,经过认真检查核对确保没有问题之后,就可以开始元器件之间的连线了。基于制板厂的制造规范以及项目的电路特点、性能要求,在布线的时候针对每一根连线都要给予正确的对待,以保证最终的性能要求。
本项目属于数字+模拟混合的电路,有高速的数字信号,也有高频的模拟信号,R-2R构成的DAC要运行在更高的转换速率,比如200Msps的时候,要求每根数据连线尽可能等长,这都是在PCB布线时候要注意的。当然电流较大的供电线要粗而短、邻层的走线要尽可能垂直而避免平行、去偶电容要靠近相应的电源管脚等也是布线的基本原则。
因此,我们在这个项目进行PCB布线的时候布线原则设定的要点如下:
在PcbNew中打开“文件” —》 “电路板设置”,缺省的设置为:
- 间距6Mil - 0.1524mm
- 普通信号线的布线宽度6Mil - 0.1524mm
- 过孔外径0.6mm
- 过孔内径0.3mm
在本项目中,无论是用于FPGA(低至2.7V仍可以工作)的+3.3V还是给运算放大器(可以低至+/- 4.5V仍满足系统工作需求)提供负电压的-5V,需求的电流都很小(10mA量级),对电压值的容忍空间很大,且无论是LDO - MIC5504-3.3还是电荷泵器件LM2776在布局的时候都非常靠近它们的负载,因此即便这两个供电电压的走线宽度设置成跟其它信号线一致也没有任何问题,它们到负载的压降极小。而USB输入的+5V为所有电路供电的源头,电流相对较大,且会走较长的线给LDO和电荷泵供电,因此+5V的电压走线设置为粗一些。在我们的这个项目中将3.3V、+5V和-5V都设为Power类的走线,其走线宽度都为0.4mm,如下图所示。
图10 在KiCad中设置“设计规则”
由于这个项目的器件密度不高,为方便调试,将所有的器件都放置在前面的层(Front Layer),走线也没有刻意设定Front层和Bottom的方向,只是在具体的连线的时候使得相邻层的线在相近的时候保持垂直 - 这样串扰最小。
完成了PCB的布线,就可以调整丝印层的信息。由于本项目的元器件摆放比较拥挤,要把所有元器件的丝印信息都呈现出来,一是不太可能,二是会非常拥挤,因此只标注一些关键的信息,把其它信息都隐藏掉。
最终板子的丝印将13个2K的电阻和11个1K的电阻的标号都隐藏,并用轮廓线将同等值的电阻标示出来,见图11,主要是保持板子上的美观,且在KiCad特有的交互式BOM的帮助下,不影响焊接和调试。
图11 板子的丝印
图12 布线后板子的3D视图
生产文件Gerber的生成及检查:
设计完毕,可以发出Gerber文件去制板,KiCad自带Gerber文件生成器,具体的操作方法如下:
在KiCad的PcbNew应用中,点击“File” —》 “Plot”,弹出以下窗口:
图13 KiCad中生成Gerber文件的界面
从上述界面中可以看出有两种类型的文件需要生成 - 通过“Plot”命令生成的多个层的光绘文件,以及通过“Generate Drill Files”生成的钻孔文件。
得到以下的一些文件,有以gbr为扩展名的绘图文件,也有以drl为扩展名的钻孔文件:
图14 生成的Gerber文件,2层板总计13个文件
生成Gerber文件以后,可以进行查看,以确保生成的Gerber文件正确、完整。KiCad里有一个专门用以查看Gerber文件的工具 - GerberView.
- 在主控制面板下点击“GerbView”启动该程序
- 文件 —》 打开Geber文件,选中所有你要查看的Gerber文件,就可以看到图15中的这个界面
图15 KiCad的GerberView查看生成的Gerber文件
通过右侧的“层管理器”可以切换到你要查看的层、打开/关掉某些层、也可以调整每一层的显示颜色。
在确保你生成的Gerber文件完整、正确以后,你可以将含有所有Gerber文件的目录压缩打包,以ZIP文件的方式发送到制板厂去加工。
物料清单BOM的生成:
PCB设计完成并发出Gerber制板,在拿到加工好的PCB板之前也要将所有的元器件备好,这样才不至于耽误项目的进程。正如教程中讲述的BOM的生成时间点应该是在完成原理图设计之后,PCB布局之前,因为采购元器件的时间有可能花费较长的时间,关键的元器件最好在绘制原理图之前就能够开始询价、采购。在绘制好原理图时可以采用下面的插件方式生成xls、csv、xml格式的BOM,在完成PCB布局布线以后可以通过InteractiveHtmlBom插件生成HTML格式的交互式BOM。
KiCad通过插件的方式灵活配置来产生各种格式的BOM,见图16中的界面,可以生成csv格式的文件,也可以生成xml格式的中间文件以便进一步的处理。
图16 KiCad工具中产生BOM的界面
KiCad系统的原理图Eeschema中对每个器件的Device信息只有4个部分 - Reference(标号)、Value(值)、Footprint(封装)和Datasheet(数据手册),在调用插件产生BOM文件的时候也就只能得到Ref、Value、Footprint这3部分的信息,见图17。一种简单的方式就是自己添加其它备注信息,比如型号(Part Number)、生产厂商(Mfr)、生产厂商的型号、分销商(可以多个)、分销商型号,在这里就不再赘述。
Item |
Qty |
Reference(s) |
Value |
Footprint |
1 |
9 |
C1, C4, C5, C8, C9, C10, C11, C17, C18 |
0.1uF |
Capacitor_SMD:C_0402_1005Metric |
2 |
4 |
C2, C3, C6, C7 |
2.2uF |
Capacitor_SMD:C_0603_1608Metric |
3 |
2 |
C12, C13 |
10uF |
Capacitor_SMD:C_0603_1608Metric |
4 |
1 |
C14 |
15pF |
Capacitor_SMD:C_0402_1005Metric |
5 |
1 |
C15 |
1nF |
Capacitor_SMD:C_0603_1608Metric |
6 |
1 |
C16 |
2.4p |
Capacitor_SMD:C_0402_1005Metric |
7 |
1 |
D1 |
PWR |
LED_SMD:LED_0603_1608Metric |
8 |
1 |
D2 |
HB |
LED_SMD:LED_0603_1608Metric |
9 |
1 |
J1 |
USB_B_Micro |
Connector_USB:USB_Micro-B_Molex-105017-0001 |
10 |
1 |
J2 |
JTAG |
Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical |
11 |
1 |
J3 |
Aout |
Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Horizontal |
12 |
1 |
J4 |
Aout |
Connector_Coaxial:MMCX_Molex_73415-0961_Horizontal_0.8mm-PCB |
13 |
1 |
R1 |
4.7k |
Resistor_SMD:R_0603_1608Metric |
14 |
15 |
R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R33 |
2k |
Resistor_SMD:R_0402_1005Metric |
15 |
13 |
R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29 |
1k |
Resistor_SMD:R_0402_1005Metric |
16 |
1 |
R30 |
510 |
Resistor_SMD:R_0402_1005Metric |
17 |
1 |
R31 |
7.8k |
Resistor_SMD:R_0402_1005Metric |
18 |
1 |
R32 |
270 |
Resistor_SMD:R_0402_1005Metric |
19 |
1 |
R34 |
4.3k |
Resistor_SMD:R_0402_1005Metric |
20 |
1 |
U1 |
MIC5504-3.3 |
Package_TO_SOT_SMD:SOT-23-5 |
21 |
1 |
U2 |
CH340E |
Package_SO:MSOP-10_3x3mm_P0.5mm |
22 |
1 |
U3 |
LM2776 |
Package_TO_SOT_SMD:SOT-23-6 |
23 |
1 |
U4 |
MachXO2-1200-QFN32 |
Package_DFN_QFN:QFN-32-1EP_5x5mm_P0.5mm_EP3.45x3.45mm |
24 |
1 |
U5 |
SGM8301YN5G/TR |
Package_TO_SOT_SMD:SOT-23-5 |
25 |
1 |
X1 |
16MHz |
Oscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm |
图17 KiCad产生的BOM文件
根据BOM表单中的器件型号和数量进行备货,要注意的是其中R-2R中用到的13个2K的电阻和11个1k的电阻其精度要达到1%,这样才能保证R-2R网络取得较好的性能。