当前位置: 首页 > news >正文

STM32H743-ARM例程11-PWM

目录

  • 实验平台
  • 实验介绍
  • PWM
    • PWM简介
    • PWM基本原理
    • PWM相关寄存器
      • 捕获/比较模式寄存器1/2(TIMx_CCMR1/2)
      • 捕获/比较使能寄存器(TIMx_ CCER)
      • 捕获/比较寄存器1/2/3/4(TIMx_ CCR1/2/3/4)
  • STM32CubeMX生成工程
  • 实验代码
  • 实验现象

实验平台

硬件:银杏科技GT7000双核心开发板-ARM-STM32H743XIH6,银杏科技iToolXE仿真器
软件:最新版本STM32CubeH7固件库,STM32CubeMX v6.10.0,开发板环境MDK v5.35

实验介绍

  由于开发版上LED的GPIO没有定时器通道,所以本次实验使用软pwm来模拟。利用PWM控制LED灯产生呼吸灯效果。

PWM

PWM简介

  PWM即脉冲宽度调制,是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。
  PWM即脉冲宽度调制,是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。

PWM基本原理

  脉宽调制基本原理:其控制方式就是对电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变电路输出电压的大小,也可改变输出频率。
脉宽调制原理:
  脉宽调制模式可以生产一个由TIMx_ARR寄存器确定频率,由TIMx_CCRx确定占空比的信号。如下图所示:
在这里插入图片描述

  横轴表示时间,纵轴表示计数器的计数值CNT。当CNT<CCRx时,IO输出低电平(逻辑0);当CNT>=CCRx时,IO输出高电平(逻辑1);当CNT=ARR时,定时器溢出,产生事件,CNT计数清零,然后继续递增,依次循环。我们可以通过改变CCRx的值来修改PWM中的占空比(占空比 = 50%,表示高电平和低电平时间各占一半),修改ARR的值来修改PWM的频率。
  上图中可知0到t2为一个周期时间,而占空比由CCRx值决定。一个周期时间可以由以下公式计算:
      T=(ARR+1)(PSC+1)/TCLK
  占空比公式:
      占空比 = (Ton(高电平时间) / T) × 100%
  其中:ARR为重新装载值;PSC为预分频系数;TCLK为定时器时钟频率。如本次实验中TCLk为240M,选择ARR为499,PSC为239,其一个周期为0.5ms。

PWM相关寄存器

捕获/比较模式寄存器1/2(TIMx_CCMR1/2)

在这里插入图片描述
  本章我们主要关注该寄存器位 6:4 OC1M:输出比较 1 模式 (Output Compare 1 mode),详细介绍可以参考文档《stm32h743xi参考手册》。
OC1M[2:0]位可控制 PWM模式,方法如下:
  110:PWM模式1——向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则有效电平(OC1REF=1)。
  111:PWM模式2——在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

捕获/比较使能寄存器(TIMx_ CCER)

在这里插入图片描述
位 0 CC1E:捕获/比较 1 输出使能 (Capture/Compare 1 output enable)。
CC1 通道配置为输出:
  0:关闭——OC1 未激活
  1:开启——在相应输出引脚上输出 OC1 信号
CC1 通道配置为输入:此位决定了是否可以实际将计数器值捕获到输入捕获/比较寄存器 1
(TIMx_CCR1) 中。
  0:禁止捕获
  1:使能捕获

  该寄存器就是控制通道1输入/输出,控制通道1输出极性。

捕获/比较寄存器1/2/3/4(TIMx_ CCR1/2/3/4)

在这里插入图片描述
  在输出模式下,捕获/比较寄存器影子寄存器的值与CNT的值比较,根据比较结果产生相应动作,利用这点,我们通过修改这个寄存器的值,就可以控制PWM的占空比了。注意,对于TIM2和TIM5来说,该寄存器是32位有效的,对其他定时器来说,则是16位有效位。

STM32CubeMX生成工程

我们参考前面章节STM32H743-结合CubeMX新建HAL库MDK工程,打开CubeMX软件,重复步骤不再展示,我们来看配置TIM3部分如下图所示:
在这里插入图片描述

实验代码

  前面我们提到过,由于开发板LED的GPIO没有定时器通道,所以我们的代码做出相应改变,通过添加参数模拟定时器的占空比。
主函数

int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();HAL_TIM_Base_Start_IT(&htim3);  // 启动定时器中断while (1){}
}

回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 
{static uint8_t pwm_counter = 0;static int16_t duty_cycle = 0;static int8_t dir = 1;    // 1:递增, -1:递减if (htim->Instance == TIM3) {pwm_counter++;if (pwm_counter >= 100) { // 每10ms调整一次占空比pwm_counter = 0;duty_cycle += dir;// 方向控制if (duty_cycle >= 100){dir = -1;duty_cycle = 100;}else if (duty_cycle <= 0){dir = 1;duty_cycle = 0;}}         // 控制LED亮度if (pwm_counter < duty_cycle) LED_OFF;else LED_ON;}
}

实验现象

GT7000 双核心板红色LED灯亮度由灭到亮再从亮到灭。

http://www.dtcms.com/a/418565.html

相关文章:

  • 网站建设的功能和目标郑州网站建设企业
  • 网站与手机app是一体吗wordpress 中文建站
  • unzip-6.0-21.el7.x86_64.rpm怎么安装?CentOS 7手动安装rpm包详细步骤
  • Go 的切片原理
  • GDAL 的内置矢量工具集ogr的详解使用
  • ppt制作软件模板网站wordpress 邮件投稿
  • Git - git status 观察记录(初始化本地仓库、初始暂存、初始提交、修改文件、第二次暂存、第二次提交)
  • 帝国网站管理系统安装山西省住房和城乡建设部网站
  • 怎么选择昆明网站建设长沙县星沙人才招聘网
  • 【C++】AVL详解
  • SQLE:一个全方位的SQL质量管理平台
  • 基于51单片机智能台灯无线WIFI控制LED灯亮灭亮度APP设计
  • postgres linux 环境psql 中文乱码处理
  • “静态前端 + Serverless API”** 架构做视频站
  • 推广做网站联系方式如何找人帮我做网站推广
  • 基于定制开发开源AI智能名片S2B2C商城小程序的文案信息传达策略研究
  • 使用 Python 将 PDF 拆分为图片
  • 菠菜彩票网站怎么建设外贸先做网站还是开公司
  • @EnableWebMvc 的核心影响
  • C# WPF使用线程池运行Action方法
  • 计算机视觉(opencv)——基于 dlib 关键点定位
  • 快递网站模版广安发展建设集团有限公司门户网站
  • AWS中的离线计算(大数据大屏项目)
  • 功能体=数据定义+算法
  • 机器学习之逻辑回归(梯度下降,Z标准化,0-1归一化)
  • socket 套接字函数
  • 利用ChIPBase数据库构建出高质量的mRNA-TF调控网络
  • FastAPI 与 Flask的主要区别是什么?
  • Qt常用控件之QSpinBox
  • 基于PyTorch的CIFAR10加载与TensorBoard可视化实践