STM32--舵机驱动

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

目录

舵机接线:

数字舵机与模拟舵机的区别:

舵机驱动(90度、180度、270度、360度):

90度舵机驱动:

180度舵机驱动:

270度舵机驱动:

360度舵机驱动:

STM32定时器配置:

stm32f4为例(时钟频率为84Mhz):

stm32f1为例(时钟频率为72Mhz):

STM32定时器PWM输出配置要点:

STM32定时器配置:


舵机接线:

红色线 电源线(VCC)
黑色  /  棕色 地线(GND)
白色  /  黄色 信号线(pwm输出)

注意:如果外接电源,那么舵机和开发板、电源之间需要共GND,即开发板上的GND与电源的GND和舵机的GND三者相连接。

舵机模拟用啥连接stm32,stm32,嵌入式硬件,单片机

如果三者没有共GND,这时舵机无法接收到正常的pwm驱动信号,如图所示,开发板输出周期为20ms,脉冲宽度(高电平宽度)为1.5ms的pwm完全变形,无法正常驱动舵机。


数字舵机与模拟舵机的区别:

数字舵机只需发送1次PWM信号就能运动到预定的角度,模拟舵机需要给它不停的发送PWM信号,才能让它保持在预定的角度。

数字舵机与模拟舵机的驱动控制方法是一样的。


舵机驱动(90度、180度、270度、360度):

90度舵机驱动:

转动角度 脉冲周期 脉冲宽度(高电平宽度)
-45度 20ms 0.5ms
0度 20ms 1.5ms
45度 20ms 2.5ms

180度舵机驱动:

转动角度 脉冲周期 脉冲宽度(高电平宽度)
-90度 20ms 0.5ms
-45度 20ms 1ms
0度 20ms 1.5ms
45度 20ms 2ms
90度 20ms 2.5ms

舵机模拟用啥连接stm32,stm32,嵌入式硬件,单片机


270度舵机驱动:

转动角度 脉冲周期 脉冲宽度(高电平宽度)
-135度 20ms 0.5ms
0度 20ms 1.5ms
135度 20ms 2.5ms

360度舵机驱动:

转动角度 脉冲周期 脉冲宽度(高电平宽度)
-180度 20ms 0.5ms
-90度 20ms 1ms
0度 20ms 1.5ms
90度 20ms 2ms
180度 20ms 2.5ms

所以90度、180度、270度、360度的舵机驱动方法是一样的。

1.驱动脉冲周期都是20ms

2.所有舵机在脉冲宽度为1.5ms驱动下,都位于0度。


STM32定时器配置:

stm32f4为例(时钟频率为84Mhz):

设置arr(自动重装载值)为10000-1=9999,psc(定时器分频系数)为168-1=167

时钟周期计算公式:T=(arr+1)*(psc+1)/ Tck

                                   =(9999+1)*(167+1)/  84Mhz                

                                   =  20  ms


stm32f1为例(时钟频率为72Mhz):

设置arr(自动重装载值为10000-1=9999),psc(定时器分频系数144-1=143)

时钟周期计算公式:T=(arr+1)*(psc+1)/ Tck

                                   =(9999+1)*(143+1)/  84Mhz                

                                   =  20  ms

*(stmf4的时钟频率为84Mhz,stm32f1时钟频率为72Mhz,Tck为时钟频率)*


STM32定时器PWM输出配置要点:

***  注意定时器通道的输出极性  ***

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高。

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低。

1. TIM_OCPolarity_High:当定时器计数小于比较数值是输出高电平,大于比较数值是输出低电平。

  输出极性:TIM_OCPolarity_High  比较极性高     

设置 arr=9999,psc=167,TIM_SetCompare1(TIM14,500);

舵机模拟用啥连接stm32,stm32,嵌入式硬件,单片机

如图所示:周期20ms,频率50Hz,脉冲宽度(高电平宽度)= 1ms

2.TIM_OCPolarity_Low:当定时器计数小于比较数值是输出低电平,大于比较数值是输出高电平。

 输出极性:TIM_OCPolarity_Low比较极性低      

设置 arr=9999,psc=167,TIM_SetCompare1(TIM14,500);舵机模拟用啥连接stm32,stm32,嵌入式硬件,单片机

如图所示:周期20ms,频率50Hz,脉冲宽度(高电平宽度)= 19 ms

输出极性:TIM_OCPolarity_High  比较极性高      TIM_SetCompare1(TIM14,number);

设置 arr=9999,psc=167

脉冲宽度(高电平宽度) 比较数值,
0.5ms number  =  250
1ms number  =  500
1.5ms number  =  750
2ms number  =  1000
2.5ms number  =  1250

 输出极性:TIM_OCPolarity_Low比较极性低      TIM_SetCompare1(TIM14,number);

设置 arr=9999,psc=167文章来源地址https://www.toymoban.com/news/detail-852104.html

脉冲宽度(高电平宽度) 比较数值,TIM_SetCompare1(TIM14,number);
0.5ms number  =  9750
1ms number  =  9500
1.5ms number  =  9250
2ms number  =  9000
2.5ms number  =  8750

STM32定时器配置:

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "pwm.h"


int main(void)
{    
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	delay_init(168);  
 	TIM14_PWM_Init(10000-1,168-1);	
   while(1) 
	{

 		TIM_SetCompare1(TIM14,500);

	}
}






