STM32自学历程——舵机操控

首先感谢

         感谢江科大up的视频讲解。

STM32操控舵机

舵机的运行原理

舵机一共只有3个接口,电源和GND就占了两个,用于传输的就只有一个口,所以舵机的操作还是挺简单的。通过给舵机发送方波信号来实现舵机的转动,而通过设置方波信号的占空比来实现舵机的旋转角度,占空比与舵机旋转角度的关系如下。

输入信号脉冲宽度就是输入信号的占空比。周期为20ms是舵机的运行要求,这时已经定死了的。

怎么将方波传输给舵机?

这里还是用定时器,利用OC(输出比较),设置好CCR,然后设置对应定时器的对应比较通道,这个看引脚图,因为这是已经定死了的。

PWM周期就是从0计数到自动重装寄存器ARR的过程,占空比的关键就是高电平的持续时间,但这里是通过计数来类比的所以高电平时间就类比为CCR的值。这里设ARR为20k,则存在以下关系。

可以实现同一个定时器下所有比较通道均打开,如下图就是比较通道1和2都打开了

只需要修改1和2就行了,后面的结构体变量都是一样的,最多可以4个一起上。

代码

main.c部分

#include "stm32f10x.h"                  // Device header
#include "pwm.h"
#include "sevor.h"
#include "key.h"
uint8_t KeyNum;
float Angle;
int main(void)
{	
	OLED_Init();
	PWM_Init();
	Key_Init();

	OLED_ShowString(1,1,"Angle=");
	while (1)
	{		
			KeyNum=Key_GetNum();
		if(KeyNum==1)
			Angle+=30;
		if(Angle>180)
		{
			Angle=0;
		}
		Servo_SetAngle(Angle);
		OLED_ShowNum(1,7,Angle,5); 
	}

}

舵机封装函数部分

sevor.c

#include "stm32f10x.h"                  // Device header
#include "PWM.h"
void Servo_Init(void)
{
	PWM_Init();
}

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

servo.h

#ifndef SEVOR_H
#define SEVOR_H

void Servo_Init(void);
void Servo_SetAngle(float Angle);
#endif

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值