单片机输出PWM常见方法和注意事项

发布者:Alisallll最新更新时间:2022-12-08 来源: zhihu关键字:单片机输出  PWM  注意事项 手机看文章 扫描二维码
随时随地手机看文章

PWM的应用可以说非常广泛,控制电机速度、灯光亮度、通信调制等众多领域。

PWM的问题小伙伴问的比较多,最近也在用PWM,这里就分享一下关于PWM的一些内容。

什么是PWM?

PWM:Pulse Width Modulation,脉冲宽度调制。

网上的解释很多,通过下图,你就能直观的理解PWM,其实就是高低电平组成的脉冲信号。

通过改变其中频率(脉冲周期)、占空比,就能应用在很多场合。

PWM常见输出方式

通过上面描述,PWM就是一个IO口以不同的时间周期输出高、低电平。

1.新手(菜鸟)级别while循环中,阻塞延时,控制IO口高低输出:

阻塞延时可以是:软件模拟延时,定时器阻塞延时等。

2.入门(初级)级别while循环中,非阻赛延时,控制IO口高低输出:

非阻赛延时可以是:定时器标识检测、RTOS(系统)延时等。

3.熟悉(中级)级别定时器中断控制IO高低电平输出:

定时器中断配置 ——> 启动定时器 ——> 响应中断,控制IO高低电平···

4.熟练(中级+)级别

定时器PWM硬件控制输出:

配置PWM对应的IO,以及定时器PWM输出 ——> 启动PWM自动输出···

比较:
上面几种PWM输出方式,前面三种都会CPU干预PWM的输出,也就是会占用CPU资源,特别是前面两种方式,不仅占用CPU,误差还比较大。

使用第三种中断方式,如果频率比较高,CPU消耗的也比较严重。这种情况适合于没有硬件PWM输出的单片机。

第四种就是单片机自带硬件PWM输出功能,只需要简单配置就可以自动输出PWM波形,无需CPU干预。

硬件输出PWM例子

这里以大家熟悉的STM32F1为例:为大家简单分享一下硬件定时器输出PWM波形。

PWM定时器相关宏定义:

PWM配置:

PWM输出函数接口:

初始化配置,调用函数接口,直接就输出PWM波形了:

输出PWM波形:

说明:

本例使用的是STM32标准外设库,如果要深入理解其中原理,还是建议使用标准外设库。

当然,如果想要快速使用PWM这个功能,不想理解其原理,可以直接使用STM32CubeMX配置生成代码:

配置注意事项

想要更加精确控制,并更加满足应用层的需求,就需要自己一步一步深入了解原理。

下面说几点常见的问题吧。

1.引脚映射

如果你使用的引脚需要映射,就需要配置对应的参数。

比如:STM32F1使用PB11(需要查看数据手册):

需要增加对应的“映射”代码:

2.频率和占空比精度

如果使用32位定时器的话,频率范围更宽、精度也可以达到更高。比如:频率:0.01Hz、 占空比0.01%等。

如果是16位的话,其中的参数都不能超过16位(65535):

具体可根据自己情况进行配置,比如PWM(定时器)计数时钟、分频值等。

实际应用代码,建议增加各个参数的判断,以防越界(这里为了方便理解,就写的比较简单)。

3.更多STM32都有硬件PWM输出功能,但不同的系列,其配置可能略有一些差异,简单参考官方例程以及手册。

现在大部分单片机都自带有硬件PWM输出功能,硬件的好处就是不用CPU干预。如果没有,可以尝试上面说的定时器中断的方式。


关键字:单片机输出  PWM  注意事项 引用地址:单片机输出PWM常见方法和注意事项

上一篇:单片机数据通信怎么学?这个工具要用好:串口通信
下一篇:单片机固件被破解

推荐阅读最新更新时间:2024-11-11 15:21

基于51单片机PWM调速数码管显示测速
#include reg52.h //单片机头文件 #define uchar unsigned char//宏定义,用uchar表示unsigned char,叫无符号字符型数据类型,取值范围为:0到255。 #define uint unsigned int//宏定义,用uint表示unsigned int,叫无符号整数型数据类型,取值范围为:0到65535。 sbit qitingjian=P1^0;//位定义启停键 sbit zhengzhuan=P1^1;//位定义正转键 sbit fanzhuan=P1^2;//位定义反转键 sbit jiasujian=P1^3;//位定义加速键 sbit jiansujian=P1
[单片机]
基于51<font color='red'>单片机</font><font color='red'>PWM</font>调速数码管显示测速
漏电流测试仪原理_漏电流测试仪使用方法_漏电流测试仪使用注意事项
  漏电流测试仪它按照IEC、ISO、BS、UL、JIS等国际国内的安全标准而设计,适合用于各种家用电器、电源、电缆线、接线端子、高低压胶木电器、开关、电源插头座、电机、影碟机、洗衣机、离心式脱水机、微波炉、电烤箱、电火锅、电视机、电风扇、医疗仪器、电子仪器仪表以及强电系统的安全泄漏电流的测试,同时也是科研实验室、技术监督部门不可缺少的泄漏电流检测设备。   漏电流测试仪原理   泄漏电流的原理测量与绝缘电阻基本相同,测量绝缘电阻实际上也是一种泄漏电流,只不过是以电阻形式表示出来的。不过正规测量泄漏电流施加的是交流电压,因而,在泄漏电流的成分中包含了容性分量的电流。   在进行耐压测试时,为了保护试验设备和按规定的技术指标
