电工之家_电工基础知识学习网站
当前位置:电工之家 > 电工知识 > 单片机 > 正文

单片机没有PWM外设也可以做可调占空比

时间:2018-12-12 09:21 来源:电工之家

利用单片机的PWM片上资源可以很方便的输出PWM波形和调节其占空比,所谓占空比就是在一个周期内高电平所占的比例,如下图所示:


占空比=T1/T×100%,如果单片机没有PWM片上资源可通过普通GPIO和定时器配合输出不同占空比的方波。分两种情况介绍。
1.不带有比较功能的情况
如果单片机没有PWM功能,又没有比较功能,那就通过定时器输出。定时器输出方波的原理时,定时翻转GPIO口的输出状态,要想改变占空比,那就去改变定时器输出高电平的时间,针对不同的占空比计算出定时器所需要的初值,每次加载定时器初值。下图时51单片机的定时器寄存器含义。

2.单片机带有比较功能
如果单片机带有比较功能,让单片机工作在比较功能下,可以通过设置比较功能的阈值来改变GPIO口的翻转实现占空比的可调。这种方法需要根据不同的占空比,计算出所对应的比较器阈值,达到设定值后GPIO口就改变当前的电平状态,即实现了不同的占空比的输出。
一般来说单片机的CCP功能是绑在一起的,即Capture(捕获),Compare(比较),PWM(脉宽调制)等功能。没有PWM功能也就没有比较功能。所以没有CCP功能的单片机一般使用定时器输出可变占空比的方波。

占空比可调的PWM
这个占空比其实也很容易改变,只需要我们改变高低电平的时间,如果你不想这么做,可以往单片机上加一个电位器,在我们旋转电位器的时候,把对应的电压传给单片机,单片机再通过不同的电压改变不同的时间,以此来达到调节占空比的目的。
如果需要PWM功能,但你用的MCU恰好又没有,最简单的办法就是换一个,一般来说,连PWM功能都没的MCU性能都一般。确实不想换,就想玩玩,其实也不难,就是用代码控制IO的电平而已:
例如要在端口D1输出占空比30%,频率为1KHz的方波,可以这样:

do

portd.1=0

waitus 700

portd.1=1

waitus 300

loop

当然了,前提是waitus要够准。

看过《单片机没有PWM外设也可以做可调占空比》的人还看了以下文章
c语言模电数电没学可以直接学stm32单片机吗 c语言模电数电没学可以直接学stm32单片机吗
个人觉得还是要掌握一点基础知识才能开始学。从硬件和软件两个方面来说,首先硬件方面,学单片机要懂基本的电子方面的知识,数电和模电是最基础的,一般搞嵌入式的都要能看得懂原理图,需要知道自己的输入、输入分别是什么,这就牵涉到一些比如GPIO、UART、I...
单片机一般用什么系统 单片机一般用什么系统
首先是老牌开源的操作系统比较稳定成熟,我们不应该再去写操作系统。 其次现在单片机的频率越来越高,速度越来越快,操作系统的几大模块,内存管理,任务调度,锁,可以提高cpu的利用率。简单应用不说,应对同时含有多路不同接口的通讯,控制等复杂功能,光...
单片机开漏输出的应用和优点 单片机开漏输出的应用和优点
单片机的开漏输出特点大家都清楚我就不再啰嗦了,主要说应用和优点。 1、增强驱动能力,驱动大电流设备:其实这个功能很少能用到,io一般还是驱动小电流为主,真是大电流就会增加驱动芯片或增加MOS管了,也不会用单片机驱动,因为单片机电源管脚比较细,载流...
STM32单片机好学吗 STM32单片机好学吗
目前市面上热门的32位单片机,非STM32莫属了,网上各种论坛以及开源的资料非常多,如此一来,能为我们的学习提供更多的帮助,超子提供一个学习路径供您参考。 1.C语言基本语法 STM32需要使用C语言开发,所以首先要掌握C语言的基本语法,前期可以不必投入太多...
单片机开发板原理图怎么看 单片机开发板原理图怎么看
首先看供电部分 不管是什么电路,电源是必须的,不管是LDO稳压还是DCDC降压,都需要正确的输入电压,电压高了就会烧毁电路,电压小了不能正常工作,所以先看供电部分,看上图示例,原理图里一般会标注出,保证电路正常工作需要的输入电压,上图中标注了需要1...