磁阻研究
磁阻研究
文号933504
11648
18
收藏(19)

[python] 行波加速模拟器【开源】

中文摘要

半桥拓扑磁阻炮 仿真程序

关键词

仿真python


概述

    该程序适用于使用半桥拓扑的多级磁阻炮(也可用于单级)。仿真计算 了弹丸受力,线圈电流,以及电容器电压变化等。核心算法基于行波加速器的仿真计算流程 - 科创网 (XXXXXXXXXXXX) 中开源的算法,在这里非常感谢coulson21 大佬。


此仿真考虑或计算了以下效果:

   1.线圈参数计算

   2.线圈中轴线上的磁感应强度

   3.弹丸受力 和 弹丸的感应电动势

   4.关于电压,电流,弹丸位置与速度相关的空间域方程(为了模拟的方便放弃使用时域方程的方式)


本仿真最重要的几条近似如下

    1、 磁饱和近似,即动子处于磁饱和状态,磁化强度在整个加速过程中保持不变。 (如,1010钢 饱和磁导设为2T, 磁化强度M=2T/u0  ) (饱和磁导参数可以在mode.csv中修改即 饱和磁导 那列 )



本仿真使用的线圈开启/关闭 策略  --使用位移控制模式

    

    1.每级线圈的导通持续距离pw 。(对于单阵列来说pw=就是线圈长度+隔板长度)

(   pw 可以在mode.csv中修改即 脉宽  那列)


    2.线圈关闭时机: 在弹丸前端到达线圈中心时关断(这么做有利于防止反拉,目标是让弹丸中心和线圈中心重合时电流降到0)。通过pw和线圈关闭时机 可以算出 线圈导通时刻 td 。

(   线圈关闭时机 可以在mode.csv中修改即 关断策略偏移  那列)


程序的结构与使用方法

    大致可以分为四部分组成,即 1.从mode.csv文件中进行数据输入 ,XXXXlculator_XXXXXX的模块计算线圈参数 3.仿真计算 4.数据使用plt 显示出来。

    一.从mode.csv文件中进行数据输入

    整个项目的数据是从mode.csv这个表格文件里输入的。

