PWM波、方波的输出与捕获
一、PWM
使用定时器17的通道1使PA7引脚输出PWM。
STM32CubeMX配置:
系统主频80MHZ,经过(79+1)分频,得到1MHZ,计数值为(999+1),比较值为(299+1),PWM1模式,输出极性为高,则频率为1khz,占空比为30%(小于300,输出高电平)。
注:PWM波的输出不用配置中断。
HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1); // pwm输出
在while循环前调用该函数即可输出波形。
设置PWM波的占空比:__HAL_TIM_SET_COMPARE();
设置PWM波的频率:__HAL_TIM_SET_AUTORELOAD(),一般设置频率时,要使占空比不变,所以,还要重新设置PWM波的占空比。该函数在运行时设置 TIM 自动重新加载寄存器值,而无需再次调用任何 Init 函数。若需要修改频率,需要使能自动重装载寄存器。
二、方波
使用定时器16的通道1使PA6输出方波。
STM32CubeMX配置:
使用定时器输出模式的翻转模式,与设置的比较直相比,若相等则电平翻转一次,并且触发中断,在中断里面在原来的计数值上在加上比较值。
HAL_TIM_OC_Start_IT(&htim16,TIM_CHANNEL_1); // 方波 ,写在while前的初始化void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM16){if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){__HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, (__HAL_TIM_GET_COUNTER(&htim16)+100)); // 设置比较值}HAL_TIM_OC_Start_IT(&htim16,TIM_CHANNEL_1);}
}
三、波的输入捕获
使用定时器2的通道2是PA1引脚测量波的频率和占空比。
STM32CubeMX配置:
这里信号的输入为通道2,则通道2必须设置为直接输入捕获模式,并且必须选择上升沿触发。通道1选择间接输入捕获模式,选择下升沿触发。
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); // 输入捕获
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM2){if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2){period_val = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_2)+1;duty_val = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1)+1;if(period_val){__HAL_TIM_SET_COUNTER(&htim2, 0); freq = 1000000/ period_val; duty = (duty_val/period_val)*100;}}HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);}}
注意一定要在每一次捕获数值后,将计数值清0,为下一次捕获做准备。
四、设置PWM波的频率和占空比
①输出频率可调,占空比固定的PWM
每按一次按键1频率增加500hz,每按一次按键2频率减少500hz,并保持占空比不变。
if(key_up==3){pwm7 = freq; // 获取pwm参数duty7 = 0.1; // duty7 = duty;pwm7 += 500;if(pwm7 > 10000){pwm7=10000;}pwm7_val = 1000000/pwm7;pwm7_duty = pwm7_val * 0.1;__HAL_TIM_SET_AUTORELOAD(&htim3, pwm7_val);__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, pwm7_duty);}
这里如果用输入捕获测得的占空比,频率增加越多,占空比误差越多,建议将占空比固定。
ARR值=1000000 / freq; (1000000是系统时钟经过预分配提供给定时器的计数时钟)
占空比 = compare值 / arr值 * 100;
②输出频率可调,占空比可以调的PWM
和①一样的,使用一些函数即可,注意打开使能自动重载载值。
设置PWM波的占空比:__HAL_TIM_SET_COMPARE();
设置PWM波的频率:__HAL_TIM_SET_AUTORELOAD();
③交换两路的PWM的频率和占空比
PA6:1khz,占空比:50%;PA7:0.5khz,占空比:10%。每次按键按下交换频率和占空比。
if(key_up==2){// 获取各PWM的比较值,arr值pwm6_val = __HAL_TIM_GET_AUTORELOAD(&htim16);pwm6_duty = __HAL_TIM_GET_COMPARE(&htim16,TIM_CHANNEL_1);pwm7_val = __HAL_TIM_GET_AUTORELOAD(&htim3);pwm7_duty = __HAL_TIM_GET_COMPARE(&htim3,TIM_CHANNEL_2);// PA6-->PA7__HAL_TIM_SET_AUTORELOAD(&htim16, pwm7_val);__HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, pwm7_duty);// PA7-->PA6__HAL_TIM_SET_AUTORELOAD(&htim3, pwm6_val);__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, pwm6_duty);}
注意:修改PWM的参数时,打开使能自动重装载值。
小结
判断定时器的通道:HAL_TIM_ACTIVE_CHANNEL_1
定时器的通道:TIM_CHANNEL_1
启动 PWM 信号生成:HAL_TIM_PWM_Start()
在中断模式下启动 TIM 输入捕获测量: HAL_TIM_IC_Start_IT()
在中断模式下启动 TIM 输出比较信号生成:HAL_TIM_OC_Start_IT()
设置定时器比较值(占空比):__HAL_TIM_SET_COMPARE()
设置定时器自动重装载值(频率):__HAL_TIM_SET_AUTORELOAD()
获取定时器计数值:__HAL_TIM_GET_COUNTER()
设置定时器计数值:__HAL_TIM_SET_COUNTER()
获取定时器捕获值:HAL_TIM_ReadCapturedValue()
PWM波、方波的输出与捕获相关推荐
- STM32之PWM波
说起PWM波,做过智能小车的人肯定都很清楚了,其实他就是一种脉宽调制.在智能小车上,我们一般用PWM波来控制小车的速度,通过控制方波中高低电平的比例,来达到控制小车转速的目的.而32的芯片他提供了专门 ...
- MSP430F5529 DriverLib 库函数学习笔记(六)定时器A产生PWM波
目录 1.通过Timer_A_outputPWM配置产生PWM波 初始化函数 计算 修改占空比的函数 整体程序 效果 2.单定时器产生多路PWM信号 初始化函数 实验结果 3.对称PWM信号的产生 初 ...
- STM32F103输出互补PWM波
STM32F103单片机定时器自带互补PWM波形输出功能,利用定时器输出比较模式,不仅可以输出互补的 PWM波,还可以设置输出方波的起始相位和死区时间. 下面就总结一下如何实现PWM互补输出. voi ...
- STM32单片机一个定时器输出不同频率PWM波
在使用STM32单片机输出PWM波形的时候,通常可以直接使用定时器提供的PWM模式.可以通过自动重装载寄存器(TIMx_ARR)来设置定时器的输出频率,然后通过捕获/ 比较寄存器 1(TIMx_C ...
- STM8学习笔记---定时器输出7路PWM波
STM8S003F3P6单片机共有三个定时器定时器1.定时器2.定时器4.其中定时器1为16位高级定时器,定时器2为16位通用定时器,定时器4为8位基本定时器.定时器1和定时器2可以输出PWM波.其中 ...
- STM32一个定时器同时捕获4路PWM波
问题的提出: 最近需要用航模遥控器控制遥控车,32单片机做主控,需要用到4个通道即需要捕获4路PWM波.如果用四个定时器来捕获四路PWM波,就太浪费资源了.由于STM32单片机的定时器资源有限,故设想 ...
- STM32f103C8定时器输出PWM波信号
利用stm32高级定时器输出PWM,模拟呼吸灯的效果带刹车功能.由于没有示波器查看输出的pwm波形图,所以本次实验使用普通直流电机模拟的. 本文章为学习笔记,其中有些地方解释的不是那么的好,即本笔记可 ...
- AT32(四):TMR——定时器、PWM输出与捕获
前言 用AT32F421的基础定时器TMR6配合中断实现定时功能,用通用定时器TMR3实现PMW波的输出与捕获.本文记录了测试AT32F4单片机定时器的过程. 环境 VScode ( EIDE + C ...
- 高级定时器TIM1输出PWM波
高级定时器(TIM1和TIM8)相较于通用定时器,它的函数配置更多,一个都不能少,否则输出不了PWM波,所以在此写下通用定时器和高级定时器PWM波配置的区别,以记录问题. 通用定时器TIM3通道1配置 ...
- 如何使用定时器捕获一路PWM波信号的频率和占空比
本次实验将采用定时器2的通道2产生两路频率和占空比均可调的PWM信号,然后使用定时器3的通道1来捕获其中的一路PWM波的频率和占空比. 1.首先来看下产生PWM波的程序,也就是和上篇博客是一样的,只不 ...
最新文章
- quagga 简介 开源路由软件
- 数据库进阶系列之三:使用Logminer解析Oracle日志
- 浅谈PHP的Public、Protected、Private三种方法的区别
- 24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals)
- hdu3689(kmp+dp)
- Java基础---方法的重载(overload)+ 优先向上匹配原则
- Debian安装ssh
- java水彩画效果滤镜,PS通过滤镜给照片制作水彩画效果
- python 日程管理程序_729. 我的日程安排表(Python)
- 万众瞩目之下,ANGULAR 2终于正式发布啦!
- [Leetcode] 741. Cherry Pickup 解题报告
- oracle 磁带备份,磁带备份 - Linux下实现自动备份Oracle数据库_数据库技术_Linux公社-Linux系统门户网站...
- 形容计算机专业的人词语,形容一个人很专业很厉害的成语有哪些
- 基于Spring Boot的点餐微信小程序设计与实现
- 用累积分布函数(CDF)计算期望
- 常用数据集/工具下载地址
- video.js 播放 流媒体
- AndroidStudio 快捷键大全
- 盘点2019十大科技并购:IBM收购红帽居首,阿里考拉仅排第十;英特尔20亿美元收购Habana Labs;柳传志将卸任联想……...
热门文章
- 村村响农村广播-盐池县农村IP广播案例
- xcode 怎么调用midi开发录音_直播_个人工作室入门_1K-2k价位录音编曲声卡推荐
- 泰坦尼克号数据集的下载
- Python量化基础:时间序列的平稳性检验
- 汽车美容4s连锁店会员管理系统【源码分享】
- C++实现人机对战围棋(使用Leela Zero权重)-策略
- 2022-08-20 mysql范围查询技术专利交底书
- 信噪比 香农公式_「香农公式」信噪比/香农公式 - seo实验室
- 【图像检测-缺陷检测】基于计算机视觉实现液晶显示器表面缺陷检测含Matlab源码
- 夏普SHARP MX-3508N 一体机驱动