0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Cortex-A9的PWM

GReq_mcu168 来源:玩转单片机 作者:玩转单片机 2021-02-14 15:04 次阅读

一、什么是PWM

PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.

4e6d4fb4-56fc-11eb-8b86-12bb97331649.png

二、PWM信号输出输出和作用

1. 如果要实现PWM信号输出如何输出呢?

1)可以直接通过芯片内部模块输出PWM信号,前提是这个I/O口要有集成的pwm控制器,只需要通过对应的寄存器即可,这种自带有PWM输出的功能模块在程序设计更简便,同时数据更精确。

2)但是如果IC内部没有PWM功能模块,或者要求不是很高的话可以利用I/O口设置一些参数来输出PWM信号,因为PWM 信号其实就是一高一低的一系列电平组合在一起。具体方法是给I/O加一个定时器,对于你要求输出的PWM信号频率与你的定时器一致,用定时器中断来计数,但是这种方法一般不采用,除非对于精度、频率等要求不是很高可以这样实现。

2. PWM信号应用

PWM信号把模拟信号转化为数字电路所需要的编码,现在基本是采用数字电路,因此在很多场合都采用PWM信号。

我们经常见到的就是交流调光电路,也可以说是无级调速,高电平占多一点,也就是占空比大一点亮度就亮一点,占空比小一点亮度就没有那么亮,前提是PWM的频率要大于我们人眼识别频率,要不然会出现闪烁现象。

除了在调光电路应用,还有在直流斩波电路、蜂鸣器驱动、电机驱动、逆变电路、加湿机雾化量等都会有应用。

三、蜂鸣器

蜂鸣器广泛用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

蜂鸣器分为压电式及电磁式的二大类:

压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。它是以压电陶瓷的压电效应,来带动金属片的振动而发声;

电磁式的蜂鸣器,由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。通电时将金属振动膜吸下,不通电时依振动膜的弹力弹回。

有源蜂鸣器, 只要给它加上恒定的电压, 就能发声;无源蜂鸣器, 必须给它加上一定频率的方波或正弦波才能发声

有源蜂鸣器内部带震荡源,所以一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。

有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。

【优点】无源蜂鸣器的优点是:

便宜

声音频率可控,可以做出“多来米发索拉西”的效果。

在一些特例中,可以和LED复用一个控制口有源蜂鸣器的优点是:

程序控制方便 。

应用:电风扇、收音机的声音按钮、任何模拟值都可以使用PWM进行编码

四、fs4412电路图

本例采用fs4412开发板,pwm外接了一个蜂鸣器BUZZER,电路图如下:

4edd9648-56fc-11eb-8b86-12bb97331649.png

从上面电路图可知:

该BUZZER是无源蜂鸣器,如果要想发出声音,需要正负极产生电流变化,我们通过生成方波,从而实现图中三极管1->2周期性导通和关闭来让BUZZER俩边电压产生变化,从而实现电流变化;

三极管的基极连接的是SOC的GPD0_0引脚;

产生方波我们借助的是PWM,标号为MOTOR_PWM。

继续查找MOTOR_PWM:

4f13c24a-56fc-11eb-8b86-12bb97331649.png

由上图可知,MOTOR_PWM连接的是PWM的XpwmTOUT0,和LCD一起复用引脚GPD0_0,

去datasheet继续查看GPD0_0说明,

4f467596-56fc-11eb-8b86-12bb97331649.png

由上图可知,GPD0_0配置由寄存器的GPD0CON[3:0]位控制,要想作为PWM输出,要设置为TOUT_0即0x2。

同时也可以看到,该引脚还可以设置为外部中断信号[EXT_INT6]功能即0xF。

五、Exynos 4412 PWM

概述

Exynos 4412 SCP有五个32位脉冲宽度调制(PWM)定时器。这些定时器产生内部中断对于ARM子系统。此外,定时器0、1、2和3包括驱动外部I/O的PWM功能信号。定时器0中的PWM有一个可选的死区发生器功能,以支持大量的设备。定时器4是一个没有输出引脚的内部定时器。

定时器使用APB-PCLK作为源时钟。定时器0和1共享可编程8位预分频器为PCLK提供第一级分频。定时器2、3和4共享不同的8位预分频器。每个计时器都有它自己的专用时钟分频器,提供第二级时钟划分频(预分频器除以2、4、8或16)。

每个定时器都有它的32位递减计数器;定时器时钟驱动这个计数器。定时器计数缓冲寄存器(TCNTBn)加载递减计数器的初始值。如果递减计数器达到零,它将生成计时器中断请求,通知CPU定时器操作完成。如果定时器下降计数器达到零,相应TCNTBn的值自动重新加载到下一个循环开始。但是,如果定时器停止,例如,在定时器运行模式下,通过清除TCONn的定时器使能位,TCNTBn的值将不会重新加载到计数器中。

PWM功能使用TCMPBn寄存器的值。定时器控制逻辑改变输出电平下计数器值与定时器控制逻辑中比较寄存器的值相匹配。因此,比较寄存器决定PWM输出的开启时间或关闭时间。

每个定时器都是双缓冲结构,带有TCNTBn和TCMPBn寄存器,允许定时器参数在周期中更新。新值在当前计时器周期完成之前不会生效。

Exynos PWM定时器的特性

1)5个32位定时器;

2)2个8位PCLK分频器提供一级预分,5个2级分频器用来预分外部时钟;3)可编程选择PWM独立通道。

4)4个独立的可编程的控制及支持校验的PWM通道。

5)静态配置:PWM停止;

6)动态配置:PWM启动;

7)支持自动重装模式及触发脉冲模式;

8)一个外部启动引脚。

9)两个PWM输出可带Dead-Zone 发生器。

10)中断发生器。

PWM内部模块图

4f863e9c-56fc-11eb-8b86-12bb97331649.png

工作的步骤:

当时钟PCLK被使能后,定时器计数缓冲寄存器(TCNTBn)把计数器初始值下载到递减计数器中。

定时器比较缓冲寄存器(TCMPBn)把其初始值下载到比较寄存器中,并将该值与递减计数器的值进行比较。当递减计数器和比较寄存器值相同时,输出电平翻转。

递减计数器减至0后,输出电平再次翻转,完成一个输出周期。这种基于TCNTBn和TCMPBn的双缓冲特性使定时器在频率和占空比变化时能产生稳定的输出。

每个定时器都有一个专用的由定时器时钟驱动的16位递减计数器。当递减计数器的计数值达到0时,就会产生定时器中断请求来通知CPU定时器操作完成。当定时器递减计数器达到0的时候,如果设置了Auto-Reload 功能,相应的TCNTBn的值会自动重载到递减计数器中以继续下次操作。

然而,如果定时器停止了,比如在定时器运行时清除TCON中定时器使能位,TCNTBn的值不会被重载到递减计数器中。

TCMPBn 的值用于脉冲宽度调制。当定时器的递减计数器的值和比较寄存器的值相匹配的时候,定时器控制逻辑将改变输出电平。因此,比较寄存器决定了PWM 输出的开关时间。

举例

下面我们举个实例来看下,

4fd245da-56fc-11eb-8b86-12bb97331649.png

初始化寄存器 TCNTBn = 159 (50 + 109) ,TCMPBn =109.

开启定时器: 通过设置TCON的开启位.寄存器TCNTBn 的值159将自动加载到递减寄存器down-counter, 同时输出引脚TOUTn 设置为低电平.

当down-counter 的值递减打破和寄存器TCMPBn 的值109相同时, 输出引脚将从低拉到高.

当down-counter递减到0时, 产生一个中断请求.

如果我们设置成autoreload模式,那么down-counter会自动加载TCNTBn的值到down-counter,开启新的一个周期。

我们可以通过设置TCNTBn、TCMPBn来控制占空比,而每个pwm周期后都可以重新设置新的值到TCNTBn、TCMPBn,我们通过精确的计算来设置TCNTBn、TCMPBn的值并通过设置dead zone我们可以设计出各种复杂的矩形波。

如下图所示:

50482638-56fc-11eb-8b86-12bb97331649.png

本例我们只需要产生规则的举行方波即可,所以我们只需要设置占空比为50%即可。

六、寄存器

由第四章可知,我们使用PWM控制器的timer 0,对应的寄存器组如下图所示:

508633ec-56fc-11eb-8b86-12bb97331649.png

1、TFCG0

定时器配置寄存器0(TFCG0) ,主要用于预分频设置。

50ae142a-56fc-11eb-8b86-12bb97331649.png

我们是timer 0,所以只需要设置该寄存器的bite【7:0】即可,最终的输出频率和value的公式如下:

50d54a04-56fc-11eb-8b86-12bb97331649.png

参考24.3.1节:

50fce3d4-56fc-11eb-8b86-12bb97331649.png

其中方波的频率必须在音频范围内,也就是20Hz到20KHZ之间, 但是20Hz到20KHZ的频率送给蜂鸣器后, 只有某一点的频率是最响的, 这个频率称为蜂鸣器的谐振频率, 离它越远, 蜂鸣器发出的声音越轻。

所以Prescaler 0 value值应该设置为255,divider value 应该是1/16,值由TCFG1设置。

PWM.TCFG0=PWM.TCFG0&(~(0xff))|0xf9;

2、TCFG1

定时器配置寄存器1(TCFG1) 主要用于PWM定时器的divider value设置。

5130fbce-56fc-11eb-8b86-12bb97331649.png

由上一节分析,秩序设置TCFG1 bite【3:0】为0100即0x2即可。

PWM.TCFG1=PWM.TCFG1&(~(0xf))|0x2;

3、TCON

timer控制寄存器TCON

515c08dc-56fc-11eb-8b86-12bb97331649.png

bite[3] : 设置定时器是只执行一个周期(One-shot)还是周期执行(auto-reload)

bite[1]: 置为1,则更新TCNTB0 、TCMPB0 的值

bit[0]:开启或者停止定时器

针对不同操作,我们可以设置不同的值:

装载

PWM.TCON=PWM.TCON&(~(0xff))|(1<< 0) | (1 << 1) ;

开启定时器,蜂鸣器响

PWM.TCON=PWM.TCON&(~(0xff))|(1<< 0) | (1 << 3) ;

关闭定时器,蜂鸣器灭

PWM.TCON=PWM.TCON&(~(1<< 0)) ;

4、TCNTB0

定时器计数缓冲寄存器(TCNTB0)根据测算,设置为100

519ad49a-56fc-11eb-8b86-12bb97331649.png

TCNTB0

PWM.TCNTB0=100;

5、TCMPB0

定时器比较缓冲寄存器(TCMPB0 )设置为50,占空比为50%

51e79eb0-56fc-11eb-8b86-12bb97331649.png

PWM.TCMPB0=50;

责任编辑:xj

原文标题:基于Cortex-A9的pwm详解

文章出处:【微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5177

    浏览量

    213761
  • CORTEX-A9
    +关注

    关注

    0

    文章

    38

    浏览量

    35231
  • 无源蜂鸣器
    +关注

    关注

    0

    文章

    41

    浏览量

    11107

