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

ARM嵌入式学习--第八天(PWM)

PWM

-PWM介绍

    PWM(pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量,通信,工控等方面

PWM的频率

    是指在1秒钟内信号从高电平到低电平在回到高电平的次数,也就是说1秒钟PWM有多少个周期,单位HZ 

PWM的周期

    T=1/f,T是周期,f是频率,即如果频率为50HZ,也就是说一个周期是20ms,那么1秒钟就有50个PWM周期

占空比

    一个脉冲周期内,高电平的时间整个周期时间的比例(0%~100%)

总结

    1.脉冲周期T),单位是时间,比如纳秒(ns),微秒(us),毫秒(ms)等

    2.脉冲频率f),单位是HZ,KHZ等,与脉冲周期成倒数关系f=1/T

    3.脉冲宽度W),简称“脉宽”,是脉冲高电平持续的时间,单位是时间

    4.占空比D),脉宽除以脉冲周期的值百分比表示,比如50%,也常有小数或分数表示的,比如0.5或1/2

        以上之间的关系如图所列的公式:

-PWM的工作原理分析(IMX6ull)

    脉宽调制PWM)有一个16位计数器,经过优化,可以从存储的样本音频图像中生成声音,还可以生成音调,它使用16位分辨率指的就是16位计数器4 x 16数据FIF0[缓存]

 工作原理

    PWM的输出是一个切换信号,其频率和占空比可以通过编程相应的寄存器来调制,它有一个16位向上计数器,从0x0000开始计数直到计数器值等于PWM_PR+1,匹配发生后,计数器重置为0x0000PWM_PR是周期寄存器

    在计数周期的开始PWM0引脚设置为1(默认),计数器从0x0000开始向上计数采样值在采样FIF0中,它的值在每个时钟周期和计数器的值比较,当采样值和计数器匹配时,PWM0信号被清除为0(默认),计数器继续计数,直到周期匹配发生,随后另一个周期开始

    当PWM被启用时计数器开始运行,并使用周期和采样寄存器中的重置值生成输出建议在启用PWM之前完成这些寄存器的编程

    硬件复位导致所有PWM计数和采样寄存器被清除FIF0被刷新,控制寄存器显示FIF0为空,可以写入,PWM被禁用软件复位具有相同的结果,但是控制寄存器中DBGEN,STOPEN,DOZEN和WAITEN位的状态不受影响,只有PWM处于禁用状态,才可以进行软件复位

FIF0

    数字采样值可以作为16位字加载到脉冲调制器中,可以使用控制器的BCTRHCTR位来改变字节序,4字(16位)FIF0最大限度地减少了中断开销当数据字的数量低于控制寄存器的FWM字段设置的水位时会产生可屏蔽中断

    如果FIF0未满PWM_SAR采样寄存器的写入会导致该值被存储到FIF0中,FIF0已满时的写入会设置状态寄存器中的FWE(FIF0写入错误)位,并且FIF0内容保持不变,FIF0可以随时写入,但只有在启用PWM时,才能读取PWM_SR[FIF0AV]字段显示FIF0中当前包含多少数据字以及是否可以写入

-PWM重点寄存器介绍

PWM Control Register (PWMx_PWMCR)

PWM Counter Register (PWMx_PWMCNR)

    只读脉冲宽度调制器计数器寄存器PWM_PWMCNR包含当前计数值,可以随时读取而不会干扰计数器