[测试测量]
S3C2440-蜂鸣器
ARM驱动蜂鸣器的方式有两种:一种是PWM输出口直接驱动,另一种是利用IO定时翻转电平产生驱动波形对蜂鸣器进行驱动。PWM输出口直接驱动是利用PWM输出口本身可以输出一定的方波来进行驱动。在ARM中可以用几个特殊功能寄存器对占空比和周期进行设置。通过设置这些寄存器产生符合蜂鸣器要求的方波后,这个时候利用这个方波就可以对蜂鸣器进行驱动了。使用PWM时,通过TCMPn可以决定脉宽,TCNTn决定频率,TCMPn/TCNTn决定占空比。使用IO口电平翻转时,需要使用定时器来做定时,通过定时翻转产生符合要求频率的波形。由于蜂鸣器一般的工作电流比较大,以至于IO口无法驱动,一般使用放大电路来驱动,一般使用三极管来放大电流就可以了。
[单片机]
S3C2440-蜂鸣器
51单片机霍尔测速与PWM调直流电机转速快慢
1.本设计采用STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机作为主控制器 · 2.采用霍尔传感器非接触式测电机转速 · 3.LCD1602液晶显示当前的转速,转速单位为转/分(RPM)。和显示当前的pwm占空比0~100%。 · 4.电机的速度可以通过按键调整,也可以开始暂停,正转和反转。 注意:磁铁和霍尔元件最近距离在2mm左右,太近可能会在电机转动时碰到霍尔元件,太远霍尔元件可能会检测不到磁铁。 使用说明: 液晶屏第一行显示电机转速,第二行显示占空比,占空比数值越大,电机转速越快。 系统一共有6个按键,单片机附近的独立按键是系统的复位按键,按下单片机会复位。 下面一排是
[单片机]
51<font color='red'>单片机</font>霍尔测速与<font color='red'>PWM</font>调直流电机转速快慢
单片机入门注意事项
本博客的 EMC单片机专题 放的是我2年来的工作经验。因为EMC的资料相对非常的缺少,不像MCS-51,不少初学者入门碰到了困难,感觉比较无助,我刚开始入门的时候也深深的体验过。最近感觉有点累,想歇歇。但是觉得这样就走了,感觉有点不甘心。我是一个开源的爱好者,在贪婪的摄取别人代码的同时,我觉得我自己也该做点东西。中国的大环境不好,很多工程师都将自己的心得收的严严实实的,我觉得不好。当然,项目代码涉及到法律保护,这个是无可厚非,但是一些小经验,一些小器件的处理办法等等,是可以共享的,让别人走少一点弯路。 阅读文章的时候,我假设你曾经学过至少一种单片机,至少应该学过基本理论,诸如中断,定时器等等基本单元的原理,你应该掌握,文章不再详
[单片机]
数字万用表电压档的使用方法与注意事项
测工作电压时,务必把黑直流电流表插于COM孔,红直流电流表插于V孔,如下图鲜红色框所显示; 若测交流电压,则将表针打进如下图所显示直流电挡位 若测交流电流,则将表针打进如下图所显示交流电流挡位 (1)假如不清楚被测工作电压范畴,将作用电源开关放置很多程并慢慢减少测量范围(不可以在精确测量中更改测量范围)。 (2)假如表明“1”,表明过测量范围,作用电源开关应放置高些的测量范围。 (3) △!表明不必键入高过数字万用表规定的工作电压,表明高些的工作电压值是很有可能的,但有毁坏內部路线的风险。 (4)当测髙压时,应需注意防止触电事故。 (5)数字表工作电压档的内电阻非常大,最少在兆欧级,对被测电源电路危害不大。但非常高的输出阻抗
[测试测量]
定时器输出PWM频率范围及占空比精度
我想要TIM定时器输出的PWM波形:0.1%精度占空比, 频率范围:200Hz - 10KHz。请问能实现吗? Ⅰ 写在前面 如果有朋友下载了上一篇文章我提供的例程,在“bsp_timer.h”文件下,你就会发现有如下一段被我注释了的【说明性文字】。 这个工程是我从之前项目中提取出来(复制部分代码),从新整理的一个的工程。里面的这个被注释了的描述文字是之前整理的,今天重新对其说明一下。 这里句题外话: 我一般都是注重让大家明白其原理,提供的工程代码以简单为原则。比如:没有添加系统,没有添加参数越界检查等额外的代码。不是让你直接拷贝过去就用,一般需要结合你实际工程,对其修改。 Ⅱ 解读那段文字
[单片机]
定时器<font color='red'>输出</font>的<font color='red'>PWM</font>频率范围及占空比精度
待机调光模式的电荷泵背光驱动IC
       小尺寸的LCD显示模块早已成为手持式数码产品的重要组成部分,随着消费者对视觉方面要求的提高,LCD显示模块的设计变得越来越重要。如何在1.8寸至2.8寸的LCD屏上显示更多的信息并提高显示质量达到更好的视觉效果,成为众多手持式数码产品设计者的重点之一。除了提高LCD屏的分辨率、减小延迟时间以及在软件上提升之外,LCD屏的背光设计也扮演着重要角色。          传统设计中,小尺寸彩色LCD屏一般采用白色LED作为背光源。1.8寸至2.8寸的LCD屏多采用1至4颗白色LED。为达到好的显示效果,要求白色LED亮度一致,明暗可调;为保护手持式设备,要求在某些LED断路时有保护功能,且不能影响正常的LED工作;为延
[电源管理]
待机调光模式的电荷泵背光驱动IC
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved