2019电赛总结

2019电赛总结

一开始,我们队的leader就决定做控制类,今年电赛这几天还是有点累的, 三个晚上都直接趴在桌子上睡的,事实证明在桌子上也是可以睡着的~很多时候都是强睁着眼睛的,他们不休息,我几乎也都是陪着,作为一个集体,就算是能力达不到,精神上也是要支持的!我担任的工作是论文,以及各种琐事,在清单出来之后,我们准备了很多东西,然后我就挑了简单的云台,调试完成,赛前前一夜,才开始准备按键程序,然后也尴尬地没调出来。<-----基本功问题
总得来说能够实现的部分还是比较顺利,出现的问题基本都能解决,因为东西之前没有准备齐,时间问题,我们只完成了基础部分~~下面说几点遇到的问题

电磁炮电路——初射

升压电路部分,把12v电压升到220v/110v,(内含整流桥),后级是一个四个耐压值250v,容值680μf的电容串联,在电容的两个端分别放了一个继电器,一个继电器控制充电与否,一个控制放电与否,这两个继电器连接到单片机上面。这个方案,leader很快想到,然后验证下来也没有问题。

硬件调试问题

第一个程序是我事先写好了舵机控制云台的程序,用的mini板测试,初次把程序烧到我们比赛用的板子的时候,遇到的第一个问题是下载失误,极性接反了,后来用示波器测量引脚没有波形,又换了几个定时器通道,都是有波形的,所以后来发现了可能是板子坏了,换了板子之后,再次测试之前的程序,有波形了,出现的问题又是带不动,后来,通过在开发板上的测试,通过,知道问题出现在硬件上,12v的直流电源通过7805降的5v电压有问题,(产品质量问题),后来换了一个7805,测试通过。讲真,这个问题很难被发现哒。

电磁炮的最后搭建

线圈一定要多一点,炮弹塞入炮口的时候在线圈的下半部分,因为要加速到线圈的中间,然后射出去。

stm32按键程序

这个程序我并没能写出来,最后依然是大佬赶出来的~~

#include "sys.h"
#include "delay.h"

void KeyBoard_Init()
{
		GPIO_InitTypeDef GPIO_InitStruct;
		
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
		GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
		GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
		GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
		GPIO_Init(GPIOA,&GPIO_InitStruct);
	
		GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; 
		GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;
		GPIO_Init(GPIOA, &GPIO_InitStruct);
		GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
		GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
}


u8 Read_KeyValue(void)
{
		u8 KeyValue=0;
		if((GPIO_ReadInputData(GPIOA)&0xff)!=0x0f) 
		{
				delay_ms(10); 
				if((GPIO_ReadInputData(GPIOA)&0xff)!=0x0f)
				{
						GPIO_SetBits(GPIOA, GPIO_Pin_0);
						GPIO_ResetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
						switch(GPIO_ReadInputData(GPIOA)&0xff)
						{
								case 0x11: KeyValue = 1; break; 
								case 0x21: KeyValue = 5; break;
								case 0x41: KeyValue = 9; break; 
								case 0x81: KeyValue = 13;break;
						}
						GPIO_SetBits(GPIOA, GPIO_Pin_1);
						GPIO_ResetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_2 | GPIO_Pin_3); 
						switch(GPIO_ReadInputData(GPIOA)&0xff)
						{
								case 0x12: KeyValue = 2; break;
								case 0x22: KeyValue = 6; break;
								case 0x42: KeyValue = 10;break; 
								case 0x82: KeyValue = 14;break;
						}
						GPIO_SetBits(GPIOA, GPIO_Pin_2);
						GPIO_ResetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3); 
						switch(GPIO_ReadInputData(GPIOA)&0xff) 
						{
								case 0x14: KeyValue = 3; break;
								case 0x24: KeyValue = 7; break;
								case 0x44: KeyValue = 11;break;
								case 0x84: KeyValue = 15;break; 
						}
						GPIO_SetBits(GPIOA, GPIO_Pin_3);
						GPIO_ResetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2); 
						switch(GPIO_ReadInputData(GPIOA)&0xff)
						{	
								case 0x18: KeyValue = 4; break;
								case 0x28: KeyValue = 8; break; 
								case 0x48: KeyValue = 12;break; 
								case 0x88: KeyValue = 16;break;
						}
						GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3); 
						GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7); 
//						while((GPIO_ReadInputData(GPIOA)&0xff)!=0x0f);
						return KeyValue;
						
				}
		}
		return 0;
}

这个是不能放在定时器中断里面,不然会出现死循环

其他

然后补充一下多级菜单就可以了,这里及其考验逻辑能力,基本逻辑控制能力很重要!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值