STM32F103系列驱动舵机

舵机原理

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
在这里插入图片描述

配置定时器

由公式:
定时器溢出时间(s)=( (自动重装载值-1)*(预分频值-1) )/定时器输入时钟频率(HZ)
自动重装载值:arr
可编程预分频器: psc
以定时器3为例要配置一个20ms为周期的时钟脉冲:
20ms=0.02s
根据公式定时器3在APB1时钟总线下频率为:36MHZ(1MHZ=1000000HZ)
(arr-1) * (psc-1) = 36MHZ * 0.02s
(arr-1) * (psc-1) =720000
只要保证(arr-1) 和(psc-1)的积等于720000那么这俩的值可以随意,但是不建议将重装载值分的太多不方便后面计算。下面是以arr=200 psc是7200
注:如果使用的是正点原子的库函数版本则需要用72MHZ来计算定时器,而如果直接使用STM32CubeMX则定时器输入时钟频率为36MHZ
在这里插入图片描述
当定时器设置是向上计数模式
要让舵机转动45°那么就需要:

1ms/20ms=0.05
200*0.05=10
设置PDCx装入的新的占空比是:200-10=190

代码

定时器3初始化

void TIM3_PWM_Init(u16 arr,u16 psc)
{  
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	
	//初始化定时器、引脚组B和重映射
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE); 
	
	GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);	//重映射定时器TIM3
 
   	//使能引脚组B
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
 
   
	TIM_TimeBaseStructure.TIM_Period = arr; 
	TIM_TimeBaseStructure.TIM_Prescaler =psc; 
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
	
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
	TIM_OC2Init(TIM3, &TIM_OCInitStructure);  

	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);	//启动计数  
 
	TIM_Cmd(TIM3, ENABLE);  //定时器3使能开始
	
}

	//main函数下
	TIM3_PWM_Init(199,7199);	 //定时器使能
	TIM_SetCompare2(TIM3,190);   //舵机转动45°



  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘉鑫的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值