STM32学习之PWM驱动舵机(江科大6-4集总结)

本文详细介绍了如何通过PWM驱动舵机,涉及RCC时钟配置、TIM定时器库函数如TIM_OCxInit、TIM_OCStructInit等的使用,以及GPIO的初始化和输出控制。重点讲解了配置输出比较单元、设置占空比和同步多通道PWM的应用实例。
摘要由CSDN通过智能技术生成

一、PWM驱动舵机的基本步骤

1.配置RCC时钟
2.配置时基单元
3.配置输出比较单元(包括CCR的值、输出比较模式、极性选择、输出使能)
4.配置GPIO,把PWM对应的GPIO口,初始化为复用推挽输出的配置(PWM和GPIO的对应关系是什么,可以参考引脚定义表)
5.运行控制,启动计数器
在这里插入图片描述

二、TIM定时器库函数学习

1.TIM_OCxInit() x:1~4 :用结构体初始化输出比较通道(不同的通道对应的GPIO口是不一样的,参考引脚定义表)
2.TIM_OCStructInit() :给输出比较结构体赋一个默认值的
3.TIM_SetComparex x:1~4 :用来单独更改CCR寄存器的值(在程序中更改占空比就需要用到这个函数)
4.TIM_CtrlPWMOutputs() :仅高级定时器使用,在使用高级定时器输出PWM时,需要调用此函数,使能主输出,否则PWM将不能正常输出

三、配置RCC时钟

四、配置时基单元

在之前定时中断的视频中解析过,等看过定时中断的视频再放文章链接在这里插入图片描述

五、配置输出比较单元

	TIM_OCInitTypeDef TIM_OCInitStructure;    //定义输出比较结构体
	TIM_OCStructInit(&TIM_OCInitStructure);   //初始化输出比较结构体
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;     //输出比较模式
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;    //输出比较极性(高级性即极性不翻转,REF波形直接输出)
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    //输出比较使能
	TIM_OCInitStructure.TIM_Pulse = 0;		//配置CCR(CCR、PSC、ARR共同决定PWM的周期和占空比)
	TIM_OC2Init(TIM2, &TIM_OCInitStructure);    //初始化输出比较通道(初始化TIM2的通道2)

CCR、PSC、ARR共同决定PWM的周期和占空比

六、配置GPIO

在这里插入图片描述
定时器2的输出比较通道2对应的GPIO口是PA1,不同通道对应的GPIO口不一样

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //模式需改为复用开漏/推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

七、运行控制,启动计数器

TIM_Cmd(TIM2, ENABLE);   

此外:1.AFIO引脚重映射的学习也在此集(29:47开始)

2.将多个输出比较通道初始化,就能同时使用多个通道来输出多个PWM了
对于同一个定时器不同通道输出的PWM,因为不同通道是共用一个计数器的,所以它们的频率是一样的;它们的占空比由各自的CCR决定,所以占空比可以各自设定;由于计数器更新,所有PWM同时跳变,所以它们的相位是同步的
所以驱动多个舵机或者直流电机,使用同一个定时器的不同通道的PWM,也是完全可以的
在这里插入图片描述
3.舵机的周期要求是20ms,即PWM的周期是50HZ,有为了方便计算,将ARR和PSC分别设置为20000-1、72-1,根据PWM的占空比公式计算可知,0.5ms/20ms = CRR/20000 ,CRR = 500,所以舵机转0-180度,高电平持续时间0.5ms-2.5ms,CRR值500-2500;为了调用舵机转角函数时更直观,封装一个转换函数:

void Servo_SetAngle(float Angle)
{
	PWM_SetCompare2(Angle / 180 * 2000 + 500);
}

完整程序:
链接:https://pan.baidu.com/s/1eeHtYikNnxP-CvlI8cOXzQ?pwd=42jp
提取码:42jp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值