PWM Period Register(PWMx_PWMPR)

    PWM周期寄存器PWM_PWMPR确定PWM输出信号的周期,计时器值匹配PERIOD+1后,计数器复位以开始另一个周期(PWMO[Hz] = PLCK[Hz]/period+2

(由于写入PWM_PWMPR导致的周期值的变化会导致计数器重置为零并开始新的计数周期)

PWM Sample Register(PWMx_PWMSAR)

    PWM采样寄存器PWM_PWMSAR是FIF0的输入,16位字被加载带FIF0的输入。FIF0可以随时写入,但只有启用PWM时才能读取

-PWM驱动蜂鸣器

原理图分析

原理图通过GPIO_9这个IO来控制蜂鸣器,当GPIO_9输出低电平的时蜂鸣器发声。设置GPIO1_9的MUX mod为PWM的工作模式,不同的占宽比让蜂鸣器发出的响声不一样

编程思路

1.使能GPIO和PWM时钟信号

2.管脚设置为PWM功能模式

3.复位PWM控制器

4.选择时钟信号确定PWM的输入时钟信号

5.设置PWM周期值和采样值

6.开启PWM,然后延时一段时间,最后关闭PWM

示例代码
pwm.c
#include  "pwm.h"void pwm_gpio_init(){//开启时钟CCM_CCGR1 |= (0x3 << 26);// 设置复用器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO09 &=~(0xf<<0);//设置方向GPIO1->GDIR |= (0x1<<9);
}//pwm的初始化
void pwm_init(){//开启时钟CCM->CCGR4 |= (0x3 << 18);//禁用PWMPWM2->PWMCR &= ~(0x1 <<0);//软件复位PWM2->PWMCR |= (0x1<<3);while (PWM2->PWMCR & (0x1 << 3)){}//选择时钟源PWM2->PWMCR &= ~(0x3<<16);PWM2->PWMCR |= (0x1 << 16);// 设置pwm的时钟分频器PWM2->PWMCR &= ~(0xfff << 4);PWM2->PWMCR |= (0x41 << 4);//设置周期PWM2->PWMPR = PERIOD - 2;
}//打开PWM
void pwm_on(){// 使能pwmPWM2->PWMCR |= (0x1 << 0);
}//关闭PWM
void pwm_off(){// 关闭pwmPWM2->PWMCR &= ~(0x1 << 0);
}// 设置采样值
void pwm_set_sample_val(int val){PWM2->PWMSAR = val;
}//测试
void pwm_test(){pwm_gpio_init();pwm_init();pwm_on();int i=0;for(;i<=10;i++){pwm_set_sample_val(i*100);gpt_delay_mseconds(500);}pwm_off();
}
pwm.h
#ifndef __PWM_HEAD_
#define __PWM_HEAD_#include "../../include/imx6ull.h"
#include "../driver/gpt/gpt.h"
#include <stdio.h> #define PERIOD 1000extern void pwm_test();
#endif 

相关文章:

ARM嵌入式学习--第八天(PWM)

PWM -PWM介绍 PWM&#xff08;pulse Width Modulation&#xff09;简称脉宽调制&#xff0c;是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在测量&#xff0c;通信&#xff0c;工控等方面 PWM的频率 是指在1秒钟内&#xff0c;信号从…...

遇到“REMOTE HOST IDENTIFICATION HAS CHANGED!”(远程主机识别已更改)的警告

连接虚拟机时提示报错&#xff1a; [insocoperhq-soc-cap-raw3 ~]$ ssh root10.99.141.104WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-midd…...

vue3前端组件库的搭建与发布(一)

前言&#xff1a; 最近在做公司项目中&#xff0c;有这么一件事情&#xff0c;很是头疼&#xff0c;就是同一套代码&#xff0c;不同项目&#xff0c;要改相同bug&#xff0c;改好多遍&#xff0c;改的都想吐&#xff0c;于是就想做一个组件库&#xff0c;这样更新一下就全都可…...

COMSOL快捷键及内置函数

文章目录 COMSOL快捷键使用COMSOL算子求最大值和最小值COMSOL内置函数3.1 解析函数3.2 插值函数3.3 分段函数3.4 高斯脉冲函数3.5 斜坡函数3.6 矩形函数3.7 波形函数3.8 随机函数3.9 Matlab函数3.10 SWITCH函数 COMSOL快捷键 Ctrl&#xff0b;/ 可快速打开预定义的物理量列表。…...

HUAWEI-eNSP交换机链路聚合(手动负载分担模式)

配置思路:HUAWEI交换机链路聚合有LACP模式跟手动负载分担模式,本文主打手动负载分担模式:首先交换机-PC之间划分基本vlan,交换机-交换机之间创建链路聚合组,划分端口至链路聚合分组(缺省模式为手动负载分担模式)。结果验证要求同vlan可以ping通,关闭某个聚合端口后仍可…...

番外篇 | Hyper-YOLO:超图计算与YOLO架构相结合成为目标检测新的SOTA !

前言:Hello大家好,我是小哥谈。Hyper-YOLO,该方法融合了超图计算以捕捉视觉特征之间复杂的高阶关联。传统的YOLO模型虽然功能强大,但其颈部设计存在局限性,限制了跨层特征的融合以及高阶特征关系的利用。Hyper-YOLO在骨干和颈部的联合增强下,成为一个突破性的架构。在COC…...

【MATLAB第109期】基于MATLAB的带置信区间的RSA区域敏感性分析方法,无目标函数

【MATLAB第108期】基于MATLAB的带置信区间的RSA区域敏感性分析方法&#xff0c;无目标函数 参考第64期文章【MATLAB第64期】【保姆级教程】基于MATLAB的SOBOL全局敏感性分析模型运用&#xff08;含无目标函数&#xff0c;考虑代理模型&#xff09; 创新点&#xff1a; 1、采…...

Bootstrap 表格

