lv11 嵌入式开发 PWM 18

news2025/1/20 19:18:45

目录

1 PWM简介

1.1 蜂鸣器工作原理

1.2 GPIO控制

1.3  PWM控制

2  Exynos4412下的 PWM控制器

2.1 总览

2.2 设置步骤 

2.3 功能框图

2.4 特征 

3 寄存器介绍 

3.1 总览

3.2 TCFG0 一级分频寄存器

 3.3 TCFG1 二级分频寄存器

3.4 TCON控制寄存器

3.5 TCNTB TCMPB TCNTO 

4 PWM编程 

4.1 原理图

5 练习


1 PWM简介

1.1 蜂鸣器工作原理

有源蜂鸣器    

有源蜂鸣器只要接上额定电源就可以发出声音

无源蜂鸣器

无源蜂鸣器利用电磁感应原理,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声

1.2 GPIO控制

可以实现pwm的波形,但是占用cpu 

1.3  PWM控制

PWM(Pulse Width Modulation)即脉冲宽度调制,通过对脉冲的宽度进行调制,来获得所需要波形

其实就是定时器

2  Exynos4412下的 PWM控制器

2.1 总览

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寄存器,允许在周期中更新定时器参数。新值直到当前定时器周期完成后才会生效。

2.2 设置步骤 

 使用PWM作为脉冲发生器的步骤如下:

  1. 使用159(50 + 109)初始化TCNTBn寄存器,使用109初始化TCMPBn寄存器。
  2. 启动定时器:设置启动位,并手动将该位更新为关闭状态。
  3. 将TCNTBn值159加载到递减计数器中,然后将输出TOUTn设置为低电平。
  4. 如果递减计数器从TCNTBn计数到TCMPBn寄存器中的109,则输出从低电平变为高电平。
  5. 如果递减计数器达到0,则会生成一个中断请求。
  6. 递减计数器会自动重新加载TCNTBn。这将重新启动循环。

2.3 功能框图

2.4 特征 

PWM的特性包括:

  • 五个32位定时器。
  • 两个8位时钟预分频器,用于对PCLK进行第一级分频。五个时钟分频器和多路复用器,用于对预分频器时钟进行第二级分频。
  • 可编程时钟选择逻辑,用于每个PWM通道的独立控制。
  • 四个独立的PWM通道,具有可编程的占空比控制和极性。
  • 静态配置:停止PWM。
  • 动态配置:PWM正在运行。
  • 自动重载和单次脉冲模式。
  • 两个PWM输出上的死区生成器。
  • 等级中断生成。

PWM有两种操作模式,它们是:

  • 自动重载模式:在该模式下,根据编程的占空比和极性生成连续的PWM脉冲。
  • 单次脉冲模式:在该模式下,根据编程的占空比和极性仅生成一个PWM脉冲。

为了控制PWM的功能,提供了18个特殊功能寄存器。PWM是一个AMBA从属模块,具有可编程输出和时钟输入,并且PWM连接到高级外设总线(APB)。可以通过APB事务访问PWM内的这18个特殊功能寄存器。

其余信息略

3 寄存器介绍 

3.1 总览

3.2 TCFG0 一级分频寄存器

用于配置两个8位预分频器和死区或者死区长度。一级分频

 

 3.3 TCFG1 二级分频寄存器

控制五个多路选择位的定时器配置寄存器,二级分频

3.4 TCON控制寄存器

 

 

3.5 TCNTB TCMPB TCNTO 

TCNTB定时器计数寄存器

TCMPB定时器比较寄存器

TCNTO定时器计数值读取寄存器(只读)

 

4 PWM编程 

人的听力范围20Hz-20000hz,实现一个500hz的蜂鸣器

4.1 原理图

GPD0_0驱动蜂鸣器

对应PWM0通道


#include "exynos_4412.h"

void Delay(unsigned int Time)
{
	while(Time --);
}

int main()
{
	/*1.将GPD0_0引脚设置成PWM0的输出引脚*/
	GPD0.CON = GPD0.CON & (~(0xF)) | (0x2);
	/*2.设置PWM0的一级分频	一级分频倍数设置为100倍*/
	PWM.TCFG0 = PWM.TCFG0 & (~(0xFF)) | 99;
	/*2.设置PWM0的二级分频	二级分频倍数设置为1倍  递减计数器递减频率 = PLCK / (99 + 1) / 1 = 1M*/
	PWM.TCFG1 = PWM.TCFG1 & (~(0xF));
	/*4.设置PWM0为自动重装载,使其能够产生连续的脉冲信号*/
	PWM.TCON = PWM.TCON | (1 << 3);
	/*5.设置PWM0的频率为500HZ*/
	PWM.TCNTB0 = 2000;
	/*6.设置PWM0的占空比为50%*/
	PWM.TCMPB0 = 1000;
	/*7.将TCNTB0中的值手动装载到递减计数器*/
	PWM.TCON = PWM.TCON | (1 << 1);
	/*8.关闭手动更新*/
	PWM.TCON = PWM.TCON & (~(1 << 1));
	/*9.使能PWM0,递减计数器开始递减*/
	PWM.TCON = PWM.TCON | 1;

	while(1)
	{
		PWM.TCON = PWM.TCON | 1;
		Delay(1000000);
		PWM.TCON = PWM.TCON & (~(1));
		Delay(1000000);		
	}
	return 0;
}