image.png


  1. 从漆包线材料到关断策略偏移的参数是线圈参数,可以填多行,数据空缺时会自动从上一行中补全。

  2. 漆包线材料(CuorAl) 可以填0或1,填0为铜线,1为铝线

  3. 匝数或外径模式选择(0or1) ,填0 表示匝径start里填充的是匝数, 1为外径 

  4. 匝径start 填0时 启用匝数延续功能,填0处的匝数会从上一级延续过来

  5. 子弹质量填0时 启用自动计算质量功能

  6. 匝数幂衰减系数 默认0.8,这里 幂衰减的含义是:级数每翻一倍,匝数变为0.8倍。

  7. 使用 [var_start,var_end,num] 切分参数 或使用 (var_0,var_1,var_2,var_3 ...) 枚举参数 来启用参数扫描功能。

  8. 参数扫描结果图中会标红离鼠标最近的点 ,右键点击后对其仿真,参数扫描后的保存文件放在子文件夹(\scanResultFile)下,根据保存的结果,下次扫描时会进行接续,多次扫描的结果会合并在一起。




    二.calculator_XXXXXX的模块计算线圈参数 

        1.计算线圈的自感,电阻等数据,详见参考文献中 线圈参数计算器 

                JF@%$]FYN`T@MQG(T_2H0RH.png


        2.计算线圈的互感部分见参考文献中《空心圆柱线圈的电感计算》 的使用等效圆环法计算

6E`C]LP5}J5`]HNC00TB9_E.jpg


    三.仿真计算过程

        1.计算线圈中轴线上的磁感应强度,详见参考文献中 根据线圈参数计算 磁感应强度分布曲线 

            R2K_IA2H0$WF$[1Y6_S}72S.png


        2.计算单位电流下的弹丸受力  ,详见参考文献中 根据磁感应强度曲线来计算磁阻炮的弹丸受力 

                           F=M*ΔΦ=M*ΔB*S


        3.关于电压,电流,弹丸位置与速度相关的空间域方程 ,详见参考文献中的行波加速器的仿真计算流程

                       本程序的核心算法在这里,再次感谢coulson21大佬的贡献。 原文中是时域方程 ,即各变量是关于时间t的

              微分方程。这样的缺点是整个加速时间在仿真前是不知道的,所以会预先设一个较大的Stop time 。所以改成了空间

              域方程,因为整个加速距离是确定的。


    四.数据使用plt 显示出来。

         XXXXt图表

               这里显示行波动画,以及线圈电流,弹丸受力,电容电压和速度的数据

image.png


    五.数据保存

       在完成仿真后,程序会将 弹丸速度和效率结果 保存至mode.csv的最后result那列。 

          GB{NUV(M)L}`@[}4N~O%]78.png

     笔者在完成这次仿真后在maxwell中进行了验证,发现误差较小。

     贴出maxwell与本程序的电流结果:可以看到一致性很高

                     EFJMVXP07HMTAQ[P}X[_GBI.png


     maxwell文件如下:

attachment icon 8_49.aedt 1.46MB AEDT 59次下载

最后:

           本程序使用pyinstaller进行了打包,读者可以方便的移到自己的电脑运行。位置 在dist文件夹下。压缩文件放在回复区。


           最后在这里我非常感谢各位大佬的帮助! 


参考文献:

    1. 行波加速器的仿真计算流程 - 科创网 (XXXXXXXXXXXX)

    2.

attachment icon 空心圆柱线圈的电感计算_吴素文.pdf 2.97MB PDF 178次下载 预览    

   3.    震撼!模拟器的最后一块拼图! 根据线圈参数计算 磁感应强度分布曲线! - 科创网 (XXXXXXXXXXXX)

   4:根据磁感应强度曲线来计算磁阻炮的弹丸受力 - 科创网 (XXXXXXXXXXXX)

   5:   线圈参数计算器(基于Wheeler公式计算电感量) - 科创网 (XXXXXXXXXXXX)

   6:  你好,电磁炮(盒装)套件+书内购入口 - 科创网 (XXXXXXXXXXXX)


[修改于 4 个月前 - 2024/09/01 17:00:33]

18
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
440Nx
5个月29天前 IP:广东
933506

可能确实比maxwell来得快,但还是离不开那个过时的程序。 sticker 不过如果要确认其他的某些细节,就又得用回maxwell了

rb-sama
5个月28天前 IP:湖北
933512

Figure_1.png

膜拜大佬,已经验证成功,其中xls作为输入数据 指定Number和各线圈匝数和外形尺寸

我的电脑19-13900K 64GDDR4RAM 大概运行5秒左右可以出结果

这个比mxwl速度确实快多了,同样大小的数据,mxwl为了得出结果10us的步长运行一次二十分钟以上

如果能有类似HACoilgun的GUI,将会大大提高调试的效率

甚至更进一步想起之前和@三水合番大佬讨论过的,利用ML实现对指定参数条件下的最佳效率调优

@托卡马克大佬发过一篇计算线圈长径比的文章,

在特定储能和长度的先决条件下,固定初速度的整机效率是固定的。

这个模拟器可能可以和托卡大佬的理论相互验证,楼主的工作让社区磁阻炮理论的更完善了

严重赞扬 sticker


gugugu作者
5个月28天前 修改于 3个月26天前 IP:上海
933537

开源地址:

gitee: coilgun: 半桥磁阻模拟器 (XXXXXXXXX)


1.2.0版本: 匝数幂衰减功能,衰减系数默认0.8,匝径end列 替换为衰减系数。

1.4.0版本: 大幅优化行波动画的运行速度,并增加动子跟随鼠标的功能。

1.5.0版本: 重要更新,优化了软件计算速度。

1.7.0版本: 互感计算改进,现在可以选择精细计算或粗略计算。精细计算会计算某线圈与其前后四个线圈间的互感,但较慢。

1.8.1版本: 增加匝数延续功能(匝数位置填0开启) ,增加一列T_C列,以便时序数据可以方便地放进单片机,Tjson列增加三种时序差分,再加上原来的td,pw一共5种数据

2.0.1版本:重要更新,参数扫描功能!

3NAE2L@J8AW54G_K_@0TJC1.png

2.0.3 版本:新增次要参数列,新增脉宽幂递增系数 列,默认1.1 。修复若干bug(修复电容重量计算问题)。

2.1.0 版本:参数扫描结果会保存 并在下次扫描时会接续。

2.2.6 版本:增加各线圈的升温显示。增加右键点击 参数扫描结果的点后对其仿真功能,参数扫描后的保存文件现在放在子文件夹(\scanResultFile)下。为了仿真的精度和速度考虑,现在默认步长为1,并且前100个step的步长是0.1 。修复若干bug,修复因动态计算时出现的电流bug,修复互感计算bug。

2.3.1版本 :重要更新,优化动态计算算法,大幅加快计算速度。 参数扫描时使用多进程技术,大幅加快计算速度。优化微元切分,使得现在初始速度可以填0 而不是之前的1。

2.4.0版本 :增加同时显示位移图和时间图的选项,修复上版本多进程bug.

attachment icon coilgun_2.4.0.zip 94.30MB ZIP 80次下载


coulson21
5个月27天前 IP:安徽
933570

非常棒的工作!用位置做自变量是个很好的主意,我时域方程写顺手了,没有意识到这个问题哈哈哈;

Judd
5个月16天前 IP:北京
933965

这个模拟器感觉输入不是很方便,准备这段时间给它用WinAPI加一个图形化界面

Judd
5个月16天前 IP:北京
933967

忽然想到可以给它用c++ fstream写个区间DP求一下特点条件下最优的参数方案,就是估计要跑起码几十分钟

wordFa0_0
5个月14天前 IP:广东
934035

珠子能仿吗

gugugu作者
5个月12天前 修改于 5个月1天前 IP:上海
934120

1.1.0版本: 增加动子运动的动画

可爱的叔丁基锂
5个月11天前 IP:江苏
934155

好东西,就是图表名称竖着有点难受😂

gugugu作者
5个月7天前 修改于 5个月6天前 IP:上海
934249

1.2.0版本更新:由线性衰减改为幂衰减,衰减系数默认0.8,匝径end列 替换为衰减系数。这里 幂衰减的含义是:级数每翻一倍,匝数变为0.8倍。(此规律由440Nx大佬发现)。   令匝数衰减目的是为了 让电流在后续的级数中基本不衰减。

现在由线性衰减改为幂衰减 的好处是可以少填一个匝径end的数据,后续的级数可以直接被计算出来,方便了许多。


三水合番
5个月6天前 修改于 5个月6天前 IP:四川
934277
引用gugugu发表于10楼的内容
1.2.0版本更新:由线性衰减改为对数衰减,衰减系数默认0.8,匝径end列 替换为衰减系数。这里 ...

那不是指数衰减(形式是k^x)。应该是幂衰减(形式是x^k)。

image.png

所谓“级数每翻一倍,匝数变为0.8倍”,是因为匀加速时,弹丸速度和位置的零点五次方成正比,即v=(2ax)^0.5。所以弹丸通过某一个线圈的耗时,大致和这个线圈的位置,或者说级数的负零点五次方成正比,即Δt=线圈长度cl/v=cl*(2ax)^-0.5。

而电流和时间的关系是IL=Ut,为了保持I不变,则电感同样应当和位置的负零点五次方成正比,L=Ut/I=U/I*cl*(2ax)^-0.5。

然后线圈电感和匝数的平方成正比,即L=AL*N^2,AL是单匝线圈的电感。所以这级线圈的匝数应该和它的位置的负零点二五次方成正比,即N=(L/AL)^0.5=(U/I*cl*(2ax)^-0.5/AL)^0.5=k1*x^-0.25。
把x=1和x=2代入进去,得到N=k1和N=2^-0.25*k1=0.84*k1,约等于0.8。


Ma3.02的守望
5个月3天前 修改于 5个月3天前 IP:四川
934353

这种解析方法的计算,虽然得到的结果可能不足以直接应用在工程中,但足以开展一些优化分析,得到比较有指导性的设计方向。

一个比较合适的应用是,基于这类方法开展多目标优化设计,或者称"系统工程”。比如用户给定发射器的指标,给出线圈、储能电容、CCPS、电池等组件的质量-性能关系,求系统最小质量。解析计算速度很快,多线程开起来,配合模拟退火之类的优化算法,即使一个优化算例跑一天,也是可以接受的。


三水合番
5个月3天前 修改于 5个月3天前 IP:四川
934354
引用wordFa0_0发表于7楼的内容
珠子能仿吗

@gugugu 
关于非圆柱形的弹丸,比如钢珠,这套代码应该做一点微调就可以实现。直接用现有的计算弹丸受力的代码就行。

image.png

具体操作是:

让用户输入弹丸形状,比如导入一个表格,或者导入一张图片每个像素点代表0.1mm这种。

把弹丸沿轴向分成很多份,比如100份,每一份都是一个极薄的圆柱形片。

计算每一片的端面面积,代入到上面的公式里,进而计算受力。把这些受力加起来得到合力。

根据弹丸形状计算弹丸总重量,或者让用户输入总重量。

把这个合力和总重量代入到原来的代码里继续运行


除了钢珠以外,这个做法还可以仿圆头/尖头圆柱形,带内孔的弹丸(管状弹丸,内螺纹圆柱销)等任意形状。

gugugu作者
5个月3天前 修改于 5个月3天前 IP:上海
934359

1.4.0 行波动画展示,动子跟随鼠标效果演示:



1.4.0.mp4  点击下载


yongai00
4个月29天前 IP:江苏
934557

楼主厉害,代码里面有几个疑问想请教下,还请帮忙解答。1. calculate_gui里面的calculate_M函数,为啥定义成计算两个紧靠一起的相同线圈的互感,而不是更一般的两个线圈的互感?2. coilgun里面的MainEquations函数,

image.png 这部分是对原方程同时除以N1*N2了吗?如何处理这俩电感前面的系数能变成1?非常感谢!

yongai00
4个月28天前 IP:江苏
934600

楼主,还想请教下电路方程里面,动子感应电动势是怎么推导出来的?动子运动势必影响线圈等效电感,那么在电路方程里面添加的动子感应电动势这项,是否可以看做动子对线圈电感影响的定量描述?

gugugu作者
4个月17天前 修改于 4个月0天前 IP:上海
935148

2.0.1版本:重要更新,参数扫描功能! 

3NAE2L@J8AW54G_K_@0TJC1.png

对需要参数扫描的位置设置成如下格式即可 [起始,结束,分割个数] 。 可以对多个参数进行参数扫描。 越靠右下角的点在我看来性能越好

UPC(6X8NVLH%7[7~P)%AEGF.png

gugugu作者
4个月15天前 修改于 3个月26天前 IP:上海
935325

2.4.0版本 :增加同时显示位移图和时间图的选项,修复上版本多进程bug.

主体信息
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:上海
 文章分类
 内容统计
2024年08月
1 篇
2024年06月
5 篇
ID: {{user.uid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
回复
设为精选取消精选
评学术分
鼓励
编辑
查看历史
通过审核
移动文章
加入收藏取消收藏
退修或删除
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
回复
加入收藏取消收藏