void TIM14_PWM_Init(u32 arr,u32 psc)
{		 					 
	//此部分需手动修改IO口设置
	
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);  	//TIM14时钟使能    
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); 	//使能PORTF时钟	
	
	GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //GPIOF9复用为定时器14
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;           //GPIOF9
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//速度100MHz
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
	GPIO_Init(GPIOF,&GPIO_InitStructure);              //初始化PF9
	  
	TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
	TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
	
	TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);//初始化定时器14
	
	//初始化TIM14 Channel1 PWM模式	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
	TIM_OC1Init(TIM14, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 4OC1

	TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);  //使能TIM14在CCR1上的预装载寄存器
 
  TIM_ARRPreloadConfig(TIM14,ENABLE);//ARPE使能 
	
	TIM_Cmd(TIM14, ENABLE);  //使能TIM14
 
										  
} 

到了这里,关于STM32--舵机驱动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 嵌入式 STM32 通讯协议--MODBUS

    目录 一、自定义通信协议 1、协议介绍 2、网络协议 3、自定义的通信协议  二、MODBUS通信协议 1、概述 2、MODBUS帧结构  协议描述 3、MODBUS数据模型   4、MODBUS事务处理的定义 5、MODBUS功能码  6、功能码定义   7、MODBUS数据链路层 8、MODBUS地址规则  9、MODBUS帧描述 10、MODBUS两种

    2024年02月11日
    浏览(67)
  • 嵌入式学习笔记——STM32的时钟树

    在之前的所有代码编程的过程中,似乎每次都绕不开一个叫做时钟使能的东西,当时我们是在数据手册上直接看其挂接在那条时钟线上的,那么STM32内部的时钟到底是怎么一个构型呢,本文来对此做一个介绍。 老规矩,一个新的名词出现,首先需要搞清楚它是个啥,下图中对

    2024年02月02日
    浏览(58)
  • STM32的中断系统详解(嵌入式学习)

    中断是处理器中的一种机制,用于响应和处理突发事件或紧急事件。当发生中断时,当前正在执行的程序会被暂时中止,处理器会跳转到中断处理程序(也称为中断服务例程),对中断事件进行处理。处理完中断后,处理器再返回到被中断的程序继续执行。 中断可以分为内部

    2024年02月12日
    浏览(75)
  • 嵌入式C语言基础(STM32)

    前言:一条混迹嵌入式3年的老咸鱼,想到自己第一次接触到stm32的库函数时,c语言稀碎,痛不欲生的场景,该文章为萌新指条明路。 位操作在嵌入式中常用于直接对芯片的寄存器进行操作,当时作为初学者的我看着一脸懵逼,至于为什么这样修改,下面好好分析一下。  一

    2024年02月02日
    浏览(59)
  • STM32&ARM体系结构(嵌入式学习)

    STM32是意法半导体(STMicroelectronics)公司推出的一系列32位ARM Cortex-M微控制器(MCU)产品系列。它们基于ARM架构,并且具有广泛的应用领域,包括工业自动化、消费电子、医疗设备、通信、汽车电子等。 STM32系列提供了多个产品系列,以满足不同应用需求和性能要求。其中常见

    2024年02月08日
    浏览(67)
  • 嵌入式-stm32-江科大-OLED调试工具

    1.1 OLED显示屏介绍 学习任何一门语言就需要进行调试,stm32调试方式主要有以下三种: 串口调试:通过串口,将调试信息发送到电脑端,电脑端使用串口调试助手显示调试信息。 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上。 Keil调试模式:借助Kei

    2024年01月21日
    浏览(55)
  • STM32开发环境搭建&工程创建(嵌入式学习)

    简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境(IDE)工具,用于快速配置和初始化STM32微控制器系列的软件工程。它提供了图形化界面和交互式工具,使开发者能够轻松地生成STM32微控制器的初始化代码和配置文件。 STM32CubeMX具有以下主要功能和特点: 微控制器

    2024年02月11日
    浏览(74)
  • 嵌入式学习stm32基础知识(期末复习)

    1. 计算机的体系架构 冯诺依曼架构 ​ 在完整的计算机系统中,包含五个部分,储存器,运算器,控制器输入设备和输出设备。 改进的冯诺依曼架构 改进型架构的各模块的高速数据交换中心利用储存器这个大容量,极大的提高了效率。 哈佛架构 ​ 哈佛结构数据空间和地址

    2024年02月07日
    浏览(72)
  • 嵌入式-stm32-江科大-EXTI外部中断

    1.1 STM32 中断系统 中断 是指在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续执行, 当中断发生时是由硬件自动调用中断函数执行的,期间编译器会保护现场最后还原现场

    2024年01月25日
    浏览(52)
  • 【嵌入式】openmv与stm32的串口通信

    参考:(文中部分图/文字/代码来自以下文章,部分内容由于时间久远已经找不到原作者,可联系注明或删除) PYTHON串口数据打包发送STM32接收数据解析 openmv中文文档 这里以openmv循迹代码为例 main.py 关于struct.pack: 函数原型:struct.pack(fmt, v1, v2, …) fmt是格式字符串 v1,v2是要转

    2024年02月14日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包