12.[STM32]PWM脉宽调制-舵机控制(一篇足以)

这篇具有很好参考价值的文章主要介绍了12.[STM32]PWM脉宽调制-舵机控制(一篇足以)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🍌
🍌🍌
作者简介:大家好啊,我叫DW,每天分享一些我新学到的知识,期待和大家一起进步
🍋
🍋🍋
系列专栏:STM32
🍎
🍎🍎
🍎🍎🍎
🌞小实验目标:控制舵机旋转🌞
🍊如有写得不好的地方欢迎大家指正🍊
创作时间:🍊🍊🍊2022年5月2日🍊🍊🍊

1. 舵机简介

在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。
舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。
12.[STM32]PWM脉宽调制-舵机控制(一篇足以)
本次实验使用的舵机是MG90S。

1.1 舵机控制

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

因此,我们只需要让IO口产生相应的脉宽就可以控制舵机的角度。如何产生PWM波:11.[STM32]PWM脉宽调制-呼吸灯

2. 占空比调节函数

PWM占空比的调节通过TIM_SetCompare函数进行相应调节。通过查找资料,我们可以知道有
TIM_SetCompare1
TIM_SetCompare2
TIM_SetCompare3
TIM_SetCompare4
共四个,它们分别可以控制着CH1-CH4的占空比。

函数原形:
void TIM_SetCompare1(TIM_TypeDef* TIMx, u16 Compare1)

第一个参数传入相应定时器,本次实验选择TIM3的CH1,故选择TIM_SetCompare1、TIM3。
第二个参数是捕获比较 1 寄存器新值,即定时时间。

例如,我们想要控制舵机旋转,需要产生周期为20ms的脉冲,其操作如下:

 PWM_UserConfig(200-1,7200-1);//50hz 20ms  72000   
 //72 000 000/7200=10 000 Hz
 //10 000*0.020=200 

每次进入中断服务程序间隔时间为:时间=1/频率×次数

重装载值Period为200,也就是计数到200产生一个更新事件或者中断(定时到了)。
计算过程:
时间=1/频率×次数 ,次数=时间x频率=0.020(20ms)x10 000=200

 PWM_UserConfig(200-1,7200-1);

那么,我们想要产生1ms的脉宽该如何操作呢?
x=10 000hz*0.001=10,即Compare1=10,就可以实现舵机旋转45°。

TIM_SetCompare1(TIM3,10)

按照这个方法我们可以计算出其他对应的角度:

TIM_SetCompare1(TIM3,5);//0°
TIM_SetCompare1(TIM3,10);//45°
TIM_SetCompare1(TIM3,15);//90°
TIM_SetCompare1(TIM3,20);//135°
TIM_SetCompare1(TIM3,25);//180°

3.结语

今天的分享就到这里,谢谢大家的耐心阅读,如果觉得有用的话给个👍👍👍

🌜🌜🌜本章结束,我们下一章见🌜🌜🌜

参考资料:
1.STM32固件库手册
2.正点原子STM32不完全手册_库函数版本
3.学习视频链接

资料已上传,需要自取文章来源地址https://www.toymoban.com/news/detail-414539.html

附录:全部程序

//main.c
#include "sys.h"
#include "delay.h"
#include "pwm.h"


 int main(void)
 {		
	 
	 //u8 flag = 0,time = 0;
	 
	 delay_init();
	 PWM_UserConfig(200-1,7200-1);//50hz 20ms  72000   
	 
	 while(1){
		 
			TIM_SetCompare1(TIM3,5);//0
		 delay_ms(500);
		 TIM_SetCompare1(TIM3,10);//45
		 delay_ms(500);
		  // TIM_SetCompare1(TIM3,15);//90
			//TIM_SetCompare1(TIM3,20);//135
			//TIM_SetCompare1(TIM3,25);//180
		  //DuoJi();
		 
 }
}
 
//pwm.c
#include "pwm.h"



void PWM_UserConfig(u16 Period,u16 Prescaler){
	
	
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_InitStructure;
	TIM_OCInitTypeDef PWM_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	
	//PA1 TIM2_CH2
	GPIO_InitStructure.GPIO_Pin = CH1;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_Init(PWM_PROT,&GPIO_InitStructure);
	
	TIM_InitStructure.TIM_Period = Period;
	TIM_InitStructure.TIM_Prescaler = Prescaler;
	TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//不分割
	TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
	TIM_InitStructure.TIM_RepetitionCounter = DISABLE;//不重复计数
	TIM_TimeBaseInit(TIM3,&TIM_InitStructure);
	TIM_Cmd(TIM3,ENABLE);//开启全局使能

	//PWM配置
	PWM_InitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	PWM_InitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能
	PWM_InitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性高
	TIM_OC1Init(TIM3,&PWM_InitStructure);//通道几就选oc几
	
	TIM_OC1PreloadConfig(TIM3,ENABLE);//预装在寄存器 
	TIM_SetCompare1(TIM3,0);//控制占空比
}
void DuoJi(void){

	u16 com[] = {5,10,15,20,25,20,15,10,5};
	
	for(u8 i = 0;i<9;i++){
	
		TIM_SetCompare1(TIM3,com[i]);
		delay_ms(500);
	
	}
}

