|
楼主
查看: 9937回复: 3
发表于 2019-9-2 12:42:42
只看该作者
摘要: 本设计是以STM32单片机为核心、采用电磁感应现象,考虑利用电磁力发射物体的原理实现对钢珠的精确发射功能。本设计基本模块包括MCU6050、OV7725摄像头、LIL9431显示屏、云台、舵机LD-1501MG、升压模块、超级电容、按键输入,显示屏显示当前数据模式,通过摄像头获得图像数据,分析环形靶位置来控制舵机转动,达到控制曲射炮炮管方向。给升压模块输入12v电压升压后给电容充电,通过开关控制发射,使电容瞬间放电,产生电磁力射出炮弹。
关键词:单片机STM32;电磁感应;图像处理;升压模块
Abstract: This design is based on STM32 single chip microcomputer as the core, the use of electromagnetic induction phenomenon, considering the use of electromagnetic emission object principle to achieve the precise launch function of steel ball.The basic modules of this design include MCU6050, OV7725 camera, LIL9431 display screen, cradle head, steering engine ld-1501mg, booster module, ultracapactance, and key input. The display screen displays the current data mode. Image data is obtained through the camera, and the circular target position is analyzed to control the steering engine rotation, so as to control the direction of the curved gun barrel.Input 12v voltage boost to the booster module, charge the capacitor, and control the launch through the switch, discharge the capacitor instantly, and generate electromagnetic force to shoot shells.
Keywords: STM32;Electromagnetic induction;The image processing;Booster module
目录
一 前言 1
二 系统方案设计 1
2.1 位置采集测距方案 1
2.2 射程调节方案选择 1
2.3 机械结构设计 1
2.4 超级电容方案 2
2.5 可控硅选用方案 2
三 理论分析与计算 2
3.1 电磁炮参数 2
3.2 弹道分析 3
3.3 能量分析 3
四 电路与程序设计 4
4.1 系统整体结构 4
4.2执行机构控制算法与驱动 4
4.3程序设计流程 5
4.4核心模块设计 6
五 系统测试 6
5.1 测试仪器与方案 6
5.2 测试数据表 7
5.3 测试结果分析 7
六 总结 7
七 附录 9
7.1 部分源程序 9
7.2 参考资料 10
一 前言
题目要求我们直径1cm左右的小球稳定落在50cm直径的圆内,精度很高。本实验首要问题就是要计算小球落点准确需要的条件。为此,我们采用摄像头采集数据,图像数据处理之后单片机分析环形靶位置,与目标位置相比获得控制输入量,控制舵机结构运动,调试电磁炮电压打到指定区域。
二 系统方案设计
2.1 位置采集测距方案
方案一:在木板X与Y边缘分布大量光电收发二极管,为了实现题目要求3cm以内的定位,每侧需要60/3=20个。难度低,但需要大量IO口,精度也很不理想。
方案二:摄像头采集数据,精度高。选择OV7725型可以硬件二值化的鹰眼摄像头,像素30万,传输速率达到60fps,视场角达到63°,拥有很好的低照度。可以满足本系统所需。
经过讨论,我们决定使用方案二。
2.2 射程调节方案选择
方案一:电压控制射程:直流稳压电压经升压模块升压后,将电容两端充电实际电压反馈回单片机,单片机通过调节电压高低实现对射距的控制。但是由于升压模块调节电压需要改变滑动变阻器的阻值来实现,无法通过单片机实现调节,且需要采集电路实现电压实时采集。
方案二:仰角控制射程:电磁炮的水平仰角为0度,根据物理学原理,调整电磁炮的仰角,则电磁炮射程也会改变,相对于调节电压而言容易实现,射距和角度之间的关系难以精确。
经考虑,我们选用方案二。
2.3 机械结构设计
0.7mm漆包线缠在塑料管上做炮筒结构,固定在二自由度舵机上。12v电压供给升压模块升压之后给电容充电,单片机控制发射炮弹。
2.4 超级电容方案
电容就是整个电磁炮的动力来源,它决定了电磁炮的规格,电容耐压V的高低是决定电磁炮威力的重要参数,理论上电压越大威力也就越大。电容的容量uf决定了电容能存储多少电能。选用合理的电容器可以达到最为合适的放电时间,使电磁炮达到最大出膛速度。超级电容器可以是由多孔炭等材料制成,该材料的多孔结构允许其面积达到2000m2/g,通过增大表面积,从而达到更大的储电量。应根据预期达到的电磁炮威力的大小、**的种类等合理地选择电容器。电容充电时,可以电容上接着电压表,时刻测量电容的电压,在最大耐压前停止充电。本次实验的充电时间大约为10秒。
需要给直径1cm钢珠打出2米至3米,采用单级线圈炮,经讨论实测,我们选择450v1000uf的超级电容。
2.5 可控硅选用方案
它是一种大功率开关型半导体器件。作为一种无触点开关,可控硅开关具有反应极快,在微秒级内开通、关断;无火花、无噪音、效率高、成本低等优点,在本次实验电路的通断中起着重要的作用。
当器件的阳极上加正电位时,在一定的电压范围内,器件仍处于阻抗很高的关闭状态。但当正电压大于某个电压时,器件迅速转变到低阻通导状态。加在可控硅阳极和阴极间的电压低于转折电压时,器件处于关闭状态。此时如果在控制极上加有适当大小的正电压,则可控硅可迅速被激发而变为导通状态。可控硅一旦导通,控制极便失去其控制作用。就是说,导通后撤去栅极电压可控硅仍导通,只有使器件中的电流减到低于某个数值或阴极与阳极之间电压减小到零或负值时,器件才可恢复到关闭状态。
我们需要耐压200v左右的可控硅。经讨论实测,我们选用BT151可控硅。
三 理论分析与计算
3.1 电磁炮参数
基本参数:360匝,每层40匝缠九层;电压220v,电容450v1000uf;可控硅BT151;炮弹是直径1cm钢珠;。炮管是直径1.5cm塑料管。
使用升压模块输入12v输出220v电压给电容充电。
3.2 弹道分析
电磁炮的射击类似于抛物线运动,通过感应电流与磁场作用产生初速度v_0,之后开始进行有初速度的抛物线运动,计算如下:
竖直方向上的分速度{█(v_x=v cosθ@v_y=v sinθ-gt)┤
水平竖直方向分位移{█(x=V cosθ×t@y=v sinθ×t-1/2 gt^2 )┤
综上所述:可以测得水平方向距离x(即题要求的目标点d)如下公式:
d=(ν^2 sin2θ)/g
注解:要求达到的距离d由函数得到只需控制初速度v与炮口的角度
高度H是可变的,因为驾在云台上的炮口通过舵机的旋转来改变俯仰角,所以需要在上边普通斜抛运动再加入新参数,公式如下所示:
(注:d为目标距离, 为转过的角度, 为底座到第二个舵机轴的高度, 为第二个舵机到电磁炮的高度)
所以可根据最新公式算出更为准确的d值,带入算法中。
3.3 能量分析
(1)对于单个电容放电的情况可列以下方程:
U(t)=R_2 I(t)+(d[L(x)I(t)])/dt=R_2 I(t)+L(x) dI(t)/dt+I(t)(dL(x))/dt
式中 U(t) — t时刻电容的电压值;
R_2 — 放电回路等效电阻;
I(t) — t时刻放电回路电流值;
L(x) — 位置x处的等效电感。
其中:(dL(x))/dt=(d[L(x)])/dx∙dx/dt 并且 I(t)=-C (d[U(t)])/dt
得到电容放电回路方程:
CL(x) d^2[U(t)] /(dx^2 )+C[R_2+dL(x)/dx∙dx/dt]∙d[U(t)]/dt+U(t)=0
(2)对磁阻性弹丸,电磁力受力可近似为:
F=ma(t)=(dW_m (x))/dx≈1/2 x_m μ_0 [NI(t)]^2 A
式中 m — 弹丸质量; N — 驱动线圈的线圈匝数
μ_0 — 真空磁导率; x_m — 铁磁物质的磁化率;
A — 驱动线圈截面积; I(t) — t时刻驱动线圈的电流;
根据磁通守恒原理和能量守恒原理,并且电流在瞬间不会随位置变化而变化,故弹丸所受电磁力为:
F_dc (x)=(dW(x))/dx=1/2 (d[L(x)I^2])/dx=1/2 L_0 (x)I^2
式中 L(x) — 整个系统的电感量;
L_0 (x) — 系统在x处的电感梯度;
I(x) — 通过驱动线圈的电流。
四 电路与程序设计
4.1 系统整体结构
4.2执行机构控制算法与驱动
由摄像头捕捉环形靶位置后,经过图像处理传输给单片机计算之后输出PWM波来驱动舵机转向,调整适当位置。位置调整之后,由升压模块供给超级电容充电,由单片机下达发射指令之后,超级电容瞬间放电射出炮弹,实现精确打击。
4.3程序设计流程
(1)设计思路
本题需要用单片机实现控制发射炮弹功能和舵机转角功能。舵机转角由两种方式完成。按键输入模式下,单片机读取键盘键入数据再经过数据处理输出pwm波驱动舵机转向指定位置。自动搜寻目标模式下,摄像头采集环形靶位置,由图像处理后输出pwm波驱动舵机。炮弹发射由按键实现,读取按键并输出高电平打开通道射出炮弹。
4.4核心模块设计
(1)按键输入调整舵机的控制思路
按键输入距离d值和α角度之后,单片机处理数据之后算出相应的炮管角度,输出pwm波驱动二自由度舵机转向。让舵机对准目标精准射击。在使用舵机的过程中,我们发现角度与占空比,并不是严格的线性关系。粗略描绘散点图后,我们采用两段一元方程对其进行近似。
(2)驱动电路模块
单片机下达指令之后,电容充电,舵机调整至对应位置,下达发射指令射出炮弹。
图4 驱动电路原理图
(3)摄像头电路模块
完成自动搜寻目标任务需要使用摄像头电路模块,摄像头能把靶子位置信息转换成图像数据,由单片机计算仰角,再调整水平角度差,驱动舵机转向,当转向至指定位置后下达发射命令。
五 系统测试
5.1 测试仪器与方案
万能表测升压模块升压之后的电压,使用卷尺测距离。地上平铺沙子,让钢球打落在沙子上,测量落点距离,测量误差在2cm范围内。秒表计时电容充电时间。我们使用手机自带的陀螺仪功能记录舵机仰角角度。固定电压,每次调节炮管仰角来调节落点距离。记录下测试数据。
5.2 测试数据表
目标值1 实际值1 误差1 目标值2 实际值2 误差值2
第二问 200 201 +1 210 209 -1
第二问 220 220 0 230 230 0
第二问 240 239 -1 250 252 +2
第二问 260 263 +3 270 268 -2
第二问 280 286 +6 290 299 +9
第二问 295 286 -9 300 304 +4
第三问 200 202 +2 210 209 -1
第三问 220 222 +2 230 230 0
第三问 240 239 -1 250 252 +2
第三问 260 265 +5 270 266 -4
第三问 280 288 +8 290 299 +9
第二问 295 284 -11 300 298 -2
表1 基本要求测试
很无奈,没能完成发挥部分的功能。小组讨论设计的方案由于时间有限没能实现,觉得很遗憾,赛后我们还会攻破这一难关,继续努力学习。也意识到了自己的不足日后更加努力学习电子知识,再接再厉。
5.3 测试结果分析
分析表1数据,测试中发现,误差值有点大。我们控制思路是定电压改变仰角来改变射程打击位置。由舵机改变仰角,由于舵机控制可能不够精准所以导致误差偏大,实测仰角错一度可能导致位置误差错八厘米。通过测试发现距离越远误差越大,分析由公式计算之后发现,每次调同样的仰角距离越远调节射程越大。计算分析矫正公式,通过优化舵机控制,实际值则与题目要求非常符合。
六 总结
本系统使用STM32系列单片机,设计中使用软件二值化,键入数据或者经过图像处理,通过简单的算法控制云台,实现了基于向指定位置发射炮弹的功能。由于时间短暂,本系统并不完美,还有很多地方可以改进,如:
(1)仰角调节范围小造成误差偏大。
(2)舵机控制不是太完美。
(3)摄像头系统没有完善使用
赛后我们会继续调试程序硬件,尽量完全完美完成任务。
通过本次赛前准备,接触到了很多技术,学到了很多知识。以后要学习的东西还有很多,一定要努力学习电气知识。经过几天努力奋战,从开始准备到第一时间接到题目,一直都全身心地投入比赛之中。虽然尝试过以前的制作类似的题目,但是真正进入比赛还是有不一样的心情。大家都感到很慌乱时间紧促,轮流休息泡实验室四天三夜,大家一起努力,终于成功的完成了硬件的调试。有辛酸也有欣喜,每当取得一点点的进步,都会欣喜若狂。也许这次比赛我们不是最优秀的,但我们很努力,一直调试到最后时刻。实力不够,有点遗憾作品不够完美,再接再厉。当然还要感谢学校老师后勤工作支持,使我们能安心比赛,同时也感谢大赛组委会给了我们这次机会磨砺自己。
七 附录
7.1 部分源程序
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "pwm.h"
#include "key.h"
int main(void)
{
u8 key;
float pwm_cz=0,pwm_sp=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
LED_Init();
KEY_Init();
delay_init(168);
uart_init(115200);
TIM3_PWM_Init(1999,839);
TIM14_PWM_Init(1999,839);
TIM_SetCompare1(TIM3,1854);
TIM_SetCompare1(TIM14,1849);
while(1)
{
key=KEY_Scan(0);
delay_ms(10);
if(key==KEY2_PRES)pwm_cz+=5;
delay_ms(10);
if(key==KEY3_PRES)pwm_cz-=5;
delay_ms(10);
if(key==KEY4_PRES)pwm_sp+=5;
delay_ms(10);
if(key==KEY5_PRES)pwm_sp-=5;
delay_ms(10);
if(key==KEY0_PRES)
{
TIM_SetCompare1(TIM3,1854+pwm_cz);
TIM_SetCompare1(TIM14,1849+pwm_sp);
}
delay_ms(10);
IN1(High);
delay_ms(10);
IN2(Low);
delay_ms(10);
IN2(High);
delay_ms(100);
IN1(Low);
}
}
7.2 参考资料
(1)谭浩强.C语言程序设计[M].北京:清华大学出版社,2012
(2)黄智伟.大学生全国电子设计竞赛训练教程北京:电子工业出版社,2005
(3)康华光.电子技术基础数字部分(第五版)高等教育出版社,2006
(4)童诗白,华程英.模拟电子技术基础(第四版)北京:高等教育出版社,2009.
完整报告请点击下载:
模拟电磁炮.rar
(184.22 KB, 下载次数: 354)
|
打赏
-
查看全部打赏
|