原文标题:基于Cortex-A9的pwm详解

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MHMF084A1A9M-MINAS A6N系列 介绍 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF084A1A9M-MINAS A6N系列 介绍相关产品参数、数据手册,更有MHMF084A1A9M-MINAS A6
    发表于 12-09 18:59
    MHMF084<b class='flag-5'>A1A9</b>M-MINAS <b class='flag-5'>A</b>6N系列 介绍 松下

    Cortex-A55 处理器到底什么来头?创龙教仪一文带您了解

    Cortex-A55:同样支持多核配置,但通常会有更高的核心数,如八核架构。在频率方面,也会根据具体实现有所不同。 国产Cortex-A55处理器厂家 芯驰科技 芯驰科技是一家专注于车规级芯片的半导体公司,其X9系列
    发表于 12-03 17:00

    MHMF044A1A9M-MINAS A6N系列 介绍 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF044A1A9M-MINAS A6N系列 介绍相关产品参数、数据手册,更有MHMF044A1A9M-MINAS A6
    发表于 10-18 19:11
    MHMF044<b class='flag-5'>A1A9</b>M-MINAS <b class='flag-5'>A</b>6N系列 介绍 松下

    智能机械臂人脸识别特效丨国产Cortex-A55人工智能实验箱案例分享

    智能机械臂人脸识别特效丨国产Cortex-A55人工智能实验箱案例分享
    的头像 发表于 08-30 13:03 480次阅读
    智能机械臂人脸识别特效丨国产<b class='flag-5'>Cortex-A</b>55人工智能实验箱案例分享

    MHMF024A1A9M-MINAS A6N系列 介绍 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF024A1A9M-MINAS A6N系列 介绍相关产品参数、数据手册,更有MHMF024A1A9M-MINAS A6
    发表于 08-27 18:31
    MHMF024<b class='flag-5'>A1A9</b>M-MINAS <b class='flag-5'>A</b>6N系列 介绍 松下

    智能目标颜色识别抓取丨国产Cortex-A55人工智能实验箱机械臂案例分享

    智能目标颜色识别抓取丨国产Cortex-A55人工智能实验箱机械臂案例分享
    的头像 发表于 08-10 08:32 348次阅读
    智能目标颜色识别抓取丨国产<b class='flag-5'>Cortex-A</b>55人工智能实验箱机械臂案例分享

    国产Cortex-A55高性能人工智能实验箱机械臂姿态识别案例

    国产Cortex-A55高性能人工智能实验箱机械臂姿态识别案例
    的头像 发表于 07-19 08:32 277次阅读
    国产<b class='flag-5'>Cortex-A</b>55高性能人工智能实验箱机械臂姿态识别案例

    为什么更推荐Cortex-A55教学实验箱?我来告诉您!

    丨国产嵌入式芯片,助力“中国芯”工程!TL3568-PlusTEB是一款基于瑞芯微RK3568国产化处理器设计的4核ARMCortex-A55嵌入式教学实验箱。Cortex-A55/53性能对比表
    的头像 发表于 05-31 08:32 841次阅读
    为什么更推荐<b class='flag-5'>Cortex-A</b>55教学实验箱?我来告诉您!

    ARM Cortex-A53嵌入式开发平台Android手册

    电子发烧友网站提供《ARM Cortex-A53嵌入式开发平台Android手册.pdf》资料免费下载
    发表于 04-28 15:10 0次下载

    Imagination新推APXM-6200 CPU,性能超越Cortex-A53

    该CPU为新时代的64位应用型处理器,采用11级别双通道线(11-stage, dual-issue pipeline),相较现有市场产品,其性能超出Arm Cortex-A53高达65%,赛过Cortex-A510则多出20%之多。
    的头像 发表于 04-09 15:04 618次阅读

    电流型PWM控制器UC1842A/3A/4A/5A系列数据表

    电子发烧友网站提供《电流型PWM控制器UC1842A/3A/4A/5A系列数据表.pdf》资料免费下载
    发表于 04-08 11:20 2次下载
    电流型<b class='flag-5'>PWM</b>控制器UC1842<b class='flag-5'>A</b>/3<b class='flag-5'>A</b>/4<b class='flag-5'>A</b>/5<b class='flag-5'>A</b>系列数据表

    9-A输出,3-V至4-V输入跟踪/终止带集成FET的同步PWM开关TPS54972数据表

    电子发烧友网站提供《9-A输出,3-V至4-V输入跟踪/终止带集成FET的同步PWM开关TPS54972数据表.pdf》资料免费下载
    发表于 03-13 10:13 0次下载
    <b class='flag-5'>9-A</b>输出,3-V至4-V输入跟踪/终止带集成FET的同步<b class='flag-5'>PWM</b>开关TPS54972数据表

    适用于ARM® Cortex™-A8/A9 SOC 和 FPGA 的TPS65218电源管理数据表

    电子发烧友网站提供《适用于ARM® Cortex™-A8/A9 SOC 和 FPGA 的TPS65218电源管理数据表.pdf》资料免费下载
    发表于 03-06 14:18 0次下载
    适用于ARM® <b class='flag-5'>Cortex</b>™-<b class='flag-5'>A</b>8/<b class='flag-5'>A9</b> SOC 和 FPGA 的TPS65218电源管理数据表

    入门级64位ARM®CORTEX®-A55 MPU数据手册

    电子发烧友网站提供《入门级64位ARM®CORTEX®-A55 MPU数据手册.pdf》资料免费下载
    发表于 02-19 10:59 1次下载
    入门级64位ARM®<b class='flag-5'>CORTEX</b>®-<b class='flag-5'>A</b>55 MPU数据手册

    Cortex-A72应用实战

    下面Cortex-A72培训营VIP学员问:单核CPU PR做完后,怎么输出数据到TOP去做多核的hierarchy集成?
    的头像 发表于 01-24 10:17 809次阅读
    <b class='flag-5'>Cortex-A</b>72应用实战