//pwm.h
#ifndef __PWM_H
#define __PWM_H

#include "sys.h"
#include "delay.h"

#define CH1 GPIO_Pin_6
#define PWM_PROT GPIOA

void PWM_UserConfig(u16 Period,u16 Prescaler);
void DuoJi(void);
#endif



到了这里,关于12.[STM32]PWM脉宽调制-舵机控制(一篇足以)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机中的PWM(脉宽调制)的工作原理以及它在电机控制中的应用。

    目录 工作原理 在电机控制中的应用 脉宽调制(PWM)是一种在单片机中常用的控制技术,它通过调整信号的脉冲宽度来控制输出信号的平均电平。PWM常用于模拟输出一个可调电平的数字信号,用于控制电机速度、亮度、电压等。   产生PWM信号: 单片机内部的定时器/计数器通

    2024年01月23日
    浏览(67)
  • 用STM32CubeMX配置输出PWM信号控制多路舵机(HAL)

    (1)编程平台:Keil5 (2)CubeMX (1)本此使用最小核心板STM32F103C8T6为例 (2)一个舵机:SG90或者MG996等均可 (3)ST-link 下载器 (4)杜邦线若干         舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度

    2023年04月09日
    浏览(44)
  • 【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答

    我们要知道,SG90舵机接收的PWM信号的参数:f=50Hz,T=1/f,所以周期为20ms。 当高电平的脉宽在0.5ms-2.5ms之间时舵机就可以对应旋转到不同的角度。 换句话说,我们要用单片机产生一个 周期(20ms) 的PWM波,然后获得对应这些时长(分别是 0.5ms 、 1ms 、 1.5ms 、 2ms 、 2.5ms )的 高电

    2024年02月13日
    浏览(57)
  • 蓝桥杯STM32 G431 hal库开发速成——按键+PWM综合案例——按键控制PWM驱动舵机

    适用于学习了TIM输出比较(PWM)跟GPIO输入(按键)的新手作为练习的综合项目! PWM(Pulse Width Modulation,脉冲宽度调制)是一种常用的技术,用于通过调节电信号的脉冲宽度(即脉冲的持续时间)来控制模拟系统的电源。在数字电子系统中,由于只能输出固定的高(通常为

    2024年01月21日
    浏览(60)
  • stm32 笔记 PWM输入模式测量脉宽和占空比原理

    在测量占空比之前,我们先一步一步来,先让 STM32 可以测量脉宽。 TIM3_CH1(tim3 定时器通道 1)捕获模式测量脉宽步骤如下: 1.输入捕获到 PWM 上升沿触发 2.发送中断,通知用户此时被触发,用户获得当前计数器值 3.计数器清零,然后继续计数... 让 STM32 芯片一直重复这三步即

    2024年01月15日
    浏览(41)
  • 【FPGA基础】基于PWM脉宽调制的呼吸灯设计(Vivado)

    软件:Vivado2019.1 硬件:Zynq7010 仿真:Vivado Simulator 众所周知,灯的亮度和加在其两端的电压有关。电压越高,亮度越亮,反之越暗。 于是,设计一个呼吸灯就变得很简单了。让IO的输出电平由低到高,再有高到底有规律的变化,就能达到呼吸效果。 现在问题来了,IO的输出电

    2024年02月07日
    浏览(71)
  • FPGA综合设计实验:基于PWM脉宽调制的呼吸流水灯设计

    目录 一、引言 二、项目准备 1.项目预期目标 2.项目原理及总体实现思路

    2024年02月13日
    浏览(60)
  • 【STM32】PWM:脉冲宽度调制

    注意点: TIM_Period----指要进行比较的值Compare TIM_Prescaler---- 指要进行分频的值【分频值/原始时钟值】 PWM是一种 周期固定,脉宽可 调整 的输出波形。 1) 在程序员写入CCR1(比较值)的时候,值是不会传输到影子寄存器中的 2)影子寄存器百年直接被访问 有8种输出模式 PWM输出

    2024年02月22日
    浏览(42)
  • STM32使用PWM(脉冲宽度调制)

    脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出(1或0)来对模拟电路进行控制的一种非常有效的技术。 PWM应用场景如下: 占空比:占空比是指在一个脉冲循环内,通电时间(可能是高电平,可能是低电平)相对于总时间所

    2024年02月13日
    浏览(41)
  • STM32之17.PWM脉冲宽度调制

     一·LED0脉冲宽度调制在TIM14_CHI,先将LED(PF9)代码配置为AF推挽输出模式,将PF9引脚连接到TIM14,    二·在配置TIM14定时器脉冲宽度 调动比较值1-100内,越小灯越亮 如果PWM信号的频率很高,比如大于80Hz,那么人眼就无法感知到灯的闪烁,而只能感知到灯的亮度。这时候,占

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包