IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> pwm相关知识 -> 正文阅读

[嵌入式]pwm相关知识

1.定时器时钟频率

一般手册上都会写明,对于stm32f1系列一般为72Mhz,f4一般为168MHZ

2,定时器溢出时间计算

定时器在不分频的情况下以f1为例,系统时钟为频率为72MHZ,

定时器时间设置一般包括预分频系数psc,重装载值arr(就是要加多少次),两个参数,

公式为:溢出时间=(预分频系数psc)*重装载值arr/主频值

主函数中调用该函数TIM3_Int_Init(5000-1,7200-1);
其溢出时间的计算如下:
定时器时钟72M,分频系数7200,所以72M/7200=10Khz的计数频率,计数 5000 次为 0.5m。

注意1,预分频系数和重装载值最大值为65536(16位),并且是从0当作第一位开始。

2. pwm产生和占空比时间调整

我们知道时钟本质是计数器,计的是上升沿或下降沿或上升和下降沿的次数,

pwm就是输出高电平所占的时间也可以说是次数(高电平所在的时间多少则由占空比CCR确定),所以说pwm的输出就是,一定时间下高电平所占的时间。

所以通过prc,和arr,确定定时器时间,通过ccr确定高电平时间,这样占空比就确定。

3.pwm配置和相关问题

pwm原理

每个定时器有四个通道,每一个通道都有一个捕获比较寄存器

ARR为重装值起到决定pwm周期的作用

CCR为比较寄存器的值。

CNT是定时器计数次数?

如图:当ARR>CNT>CCR时输出低电平,当CNT<CCR输出高电平,

实际上

PWM输出高低电平还需要确定pwm模式,和输出极性

计数器值TIMx_CNT与捕获比较寄存器值CCRx比较后,最终输出高电平还是低电平,?
由TIMx_CCMR1:OC1M位和TIMx_CCER:CC1P位共同决定

TIMx_CCMR1:OC1M位确定pwm模式,TIMx_CCER:CC1P则起到确定有效位的是高低电平。

如果是模式1,向上计数,且高电平有效,ccr值越大占空比越小

? ? ? ? ? ?模式1,向上计数,且低电平有效,ccr值越大占空比越大

pwm一般配置


#include "timer.h"
?
//TIM3 PWM初始化
//arr ? 重装载值
//psc ? 预分频系数
void TIM3_PWM_Init(u16 arr,u16 psc)
{
? ? GPIO_InitTypeDef ? ? GPIO_InitStrue;
? ? TIM_OCInitTypeDef ? ? TIM_OCInitStrue;
? ? TIM_TimeBaseInitTypeDef ? ? TIM_TimeBaseInitStrue;
? ??
? ??
? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ? ? ? ?//使能TIM3和相关GPIO时钟
? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 使能GPIOB时钟(LED在BP5引脚),使能AFIO时钟(定时器3通道2需要重映射到BP5引脚)
? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
? ??
? ? GPIO_InitStrue.GPIO_Pin=GPIO_Pin_5; ? ? // TIM_CH2
? ? GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP; ? ?// 复用推挽
? ? GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz; ? ?//设置最大输出速度
? ? GPIO_Init(GPIOB,&GPIO_InitStrue); ? ? ? ? ? ? ? ?//GPIO端口初始化设置
? ??
? ? GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
? ??
? ? TIM_TimeBaseInitStrue.TIM_Period=arr; ? ?//设置自动重装载值
? ? TIM_TimeBaseInitStrue.TIM_Prescaler=psc; ? ? ? ?//预分频系数
? ? TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; ? ?//计数器向上溢出
? ? TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1; ? ? ? ?//时钟的分频因子,起到了一点点的延时作用,一般设为TIM_CKD_DIV1
? ? TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue); ? ? ? ?//TIM3初始化设置(设置PWM的周期)
? ??
? ? TIM_OCInitStrue.TIM_OCMode=TIM_OCMode_PWM1; ? ? ? ?// PWM模式1:CNT<CCR时输出有效
? ? TIM_OCInitStrue.TIM_OCPolarity=TIM_OCPolarity_High;// 设置极性-有效为高电平
? ? TIM_OCInitStrue.TIM_OutputState=TIM_OutputState_Enable;// 输出使能
? ? TIM_OC2Init(TIM3,&TIM_OCInitStrue); ? ? ? ?//TIM3的通道2PWM 模式设置
?
? ? TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); ? ? ? ?//使能预装载寄存器
? ??
? ? TIM_Cmd(TIM3,ENABLE); ? ? ? ?//使能TIM3
? ??
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:52:08  更:2021-11-11 12:52:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:52:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码