Bootstrap 表格 引言 Bootstrap 是一个流行的前端框架&#xff0c;它提供了一套丰富的工具和组件&#xff0c;用于快速开发响应式和移动设备优先的网页。在本文中&#xff0c;我们将重点讨论 Bootstrap 中的表格组件&#xff0c;包括其基本结构、样式以及如何使用 Bootstrap …...

【论文阅读】Computing the Testing Error without a Testing Set

https://blog.csdn.net/qq_40021158/article/details/109485216 可以使用测试集来估计训练集和测试集之间的性能差距&#xff0c;但是要避免过度拟合测试数据几乎是不可能的。 使用隔离的测试集可能会解决此问题&#xff0c;但这需要不断更新数据集&#xff0c;这是一项非常昂贵…...

Visio——同一个工程导出的PDF文件大小不一样的原因分析

现象 在不同电脑&#xff0c;导出来的PDF文件大小不一样。 原因分析 文件小的未将字体嵌入&#xff0c;文件大的已经将字体嵌入了。...

【ETCD】ETCD 架构揭秘:内部各组件概览

ETCD 的主要组件及它们之间的关联关系如下&#xff1a; 目录 1. Client&#xff08;客户端&#xff09;2. gRPC 接口3. Etcd Server Main Loop&#xff08;ETCD 主循环&#xff09;4. Raft&#xff08;共识模块&#xff09;5. Peer Etcd Nodes&#xff08;ETCD 集群节点&#x…...

Qt WORD/PDF(四)使用 QAxObject 对 Word 替换(QWidget)

关于QT Widget 其它文章请点击这里: QT Widget 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 姊妹篇: Qt WORD/PDF&#xff08;一&#xff09;使用 QtPdfium库实现 PDF 操作 Qt WORD/PDF&#xff08;二…...

音视频学习(二十四):hls协议

基本原理 HLS协议通过将视频文件切分成多个小的媒体段&#xff08;通常是10秒左右的.ts文件&#xff09;&#xff0c;并通过HTTP传输给客户端。视频播放过程中&#xff0c;客户端按顺序请求这些小段文件来逐步播放整个视频流。HLS还支持多种码率&#xff0c;以便适应不同网络条…...

UniDepth 学习笔记

摘要 准确的单目度量深度估计&#xff08;MMDE&#xff09;是解决三维感知和建模中下游任务的关键。然而&#xff0c;最近的MMDE方法的显著准确性仅限于其训练领域。这些方法存在适度的域间隙&#xff0c;也不能推广到看不见的域&#xff0c;这阻碍了它们的实际适用性。本文提出…...

PVE——OpenWRT 硬盘 size单位的调整

​​​​​ 问题&#xff1a;初始状态为120MB 还需要进行计算&#xff0c;如果通过图形界面添加磁盘会出现单位不变的情况。 进入命令行前记得给你的虚拟机拍照&#xff0c;防止误操作 通过ssh 进入PVE命令行 按需添加容量即可 不到1G 会显示M 超过1G 不是G整数均为M单位。 …...

Android-ImagesPickers 拍照崩溃优化

Android-ImagesPickers 作为老牌图片选择器&#xff0c;帮助了很多牛马宝宝&#xff0c;刚好最近用到了多相册选择以及拍照&#xff0c;可能是高版本机型问题&#xff0c;导致拍照后就闪退 原作者文章以及git Android实用视图动画及工具系列之九&#xff1a;漂亮的图片选择器…...

Linux dd 命令详解:工作原理与实用指南(C/C++代码实现)

这段代码是一个模仿 Linux dd 命令的工具&#xff0c;它用于在不同文件之间复制数据。dd 是一个非常强大的命令行工具&#xff0c;可以用于数据备份、转换和复制。下面我将详细解释这段代码的原理、实现方式以及如何运行和测试。 Linux dd 命令的工作原理 dd 命令是 Unix 和 …...

Golang学习历程【第一篇 入门】

Golang学习历程【第一篇 入门Hello World】 1. 学习文档2. Window 本地安装Go2.1 安装2.2 验证 3. 开发环境——VsCode3.1 VsCode 安装3.2 安装插件3.2.1 language 语言汉化插件安装3.2.2 Go插件安装 4. Hello World 入门4.1 建工程4.2 创建项目文件4.3 编写Hello World程序4.4…...

青少年编程与数学 02-004 Go语言Web编程 01课题、Web应用程序

青少年编程与数学 02-004 Go语言Web编程 01课题、Web应用程序 课题摘要:一、Web应用程序二、Web服务器&#xff08;一&#xff09;什么是Web服务器&#xff08;二&#xff09;Web服务器配置1. 选择服务器软件2. 安装服务器软件3. 配置服务器4. 安全设置5. 部署网站内容6. 测试服…...

