STM32高级控制定时器应用之检测输入PWM周期和占空比

目录

概述

1  PWM 输入模式

1.1 原理介绍

1.2 应用实例

1.3 示例时序图

2 使用STM32Cube配置工程

2.1  软件环境

2.2 配置参数

2.3 生成项目文件

3 功能实现

3.1 PWM占空比函数

3.2 输入捕捉回调函数

4 功能测试

4.1 测试软件框架结构

4.2 实验实现

4.2.1 测试实验1

4.2.2 测试实验2


STM32高级控制定时器(STM32F103):PWM 输入模式,测速pwm的占空比,频率参数

源代码下载地址:

STM32高级控制定时器(STM32F103):PWM输入模式资源-CSDN文库

概述

本文主要介绍STM32高级定时器的用法至输入捕获功能,该功能可用于捕捉外部输入信号的频率,并且计算出PWM的占空比。笔者通过详细的案例介绍这个功能,包括理论知识,实现原理,以及如何使用STM32Cube配置基本的参数,编写实用代码,实现捕捉频率当的功能。

1  PWM 输入模式

1.1 原理介绍

这种模式是输入捕获模式的一种特殊情况。程序相同,只是:

1)两个ICx信号映射在同一个TIx输入上

2)这2个ICx信号在具有相反极性的边缘上是活动的

3)选择两个TIxFP信号中的一个作为触发输入和从模式控制器在重置模式下配置。

1.2 应用实例

用户可以测量周期(在TIMx_CCR1寄存器中)和占空比(在TIMx_CCR2寄存器)使用以下程序(取决于在CK_INT频率和预分频器值上):

1)选择TIMx_CCR1的激活输入:将CC1S位写入TIMx_CCMR1中的01寄存器(选择TI1)。

2)选择TI1FP1的有效极性(用于TIMx_CCR1和计数器中的捕获清除):将CC1P位写入“0”(上升沿激活)。

3)选择TIMx_CCR2的激活输入:将CC2S位写入TIMx_CCMR1中的10寄存器(选择TI1)。

4)选择TI1FP2的有效极性(用于TIMx_CCR2中的捕获):写入CC2P位到“1”(在下降沿上有效)。

5) 选择有效的触发输入:将TS位写入TIMx_SMCR寄存器中的101(已选择TI1FP1)。

6) 在重置模式下配置从属模式控制器:将SMS位写入TIMx_SMCR寄存器。

7) 启用捕获:将CC1E和CC2E位写入TIMx_CCER寄存器中的“1”。

1.3 示例时序图

PWM输入模式只能与TIMx_CH1/TIMx_CH2信号一起使用,因为只有TI1FP1和TI2FP2连接到从模式控制器。

2 使用STM32Cube配置工程

2.1  软件环境

软件名称版本信息
STM32CubeSTM32CubeMX 6.11
STM32 HALSTM32Cube_FW_F1_V1.8.5

2.2 配置参数

1)配置系统时钟:72M Hz,Timer的工作时钟为72M Hz

2)  使用定时器1配置输入捕获功能

 其对应的IO口配置

 计数器时钟参数和捕获通道参数

 3)配置PWM相关参数

选择定时器8作为控制PWM的输出

PWM波对应的IO接口

 Timer-8定时器相关参数

和PWM相关的参数配置

 

2.3 生成项目文件

 使用STM32FCube完成项目配置后,就可以生成工程文件。生成代码如下:

3 功能实现

3.1 PWM占空比函数

在tim.c文件中实现配置输出PWM占空比函数,函数代码如下:

参数介绍

1)Pluse:  占空比

2)Channel: 输出通道号

void HAL_TIM_SetPWM_Pulse( uint32_t Pulse, uint32_t Channel)
{
  TIM_OC_InitTypeDef sConfigOC = {0};
  
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = Pulse;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, Channel) != HAL_OK)
  {
    Error_Handler();
  }
}

3.2 输入捕捉回调函数

在input_capture.c实现输入捕捉回调函数。

函数功能介绍

1)计算输入的PWM的频率

2)计算输入的PWM的周期

3)计算输入的PWM的占空比

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    uint32_t uwIC2Value1 = 0;
    uint32_t uwIC2Value2 = 0;
    uint32_t cycle,pluse,freq;
    static uint32_t uwIC2Value2_list[2];
    static uint8_t count = 0;
    float dutyfactor;
    
    if(htim->Instance == TIM1) 
    {
      if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
      {
            /* Get the 1st Input Capture value */
       }
       else if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
       {
           uwIC2Value1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
           /* Get the 1st Input Capture value */
           uwIC2Value2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
           if( uwIC2Value2 > uwIC2Value1)
           {
                pluse = uwIC2Value2- uwIC2Value1; 
                uwIC2Value2_list[count] = uwIC2Value1;
                count++;
                if( count == 2 )
                {
                    count = 0;
                    if( uwIC2Value2_list[1] > uwIC2Value2_list[0])
                    {
                        cycle = uwIC2Value2_list[1]- uwIC2Value2_list[0];
                        freq =  1000000/cycle;
                        dutyfactor = (pluse*100)/cycle;
                        printf("PWM cycle = %d us, PWM freq = %d Hz\r\n",  cycle, freq);
                        printf("PWM dutyfactor = %d%s\r\n", (int)dutyfactor,"%");
                    }
                }
           }
       }
    }
}

