STM32F407ZGT6控制舵机

编程入门 行业动态 更新时间:2024-10-07 03:25:08

STM32F407ZGT6控制<a href=https://www.elefans.com/category/jswz/34/1758010.html style=舵机"/>

STM32F407ZGT6控制舵机

STM32F407ZGT6核心板控制舵机

  • 大概思路
    • 定时器初始化
      • 改变占空比

大概思路

控制舵机主要由单片机输出PWM波(可调脉冲宽度)。控制定时器(高级,通用均可)TIMX_init(int arr,int psc)产生可控方波,改变arr设置其周期为20ms(可使用逻辑分析仪测周期频率等),频率的计算为: F = TIM_CLK/{(arr+1)*(psc+1)}。然后通过改变占空比来改变高电平持续时间从而改变舵机旋转角度,通常为0.5ms对应0度,2.5ms对应180度,其它角度可换算。

定时器初始化

使用的定时器为TIM9

void TIM9_init(int arr,int psc)   //舵机
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE);  	 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); 	//使能时钟GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_TIM9);GPIO_PinAFConfig(GPIOE,GPIO_PinSource6,GPIO_AF_TIM9);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;           //GPIOF9GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉GPIO_Init(GPIOE,&GPIO_InitStructure);              //初始化TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM9,&TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
///**************TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;//输出同相TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
//	TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;TIM_OCInitStructure.TIM_Pulse = 500; TIM_OC1Init(TIM9, &TIM_OCInitStructure); TIM_OCInitStructure.TIM_Pulse = 500; TIM_OC2Init(TIM9, &TIM_OCInitStructure); TIM_Cmd(TIM9, ENABLE);  //使能TIM9}//*************
main函数调用
TIM9_init(servoArr-1,410-1);//  初始化
TIM_SetCompare1(TIM9,1024);//改变占空比

改变占空比

TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t CCR)
具体通道可定时器可设置。
占空比P=CCR/(ARR+1)
ARR即定时器初始化的ARR,CCR可视为周期
比如ARR设置为8200时周期为20ms,要设置0.5ms的占空比,即
0.5 / 20 = CCR /(8200+1),可求CCR
PWM 信号的周期 T = ARR * (1/CLK_cnt) = ARR*(PSC+1) / 72M
(不一定为72M,具体看芯片晶振)

更多推荐

STM32F407ZGT6控制舵机

本文发布于:2024-02-27 16:12:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1707306.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:舵机

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!