【mysql】如何解决主从架构从库延迟问题

目录 1. 说明2.优化主库的写入性能3. 优化网络性能4. 增强从库的硬件性能5. 调整从库的配置6. 主从架构优化7. 监控和调优8.使用 GTID 和 Group Replication 1. 说明 1.在 MySQL 数据库中&#xff0c;从库延迟&#xff08;replication lag&#xff09;是指主库和从库之间的数据…...

【TÜV认证级C++安全编码规范】:基于EN 50128 SIL3轨道交通项目的静态分析规则集与PC-lint+定制化配置实录

第一章&#xff1a;【TV认证级C安全编码规范】&#xff1a;基于EN 50128 SIL3轨道交通项目的静态分析规则集与PC-lint定制化配置实录在轨道交通SIL3级安全关键系统开发中&#xff0c;C代码必须满足TV认证所要求的EN 50128:2018 Annex A.3“C语言使用指南”及MISRA C:2008&#…...

RefluxJS入门指南:构建React应用的终极单向数据流解决方案

RefluxJS入门指南&#xff1a;构建React应用的终极单向数据流解决方案 【免费下载链接】refluxjs A simple library for uni-directional dataflow application architecture with React extensions inspired by Flux 项目地址: https://gitcode.com/gh_mirrors/re/refluxjs …...

Jimeng LoRA效果对比:不同GPU型号(3090/4090/A10/A100)显存占用实测

Jimeng LoRA效果对比&#xff1a;不同GPU型号&#xff08;3090/4090/A10/A100&#xff09;显存占用实测 1. 项目简介 今天给大家带来一个特别实用的技术评测——Jimeng&#xff08;即梦&#xff09;LoRA模型在不同GPU上的显存占用实测。如果你正在纠结该用哪款显卡来跑AI绘画…...

SecGPT-14B镜像免配置实战:开箱即用的网络安全大模型推理方案

SecGPT-14B镜像免配置实战&#xff1a;开箱即用的网络安全大模型推理方案 1. 为什么选择SecGPT-14B 在网络安全领域&#xff0c;专业知识的获取往往需要多年经验积累。SecGPT-14B作为一款专注于网络安全的大语言模型&#xff0c;能够为安全工程师、开发人员和IT运维人员提供即…...

Pixel Aurora Engine镜像部署:支持RTX 3060及以上显卡的轻量级方案

Pixel Aurora Engine镜像部署&#xff1a;支持RTX 3060及以上显卡的轻量级方案 1. 项目概览 Pixel Aurora Engine是一款专为像素艺术创作设计的AI绘图工作站&#xff0c;采用复古8-bit游戏风格界面&#xff0c;让AI艺术创作变得像玩游戏一样有趣。这个轻量级解决方案特别针对…...

OpenClaw与Qwen3-14b_int4_awq联动:低成本实现个人自动化办公

OpenClaw与Qwen3-14b_int4_awq联动&#xff1a;低成本实现个人自动化办公 1. 为什么选择OpenClawQwen3-14b_int4_awq组合 去年夏天&#xff0c;当我第一次尝试用AI自动化处理周报时&#xff0c;发现商业API的token消耗速度远超预期——生成5份周报就花掉了近50元。这促使我开…...

RC滤波器设计实战:从基础到高阶应用

1. RC滤波器设计基础与核心概念在嵌入式系统设计中&#xff0c;信号滤波是每个硬件工程师必须掌握的核心技能。我从业十余年处理过无数传感器信号&#xff0c;发现90%的噪声问题都可以通过合理设计的RC滤波器解决。与动辄使用运放或DSP方案相比&#xff0c;无源RC滤波器以极低成…...

2025届学术党必备的降重复率网站横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 研究人工智能开题报告的工具&#xff0c;借助自然语言处理技术&#xff0c;靠着学术大数据分…...

【实用技巧】-Mac系列设备自定义鼠标指针颜色与动态效果指南

1. 为什么需要自定义鼠标指针&#xff1f; 作为一个用了十年Mac的老用户&#xff0c;我深知默认的白色指针在复杂界面中经常"消失"的烦恼。特别是做设计时&#xff0c;盯着色彩斑斓的PS画布&#xff0c;那个小箭头简直像在玩捉迷藏。更糟的是在演示场景&#xff0c;观…...

Three.js面试必备:从光源类型到性能优化的20个高频考点解析

Three.js面试深度攻略&#xff1a;从核心原理到性能优化的20个技术要点 当面试官抛出"Three.js的光照系统如何影响渲染性能"这类问题时&#xff0c;你是否能条理清晰地拆解环境光与平行光的计算差异&#xff1f;面对"如何实现自定义着色器优化建筑可视化项目的渲…...