目录
四轴硬件知识
通过STM32输出PWM方波
一、四轴硬件知识
四轴无人机需要的硬件大致有以下几种:电子调速器(俗称电调),螺旋桨,电子(一般用无刷电机),飞行控制板,机架,电池,充电器,遥控器等。
电子调速器
1.电子调速器俗称电调,它的作用是将飞控板的控制信号转变为电流大小,以此控制电机转速。
2.电机在正常工作的时候会有大约3A的电流,如果不加入电调,飞控板就无法承受如此大的电流,并因此无法驱动电机。
3.另一方面,电调也作为变压器,将电池的电压,转换为需要的5V电压,给遥控器和飞控板供电。
4.电调的规格:电调一般都会标上多少A,如20A、40A,即电调能够提供的最大电流,一般需要跟电机和螺旋桨的规格进行匹配。如2212电机加上1045螺旋桨,其电流高达5A,一般需要用到30A,40A的电调为好。
5.四轴要求快速响应的电调,编程可以直接将电调接至遥控器接收机的油门输出通道。
6.购买的电调设置必须一致,防止转速不一致。由遥控器设置电调时必须接上电机,因为提示声是由电机发出的。
螺旋桨
1.螺旋桨的作用是将电机功率转化为推进力和升力。高速旋转时,螺旋桨的上下两面会形成压力差,并因此产生向上的升力。一般四轴为两个正桨+两个反桨。
2.螺旋桨的规格:如8060,80指的是桨的直径8英寸,60指的是螺距6英寸。
3.正桨装在顺时针旋转的电机上,反桨装在逆时针旋转的电机上。
4.区分正反桨:正确安装之后,顺时针旋转产生向下风力的时正桨,逆时针旋转产生向下风力的时反桨,用正桨反桨的作用是为了消除自旋。
5.一般来说,无论正反桨,安装的时候有字的一面朝上。
电机
1.电机分有刷电机、无刷电机。由于无刷电机耐用、力气大,一般四轴采用无刷电机。
2.型号:如2212,22指的是电机转子直径,也是电机的宽度;12指的是电机转子高度,也即电机整体高度。二者数字越大,电机的功率越大。
3.转速:Kv值:指的是外加1V电压对应的每分钟空转转速。如1000Kv,即外加1V电压时,n0=1000r/min。
飞行控制板
用于接受遥控信号并在处理后控制电机转速,详细功能介绍见前面三篇文章。
电池
1.四轴电池一般选用高倍率的锂复合物电池,因为同等容量之下它最轻,能让飞行效率最大化。
2.容量:如1000mah,即可以以1000ma电流放电持续1小时。
3.电池片数:1节电池是3.7V额定电压,满压为4.2V,多节电池为串联关系,如6s即6节电池。
4.放电能力:如1000mah 5c,即电池可以以5000mA最大电流强度放电。
5.型号:综合前面几点,如20000mah 6S 25C,即6节电池串联在一起,每节电池可以以20000ma电流持续放电1小时,最大放电电流为20000*25=500A。
机架
螺旋桨之间不可以太靠近,防止产生乱流相互影响,降低飞行效率。
遥控器
遥控器可以控制四轴的上下、左右、前后、旋转,最低为4通道。
分为两种:日本手、美国手。前者油门在右边,后者油门在左边。
充电器
1.型号与电池类似。
2.不可以用大电流进行快充,否则电池容易损坏。
3.平衡充电:由于工艺原因,无法保证一同供电的几片电池完全一致,因此更多时候它们的充放电特性不一,由此需要分别对内部单节电池充电。如动力锂电池,需要两组线,一组输出线2根,一组单节引出线,与其片数有关,将这些线都插入平衡充电器即可。
搭配问题
1.电机与螺旋桨搭配:螺旋桨越大,升力越大,但由此需要的驱动力也更大,因此需要与电机匹配。一般来说,螺旋桨需要的转速越大,升力越大,则需要更大力量的电机,即Kv值更小的电机(Kv值表示加1V电压得到的空载转速,加同样的电压下,得到的转速越小,说明电机力量越大)。
因此大的螺旋桨需要小Kv值电机,小的螺旋桨需要大Kv值的电机。
如果大螺旋桨匹配了大Kv值电机,电机会因此不够力,尽管Kv值很大,但是会让转速无法达到该Kv值,转速依然很低,且电机电调因此容易损坏。而小螺旋桨匹配了小Kv值电机,电机够力,但因为Kv值小,转转速不够,升力不够,无法起飞。
一般1000Kv匹配10寸左右的螺旋桨。
2.电池匹配:与电机、螺旋桨、要求飞行时间有关。电池的选择决定了飞行的时间。
一般电池型号的三个参数越大,电池越重。
一般大螺旋桨采用3S以上的大容量高C的锂电池(最低1500mah,20c,3s)
小型四轴采用小容量小c3s以下锂电池。
注意电池最大放电电流要大于各个电机的总电流,如果小于电机总电流,c过小,电池一致超负荷大电流放电,会导致电池损毁乃至自燃。
二、通过STM32输出PWM方波
STM32有两个PWM模式:PWM1与PWM2。
通过一个定时器,如TIM,利用比较寄存器,让定时器装入重装载值和比较值后进行计数,并输出电信号。当计数值等于比较值的时候改变输出电信号的电平极性,即可输出PWM方波改变比较值TIMx_CCR1即可改变输出的PWM方波占空比。
PWM1:向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为无效电平,否则为有效电平。
PWM2:在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平。
一般要做的初始化配置有:相关定时器的配置、相关GPIO口的配置、PWM模式配置、输出比较通道的配置、使能TIM在CCRx上的预装载寄存器。
具体配置代码如下:
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB1Periph_TIM4,ENABLE);
TIM_DeInit(TIM4);
TIM_DeInit(TIM2);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_TIM2);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_TIM2);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_Init(GPIOA,&GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period=MOTORS_PWM_PERIOD;
TIM_TimeBaseStructure.TIM_Prescaler=MOTORS_PWM_PRESCALE;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_ClockDivision=0;
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse=0;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;
TIM_OC2Init(TIM4, &TIM_OCInitStructure);
TIM_OC1Init(TIM4, &TIM_OCInitStructure);
TIM_OC3Init(TIM2, &TIM_OCInitStructure);
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM4,ENABLE);
TIM_ARRPreloadConfig(TIM2,ENABLE);
TIM_Cmd(TIM4, ENABLE);
TIM_Cmd(TIM2, ENABLE);