2019-08-07

02-01:    电磁线圈炮制作简述

版权声明:Copyright © 2016-2019,Stardust Studio,All Rights Reserved

序言——凡尘

(1)笔者的驱动芯片为stm32f103系列,但不限于stm系列单片机、51、K6X、LPC、树莓派等单片机;

(2)欢迎各位大牛投稿补充和完善;

(3)笔者一向崇尚开源分享精神,对于关键非涉密技术除外技术将会开源分享给各位读者;

(4)本文参考自参赛队伍—星尘“2019年全国大学生电子设计竞赛-模拟电磁曲射炮(H题)“技术报告,笔者为该队队长、星尘工作室室长对上述文本享有修改和撰写的权利;

(6)笔者并非专门从事电磁炮研究学者,更多的注重于算法控制,因而制作流程相对简单,不足之处望大家投稿补充;


开始制作前思维导图

看完思维导图后请阅读:模拟电磁曲射炮相关资料,之后开始后续的内容:

本文将从以下几个方面展开简述:

1.摘要

2. 设计任务与要求

    2.1 设计任务

    2.2 设计要求

3.系统方案

    3.1 系统结构

    3.2 方案论证

        3.2.1.主控的选择

        3.2.2电容充电电压选择

    3.2.3仰角和水平角的实现方案

    3.2.4寻靶与测距

    3.2.5线圈选择

4.理论分析与计算

    4.1 电磁炮的理论分析

    4.2线圈分析

    4.3模拟电磁炮简化电路和发射理论能量计算

5.电路与程序设计

    5.1电路设计

5.2程序结构与设计

6.系统测试与误差分析

    6.1测试方案及测试数据

    6.2测试结果分析

7.实测结果

8.附加福利:OpenMV识别色块代码(公开)

1.摘要

        目前电磁炮按炮弹加速方式划分可大致分为导轨炮、线圈炮、重接炮。模拟电磁曲射炮是采用电磁力将模拟炮弹发射出去。本设计采用了线圈电磁炮的原理,在炮管尾部缠绕了一个500匝的线圈(自重10克),通过电磁力将铁质炮弹(长为60mm直径10mm的钢棒)从炮管发射出去,铁质炮弹的射程通过控制炮管的仰角实现。仰角与射程的关系通过实验进行了标定,并设定到了程序中,确定好目标距离,电磁炮就可以自动运行到相应的仰角。目标距离采用键盘输入的方式获取,或激光测距的方式测量获取。水平方向的寻靶通过OpenMV识别引导标志,确定水平方位,电磁炮炮管自动运行到该方位。电磁炮水平方位和仰角通过控制水平舵机和垂直舵机的转角分别来实现,以STM32F103C8T6单片机为核心处理器。

2. 设计任务与要求

    2.1 设计任务

            设计并制作一模拟电磁曲射炮。

    2.2 设计要求

            炮管水平方位及垂直仰角方向可调节,用电磁力将弹丸射出,击中目标环形靶,发射周期不得超过30 秒,电磁炮由直流稳压电源供电,电磁炮系统内允许使用容性储能元件。

3.系统方案

    3.1 系统结构

            本系统基于电磁感应原理,由环绕于炮膛的一系列固定的加速线圈与环绕于弹丸的弹载运动线圈(弹丸线圈)构成。它利用加速线圈与弹丸线圈之间互感时产生的电磁力作为弹丸的加速力。系统主要包括电源模块,控制模块,识别模块。

图1· 系统方案图

    3.2 方案论证

        3.2.1.主控的选择

                    系统需要控制两自由度云台的控制,两个串口分别接收OpenMV靶标位置和激光测距模块距离信息。STM32F103C8T6作为主控,其运行速度快,外围接口可满足设计需求,利用STM32作为主控,可以实现本系统的设计任务,且系统具有良好的响应速度,可精确控制。

        3.2.2电容充电电压选择

                    方案一:采用大容量的法拉电容组,法拉电容容量虽大,但其耐压值往往只有几伏,无法满足设计需求。

                    方案二:采用耐高压的电解电容,电容电压越高放电时间越短电流越大,产生的洛仑磁力越大,能够使炮弹的射程增加。 

                    综上本系统选用方案二,选用了450V,1000uF的电解电容,。

    3.2.3仰角和水平角的实现方案

            系统通过单片机对舵机进行控制,从而对仰角与水平角进行调整,利用位置式PID算法对舵机进行控制。控制原理如图2所示,位置PID计算公式如式(1)所示。

图2  PID控制原理图

            其中:P用于提高响应速度、I用于减小静差、D用于抑制震荡,通过对这三个参数的不断调节,本系统最终达到了对舵机精确控制的目的。

    3.2.4寻靶与测距

引导靶标采用OpenMV进行左右位置识别,OpenMV是一款以STM32F427CPU为核心,集成了OV7725摄像头芯片的机器视觉模块,高效且功能强大,本系统中利用寻找色块的方法寻找引导标识,先确定引导标识的阈值,找到色块后再确定引导标识的中心坐标位置,通过图像中心位置与引导标识的中心坐标位置做差,得到引导标识的偏移量,再将偏移量利用串口发送给STM32。

