IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32f1之舵机驱动+转动角度调整(含主代码和计算) -> 正文阅读

[嵌入式]STM32f1之舵机驱动+转动角度调整(含主代码和计算)

目录

前言

一、舵机的“自白”

二、代码部分

三、如何计算得到该要控制的角度


前言

哈哈趁热打铁,上讲介绍到L298N电机驱动还有PWM调速,这里我就趁这个点再介绍一下舵机驱动以及它转向的角度控制,如何计算得到,这里将一一讲解,希望能帮到你,同时希望与大家一起交流探讨,求点赞哈哈!!!这里我还是用STM32f1控制,好了,直奔主题。

这里主讲180°舵机控制角度,360°舵机只能控制速度,这里不细讲!


一、舵机的“自白”

我(舵机)是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。

那么问题来了?我们用舵机来干嘛呢,当然是控制方向了,如今,基本上飞机或者智能车又或是机器人等等都会用到舵机这个东西,所以说,认识舵机,并且运用舵机就成为我们必不可少的知识学习了,下面附图:

这里我用的是S3003舵机,其他类型的舵机应该也是大同小异。?

其中,有三条线,一条接电源(5V即可),一条接地,最后一条接控制(即单片机输出的PWM控制),下面会给上具体实现代码,总的来说跟上一讲区别不大,主要就是PWM周期输出控制,利用?TIM_SetComparex()? 函数来设置占空比实现,但是多出的是计算问题,因为舵机有对应角度的时间计算,下面具体讲解:

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度为例,的其控制关系是这样的:

???0.5ms--------------0度;

???1.0ms------------45度;

???1.5ms------------90度;

???2.0ms-----------135度;

???2.5ms-----------180度;

基本上,我们学生党所需要的舵机的控制角度对应就是上述关系了,至于360度舵机这里简单提一下,主要是我这个舵机做不到(哈哈哈,这舵机180°的)

这里讲一下360°舵机的?

? ?0.5ms--------------0度;正向持续转(最大速度)

???1.5ms------------90度;停止转动,速度无

???2.5ms-----------180度;逆向持续转(最大速度)

调整PWM周期即可改变转动速度和方向。?

言归正传,到了这里基本上对控制舵机角度其实有了一定概念了,下面就直接附上代码部分了

?


二、代码部分

#include "sys.h"
#include "duoji.h"

void duoji_Pwm_Init()
{
	GPIO_InitTypeDef GPIO_InitTypeStruce;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeStruce;
	TIM_OCInitTypeDef TIM_OCInitTypeStruce;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
	
	GPIO_InitTypeStruce.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitTypeStruce.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;//这里是我之前的代码,主要是控制到4个舵机,这里大家只用一个输出口即可
	GPIO_InitTypeStruce.GPIO_Speed=GPIO_Speed_50MHz;
	
	TIM_TimeBaseInitTypeStruce.TIM_Period=1999;//这里是自动重装值设置
	TIM_TimeBaseInitTypeStruce.TIM_Prescaler=719;//这里是预分频系数
	TIM_TimeBaseInitTypeStruce.TIM_ClockDivision=0;
	TIM_TimeBaseInitTypeStruce.TIM_CounterMode=TIM_CounterMode_Up;
	
	TIM_OCInitTypeStruce.TIM_OCMode=TIM_OCMode_PWM1;
	TIM_OCInitTypeStruce.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitTypeStruce.TIM_OCPolarity=TIM_OCPolarity_High;
	
	GPIO_Init(GPIOB,&GPIO_InitTypeStruce);
	TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitTypeStruce);
	TIM_OC1Init(TIM4,&TIM_OCInitTypeStruce);
	//TIM_OC2Init(TIM4,&TIM_OCInitTypeStruce);//这些是TIM4其他通道初始化
	//TIM_OC3Init(TIM4,&TIM_OCInitTypeStruce);
	//TIM_OC4Init(TIM4,&TIM_OCInitTypeStruce);
	
	TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);
	//TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable);
	//TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable);
	//TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable);
	
	TIM_Cmd(TIM4,ENABLE);
	
}

主函数部分

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "duoji.h"


int main()
{

	delay_init();	    	   
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
	uart_init(115200);	 //
 	LED_Init();			     //
	KEY_Init();          //
	duoji_Pwm_Init();
	while(1)
	{
		LED0 = !LED0;          

		TIM_SetCompare1(TIM4,50);//这里设置占空比改变角度,用TIM4定时器,可以自己更换
		TIM_SetCompare2(TIM4,50);
        delay_ms(5000);
        delay_ms(5000);
		TIM_SetCompare1(TIM4,250);
		TIM_SetCompare2(TIM4,250);
        delay_ms(5000);
        delay_ms(5000);
	
	}
	
}

这里的代码是其他地方用的,拿来简单修改一下而已,基本上就是这样了。


三、如何计算得到该要控制的角度

这里直接上纸描述,字丑谅解哈哈哈

?其中的arr和psc可以自己设置,再计算出相应角度的占空比值即可。大家可以自己调试一番,定会有所收获。

有什么问题欢迎随时评论指正,有其他问题也欢迎一起探讨交流!哈哈哈。

如果觉得写得还入眼,给个赞可还行,感谢感谢!

赠人点赞,手有余香哈哈哈

题外话:

挺喜欢彭于晏说的一句话:“我就是没有才华,所以才用命去拼!”

学习32之路固然辛苦,但要是坚持下来了,那不是很酷?哈哈哈

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:23:50  更:2021-07-27 16:24:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:43:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码