4 功能测试

4.1 测试软件框架结构

4.2 实验实现

PWM的工作的使用频率为1us, 一个PWM的周期为10 000 us, 通过调制Pulse的值就可以改变占空比,其中每一个Plus表示1us,举个例子:

设置Pluse = 500, 表示占空比为:500/10000 *100 % = 5%

4.2.1 测试实验1

1)配置PWM参数,输出频率为100Hz,占空比为5%

 
void pwm_ctrl_Init( void )
{
    HAL_TIM_Base_Start( &htim8 );
    HAL_TIM_PWM_Start( &htim8, TIM_CHANNEL_1);  // PC6 
    HAL_TIM_PWM_Start( &htim8, TIM_CHANNEL_2);  // PC7
     
    HAL_TIM_SetPWM_Pulse( 500, TIM_CHANNEL_1);
    HAL_TIM_SetPWM_Pulse( 500, TIM_CHANNEL_2);
}

2)配置输入捕捉电平信号触发类型

void Input_CaptureInit( void )
{
   set_captureMode(TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_FALLING);
   set_captureMode(TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
}

3) 编译代码,下载到板卡运行,结果如下:

逻辑分析仪测试到的波形

调试终端打印的数据log:

 

 4.2.2 测试实验2

1)配置PWM参数,输出频率为100Hz,占空比为50%

 
void pwm_ctrl_Init( void )
{
    HAL_TIM_Base_Start( &htim8 );
    HAL_TIM_PWM_Start( &htim8, TIM_CHANNEL_1);  // PC6 
    HAL_TIM_PWM_Start( &htim8, TIM_CHANNEL_2);  // PC7
     
    HAL_TIM_SetPWM_Pulse( 5000, TIM_CHANNEL_1);
    HAL_TIM_SetPWM_Pulse( 5000, TIM_CHANNEL_2);
}

2) 编译代码,下载到板卡运行,结果如下:

逻辑分析仪测试到的波形

 调试终端打印的数据log:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用element的小弹框并修改css

使用el-popover来做弹框&#xff1a; 滑动或点击元素要加插槽slot"reference"来展示弹框&#xff1b; <el-popoverplacement"top"width"166"trigger"hover"popper-class"popover"><div><div><div>…

关于大模型多轮问答的两种方式

前言 大模型的多轮问答难点就是在于如何精确识别用户最新的提问的真实意图&#xff0c;而在常见的使用大模型进行多轮对话方式中&#xff0c;我接触到的只有两种方式&#xff1a; 一种是简单地直接使用 user 和 assistant 两个角色将一问一答的会话内容喂给大模型&#xff0c…

AIGC笔记--DDIM的简单实现

1--DDIM介绍 原论文&#xff1a;DENOISING DIFFUSION IMPLICIT MODELS 2--核心代码 # ddim的实现 def compute_alpha(beta, t):beta torch.cat([torch.zeros(1).to(beta.device), beta], dim0) # beta -> [1, beta]# 先通过cumprod计算累乘结果&#xff0c;即: alpha_(t)…

微软找腾讯接盘,Windows直接安装手机APP体验起飞了

熟悉微软的同学都知道微软有个传统艺能——什么好用砍什么。 比如 Win10 砍掉了还算方便的小娜&#xff0c;推出 Win11 砍掉了 Win10 上面好用的磁贴功能等。 上一秒用户还在夸奖点赞。 下一秒就给你砍掉&#xff0c;顺带还塞一堆 BUG 给你。 但没办法&#xff0c;PC 近乎垄断…

【WEEK15】 【DAY1】Swagger第四部分【中文版】

2024.6.3 Monday 接上文【WEEK14】 【DAY5】Swagger第三部分【中文版】 目录 16.9.拓展&#xff1a;其他皮肤16.9.1.修改pom.xml16.9.2.重启并分别访问对应的网址16.9.2.1.swagger-ui16.9.2.2.bootstrap-ui16.9.2.3.Layui-ui16.9.2.4.mg-ui 16.9.拓展&#xff1a;其他皮肤 16.…

【K8s】专题四(4):Kubernetes 控制器之 StatefulSet

以下内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01;如果对您有帮助&#xff0c;烦请点赞、关注、转发&#xff01;欢迎扫码关注个人公众号&#xff01; 目录 一、基本介绍 二、工作原理 三、相关特性 四、资源清单&#xff08;示例&#xff09; 五…

AI写作:如何利用AI提升文章创作效率?

工欲善其事&#xff0c;必先利其器。 随着AI技术与各个行业或细分场景的深度融合&#xff0c;日常工作可使用的AI工具呈现出井喷式发展的趋势&#xff0c;AI工具的类别也从最初的AI文本生成、AI绘画工具&#xff0c;逐渐扩展到AI思维导图工具、AI流程图工具、AI生成PPT工具、AI…

