PWM驱动舵机

news2024/11/23 1:26:20

难点:ARR、PSC

/**********************************************************************************************************/

一、知识补充

舵机原理:总想固定在一个固定角度(比较设定和现状,不匹配就转)

 小车知识点:同一个定时器不同通道的PWM驱动多个舵机

同一个定时器TIM2不同CH(PA0是TIM2的通道一,PA1是TIM2的通道2)输出的PWM,频率是一样的,占空比由各自的CCR决定

相位,由于计数器更新,所有PWM同时跳变,所以相位一样

注意如果用的是360度的舵机是没办法控制角度的,只能控制旋转速度和旋转方向。

舵机要求频率20ms,高电平时间0.5ms~2.5ms

参数值确定

频率=20ms=50Hz   1kHz=1ms

经验:设置PSC+1=72  ARR+1=20k 

20k对应20ms,CRR设置500,对应0.5ms; 2500 也就是2.5ms

二、代码分析

pwm.c

#include "stm32f10x.h"                  // Device header

void PWM_Init(void)
{
/*****时钟*****/	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
/*****GPIO初始化******/	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//舵机接在PA1 查找引脚定义知,TIM2_CH2_ETR在PA1口
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
/*****时钟源选择*****/	
	TIM_InternalClockConfig(TIM2);//选择时基单元时钟源,上电默认使用内部时钟,不写也行
	
/*****时基单元初始化*****/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision =TIM_CKD_DIV1;//一分频
	TIM_TimeBaseInitStructure.TIM_CounterMode =TIM_CounterMode_Up ;//向上计数
	TIM_TimeBaseInitStructure.TIM_Period = 20000 - 1;//ARR的值 20k
	TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1 ;//PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//重复计数器(高级计数器才有)
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
/*****OC初始化*****/
	TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_OCStructInit(&TIM_OCInitStructure);//总结:赋一个初始值
										//下面再改自己想改的参数
										//防止配置通用定时器时未配置全部结构体成员导致改为高级定时器时出现错误
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//输出模式
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能
	TIM_OCInitStructure.TIM_Pulse = 0 ;//初始化CCR
	TIM_OC2Init( TIM2,&TIM_OCInitStructure);//PA1
/*****启动定时器*****/	
	TIM_Cmd(TIM2,ENABLE);
}
/*****单独设置OC的函数*****/
void PWM_SetCompare2(uint16_t Compare)
{
	TIM_SetCompare2(TIM2,Compare);
}

main.c

#include "stm32f10x.h"    // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"
#include "Servo.h"
#include "Key.h"

uint8_t KeyNum;//接收Getnum返回值
float Angle;

int main(void)
{
	OLED_Init();
	Servo_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,3);
		}
	}
}

 三、现象

按一次角度加30 直到180 恢复到初位置

0度 

180度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1452295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贪心算法练习day1

练习1--翻硬币 1)题目及要求 2)解题思路 输入的是字符串,要想将两组字符串进行一一对比,需要将字符串转换成字符数组,再使用for循环依次遍历字符数组,进行比对。 输入两行字符串,转换成两个字…

牛客——IncDec Sequence(差分)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 给定一个长度为 n(n≤105)(n \leq 10^5 )(n≤105) 的数列a1,a2,…,an{a_1,a_2,…,a_n}a1​,a2​,…,an​,每次可以选择一个区间 [l,r],使下标在这个区间内的数…

驾驭AI绘画:《AI魔法绘画》带你秒变顶级画手!

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

1.2.1 相机模型—内参、外参

相机模型-内参、外参 更多内容,请关注: github:https://github.com/gotonote/Autopilot-Notes.git) 针孔相机模型,包含四个坐标系:物理成像坐标系、像素坐标系、相机坐标系、世界坐标系。 相机参数包含&…

最适合初学者的Python入门详细攻略,一文讲清,赶紧收藏!

前言 目前python可以说是一门非常火爆的编程语言,应用范围也非常的广泛,工资也挺高,未来发展也极好。 Python究竟应该怎么学呢,我自己最初也是从零基础开始学习Python的,给大家分享Python的学习思路和方法。一味的买…

UI风格汇:毛玻璃风格风靡的原因解读

