欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

2019年全国电子设计竞赛H题电磁炮之定点打击

发布时间:2024/3/12 编程问答 63 豆豆
生活随笔 收集整理的这篇文章主要介绍了 2019年全国电子设计竞赛H题电磁炮之定点打击 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

前言

以下代码源于比赛时的源代码,实现赛题的基本部分即定点打击,没有实现扩展部分openMV识别打击,没贴出openMV部分代码,两个部分代码是独立的,可以通过串口通信建立联系,比赛当时因为元件邮寄时间耽误,没来得及尝试,读者可自行尝试。

硬件

  • 电磁炮

1个线圈(线圈得耐心绕紧密,可边绕边滴胶水)、1个高压电容(建议用220V)、1个升压模块、1个炮管(普通的塑料管)、两个开关(充电和放电,充电开关可用高电压继电器,放电开关建议用可控硅,有的同学用继电器也不会烧,得结合具体情况)、电池(有条件用锂电池比较稳定)

  • 控制云台

2个舵机、1个云台、1块开发板(下面代码用的是F407)、1个机械键盘、1个OLED、1个openMV(用于识别靶心)、1个超声波(用于测试距离)

  • 电磁炮的基本电路图

软件

  • 数学建模

  • 建立方程:

    方程1:f1(垂直方向角度,射程)=0
    方程2:f2(垂直方向角度,PWM1)=0
    方程3:f3(水平方向角度,PWM2)=0

  • 解方程
    从极端值开始,间隔为5度或者更小,每组取5到8个个点取平均值,取得数据,利用Matlab或者Exel数学工具,拟合出垂直和水平方向的方程

  • 代码

以下代码是stm32主函数部分代码:
具体代码下载地址

#include "sys.h" #include "delay.h" #include "key16.h" #include "usart.h" #include "oled.h" #include "pwm.h"int main(void) { static u16 angle=0,distance=0;//角度和距离u8 Keyval=0;//按键值delay_init(168); //初始化延时函数uart_init(115200);//初始化波特率115200OLED_Init();//OLED初始化 KEY_Init();//矩阵按键初始化TIM14_PWM_Init(20000-1,84-1); //84M/84=1Mhz计数频率,重载值500,所以PWM频率 1M/500=2Khz.TIM13_PWM_Init(20000-1,84-1); OLED_ShowString(0,0,"A:",24); //A是angleOLED_ShowString(0,30,"L:",24); //L是distanceOLED_Refresh_Gram();//更新显示OLED while(1) {Keyval=Key_scan(0);switch(Keyval){case 11:OLED_ShowNum(30,0,angle,4,24);//按下11输入角度OLED_Refresh_Gram();angle=OutNumber();OLED_ShowNum(30,0,angle,4,24);OLED_Refresh_Gram();break;case 12:OLED_ShowNum(30,30,distance,4,24);//按下12输入距离OLED_Refresh_Gram();distance=OutNumber();OLED_ShowNum(30,30,distance,4,24);OLED_Refresh_Gram();break;case 13: OLED_Clear();OLED_ShowString(40,20,"OK!",24);//按下13确定输入值OLED_Refresh_Gram();Set_Movement(angle,distance);break;default:break; }} }

总结

以上是生活随笔为你收集整理的2019年全国电子设计竞赛H题电磁炮之定点打击的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。