arduino timer频率_PWM频率库-Arduino中文社区 - Powered by Discuz!

本文介绍了作者在Arduino项目中为改变PWM频率而创建的库,由于Arduino本身硬件限制,改变PWM频率会影响其他功能。作者提供了一个库,包含多个函数,用于初始化定时器、设置引脚频率等,同时讨论了不同定时器的特性、频率范围和分辨率问题。
摘要由CSDN通过智能技术生成

在目前与Arduino微控制器相关的项目中,我发现没有一种方法能不直接操作底层寄存器,而改变PWM频率的。就目前我所google到的,没有一种通用的库能改变arduino微控制器的PWM频率。网上有各种关于改变PWM频率的代码段,但是最终我还是决定参考400多页的ARV-Mega系列单片机的datasheet来实现这些功能。

据我推测,Arduino的编程人员没有发行任何关于改变PWM频率的方法是因为很难编写一个简单的,直观的硬件定时器封装程序,而不至使初学者困惑。硬件本身就有一些特殊的局限性,它们以一些奇怪的方式表现出来。

请允许我与大家分享一些:

PWM的行为是由叫作定时器的集成元件决定的。每个定时器有2个或4个通道。每个通道连到一个控制器引脚上。改变一个引脚的频率需要改变它所连接的定时器的频率,这样反过来也会改变其它连到同一个定时器的引脚的频率。Timer0通常被用作实现Arduino的计时功能(例如,millis()函数)。改变timer0的频率将会破坏你工程里使用计时函数的其它程序段部分。Arduino中有两种定时器,8位定时器和16位定时器。简单来说,就是它们所存在的细微差别使得不限制一方或另一方的代码实现变得困难。使用一个8位的定时器来设定定制的频率(使用预分频产生不了的频率)需要牺牲一个通道。换句话说,每个设定定制频率的8位定时器会失去在一个引脚产生pwm的能力(连接A通道的引脚会更准确些)。除了Leonardo的所有Arduino都有两个8位定时器,这意味着如果你把所有定时器设定特殊的频率,上述所说的Arduino控制器总共将会牺牲两个引脚。

先不管这些,我依然觉得对硬件定时器做一个库或封装是非常值得的,这样我或者任何其他选择使用这个库的人不必花那么多时间去深挖那些容易产生bug的逐位操作的模块和初始化部分。

这个库有五个全局函数:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值