当前位置: 首页 > java >正文

PWM 相关知识整理

一、PWM 相关术语

概念含义
频率1 秒钟内信号从高电平到低电平再回到高电平的次数,即 1 秒钟 PWM 的周期数,单位为 Hz
周期一个脉冲信号的时间,1 秒内的周期次数等于频率,周期 = 1 / 频率(T=1/f)
脉宽时间高电平持续的时间
占空比一个脉冲周期内,高电平时间与整个周期时间的比例

举例:方波的占空比为 50%;若周期为 20ms,脉宽时间为 5ms,则占空比为 25%。

二、PWM 信号应用领域
  • 调光电路:通过调节占空比可实现呼吸灯效果。
  • 电机控制:利用占空比调节电机转速。
  • 舵机控制:以固定频率搭配不同占空比来控制舵机的转角。
  • 其他领域:还可用于直流斩波电路、蜂鸣器驱动、逆变电路、加湿机雾化量控制等。
三、Exynos 4412 PWM 特性
  • 该芯片的 SCP 具备五个 32 位脉冲宽度调制(PWM)定时器。
  • 有 2 个 8 位 PCLK 分频器用于一级预分频,5 个 2 级分频器对外部时钟进行预分。
  • 支持可编程选择 PWM 独立通道,拥有 4 个独立的可编程控制且支持校验的 PWM 通道。
  • 具备静态配置(PWM 停止)和动态配置(PWM 启动)两种模式。
  • 支持自动重装模式及触发脉冲模式,设有一个外部启动引脚。
  • 两个 PWM 输出可配备 Dead-Zone(死区)发生器,还具备中断发生器。
四、PWM 工作步骤
  1. 当时钟 PCLK 被使能后,定时器计数缓冲寄存器(TCNTBn)会将计数器初始值下载到递减计数器中。
  2. 定时器比较缓冲寄存器(TCMPBn)把其初始值下载到比较寄存器,并将该值与递减计数器的值进行比较,当两者值相同时,输出电平翻转。
  3. 递减计数器减至 0 后,输出电平再次翻转,完成一个输出周期。
  4. 当递减计数器计数值达到 0 时,产生定时器中断请求通知 CPU 定时器操作完成。若将定时器 0 设置为自动重载功能(TCONbit [3]=1),相应的 TCNTBn 的值会自动重载到递减计数器以继续下次操作。
  5. 若定时器停止工作(清除定时器控制寄存器 TCON 中的定时器使能位),则 TCNTBn 的值不会被重载到递减计数器。
  6. TCMPBn 的值用于脉冲宽度调制,当定时器递减计数器的值和比较寄存器的值相匹配时,定时器控制逻辑改变输出电平,比较寄存器决定 PWM 输出的开关时间。
四、PWM 工作流程(精简)
  1. 时钟使能:PCLK 开启后,计数缓冲寄存器(TCNTBn)将初始值加载到递减计数器。
  2. 比较触发:比较缓冲寄存器(TCMPBn)值与递减计数器值匹配时,输出电平翻转。
  3. 周期结束:计数器减至 0 时,输出电平再次翻转,完成一个周期,并触发中断(若启用)。
  4. 自动重载:若设置自动重载模式(TCON [3]=1),TCNTBn 值会重新加载到计数器,循环运行。
五、寄存器配置实例

目标:生成周期 159 个时钟周期、高电平 109 个时钟周期的 PWM 波形(低电平 50 周期)。

  1. 初始化寄存器
    • TCNTBn = 159(周期总时长),TCMPBn = 109(高电平时长)。
  2. 启动定时器
    • 设置 TCON 寄存器使能位,TCNTBn 值加载到递减计数器,输出引脚初始化为低电平。
  3. 电平翻转逻辑
    • 计数器从 159 递减至 109 时,输出由低变高;递减至 0 时,输出由高变低,同时触发中断。
  4. 自动重载:若启用该模式,计数器自动重新加载 159,进入下一个周期。
