STM32之舵机转动————寄存器版

以STM32F407VGT6单片机为例---------控制舵机转动的角度0-180°

#include "pwm.h"
/*
函数名:tim3_ch4_pwm
函数功能:舵机配置
返回值:void
形参:void
函数说明:
红色线 --- 5V
棕色线 --- GND
橘色线 --- PB1 --- TIM3_CH4
*/

void tim3_ch4_pwm(void)
{
	/*IO控制器配置*/
	//端口时钟使能
	RCC->AHB1ENR |= (1<<1);
	//端口模式配置-------复用模式
	GPIOB->MODER &= ~(3<<2);
	GPIOB->MODER |= (2<<2);                 //复用
	//输出类型
	GPIOB->OTYPER &= ~(1<<1); 
	//输出速度
	GPIOB->OSPEEDR &= ~(3<<2);
	//上下拉
	GPIOB->PUPDR &= ~(3<<2);
	//复用功能寄存器
	GPIOB->AFR[0] &= ~(0xf<<4);
	GPIOB->AFR[0] |= (2<<4);              //PB1复用到TIM13_CH1
	
	
	/*通用定时器控制器配置*/
	//定时器时钟使能
	RCC->APB1ENR |= 1 << 1;//打开TIM3时钟
	//CR1
	TIM3->CR1 &=~ (3 << 5);//选择边沿对齐模式
	TIM3->CR1 &=~ (1 << 4);//递增计数
	TIM3->CR1 &=~ (1 << 3);//循环计数
	//设置一个1ms周期    ARR:1000      PSC:84
	//PSC  
	TIM3->PSC = 840 - 1;
	//ARR  
	TIM3->ARR = 2000 - 1;
	/*输出比较配置*/
	//SMCR
	TIM3->SMCR &=~ (7 << 0);//选择内部时钟源
	
	//CCMRx
	TIM3->CCMR2 &=~ (3 << 8);//配置通道1为输出
	TIM3->CCMR2 |= 1 << 11;//使能通道1输出比较影子寄存器预装载
	TIM3->CCMR2 |= 6 << 12;//选择为PWM1模式
	//CCER
	TIM3->CCER |= 1 << 12;//使能输出比较
	TIM3->CCER &=~ (1 << 13);//有效电平为高电平
	//PSC
	//CCRx
	TIM3->CCR4 = 500;                    //比较寄存器初始值
	//EGR
	TIM3->EGR |= (1<<0);               //人为产生更新事件,更新到影子寄存器
	
	//使能通道1              
	//计数器使能
	TIM3->CR1 |= (1<<0);
}



void SetServoAngle(unsigned char angle)
{
	unsigned short pulse = 0;
	//针对舵机可转角度限辐
	if(angle <= 5)		angle = 5;
	if(angle >= 175)	angle = 175;
	//将角度值转换为脉冲值  
	pulse = (unsigned short)(50 + angle * 100 / 90.0);  //此转换公式需根据pwm的arr及psc配置来做相应变化
	
	TIM3->CCR4 = pulse;
}
#include "main.h"
#include "pwm.h"



int main()
{
	
	

	
	tim3_ch4_pwm();//舵机初始化
	printf("初始化成功!!!!!!!\r\n");
	
	SetServoAngle(90);//转动角度90°
	
	while(1)
	{
		
		
		
	}	
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
舵机驱动是STM32的一种应用方式,通过使用PWM输出信号来控制舵机转动角度。PWM(脉冲宽度调制)是一种通过改变脉冲信号的高电平时间来控制电机或舵机转动角度的技术。在STM32中,可以使用定时器模块来生成PWM信号,并通过改变占空比来控制舵机的位置。 具体来说,舵机驱动需要以下几个步骤: 1. 配置定时器:选择一个合适的定时器,并配置其工作模式和时钟源。 2. 配置输出通道:选择一个定时器的输出通道,并配置其工作模式为PWM输出模式。 3. 设置PWM周期:根据舵机的要求,设置定时器的重载值,确定PWM信号的周期。 4. 设置占空比:通过改变定时器的比较值,可以改变PWM信号的占空比,从而控制舵机转动角度。 5. 启动定时器:使能定时器开始生成PWM信号。 通过以上步骤,可以实现对舵机的驱动控制。具体的代码实现可以参考引用\[3\]中的学习记录文章,其中详细介绍了如何在STM32中使用PWM输出来驱动舵机。 #### 引用[.reference_title] - *1* *2* *3* [总结篇:STM32舵机、电机的驱动&OSBoat电路逻辑的梳理](https://blog.csdn.net/weixin_47723114/article/details/127727386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

点灯之王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值