讲座视频 - 脉宽调制

展开字幕 关闭字幕 时长:18分36秒
评论 收藏 分享 上传者:hi5
大家好,我是 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 模式, 它将在一个边沿进行重置,并在另一个边沿进行切换。 这就是脉宽调制。 拿出您的示波器吧, 拿出您的逻辑分析仪,希望您喜欢本次实验。317
课程介绍 共计4课时,37分36秒

TI-RSLK 模块 13 - 计时器

TI PWM 机器人 软件 输出 RSLK 计时器

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

  • 相关产品
  • 样品申请
  • EVM购买
  • 文档下载
  • 软件/工具
  • TI Design
分享到X
微博
QQ
QQ空间
微信

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

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

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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