本系统采用激光测距,相比于微波测距仪,激光测距具有探测距离远测距精度高,抗干扰性强,重量轻等特点。当串口接收到的偏差量为0时,控制舵机暂停运动,根据激光测到的引导标识调整炮筒角度。

    3.2.5线圈选择

            电感线圈长度过长,电感值将迅速减小,将会影响线圈的储能。电感线圈过短时,弹丸加速路程是线圈长度的一半,将严重影响弹丸的初速,综合考虑,本系统的线圈定在十层,每层50圈。

4.理论分析与计算

    4.1 电磁炮的理论分析

1、电磁炮原理分析

电磁炮利用电磁力沿轨道发射炮弹的武器,主要由电源、高压逆变器、高压电容组成电磁炮的电能,其中高压电容存储高压电能。电磁加速器、开关构成电磁炮发射控制部分。线圈电磁炮磁场示意图如图3所示。

图3 线圈电磁炮磁场示意图

    4.2线圈分析

            在制作线圈时,匝数的选择决定着威力和精度的大小,但这并不意味着单位长度内匝数越多磁场越强,因为必须要考虑电阻的问题,匝数越多电阻越大,电流也随之减小,需要找到一个合适的平衡点。同时,线圈作为一种储能元件,需要考虑它的电感。空心线圈的电感量是一个经验公式如下。

其中 R 为线圈半径,n 为线圈匝数,S 为线圈的截面积,h 为线圈的长度。可见如果线圈长度过长,电感将迅速减小,影响线圈的储能。但弹丸加速路程是线圈长度的一半,h 过短将影响弹丸的初速。

图4 电磁炮弹道示意图

    4.2 弹道分析

            忽略空气阻力,炮弹在离开炮筒后只考虑重力作用,做抛物线运动,分析如下:

            综上可知,通过控制仰角可以将炮弹发射到指定位置。

    4.3模拟电磁炮简化电路和发射理论能量计算

            电磁炮的发射电路,电容C充满电后,通过单向可控硅控制导通后对电感线圈(电感L和电阻R模型串联)的二阶电路来进行简化,各符号如图5所示。

图5 电磁炮电路简化示意图

将方程(9)-(11)带入方程(12)可得:

5.电路与程序设计

    5.1电路设计

图6 系统电路设计图
图7 系统电路材料清单

    5.2程序结构与设计

图8 程序结构示意图

6.系统测试与误差分析

    6.1测试方案及测试数据

            测试方案:调节炮筒仰角,每个角度测量十次,数据结果见表1。

表1 仰角和距离测试数据表

            每个仰角的距离测量数据,去掉一个最小值,去掉一个最大值,剩下的距离取平均值,作为该仰角对应的射程数据。

以仰角数据作为因变量y,以对应的射程数据作为自变量x,对y和x的关系,进行形如:

函数形式的拟合。拟合结果为:

    6.2测试结果分析

            仰角和射程的数据测量和拟合曲线如图8所示。红色曲线为实际测量数据,蓝色曲线为二次拟合曲线。

图9 仰角和射程的测量数据和matlab拟合曲线

7.实测结果

        实测结果相当理想,笔者按照电赛要求写了三级菜单,实验室测试模式一靶心距离(200-300cm)随机测试5次,全部十环中靶,模式二自动寻靶(200-300cm)测试10次,平均九环,模式二自动寻靶(250cm)测试10次,平均九环。但测评前一天因为俯仰舵机松脱导致参数变更,测评当天成绩三个模式只有9环6环和4环成绩,未能全中九环及以上,甚为遗憾。

图10 电磁炮整机演示图

8.附加福利:OpenMV识别色块代码(公开)

        基于pathon,采用usart串口3输出,波特率为115200,识别到红心后输出中心偏差值。

import sensor, image, time

red_threshold_01 = (40, 100, 40, 80, 20, 70)

sensor.reset() # Initialize the camera sensor.

sensor.set_pixformat(sensor.RGB565) # use RGB565.

sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.

sensor.skip_frames(10) # Let new settings take affect.

sensor.set_auto_whitebal(False)

#关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。

clock = time.clock() # Tracks FPS.

from pyb import UART

uart = UART(3, 115200)

while(True):

    clock.tick() # Track elapsed milliseconds between snapshots().

    img = sensor.snapshot() # Take a picture and return the image.

    #  pixels_threshold=100, area_threshold=100

    blobs = img.find_blobs([red_threshold_01], area_threshold=150)

    for blob in blobs:

    #如果找到了目标颜色

        #print(blob.cx())

        m=str(blob.cx())

        m=m+'d'

        n=str(blob.cy())

        m=m+n

        m=m+'sp'                #sp为校验位

        print(m)

        uart.write(m)

        img.draw_cross(blob.cx(), blob.cy()) #在目标颜色区域的中心画十字形标记

        #for b in blobs:

        #迭代找到的目标颜色区域

            # Draw a rect around the blob.

            #img.draw_rectangle(b[0:4]) # rect

            #用矩形标记出目标颜色区域

            #img.draw_cross(b[5], b[6]) # cx, cy

            #在目标颜色区域的中心画十字形标记

后记——凡尘

时间匆忙,未能用篇幅举代码实例帮大家理解和校对错误,更多的是结构和整体压缩的内容,如有错别字和内容不合理的地方欢迎大家批评指正,如有想深入探讨或是项目需求的朋友欢迎加入QQ群(星尘科技技术交流群①):694372729 说明需求一起探讨学习。

个人邮箱:[email protected]

你可能感兴趣的:(2019-08-07)