讲座视频 - 脉宽调制

+荐课 提问/讨论 评论 收藏
  • 本课程为精品课,您可以登录eeworld继续观看:
  • 讲座视频 - 脉宽调制
  • 登录
大家好,我是 John Valvano。 在本视频中,让我们讨论一下如何使用 定时器来生成脉宽调制输出。 如果您还记得,定时器可用于执行三件事情。 我们将在码盘实验中把它用作输入, 来测量频率或周期。 这将让我们了解轮子的真实转速有多快。 在本实验中,我们要把它用作脉宽调制输出, 来调节电机的功率。 定时器的另一个用途是 产生周期性中断,这样我们可以实现多线程。 在本视频中,我们将重点关注 PWM 以及如何用定时器产生它。 我们用 PWM 驱动电机的策略是 选择一个周期 -- 选择一个周期 -- 这个周期小于电机的时间常数。 这个周期小于电机的时间常数。 这样一来,电机会对平均值作出响应, 而不是对瞬时的高电平和低电平作出响应。 但是,我们要调节的是占空比, 也就是它处于高电平的时间百分比。 因此,如果我们要为电机提供很大的功率, 我们将需要很大的占空比。 您可以看到,这里的占空比的范围是 0 到 1。 再说一次,我们将使周期保持不变。 如果我们需要更小的功率,那么我们可以减小占空比, 同时保持周期不变。 如果我们需要更小 -- 这是一个输出,因此我们可以考虑它的性能指标, 这是一个输出,因此我们可以考虑它的性能指标, 也就是调节范围是多大? 占空比的范围是 0% 到 100%。 占空比的范围是 0% 到 100%。 但有趣的是一个称为精度的概念。 换句话说,我可以产生多少种不同的占空比? 换句话说,我可以产生多少种不同的占空比? 那么,我的系统中有多少不同的占空比? 因为它是一个 16 位定时器, 因此实际上有大量的 -- 理论上高达 65,000。 实际上,不会有这么多。 但我们还是可以获得大量不同的占空比, 我一会儿将向您展示具体是多少。 总之,我们在这里的任务是生成两个 脉宽调制输出来驱动电机。 这是对模块 12 的回顾, 这里是我们的电机 -- 左侧电机,还有右侧电机。 电机由镍氢电池供电。 电机由镍氢电池供电。 那么,驱动器芯片,也就是这里的 H 桥 那么,驱动器芯片,也就是这里的 H 桥 可以驱动电流向下或向上流动, 我们可以让电流同时向上或向下流动, 或者一个向上、一个向下, 可以采用任一方式。 现在,端口 1 和端口 3 是常规 GPIO, 在这里看到,端口 1 将调节方向。 在这里看到,端口 1 将调节方向。 我们需要向前或向后移动? 端口 3 将是使能引脚或禁用引脚, 如果我想进入低功耗睡眠模式的话。 但本视频重点关注的是端口 2 , 因为这里将产生脉宽调制输出, 通过它们可以独立驱动左侧和右侧电机。 通过它们可以独立驱动左侧和右侧电机。 这样,我可以为每个电机提供不同功率。 该功能的实现代码是在本课程的 配套例程包中,在其中您可以找到 在 P2.5 和 P2.4 上生成 PWM 的代码。 您在实验中的任务是进行代码移植, 将该功能从 P2.5 转移到 P2.7 , 以及从 P2.4 转移到 P2.6 ,因为通过这种方式, 我们可以使用连接到电机的引脚来控制电机。 我们可以使用连接到电机的引脚来控制电机。 好,本幻灯片中需要注意的另一件事是 -- 注意一下所有这些引脚,好吗? 请记住,本课程是关于输入/输出的, 处理器中有大量的输入/输出引脚。 本幻灯片,我要说的第二件事是 -- MSP432 中有很多定时器,对吧? 有四个定时器子模块, 每个定时器子模块可以连接 多至五个输入/输出引脚,因此 MSP432 上有 20 个引脚, 多至五个输入/输出引脚,因此 MSP432 上有 20 个引脚, 可以通过各种方式与定时器相关联。 以各种方式与定时器相关联。 在本示例中, 将生成两个 PWM 输出, 但您可以看到这个处理器能产生的 PWM 远远大于两个。 好的,那么正如我说过的,这里的目标是实现一个固定的周期。 在定时器内, 周期通过该 TA0CCR0 寄存器设置, 这是该定时器模块中的常量寄存器之一。 那么,我们把该寄存器设置为固定的周期, 接下来我们将调节子模块中的另一个常量,这个常量定义了占空比。 接下来我们将调节子模块中的另一个常量,这个常量定义了占空比。 接下来我们将调节子模块中的另一个常量,这个常量定义了占空比。 那么,这两个常量的比值就是占空比。 通过这种方法,我们可以生成 -- 在一个定时器中, 我们可以生成多达四个 PWM 波形, 他们具有相同的频率,以及不同的占空比。 好的,这里的示波器波形展示了 波形的周期 -- 如果您从下降沿数到下降沿, 再看另一个波形的下降沿到下降沿 -- 该示例中的两个波形周期是相等的。 一个周期在那里,一个周期在这里。 不同的是占空比。 这个占空比大,这个占空比小。 好的,让我们向您展示它是怎么工作的。 我们将在两个单独的引脚上生成 PWM 输出, 我们将在两个单独的引脚上生成 PWM 输出, 我将仅为您展示图中的这个。 我将使用的定时器模式称为向上/向下计数模式, 这意味着计数器将先向上计数, 然后再向下计数。 我将从 SMCLK 获取我的基本时序。 因此我将获取一个 12MHz 的时钟 -- 这是系统模块时钟。 然后,我将选择一个预分频值。 就像产生周期性中断时一样, 我可以调节预分频,以获得更长的范围, 我也可以减小预分频,以获得更大的分辨率。 我将选择预分频 8, 该比率意味着,我的计数器实际上 该比率意味着,我的计数器实际上 该比率意味着,我的计数器实际上 将以 66.7 纳秒的周期进行计时。 那么,这就是它进行计时的方式。 从根本上说,我要做的是 从这里设置 CCR0 的值, 这个常量值将用于设置周期。 因此,这将确定我的 PWM 周期, 因此,这将确定我的 PWM 周期, 正如您知道的,该周期将是一个常数。 如果我想设置一个 10 毫秒的周期 -- 该周期小于电机的时间常数, 但仍足够快,使我们有大量的 空间来处理其它任务 -- 我将在这里选择一个计数器值 来设置该周期。 我一会儿将展示它如何实现。 向上/向下计数模式,顾名思义 -- 在电机接口上, 我们将有一个大得多的计数器值, 但在本幻灯片中, 为了让您能看到所有计数器值, 我选择了一个很小的数字 -- 10。 我选择了一个很小的数字 -- 10。 它工作的方式是,它进行计数 -- 10,9,8,7,6,5,4,3,2,1,0 -- 这是向下计数模式, 然后它继续计数 -- 1,2,3,4,5,6,7,8,9,10 -- 这是向上计数模式, 9,8,7,6,5,4,3,2,1,0 -- 这是向下计数模式。 因此,向上/向下意味着它首先向上计数, 然后再向下计数,然后再向上, 然后再向下... 你可以看到,如果将波形的周期 与该计数机制相关联, 每个周期将消耗 2 乘以 CCR0 常量 -- 您可以看到,这里不是 n 加 1, 而只是 n,因为 0 仅发生一次, 10 也仅发生一次,所有其他数字发生两次 -- 乘以所选的时钟 -- 乘以所选的时钟 预分频 8 除以 12MHz。 我将选择这里的常量, 从而使该周期值为 10 毫秒。 好的,那么现在我已经使时钟运行起来。 我的子模块 0 用于设置周期, 然后其他子模块 -- 子模块 1、2、3 和 4 -- 可用于生成脉宽调制输出。 我要向您展示其中的两个 -- 一个在子模块 1 上,另一个在子模块 2 上。 一个在子模块 1 上,另一个在子模块 2 上。 我要采用的方法是, 使用定时器的 toggle/reset 模式, 它将做的是,它将重置引脚 -- P4.2 是一个输出引脚,它将在 计数器值与 CCR1 相等时变为 0。 但它在向上计数和向下计数时所做的事情不同。 但它在向上计数和向下计数时所做的事情不同。 在向上计数时,它将让引脚清零, 然后,当定时器在向下计数过程中发生匹配时, 它将让引脚置 1 。 好的,我在这里再次选择了一个简单的数字。 该 CCR1 与 CCR0 的比值 -- 在该简单的例子中,它是 70% -- 它将是我的占空比。 那么,这将是的占空比。 那么,再说一次,如果我向上计数 -- 如果我向上计数,将要发生的是, 当它与 7 相匹配时,它将重置输出。 但在进行向下计数时,当它发生匹配时, 它将切换 -- 在本例中,也就是将输出置 1 。 那么,再说一次,在向上计数时,它将清除它。 在向下计数时,它将设置它。 因此,通过这种方法, 占空比被设置为 CCR1 和 CCR0 的比值。 占空比被设置为 CCR1 和 CCR0 的比值。 占空比被设置为 CCR1 和 CCR0 的比值。 那么,如果我想调节占空比, 比如说我想从70% 降低到 50%, 我可以把 CCR1 设置成 5。 我可以把 CCR1 设置成 5。 现在将发生的是,当它与 5 匹配时, 它将被置 1 ,并且当它 再次与 5 匹配时将被置 0。 再次与 5 匹配时将被置 0。 再次与 5 匹配时将被置 0。 我所做的是,我在这里把占空比从 70% 更改为 50%。 由于这些是整型常量, 因此您能够看到我可以为 CCR1 选择的值 -- 0、1、2、3、4、5、6、7、8 或 9,对吧? 现在,事实证明我无法使用 10, 但我可以选择这些中的任何一个。 那么您可以看到精度, 也就是不同占空比的数量 -- 由 CCR0 的值确定 -- 占空比的数量由我存储在 CCR0 中的值确定。 这就是精度。 好,那么这里是实际的代码。 这段代码将在 P2.4 和 P2.5 上设置占空比, 您需要把它移植到到 P2.6 和 P2.7。 好的,那么我们将通过函数传递占空比。 我将使用系统模块时钟(SMCLK), 它的频率是总线时钟除以 4。 然后,我将在这里使用预分频 8。 因此该 PWM 的分辨率 将小于 1 毫秒, 我为该占空比选择的周期 是这里的周期值的函数。 那么,占空比的周期 是 2 乘以该参数 -- 乘以 8,这是因为我的预分频设置 -- 再乘以 SMCLK 的分辨率。 这是替代函数之一。 我们已经清除了选择寄存器所在的位, 现在是时候设置它们了。 这些显然是输出引脚。 我将在 CCI0 上把这设置成切换模式。 这是我的周期。 这里是 1 分频, 我们还将在 ID 中实现预分频 8, 这两个分频一起,将为我产生周期。 我将使用的 PWM 模式称为 toggle/reset, 它向上计数时会将输出引脚置 1, 它向上计数时会将输出引脚置 1, 向下计数时则会做相反操作。 向下计数时则会做相反操作。 占空比由这里的常量确定。 由于有两个定时器,因此我必须执行该操作两次 -- 一次针对一个定时器,一次针对子模块 1, 一次针对子模块 2。 在我全部完成之后,我把定时器打开。 我设置 SMCLK, 并进行 8 分频 -- 再说一次,这是向上向下模式,对吧? 那么,在代码里为了实现 1 毫秒周期, 我将把周期设置为 15,000。 那么,如果我乘以8 再除以 12MHz, 这就是我们的 66.7 纳秒。 乘以 2,因为是向上/向下计数模式。 把它乘以 15,000,也就是所传递 到这里的参数。 这将为我生成 10 毫秒的周期。 这是 CCR0。 我们要做的是,设置 CCR1 来确定占空比。 这意味着,CCR1 必须是0 到 15,000 之间的某个值。 这意味着,CCR1 必须是0 到 15,000 之间的某个值。 那么,这段代码所产生 PWM 的精度 -- 因为有 15,000 个不同的占空比 -- 所以,精度是 14 位。 因此,这是一种非常非常精密的方法 来调节输入到电机的功率。 这就是它为什么如此强大。 现在,这里是例程。 每当我想改变功率时, 我不必再次重写所有代码。 我要做的是,改变 CCR1 来控制一个电机, 然后改变 CCR2 来控制另一个电机。 CCR1 中的值 可以是 0 到 14,998 之间的任何值, 这将为我提供 15,000 的精度, 也就是大约 14 位的精度。 它具有 0% 到 100% 的范围, 这是一种非常非常强大的方法, 帮助我们来调节输入到电机的功率。 正如我先前提到的, 该代码在端口 P2.4 和 P2.5 上运行, 您的任务是把它移植到 P2.6 和 P2.7。 正如您看到的,这可以通过更改这些模块来实现。 该模块 1 和 2 可以更改为模块 3 和 4 -- 子模块 3 和 4。 总而言之,PWM 是一种非常强大的技术, 我们可以使用它来调节和影响我们的世界。 在本例中,通过 H 桥, 我们可以调节向电机提供的功率。 我们有两个 H 桥,用于右侧电机和左侧电机。 我们将使波形的周期为常数。 我们将使用 toggle/reset 模式, 它将在一个边沿进行重置,并在另一个边沿进行切换。 这就是脉宽调制。 拿出您的示波器吧, 拿出您的逻辑分析仪,希望您喜欢本次实验。
课程介绍 共计4课时,37分36秒

TI-RSLK 模块 13 - 计时器

TI PWM 机器人 软件 RSLK 计时器

在此模块中,您将编写用计时器创建 PWM 输出的软件。为 PWM 和周期性中断采用计时器可提供增加机器人系统复杂性的机制。

推荐帖子

分享到X
微博
QQ
QQ空间
微信

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新文章 手机版

站点相关: EEWORLD首页 EE大学堂 论坛 下载中心 Datasheet 活动专区 博客

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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