cicd的基本概念

一.gitlab-cicd技术点 DevOps CI/CD理念与主流工具 DevOps 运动的兴起给业界提供了一个参考答案。其中CI 和 CD两个理念就是解决开发者和运维协同工作的一剂良方。 CI 是 Continuous Integration 的缩写&#xff0c;表示持续集成。CD 是 Continuous Delivery 的缩写&#xf…

10- Redis 键值对数据库是怎么实现的?

在开始将数据结构之前&#xff0c;先给介绍下 Redis 是怎样实现键值对&#xff08;key-value&#xff09;数据库的。 Redis 的键值对中的 key 就是字符串对象&#xff0c;而 value 可以是字符串对象&#xff0c;也可以是集合数据类型的对象&#xff0c;比如 List 对象&#xf…

刷题训练之分治快排

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握分治快排算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷…

ThreadLocal与ForkJoin使用踩坑记录

由于并发的需要原因&#xff0c;使用CompletableFuture异步执行Dubbo接口&#xff0c;RpcContext中存储了tenantId等信息。上线一段时间后&#xff0c;发现有些时候拿到的上下文并不是自己线程的上下文。 原因分析 CompletableFuture.supplyAsync内部使用ForkJoinPool执行。 要…

【EI会议/稳定检索】2024年电机与电气控制国际会议(ICMEC 2024)

2024 International Conference on Motor and Electrical Control 2024年电机与电气控制国际会议 【会议信息】 会议简称&#xff1a;ICMEC 2024 截稿时间&#xff1a;(以官网为准&#xff09; 大会地点&#xff1a;中国厦门 会议官网&#xff1a;www.meciac.com 会议邮箱&…

夸张,腾讯实习三个月,存款20W+

大家好&#xff0c;我是白露。 今天在牛客上看到一条帖子&#xff0c;让我感叹万分&#xff1a;实习两三个月&#xff0c;竟然已经存下了20多万的存款。 这也太夸张了吧&#xff1f;不太真实啊…… 很多网友表示疑问&#xff0c;“两三个月实习顶多存两三万吧&#xff1f;武理…

【工具】windows下VMware17解锁mac安装选项(使用unlocker427)

目录 0.简介 1.环境 2.安装前后对比 3.详细安装过程 3.1 下载unlocker427 1&#xff09;下载地址 2&#xff09;下载unlocker427.zip 3&#xff09;解压之后是这样的 4&#xff09;复制iso中的两个文件到你本地的VMware的安装目录下 5&#xff09;复制windows下的所有…

【笔记】从零开始做一个精灵龙女-装备阶段

这里只记录相对重要的步骤和一些思路 但是头发那块很详细哦~ &#xff08;标的小数字不用在意&#xff0c;那个是我网课的时长记录&#xff09; 耳环 1.创建一个圆环&#xff0c;调整参数 做好后再复制一个小的 肩甲 2.0-2.4 1.创建圆柱体/球体也可 然后把底部的两个点删…

有哪些好用的ai工具,可以提升科研、学习、办公等效率?

最近&#xff0c;Sora的诞生为AI再添了一把火。 据介绍&#xff0c;这款“文生视频”的Sora可以直接输出长达60秒的视频&#xff0c;并且包含高度细致的背景、复杂的多角度镜头&#xff0c;以及富有情感的多个角色。 不仅能准确呈现细节&#xff0c;还能理解物体在物理世界中…

Accelerate笔记:本地SGD

本地 SGD 是一种分布式训练技术&#xff0c;其中梯度不是每一步都同步。每个进程都会更新自己版本的模型权重&#xff0c;在给定的步数后&#xff0c;通过跨所有进程平均这些权重来同步它们。 在底层&#xff0c;本地 SGD 代码禁用了自动梯度同步&#xff08;但累积仍然如预期工…

什么是最好的手机数据恢复软件?6 款手机数据恢复软件 [2024 年更新]

什么是最好的手机数据恢复软件&#xff1f;在这篇文章中&#xff0c;您将了解 6 款最好的免费手机数据恢复软件&#xff0c;并学习如何恢复数据的完整指南。 最好的手机数据恢复软件是什么&#xff1f; 手机数据恢复软件是恢复智能手机中丢失或删除的文件、消息、照片和其他宝…

Win10文件系统错误(-2147219196)

问题出现的原因&#xff1a; C盘快挤满了&#xff0c;导致电脑很卡&#xff0c;于是删掉了C盘用户下的一些文件C:\Users\DIY-PC&#xff0c;省了五六十G的内存&#xff0c;结果发现把一些系统文件也删掉了&#xff0c;导致图片预览报错 问题现象&#xff1a; &#xff08;自…

6月软考新通知:24下集成大概率是中级蕞简单的一门

2024下半年软考6月新通知&#xff1a; 一、24下软考考试时间安排&#xff1a; 24下半年软考报名时间&#xff1a;8月19日-9月15日 24下半年软考考试时间&#xff1a;11月9-12日 24下半年软考成绩查询&#xff1a;12月中&#xff08;预计&#xff09; 二、考情分析 24上软考…