Hello,我是大千UI工场,设计风格是我们新开辟的栏目,主要讲解各类UI风格特征、辨识方法、应用场景、运用方法等,本次带来的是毛玻璃风格的解读,有设计需求可以私聊。 一、什么是毛玻璃风格 毛玻璃风格(Fros…

论文阅读:MotionNet基于鸟瞰图的自动驾驶联合感知和运动预测

MotionNet: Joint Perception and Motion Prediction for Autonomous Driving Based on Bird’s Eye View Maps MotionNet:基于鸟瞰图的自动驾驶联合感知和运动预测 论文地址:MotionNet: Joint Perception and Motion Prediction for Autonomous Drivi…

Linux——系统文件I/O

系统文件I/O 注:学习本次内容之前,最好先对C语言文件操作有所了解 本章思维导图: 注:思维导图对应的.xmind文件和.png文件都已同步导入至资源,可供免费查阅 在以前学习的C语言中,我们可以通过fwrite和fre…

Ansible file文件模块 设置文件的属性,比如创建文件、创建链接文件、删除文件

目录 语法创建目录创建链接文件删除文件 每个值的属性 语法 创建目录 ansible slave -m file -a path/data/app statedirectory path/data/app # 定义创建路径 statedirectory # 如果目录不存在就创建目录这就是创建目录成功之后的回显 可以看到,已经打印出目录a…

智慧公厕:让智慧城市的公共厕所焕发“智慧活力”

智慧城市的建设已经进入了一个新的阶段,不仅仅是智慧交通、智慧环保,如今甚至连公厕都开始迎来智慧化时代。智慧公厕作为智慧城市的神经末梢,正在通过信息化、数字化和智慧化的方式,实现全方位的精细化管理。本文以智慧公厕源头专…

Ubuntu忘记登录密码重置步骤

Ubuntu忘记登录密码重置步骤 1.开机界面长按shitf键,进入grub,并选择Advanced options for ubuntu,按下回车 2.选择一个较新版本的recovery mode,按下回车 3.会跑一些数据,等待跑完后会出现下面的界面,选择…

pm2常用命令有哪些?

PM2 是一个流行的 Node.js 进程管理工具,用于管理和监控 Node.js 应用程序。以下是一些常用的 PM2 命令: 启动应用程序: pm2 start app.js这将启动名为 app.js 的 Node.js 应用程序。 列出所有应用程序: pm2 list这将列出当前所有…

牛客小白月赛87

A 思路&#xff1a;贪心。将数列倒序分别计算两人的和即可。 #include <bits/stdc.h> using namespace std; int a[110]; void solve() {int n;cin>>n;int sum10,sum20;int flag1;for (int i1;i<n;i) cin>>a[i];for (int in;i>1;i--){if(flag1){sum1a…

阿里云服务器租用收费标准价格表(2024年更新)

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

OpenCV中的边缘检测技术及实现

介绍: 边缘检测是计算机视觉中非常重要的技术之一。它用于有效地识别图像中的边缘和轮廓&#xff0c;对于图像分析和目标检测任务至关重要。OpenCV提供了多种边缘检测技术的实现&#xff0c;本博客将介绍其中的两种常用方法&#xff1a;Canny边缘检测和Sobel边缘检测。 理论介…

第三节作业:基于 InternLM 和 LangChain 搭建你的知识库

参考文档&#xff1a;https://github.com/InternLM/tutorial/tree/main/langchain 基础作业&#xff1a;复现课程知识库助手搭建过程 (截图) 1.环境配置 2.知识库搭建 &#xff08;1&#xff09;数据收集 收集由上海人工智能实验室开源的一系列大模型工具开源仓库作为语料库来…

Mybatis——Javaweb进阶学习(五)

目录 一、Mybatis快速入门1.创建Springboot工程&#xff0c;数据库表user&#xff0c;实体类User2.引入Mybaties相关依赖3.编写Sql语句 二、lombok1.基本概念2.使用方法 三、基础操作1.环境准备a.数据库准备b.创建员工实体类Emp数据类型对比命名对比 c.Mapper接口创建 2.删除操…

EasyRecovery2024功能强大的电脑数据恢复软件

EasyRecovery是一款功能强大的数据恢复软件&#xff0c;支持从各种存储介质中恢复丢失或删除的文件。以下是EasyRecovery的下载教程、功能介绍以及最新版本简介&#xff1a; EasyRecovery支持多种操作系统版本。对于Windows系统&#xff0c;它支持Windows XP、Windows Vista、W…

智能网卡(SmartNIC):增强网络性能

在当今的数字时代&#xff0c;网络性能和数据安全是各行各业面临的关键挑战。智能网卡是一项颠覆性的技术创新&#xff0c;对增强网络性能和加强数据安全性具有关键推动作用。本文旨在探讨智能网卡的工作原理及其在不同应用场景中的重要作用。 什么是智能网卡&#xff1f; 智…

QtApplets-线程池

QtApplets-线程池 ​ 今天咱们稍微看下Qt的线程池。QThreadPool&#xff0c;浅浅搞一下。 文章目录 QtApplets-线程池QThreadPoolQThreadPool 与 QThread 区别替代方案Qt Concurrent QThreadPool 与 Qt Concurrent 区别Demo运行效果 ☞ 源码 关键字&#xff1a; Qt、QRunnable…