STM32CubeMX配置PWM实现舵机控制

STM32CUBEMX配置PWM,控制舵机

舵机

简介

舵机(Servo),由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。其控制方式为PWM控制,通过调节控制信号的占空比来实现舵机转动指定角度。驱动舵机的PWM信号周期需要为20ms(50HZ),而控制脉宽为0.5~2.5ms。
黄色为信号线,红色是5V电源线,褐色(或黑色)是GND。

舵机控制

PWM

pwm中文名叫脉冲宽度调制,
pwm的频率:(Hz)
是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);
也就是说一秒钟PWM有多少个周期
pwm的周期:(s)
T=1/f
周期=1/频率
占空比:
是一个脉冲周期内,高电平的时间与整个周期时间的比例
单位: % (0%-100%)

CubeMX配置

基础配置,选择高速外部时钟,配置时钟树(我这里芯片为F103ZET6,最高频率是72MHz)。
配置定时器TIME(PWM模式):
舵机的信号控制周期(T)为20ms,
T= 1 / (系统时钟频率 / Prescaler(分频系数)) * CounterPeriod(计数周期,计数次数) ;
T=1 / (72MHz / (719 +1) ) * (1999+1) = 20ms;

设置初始脉冲时间为0.5ms,不旋转。

可以看到PWM的通道1和2分别是通过PA0和PA1输出的。

代码

初始化PWM。
新建两个文件,一个 .c和一个 .h文件(名字自己命名),我这里是pwm.c和pwm.h;
pwm.c代码:

#include "pwm.h"

void SG90_Rotate(uint16_t ch,uint16_t Degrees)
{
	switch(ch)
	{
		case 1:
			__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,Degrees);   //一个周期内(20ms)有0.5ms高电平
			HAL_Delay(1000); break;
		case 2:
			__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,Degrees);   //一个周期内(20ms)有0.5ms高电平
			HAL_Delay(1000); break;
		default:
			break;
	}
}


pwm.h代码:

#ifndef __PWM_H
#define __PWM_H

#include "main.h"
#include "tim.h"
#include "gpio.h"

#define Degrees_0    50  //原点位置
#define Degrees_45	100 //45度位置
#define Degrees_90   150 //90度位置
#define Degrees_135  200 //135度位置
#define Degrees_180  250 //180度位置


void SG90_Rotate(uint16_t ch,uint16_t Degrees);

#endif


主函数里的代码,main.c
好了,以上就是我本次分享的STM32通过PWM进行控制舵机旋转。

物联沃分享整理
物联沃-IOTWORD物联网 » STM32CubeMX配置PWM实现舵机控制

发表评论