STM32学习记录(八)————定时器输出PWM及舵机的控制

文章目录

  • 前言
  • 一、PWM
    • 1.工作原理
    • 2.内部运作机制
    • 3. PWM工作模式
    • 4.PWM结构体及库函数
  • 二、PWM控制舵机


前言

一个学习STM32的小白~ 有错误评论区或私信指出

提示:以下是本篇文章正文内容,下面案例可供参考

一、PWM

1.工作原理

以向上计数为例,讲述PWM原理:

  • ①在PWM输出模式下除了CNT(计数器当前值),ARR(自动重装载值),CCRx(捕获/比较寄存器值)。
  • ②当CNT小于CCRx时,TIMxCHx通道输出低电平
  • ③当CNT等于或大于CCRx时,TIMxCHx通道输出高电平

所谓脉宽调制信号(PWM波),就是一个TIMx_ARR自动重装载寄存器确定频率(由它决定PWM周
期),TIM_CCRx寄存器确定占空比信号。

在这里插入图片描述

2.内部运作机制

CCR1:设置捕获比较寄存器,设置比较值。
CCMR1寄存区:设置PWM模式1或者PWM模式2。
CCER:P位:输出/捕获:设置极性:0高电平有效,1低电平有效
E位:输出/捕获:使能端口
在这里插入图片描述

3. PWM工作模式

模式一:边沿对齐模式

向上计数时:当TIMx CNT<TIMx_CCRx时通道1为有效电平,否则为无效电平;
向下计数时:一旦TIMx CNT>TIMx CCRx,CCR1通道1为无效电平,否则为有效电平。

在这里插入图片描述

模式二:中央对齐模式

向上计数时:当TIMx CNT<TIMx_CCRx时通道1为无效电平,否则为有效电平;
向下计数时:一旦TIMx CNT>TIMx CCRx,CCR1通道1为有效电平,否则为无效电平。
在这里插入图片描述

4.PWM结构体及库函数

typedef struct
{uint16 t TIM OCMode; //配置PWM模式1还是模式2uint16 tTIM OutputState: /配置输出使能/OR失能uint16 tTIM OutputNStateuint16 tTIMPulse: //配置比较值,CCRxuint16 t TIM OCPolarity; //比较输出极性uint16 t TIM OCNPolarity;uint16 tTIM OCldleState;uint16 tTIM OCNIdleState:
}
TIM OCInitTypeDef;
void TIM_OCxlnit I/结构体初始化
(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OClnitStruct); void TIM_SetCompare1 //设置比较值函数
(TIM_TypeDef* TIMx, uint16_t Compare1);
void TIM OC1PreloadConfig //使能输入比较预装载
(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM Cmd //开启定时器
(TIM_TypeDef* TIMx, FunctionalState NewState)
void TIM ARRPreloadConfig //使能自动重装载的预装载寄存器允许位(TIM TypeDef* TIMx, FunctionalState NewState);
void TIM_OC1PolarityConfig //配置修改极性
(TIM TypeDef* TIMx, uint16 tTIM_OCPolarity);

二、PWM控制舵机

TIM3 PWM输出 驱动SG90电机配置过程:
1.打开时钟—>GPIO时钟,TIM定时器时钟,部分重映射时钟
2.GPIO结构体
3.配置通用定时器结构体
4.配置定时去输出PWM结构体
5.配置PWM比较值

在这里插入图片描述
在这里插入图片描述

//定时器输出PWM配置
#include "motor.h"
#include "stm32f10x.h"                  // Device headervoid motor_config(void)
{GPIO_InitTypeDef motor_GPIOinitStructure;TIM_TimeBaseInitTypeDef motor_TimeBaseinitStructure;TIM_OCInitTypeDef motor_OCinitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);motor_GPIOinitStructure.GPIO_Mode = GPIO_Mode_AF_PP;motor_GPIOinitStructure.GPIO_Pin = GPIO_Pin_5;motor_GPIOinitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&motor_GPIOinitStructure);motor_TimeBaseinitStructure.TIM_ClockDivision = TIM_CKD_DIV1;motor_TimeBaseinitStructure.TIM_CounterMode = TIM_CounterMode_Up;motor_TimeBaseinitStructure.TIM_Period = 200-1;motor_TimeBaseinitStructure.TIM_Prescaler = 7200-1;TIM_TimeBaseInit(TIM3,&motor_TimeBaseinitStructure);//输出PWM通道配置motor_OCinitStructure.TIM_OCMode = TIM_OCMode_PWM1;//PWM模式1边沿检查motor_OCinitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//输出极性motor_OCinitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能TIM_OC2Init(TIM3,&motor_OCinitStructure);TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能比较值预装载TIM_Cmd(TIM3,ENABLE);}
//主函数通过输出比较输出PWM波控制舵机
#include "stm32f10x.h"
#include "main.h"
#include "motor.h"void delay_ms(uint32_t xms)
{while(xms--){int i = 12000;while(i--);}}int  main()
{motor_config();while(1){for(int i = 195 ; i>=175 ; i = i-5){TIM_SetCompare2(TIM3,i);delay_ms(500);}}}

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

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

