PWM概述

1、什么是PWM

PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
简单来说 : PWM即脉冲宽度调制,PWM是一种利用数字信号对模拟电路控制的方式。

2、10系列的PWM知识

工作原理:在其定时器相应寄存器计数时,会将其值与比较寄存器(CCRX)中的值进行比较。计数器值大于比较寄存器时,输相应电平。在其小于比较寄存器时输出相反电平。

工作过程:输出什么有效电平由PWM模式和输出输入极性决定




这里预装载值变化意思是:在你变动比较寄存器的时刻,定时器还在计数。比如最大值时100,你将比较值从50调整到80。调整的时刻计数器正好在70.那么在其计数到80时,要不要响应对比这个值。就由ARPE决定。当其为1,则本次响应。若其=0,则本次不响应,等下一周期再响应。

其他引脚详情参考对应芯片资料。

PWM实际操作

库函数配置步骤

这里需要注意:GPIO配置是PB5的部分映射
通过更改ccrx寄存器值改变占空比
代码如下

void TM3_PWM_Init(u16 arr,u16 psc)
{GPIO_InitTypeDef  GPIO_InitStructure;   //GPIO实例化TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;   //定时器TIM3初始化实例化TIM_OCInitTypeDef INITTIM_;             //模式实例化变量RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //GPIOB和端口复用时钟使能时钟使能GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5    //GPIOGPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO//初始化定时器TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值   TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断//初始化PWM模式INITTIM_.TIM_OCMode = TIM_OCMode_PWM2;  //模式为模式2INITTIM_.TIM_OCPolarity = TIM_OCPolarity_High;  //有效电平模式,此次为高电平INITTIM_.TIM_OutputState = TIM_OutputState_Enable;   INITTIM_.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OC2Init(TIM3,&INITTIM_); //实例化变量赋值TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);  //使能输出比较预装载值TIM_Cmd(TIM3, ENABLE);  //使能TIM3int main(void){      u16 led0pwmval=0;u8 dir=1;    delay_init();            //延时函数初始化    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);  //串口初始化为115200LED_Init();               //LED端口初始化TM3_PWM_Init(899,0);  //不分频。PWM频率=72000000/900=80Khz//delay_ms(1110);while(1){delay_ms(10);     if(dir)led0pwmval++;elseled0pwmval--;  //led0pwmval先自增到300,再自减到0if(led0pwmval>300)dir=0;if(led0pwmval==0)dir=1;                                         TIM_SetCompare2(TIM3,led0pwmval);  //更改ccrx寄存器的值,改变占空比}
}
}

STM32入门笔记——PWM相关推荐

  1. STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)

    目录 定时器 8个定时器 定时器功能 定时器中断 常用通用定时器的寄存器 定时器中断实验目的: 定时器库函数及步骤 实验程序讲解 PWM 简介 STM32 PWM工作过程 PWM模式1 与 PWM模式 ...

  2. STM32入门笔记(02):F103C8T6 舵机PWM控制实验(SPL库函数版)

    舵机的结构 舵机简单的说就是集成了直流电机. 电机控制器和减速器等, 并封装在一个便于安装的外壳里的伺服单元. 能够利用简单的输入信号比较精确的转动给定角度的电机系统. 舵机安装了一个电位器(或其它角 ...

  3. STM32入门笔记(02):MDK Keil5 开发环境搭建及新建工程模板教程(SPL库函数版)

    目录 Keil5 开发环境搭建 芯片数据手册 Mec 多功能智能小车底盘开发与使用手册 Mec 主控原理图 Mec STM32F103VET6集成主控板资源分配 Mec OLED 显示内容 如何给 S ...

  4. STM32学习笔记—PWM输出

    1.pwm输出介绍 2.函数配置 3.源码 1.pwm输出介绍 脉冲调制(pwm),其根本原理就是通过控制占空比来控制输出.STM32的定时器除了TIM6和7之外都可以产生pwm输出,其中高级定时器1 ...

  5. STM32入门笔记04_TIM定时器+案例:TIM定时器定时中断、定时器外部时钟

    TIM定时器 TIM简介 TIM(Timer) 定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器.预分频器.自动重装寄存器的时基单元,在72MHz(系统主频)计数时 ...

  6. STM32入门笔记(03):系统时钟控制 RCC (STM32CubeMx 初始化配置)

    目的/起源: B站@立邦大侠 的在视频里面提到,他用STM32CubeMx 更清晰地进行STM32系统时钟配置以及时钟架构. STM32 开发流程 : 芯片选型 - 原理图设计 - PCBlayout ...

  7. STM32入门笔记03_EXTI外部中断详解+案例:红外对射计数、旋转编码器计数

    EXTI外部中断 中断的相关概念 中断源: 可以引起中断的事件称为中断源 中断: 在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成 ...

  8. STM32入门笔记(02):MPU6050、MPU9250、ICM20948及姿态解算(SPL库函数版)

    目录 MPU6050 什么是MPU6050? MPU6050的特点 MPU6050框图 MPU6050初始化 MPU6050寄存器 电源管理寄存器1(0X6B) 陀螺仪配置寄存器(0X1B) 加速度传 ...

  9. STM32入门笔记——GPIO的初始化

    GPIO的初始化 初始化步骤 1.先时钟使能 2.对其进行具体配置(输出模式.端口.速率) 3.一般还对其输出进行默认配置,如默认高电平/低电平 STM32GPIO的模式有 库函数配置法 1.先时钟使 ...

最新文章

  1. C++逗号运算符与逗号表达式
  2. CodeForces - 1208E Let Them Slide(模拟+multiset)
  3. Apache Member、ALC Beijing 发起人姜宁:一个人走的很快,但是一群人能走得更远
  4. Html调用窗口,等待HTML调用window.print()之前写窗口
  5. java jui 正则表达式_常规正则表达式练习
  6. linux下vim 选择文本,删除,复制,粘贴
  7. 欧式墙纸素材高清纹样图案,美观又大气
  8. Cap22_信息系统安全管理
  9. 一例WINDOWS系统上的JAVA UI卡死
  10. UltraISO(软碟通) v8.2.0.1669 十分不错,感觉比WinISO强大些
  11. Sobel边缘检测算法
  12. 工具 - 屏幕录像专家7.5注册机
  13. PHP云软件短信接口,Thinkphp对接华为云短信接口
  14. MT6573添加新硬件模块驱动方法
  15. linux打开7z文件_什么是7Z文件(以及如何打开一个文件)?
  16. 原来收汇宝真的是很烂
  17. 判断单链表是否有环及环的链接点(转)
  18. 【面试宝典】Mysql面试题大全
  19. DPDK系列之三DPDK介绍及简单应用
  20. 虚拟偶像2022:复制下一个A-SOUL?

热门文章

  1. centos7限制cpu使用_CentOS7中CPU频率调整问题
  2. 电脑死机蓝屏怎么办 电脑死机蓝屏原因介绍【解决方法】
  3. ltsc系统升级为服务器,微软宣布Windows Server 2022开始转向LTSC 不再发布半年频道更新...
  4. 十大最佳Python书籍[2021年更新]
  5. Python之心算练习程序
  6. 图片识别软件有哪些?盘点三款好用的识别工具
  7. 矽力杰SY8088国产代替料RY3408
  8. 英文歌曲:What I Have Done(变形金刚第一部主题曲)
  9. 推荐Mac壁纸App
  10. Python之freshman04