根据比赛手动车要求,需要上6cm高的台子,在台上拍灭对应的灯,此后夹取物料到自动车上,实现自动车和手动车的结合。手动车从主要对机械队友要求高一些,因为需要设计一些机械结构,比如机械臂很常见的平行四边形结构,这也是我后来见过才知道的,其实还有很多结构,只是我没学过机械的知识。有些结构确实简单,而且电控也调试的很方便。我们的手动车就不一样了,直接使用舵机堆叠,四个MG995舵机,加上上台舵机一共五个舵机,手动车比自动车都重,上台的时候还需要摆动机械臂,改变重心位置,不然根本不能上台。我们还需要舵机同步,不然一个舵机力度是不够的,但是不可能实现真正的同步,只能减小误差,所以调试的过程中两个车臂容易错位,反正很难受。
自动车主要遥控按键控制舵机,需要蓝牙和舵机PWM控制,其实也不难。蓝牙只需要串口就行,执行简单的字符接收语句,就可以接收来在遥控按键的字符。PWM就是和电机控制是一样的程序,蓝牙遥控就需要用一个串口。遥控有一个小技巧,在每个字符使用后都加一个停的动作,比如车按一下前进,后面字符加一个停车的字符,就可以完美实现车的遥控,机械臂也是一样的,可以控制使用按键一下一下的控制。
以定时器4为例,代码如下。
void TIM4_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstruct;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
TIM_TimeBaseInitstruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitstruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitstruct.TIM_Period=arr;
TIM_TimeBaseInitstruct.TIM_Prescaler=psc;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitstruct);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM4, &TIM_OCInitStructure);
TIM_Cmd(TIM4, ENABLE);
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
}
串口的程序需要的语句:
char res;
res=USART_ReceiveData(USART1); //接收数据
其实写这些是为了为校内赛留一些记忆,现在写也真写不出来什么,而且单片机我觉得慢慢会淘汰,后面微型计算机会越来越多,但是单片机有必须得会,毕竟要从易到难,需要单片机来过渡,加油坚持下去。