相关文章

spark 整合 yarn

spark 整合 yarn 1、在master节点上停止spark集群 cd /usr/local/soft/spark-2.4.5/sbin ./stop-all.sh 2、spark整合yarn只需要在一个节点整合, 可以删除node1 和node2中所有的spark文件 分别在node1、node2 的/usr/local/soft目录运行 rm -rf spark-2.4.…

力扣469A

文章目录 1. 题目链接2. 题目代码3. 题目总结4. 代码分析 1. 题目链接 I Wanna Be the Guy 2. 题目代码 #include<iostream> #include<set> using namespace std; int main(){int highestLevelOfGame;cin >> highestLevelOfGame;set<int> levelCanPas…

Linux下Cmake安装或版本更新

下载Cmake源码 https://cmake.org/download/ 找到对应的版本和类型 放进linux环境解压 编译 安装 tar -vxvf cmake-3.13.0.tar.gz cd cmake-3.13.0 ./bootstrap make make install设置环境变量 vi ~/.bashrc在文件尾加入 export PATH/your_path/cmake-3.13.0/bin:$PAT…

多模态大模型解读

目录 1. CLIP 2. ALBEF 3. BLIP 4. BLIP2 参考文献 &#xff08;2023年&#xff09;视觉语言的多模态大模型的目前主流方法是&#xff1a;借助预训练好的LLM和图像编码器&#xff0c;用一个图文特征对齐模块来连接&#xff0c;从而让语言模型理解图像特征并进行深层次的问…

王思聪隐形女儿曝光

王思聪"隐形"女儿曝光&#xff01;黄一鸣独自面对怀孕风波&#xff0c;坚持生下爱情结晶近日&#xff0c;娱乐圈掀起了一场惊天波澜&#xff01;前王思聪绯闻女友黄一鸣在接受专访时&#xff0c;大胆揭露了她与王思聪之间的爱恨纠葛&#xff0c;并首度公开承认&#…

【C++入门(4)】引用、内联函数、auto

一、引用与类型转换 我们看下面这个例子。 用 int & 给 double 类型的变量起别名&#xff0c;编译器报错&#xff1a; int main() {double b 3.14;int a b;int& x b;return 0; } 用 const int & 给 double 类型的变量起别名&#xff0c;成功&#xff1a; in…

ROS 机器人运动控制

ROS 机器人运动控制 机器人运动 当我们拿到一台机器人&#xff0c;其配套的程序源码中&#xff0c;通常会有机器人核心节点&#xff0c;这个核心节点既能够驱动机器人的底层硬件&#xff0c;同时向上还会订阅一个速度话题。我们只需要编写一个新的节点&#xff08;速度控制节点…

白酒:中国的酒文化的传承与发扬

中国&#xff0c;一个拥有五千年文明史的国度&#xff0c;其深厚的文化底蕴孕育出了丰富多彩的酒文化。在这片广袤的土地上&#xff0c;酒不仅仅是一种产品&#xff0c;更是一种情感的寄托&#xff0c;一种文化的传承。云仓酒庄的豪迈白酒&#xff0c;正是这一文化脉络中的一颗…

文件加密软件排行榜|常用三款文件加密软件推荐

Top 1: 安秉网盾文件加密软件 加密模式多样&#xff1a;采用多种加密模式&#xff0c;对企业重要的文档、图纸进行全方位360度保护。可根据企业不同工作场景设置不同的加密模式。 全透明加密&#xff1a;通过全透明加密模式&#xff0c;对企业重要的图纸文件类型进行全盘透明…