六、时钟配置寄存器(TCFG0/TCFG1)
  1. TCFG0 寄存器(预分频配置):

    • 功能:设置一级预分频比(8 位,范围 1~255),公式为:预分频后时钟=预分频值+1PCLK​
    • 示例:若 PCLK=66MHz,预分频值 = 99,则预分频后时钟为 660kHz(66M/(99+1))。
  2. TCFG1 寄存器(二级分频配置):

    • 功能:选择二级分频比(1/1、1/2、1/4、1/8、1/16),决定最终输入定时器的时钟频率:定时器输入时钟=分频比预分频后时钟​
    • 配置示例

      c

      运行

      // 设置TCFG0预分频值为248(0xF9),TCFG1分频比为1/16(0x4)
      PWM.TCFG0 = (PWM.TCFG0 & ~0xFF) | 0xF9;  // 预分频值=248,PCLK/(248+1)=66M/249≈265kHz
      PWM.TCFG1 = (PWM.TCFG1 & ~0xF) | 0x4;    // 二级分频比1/16,最终时钟=265k/16≈16.5kHz
      
  3. 时钟计算与分辨率

    • 公式:ftimer​=(prescaler+1)×dividerPCLK​
    • 人耳可识别频率:20Hz~20kHz,需据此配置时钟参数。
七、关键寄存器地址与功能
寄存器地址(基址 + 偏移)功能
TCNTB00x000C定时器 0 计数缓冲寄存器,存储周期总时长。
TCMPB00x0010定时器 0 比较缓冲寄存器,决定高电平时长(占空比)。

:所有配置需结合芯片手册具体地址和寄存器位定义,以上示例基于 Exynos 4412 架构。

http://www.xdnf.cn/news/11982.html

相关文章:

  • 【大模型:知识图谱】--4.neo4j数据库管理(cypher语法1)
  • 振动力学:欧拉-伯努利梁的弯曲振动(考虑轴向力作用)
  • Qt Quick快速入门笔记
  • 国产三维CAD皇冠CAD在「金属压力容器制造」建模教程:蒸汽锅炉
  • 音乐播放器小程序设计与实现 – 小程序源码分享
  • typescript中的type如何使用
  • gitlab rss订阅失败
  • LeetCode 3226.使两个整数相等的位更改次数
  • SkyWalking架构深度解析:分布式系统监控的利器
  • Docker容器化的文件系统隔离机制解析
  • 解决com.jcraft.jsch.JSchException: Algorithm negotiation fail
  • CppCon 2015 学习:Beyond Sanitizers
  • 全角转半角函数(APP)
  • Viggle:开启视频人物替换新纪元
  • 书籍转圈打印矩阵(8)0604
  • Reids 如何处理缓存穿透、缓存击穿、缓存雪崩问题?
  • 使用ArcPy进行栅格数据分析
  • 麒麟+ARM架构安装mysql8的操作指南
  • 各个布局的区别以及示例
  • Sql Server 中常用语句
  • 计算机系统结构-第五章-目录式协议
  • psycopg2-binary、pgvector、 SQLAlchemy、 PostgreSQL四者的关系
  • 【无人机】无人机UAV、穿越机FPV的概念介绍,机型与工具,证书与规定
  • JavaScript性能优化实战:深入探讨JavaScript性能瓶颈与优化技巧
  • UE5 创建了一个C++类,现在我还有一个蓝图类,我想将编写的C++类中包含的功能加入到这个蓝图类里面,如何做到
  • 2025年渗透测试面试题总结-腾讯[实习]安全研究员(题目+回答)
  • P3156 【深基15.例1】询问学号
  • Windows系统工具:WinToolsPlus 之 SQL Server 日志清理
  • Centos 8系统ext4文件系统类型进行扩容缩容 (LVM)
  • FFMPEG 提取视频中指定起始时间及结束时间的视频,给出ffmpeg 命令