前段时间买了一个示波器,又买了几个三极管,电阻和一些驻极体话筒,作了一个话筒音频放大电路,因为要调整三极管的直流工作回路,所以用了一个叫icrcuit的mac上的软件对三极管上的基极调压电阻和集电极电阻进行了仿真。最后实际焊成的电路结果与仿真结果很接近。下边是我的三极管仿真电路:


 


于是就想看能不能在ipad上也找到这个软件,结果找了半天硬是没有找到。索性就想自已看能不能在ipad上自已作一个硬件电路仿真软件。当然,第一步就是找相关的开源软件,然后我们来把他的源码移值到ios上就可以了。找到了一个ngspice的开源仿真软件。在mac上编译安装成功了。去官网看的时候,作者说自已是用的一个叫spice3f5的开源库,说这个库有好几十年的历史了。

ngspice官网及下载地址: ​​http://ngspice.sourceforge.net/download.html​


​ng-spice-rework​​​版是ngspice的最新稳定版源码。
用到了spice3f5源码: ​​​http://embedded.eecs.berkeley.edu/pubs/downloads/spice/​


中间有一个 ​​spice3f5.tar.gz​​  (1.2Mb),就是源码。只不过这个源码默认的编译环境是windows系统下的。


spice的一些示例电路: ​​http://bwrcs.eecs.berkeley.edu/Classes/IcBook/SPICE/Examples/examples.html​


而我要作的就是把这个源码在mac os系统下编译成功。


首先,解压这个压缩包:




这里我们只会用到src文件夹里的include和lib目录。别的东西都可以不要。


spice的源码是用古老的C语言写成的。


然后在xcode下新建一个C语言的命令行项目。






建好以后,把我们说的include和lib两个目录复制到项目路径下,并在xcode中添加上文件。


然后按command+B键先试着编译一下。


这时候会发现有很多的错误。不要怕,我们一点一点的来改就可以了。这里的大部分错误是C语中的函数默认反回值是int型引起的。有一多半的都是简单的给函数最后加一个return 0;就可以了。


再接下来的一些错误是一些系统库中的头文件引用错误。我们只要一点一点的把头文件加上就OK了。


最后出现错误最多的是一些变量重复定义,函数重复定义的错误,我们只要把重复的删除就可以了。


下边是我用了两天的时间修改后可以在xocde下运行起来的截图。




现在还没有真正开始加载电路上去仿真的试过。


明天再试一下在xcode下的电路仿真。看看我要怎么把仿真数据取出来。


计划是先把仿真的实时数据存入内存中,然后使用我熟悉的cocos2d-x游戏引擎来作UI界面以及电路图形绘制。有了电路图,再将电路图转成节点网表,加上元器件属性就可以进行仿真了,仿真结果再用游戏引擎绘制在ios界面上。目前初步计划是这样的。等接下来再对源码分析和调试。

总体上来说,这两天的收获不小啊。

 今天是2015年9月13日,今天接着写这个硬件仿真软件的编译情况。


仿真 程序。


下边是电路和电路仿真的结果:

 spice电路网表:


EX


VS 1 0 10


R1 1 2 20


R2 2 0 20


R3 3 0 4K


L 2 3 0.2 IC=0.2


C 3 0 0.5U IC=2


.END

 网表对应的电路图:




使用


tran0.1 30 uic


作瞬态分析的结果:


ngspice 1 -> bjtnoise.cir


Circuit: ex


ngspice 2 -> tran -.1m 30m uic

Warning: TSTEP is invalid, must be greater than zero.


tran simulation(s) aborted

ngspice 3 -> ^R  

 

ngspice 3 -> tran 0.1m 30m uic

Doing analysis at TEMP = 27.000000 and TNOM = 27.000000



Initial Transient Solution

--------------------------


Node                                   Voltage

----                                   -------

1                                            0

2                                            0

3                                            0

l#branch                                     0

vs#branch                                    0




No. of Data Rows : 312

ngspice 4 -> print v(3)

                                       ex

                                       Transient Analysis  Sun Sep 13 21:40:38  2015

--------------------------------------------------------------------------------

Index   time            v(3)            

--------------------------------------------------------------------------------

0 0.000000e+00 0.000000e+00

1 1.000000e-06 2.398807e+00

...这里隐藏了310行...

311 3.000000e-02 4.972044e+00

ngspice 5 -> 


有了这些数据,画一个曲线图还是很简单的。接下来要作的事就是作一个画电路图的软件,然后把电路图转换成spice电路网表文件,发送给我的这个ngspice库,由这个库输出上边的这组电压变化数据,然后使用此数据绘画。


先使用原版的带有xspice的ngspice使用plot v(3),来绘制数据看一下: