《飞控开发基础教程9开源编队无人机PWM电机控制.docx》由会员分享,可在线阅读,更多相关《飞控开发基础教程9开源编队无人机PWM电机控制.docx(11页珍藏版)》请在第一文库网上搜索。
1、COCOF1Y教程疯壳无人机系列目录、jI1二、占空比简介1三、STM32的PWM模式2四、寄存器2五、PWM电机控制实验3A1开源编队无人机A1OPENSOURCEFORMATIONDRONE高级功能Q激光,压光波定点有头无头3D型治双定高双模式令公QfH4)W1F1aB传遥控控制视觉追踪初觉追踪视觉追除控制飞行图码强色形状/扁日七)视觉跟丽图形化多机支持图形化自主巡线A1语音控制3动小车编队飞行编程飞行资料地址:httpwww.fengke.c1ubPWM(电机控制)一、PWM简介脉冲宽度调制(PWM),是英文“Pu1seWidthModu1ation的缩写,简称脉宽调制,是利用微处理器的
2、数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。PWM在生活中非常的常见,小到呼吸灯的闪烁,达到航天飞船都会应用到PWM技术。PWM的波形如下图所示。t2T二、占空比简介占空比是脉冲宽度调制技术中常用专业术语,占空比是指在一个时钟脉冲周期(T)内,高电平(U)的时间占总周期时间的比值,即占空比(duty)=t1T*100%如下图所示是一系列典型的脉冲波形。4msI6ms6ns4ms8ns2msIIIIII第一个PWM波,周期为IOms,高电平的时间为4ms,所以占空比为40%,同理第二个PWM波为60%,第三个为80%o一般地,占空比反映了
3、等效幅值的大小:占空比越大,等效幅值越高;占空比越小,等效幅值越低。如下图所示为不同占空比对应等效幅值的关系示意图。PuIseWidthModu1ation(PWM)三、STM32的PWM模式STM32上定时器有专门的PWM模式,它的原理是通过定时器使用比较输出的方式如下图所示产生波形。ARR为自动重载寄存器,CCR为捕获/比较寄存器,CNT就是定时器的计数器,CNT的值从。开始递增,使用PWM模式后,可以设置有效电平,以及PWM的模式。上图所示的是当CNT的值小于CCRx时,输出低电平,当CNT的值大于CCRX时,输出高点平,所以我们可以通过改变ARR的值来改变PWM的周期,改变CCRx的值
4、来改变PWM的占空比,从而实现任意频率任意占空比的PWM波。四、寄存器STM32的PWM输出模式涉及到以下寄存器。(1) TIMx_CR1:定时器控制寄存器1,如下图所示。1514131211109876S43210ReservedCKD(IARPECMSDIROPMURSUDISCENWCWPWrwrwrwrwrwrwrw其中CKD来设置时钟分频,ARPE来使能自动重载预装载,CEN来使能计数器。(2) TIMx-CCMR1:定时器捕获比较模式寄存器,如下图所示。15141312111098754321O2CEOC2MZOOC2PE10C2FECC2S1:0)1CEOCIM2:0OC1PEO
5、C1FECCIS(I刈C2F3:0c2psqx)IC1F(3)ICIPSe(1:0M|rwIrW1rWrwIrwIWIIWMIrwIrwJrwrwIrwwIrwOC1M来配置PWM的模式,PWM模式1,CNTCCR1时为无效状态;PWM模式2,CNTCCR1为有效状态。OCIPE来使能预装载。CCIS来配置通道的输入输出模式(默认为输出模式)。(3) TIMx_CCER:捕获比较使能寄存器,如下图所示。1514131211109876543210ReservedCC4PCC4EReservedCC3PCC36ReservedCC2PCC2EReservedCC1PCC1Erwrwrwrwrwr
6、wrwrwCCIP来配置输出极性,可以选择高电平有效或者低电平有效。CC1E来使能捕获/比较。五、PWM电机控制实验PWM电机控制实验使用STM32的定时器的PWM输出功能,可对飞控上的电机所在的引脚,产生不同占空比的PWM,从而实现让四个电机以不同的速度旋转。(注意:做实验的时候,占空比不要调节过大,该实验会使旋翼转动,要小心无人机的旋翼划伤手)无人机的四个旋翼如下图所示。根据原理图,可以看到四个电机分别由两个AO9926C控制,AO9926C其实想当于是两路的N沟道MOS管,两个AO9926C的四个MOS管的G极(栅极)接口分别是:PB6、PB7PB8、PB9,如下图所示。DGTIM4_C
7、H3T1M4_CH4,即定时器4的输出通道14。配置输出PWM的代码编写的思路如下:1管脚配置1、定义结构体;2、使能时钟;3、填充结构体;4、装载结构体。2定时器配置1、定义结构体;2、使能时钟;3、填充结构体;4、装载结构体。3PWM输出参数配置1、定义结构体;2、填充结构体;3、装载结构体;4、使能输出。4改变占空比1、改变占空比参数。定时器PWM输出的初始化代码如下:129voidTim4_init(void)130-1311321331341351361371381391401411421431441451461471481491501511521531541551561571581
8、59160161162163164165166167168169uint16_tTIh1Presca1er;TIM-TimeBaseInitTypeDefTIM-TimeBaseStructure;TIM_OCInitTypeDefTIM_OCInitStructure.GPIOeInitTypeDefGPIOeInitStructure;RCC_APB1PeriphC1ockCmd(RCC.APBIPeriph.T1rf4.ENAB1E).RCC_APB2PeriphC1ockCmd(RCC.APB2Periph_GPI0B,ENAB1E);/TIM4.CHPCH4GPI0_InitStru
9、cture.GPIO_Pin=GP1e1Pin_6GPIo-Pin_7GPI(1Pin_8GPI0.Pin.9.GPI0InitStructure.GPIOeSpeedGPI0Speed50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPI0_Init(GPI0B,&GPI0_InitStructure);TIK1Presca1er=SystemCoreC1ock/(TIM4_PWM_MAX+1)/TIM4_PWM_HZ-1;TIM_TimeBaseStructure.TIM_Period=TIM4_PWM_MAX,TIM-TimeBase
10、Structure.TIM-Presca1er=TIM-Presca1er,TIM-TimeBaseStructure.TIM.C1ockDivision=TIM_CKD_DIV1;TIM-TimeBaseStructure.TIk1CounterMode=TIM-CounterMode_Up;TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure),T1M-OCInitStructure.TIh1OCMode=T1h1oCMode-PWM1TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enab1e.T
11、IM,OCInitStructure.TIM-Pu1scTIM4.DUTY;TIhCOCInitStructure.TIh1OCPo1arity=TIM_OCPo1arity_High;TIMjDC1Init(TIM4,ftTIH_0CInitStructure);T11i1OC1PreIoadConfig(TIM4,TIS1OCPreIoad-Enab1e);TIM.0C2Init(TIM4,&TIM_OCInitStructure).TIM.0C2PreIoadConfig(TIM4,TIM_OCPre1oad_Enab1e);TIM_0C3Init(TIM4,&TIM_OCInitStr
12、ucture).TIM0C3PreIoadConfi8(TIK4,TIMOCPre1oadEnab1e);TIM.0C4Init(TIM4,StT1M-OCInitStructure);TIM_0C4PreIoadConfig(TIM4,TIM_OCPre1oad_Enab1e),TIM-ARRPre1oadConfig(TIM4,ENAB1E).TIM_Cmd(TIM4,ENAB1E),装载不同的CCR值,产生不同的占空比,从而使四个电机以不同的速度旋转,代码如下图所示。179voidmotor_out(s16pwmMOTOR-NUM)180181u8i;182for(i=0;i=2)195
13、196PWMO=IOOO+(u16)pwm;197PWM1=IOOO+(u16)pwm1;198PWM2=1000+(u16)pwm2;199PWM3=1000+(u16)pwm3;200201二e1se202terrorP1easedefineF1Y_TYPE!203204endif其中TIM4_CH1装载CCR值为25、T1M4_CH2装载CCR值为50、T1M4_CH3装载CCR值为75、TIM4CH4装载CCR值为IOOo如下图所示。s16motor4J=25,50,75,100);intmain(void)/中断优先级组别设置NVIC_PrioritvGroupConfig(NVIC_Priori|tvGroup_4);/初始化系统滴答定时器一AiJ日89012