521. 最长特殊序列 Ⅰ(Rust单百解法-脑筋急转弯)

题目 给你两个字符串 a 和 b&#xff0c;请返回 这两个字符串中 最长的特殊序列 的长度。如果不存在&#xff0c;则返回 -1 。 「最长特殊序列」 定义如下&#xff1a;该序列为 某字符串独有的最长 子序列 &#xff08;即不能是其他字符串的子序列&#xff09; 。 字符串 s …

XHS-Downloader是一款小红书图片视频下载工具

这款软件可以提取账号发布、收藏、点赞作品链接&#xff1b;提取搜索结果作品链接、用户链接&#xff1b;下载小红书作品信息&#xff1b;提取小红书作品下载地址&#xff1b;下载小红书无水印作品文件&#xff01; &#x1f4d1; 功能清单 ✅ 采集小红书图文 / 视频作品信息…

全国第四轮软件工程学科评估结果

#计算机专业好吗##高考填志愿选择专业##计算机专业还能不能报# 又到了让各位家长头疼的高考填志愿时刻。 前几天的头条&#xff0c;张雪峰直播卖卡3小时入账2亿&#xff0c;为了孩子的前途&#xff0c;家长们确实是不惜重金。 作为毕业如今18个年头一直从事软件领域的老码农&am…

MTU 和 MSS 关系、 IP分片、TCP分段

从四层模型&#xff1a;链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;应用层说 一 、以太网V2格式数据帧 : 链路层 Destination Source Type DataAndPad FCS 6 6 2 46~1500 4 二、IP: 网络层 0 1 …

ubuntu18.04离线源制作

给客户部署有时需要纯内网环境&#xff0c;那这样就连不了网络。 一些包就下载不下来&#xff0c;而大家都知道用deb离线安装是非常麻烦的&#xff0c;各种依赖让你装不出来。 这里教大家打包源。 我准备2台机器&#xff0c;42和41 42可以联网&#xff0c;41不能联网。我想在…

Redis的缓存击穿与解决

缓存击穿问题也叫热点Key问题&#xff0c;就是一个被高并发访问并且缓存重建业务较复杂的Key突然失效了&#xff0c;无数的请求访问会在瞬间给数据库带来巨大的冲击。 Redis实战篇 | Kyles Blog (cyborg2077.github.io) 目录 解决方案 互斥锁 实现 逻辑过期 实现 解决方案…

linux中“PXE高效批量装机”

在大规模的 Linux 应用环境中&#xff0c;如 Web 群集、分布式计算等&#xff0c;服务器往往并不配备光驱设备&#xff0c;在这种情况下&#xff0c;如何为数十乃至上百台服务器裸机快速安装系统呢&#xff1f;传统的 USB光驱、移动硬盘等安装方法显然已经难以满足需求。 PXE …

数学建模----单源最短路径模型建立和求解

目录 1.引言和声明 2.单源最短路径 3.建立模型 4.代码求解 1.引言和声明 &#xff08;1&#xff09;最近又在准备学习matlab,有了一些新的理解和体会&#xff0c;记录一下&#xff1b; &#xff08;2&#xff09;这个首先要声明两个符号&#xff0c;这两个符号也是今天才知…

conda下安装32位版本python

前言&#xff1a;当前主流的系统为64bit系统&#xff0c;conda软件为64bit软件&#xff0c;因此使用conda创建虚拟环境安装python时默认安装的python为64bit版本&#xff0c;但部分研发场景需要调用32bit依赖&#xff0c;只能使用32bit的python&#xff0c;因此需要安装32bit的…

【因果推断python】44_评估因果模型2

目录 累积弹性曲线 累积增益曲线 考虑差异 关键思想 累积弹性曲线 再次考虑将价格转换为二元处理的说明性示例。我们会从我们离开的地方拿走它&#xff0c;所以我们有弹性处理带。我们接下来可以做的是根据乐队的敏感程度对乐队进行排序。也就是说&#xff0c;我们把最敏感…

spring中@Conditional

多环境切换 java配置使用profile Profile设置在某个环境下&#xff0c;spring注入对应的bean public class JavaConfig {BeanProfile("dev")DataSource devDs(){DataSource ds new DataSource();ds.setUrl("dev");ds.setUsername("dev");ret…