5 练习

编程实现通过PWM控制蜂鸣器产生"嘀嘀"的声音

注:PWM的频率1000HZ,占空比%60


#include "exynos_4412.h"

void Delay(unsigned int Time)
{
	while(Time --);
}

int main()
{
	/*1.将GPD0_0引脚设置成PWM0的输出引脚*/
	GPD0.CON = GPD0.CON & (~(0xF)) | (0x2);
	/*2.设置PWM0的一级分频	一级分频倍数设置为100倍*/
	PWM.TCFG0 = PWM.TCFG0 & (~(0xFF)) | 99;
	/*2.设置PWM0的二级分频	二级分频倍数设置为1倍  递减计数器递减频率 = PLCK / (99 + 1) / 1 = 1M*/
	PWM.TCFG1 = PWM.TCFG1 & (~(0xF));
	/*4.设置PWM0为自动重装载,使其能够产生连续的脉冲信号*/
	PWM.TCON = PWM.TCON | (1 << 3);
	/*5.设置PWM0的频率为1000HZ*/
	PWM.TCNTB0 = 1000;
	/*6.设置PWM0的占空比为60%*/
	PWM.TCMPB0 = 600;
	/*7.将TCNTB0中的值手动装载到递减计数器*/
	PWM.TCON = PWM.TCON | (1 << 1);
	/*8.关闭手动更新*/
	PWM.TCON = PWM.TCON & (~(1 << 1));
	/*9.使能PWM0,递减计数器开始递减*/
	PWM.TCON = PWM.TCON | 1;

	while(1)
	{
		PWM.TCON = PWM.TCON | 1;
		Delay(1000000);
		PWM.TCON = PWM.TCON & (~(1));
		Delay(1000000);		
	}
	return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1290483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苹果ios的系统app应用WebClip免签应用开源及方式原理

在移动设备上&#xff0c;为了方便访问我们经常使用的网站或服务&#xff0c;我们经常会希望将其添加到主屏幕上&#xff0c;以便快速启动。虽然我们可以通过使用浏览器书签实现这一目标&#xff0c;但添加一个图标到主屏幕上&#xff0c;使得它看起来与原生App无异&#xff0c…

【EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)

第三届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2024&#xff09; 2024 3rd International Conference on Cyber Security, Artificial Intelligence and Digital Economy 第二届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2023&…

ubuntu中显卡驱动,cuda,cudnn安装

1. 在ubuntu中安装显卡驱动 参考&#xff1a;https://blog.csdn.net/m0_37605642/article/details/119651996 2.在ubuntu中安装cuda 参考&#xff1a;https://blog.csdn.net/m0_61431544/article/details/127007300 2.1 安装cuda cuda官网&#xff1a; https://developer.n…

ORACLE数据库实验总集 实验四 Oracle数据库物理存储结构管理

一、实验目的 &#xff08;1&#xff09;掌握 Oracle数据库数据文件的管理 &#xff08;2&#xff09;掌握 Oracle数据库控制文件的管理 &#xff08;3&#xff09;掌握 Oracle数据库重做日志文件的管理 &#xff08;4&#xff09;掌握 Oracle数据库归档管理&#xff0c; 二、…

深入理解 Java 虚拟机(JVM)从入门到精通

目录 一、JVM内存结构1、堆&#xff08;Heap&#xff09;&#xff08;1&#xff09;特点&#xff08;2&#xff09;堆内存分配&#xff08;3&#xff09;晋升到老年代的方式&#xff08;4&#xff09;堆内存检验方式2、虚拟机栈&#xff08;VM Stack&#xff09;&#xff08;1&…

STM32F407-14.3.14-01生成 6 步 PWM

生成 6 步 PWM 当通道使用互补输出时&#xff0c;OCxM③、CCxE⑥ 和 CCxNE⑤ 位上提供预装载位。发生 COM⑧ 换向事件时&#xff0c;这些预装载位将传输到影子位。因此&#xff0c;用户可以预先编程下一步骤的配置&#xff0c;并同时更改所有通道的配置。COM⑧ 可由软件通过将 …

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 相关其它博客工程源代码下载其它资料下载 前言 本项目基于Keras框架&#xff0c;引入CNN进行模型训练&#xff0c;采用Dropout梯度…

团建策划信息展示服务预约小程序效果如何

团建是中大型企业商家每年举办的员工活动&#xff0c;其形式多样化、具备全部参与的娱乐性。但在实际策划流程及内容时&#xff0c;部分公司便会难以入手&#xff0c;术业有专攻&#xff0c;这个时候团建策划公司便会发挥效果。 如拓展训练、露营、运动会、体育竞技等往往更具…

进程_D1(2023-12-6)

①XMind ②双进程分工同时拷贝一个文件的上下两半部分 int main(int argc, const char *argv[]) {int pid -1;//文件描述符创建&#xff08;便于文件光标移动&#xff09;//① int rfd -1;if( ( rfd open("/root/fork2.c", O_RDONLY) ) -1 ){perror("open …

IntelliJ IDE 插件开发 | (二)UI 界面与数据持久化

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门 前言 在上一篇文章中介绍了在IDEA下开发、运行和安装插件的基本步骤&#xff0c;因此创建项目等基础步骤不再赘述&#xff0c;本文则开始介绍如何进行 UI 界面的开发以及相关数据的持久化存储&#xff…

吴恩达《机器学习》11-3-11-5:类偏斜的误差度量、查准率和查全率之间的权衡、机器学习的数据

一、类偏斜的误差度量 误差度量的关键性 之前的课程中已经提到了误差分析和设定误差度量值的重要性。评估学习算法并衡量其表现需要使用一个实数&#xff0c;这就是误差度量值。然而&#xff0c;在某些情况下&#xff0c;特别是当处理偏斜类时&#xff0c;选择正确的误差度量…

kafka学习笔记--基础知识概述

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

学习极市开发平台

这是官网的链接&#xff1a;极市开发者平台-计算机视觉算法开发落地平台-极市科技 (cvmart.net) 第一次用这个平台有很多问题&#xff0c;首先在使用这个平台之前&#xff0c;我大部分时候使用的是百度的飞浆平台&#xff0c;也就是BML&#xff0c;去训练一些深度学习的模型。 …

Mac端 DevEco Preview 窗口无法展示,提示文件中的node.dir错误

语雀知识库地址&#xff1a;语雀HarmonyOS知识库 飞书知识库地址&#xff1a;飞书HarmonyOS知识库 DevEco版本&#xff1a;Build Version: 3.1.0.501, built on June 20, 2023 环境信息 问题描述 打开 Preview 标签窗口后&#xff0c;提示Preview failed。 Run窗口提示如下 F…

vue2 echarts饼状图,柱状图,折线图,简单封装以及使用

vue2 echarts饼状图&#xff0c;柱状图&#xff0c;折线图&#xff0c;简单封装以及使用 1. 直接上代码&#xff08;复制可直接用&#xff0c;请根据自己的文件修改引用地址&#xff0c;图表只是简单封装&#xff0c;可根据自身功能&#xff0c;进行进一步配置。&#xff09; …

C#网络应用程序(Web页面浏览器、局域网聊天程序)

目录 一、创建Web页面浏览器 1.示例源码 2.生成效果 二、局域网聊天程序 1.类 2.服务器端 3.客户端 一、创建Web页面浏览器 TextBox 控件用来输入要浏览的网页地址&#xff0c;Button控件用来执行浏览网页操作&#xff0c; WebBrowser控件用来显示要浏览的网页。这个控…

图像处理中的角点检测Python-OpenCV 中的实现

马丁亚当斯 (Martin Adams)在Unsplash上拍摄的照片 一、说明 在图像处理的背景下&#xff0c;“特征”可以直观地理解为图像中易于识别并用于表示图像的独特或独特的部分。将特征视为图像中使其可区分的“地标”或“焦点”。为了使这一点更具关联性&#xff0c;请考虑一下您如…

gitLab 和Idea分支合并

以下二选1即可完成分支合并建议第一种简单有效 Idea合并方式 切换到被合并的分支&#xff0c;如我想把0701的内容合并到dev&#xff0c;切换到dev分支&#xff0c;然后再点击merge然后选择要合并的分支&#xff0c;即可,此时git上的代码没有更新只是把代码合到本地需要pull才…

使用Java网络编程,窗口,线程,IO,内部类等实现多人在线聊天1.0

1.整体思路 思路图 整体思路如上: 涉及知识点:线程网络编程集合IO等 TCP 协议 2.代码实现过程 服务端 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import jav…

管理和监控CentOS上的HTTP服务

CentOS作为一款稳定的开源服务器操作系统&#xff0c;为各种网络服务提供了优秀的支持。其中&#xff0c;HTTP服务是互联网上最常用的服务之一&#xff0c;它为人们提供了便捷的信息访问和交互方式。在CentOS上管理和监控HTTP服务是一项重要的任务&#xff0c;下面我们将介绍一…