脉宽调制器

1.  pwm脉宽调制器

脉宽调制器:   一种硬件设备, 用于 动态调制  方波 的 一些属性, 方波的周期,频率,占空比 

占空比? :     有效电平占 整个周期的比值  

可以使用PWM 控制功率, 控制频率 用于 开关电源 或 逆变器 

1.1 原理

PWM原理: 如图所示

本质就是一个定时器:  

由原理可知: 

输出波形的 频率 = 总线时钟 / (分频值+1) / 重载值 ;

输出波形的 占空比 = 比较值 / 重载值 

1.2 pwm标准时钟的频率

100Mhz

2. 实验:使用pwm驱动蜂鸣器 以500hz 占空比50% 发出声响

输出定时器信号的 频率 =  总线时钟 /固定分频/ (分频值+1) / 重载值 ;

占空比 = 比较寄存器/重载值

实现功能  输出一个 500hz 方波  占空比  50%

500hz  = 100M / (分频值+1) / 重载值 ;   //这里不固定分频

500hz  = 100M / (99+1) / 重载值 ;

500hz  = 1M / 重载值 ;

重载值 = 2K

0.5    = 比较值 / 重载值 ;

比较直 = 1K

2.1 看原理图

1292页

我们走红色线路

1. 硬件 : 蜂鸣器 

2. 电路图    

芯片管脚  PD0_0  ----  XpwmTOUT0  PWM输出

3. pwm控制器   芯片手册  

5个 pwm  

0-3  有 PWM 输出 

0 pwm 有 死区控制 

4 pwm 没有输出 

死区控制:  主要用于控制 半H桥电路  或 全H桥电路 有用 

控制器 结构框图   1292 页  

2.2 配置寄存器

TCFG0  两路预分频

TCFG0 :  两路预分频  死区配置 

[7:0]  = 预分频 

TCFG1 5路固定分频

TCFG1 :  5路 固定分频 配置 

[3:0]  =  0-4   分别对应 1/1 1/2 1/4 1/8 1/16

TCNTB0:  PWM0 重载寄存器     32bit  0 - 2^32-1

TCMPB0:  PWM0 比较寄存器 

TCNTO0:  PWM0 计数寄存器  只读

TCON  :  总控 

TCON  :  总控 

[4] = 0  不使能死区 

[3] = 0  单次模式   1 自动重装 

[2] = 1  打开输出  

[1] = 1  装载   重载寄存器   比较寄存器

[0] = 1  启动pwm0 

2.3 写代码

pwm_test----main.c

#include"exynos_4412.h"
#include"uart.h"
//使用pwm驱动蜂鸣器 以500hz 占空比50% 发出声响
//pwm 初始化
void pwm_init(){//配置GPD0_0 为pwm功能GPD0.CON = (GPD0.CON & ~(0xf<<0)) | (2<<0);//配置pwm控制器,五路固定分频 TCFG1 [3:0] = 0  这里蛇蛇不固定分频PWM.TCFG1 &= ~(0xf);//两路预分频 TCFG0 [7:0] = 99  100M/(99+1) = 1MPWM.TCFG0 = (PWM.TCFG0 & ~(0xff<<0)) | (99<<0);//重载值PWM.TCNTB0 = 2000;//比较寄存器PWM.TCMPB0 = 1000;//配置总控//不使能死区PWM.TCON &= ~(1<<4);//自动重装PWM.TCON |= 1<<3;//打开输出PWM.TCON |= 1<<2;//装载TCNTB0  TCMPB0PWM.TCON |= 1<<1;//关闭装载PWM.TCON &= ~(1<<1);//启动pwmPWM.TCON |= 1;}int main()
{int a = 100;uart_init();printf("hello!a=%d\r\n",a);pwm_init();while(1);return 0;
}

3. 使用蜂鸣器调出音律

这里我们调制 高音即可

输出定时器信号的 频率 =  总线时钟 /固定分频/ (分频值+1) / 重载值 ;

占空比 = 比较寄存器/重载值

pwm_muisc-----main.c

#include"exynos_4412.h"
#include"uart.h"//pwm 模拟音律播放volatile unsigned int count = 0;//毫秒级变量//延时  ms
void delay(unsigned short ms){unsigned int tmp = count;//存放刚进入delay函数时 count 的数值// while(count <= tmp+ms);//这种算法没有规避溢出问题while(count-tmp < ms);//这种算法规避了溢出问题,不必纠结算法,用就完事了}//中断初始化
exit_init(){//GIC 面向中断源//开启总中断ICDDCR = 1;//配置端口中断使能//中断模式:  wdt中断 id 75//75/32=2   75%32=11ICDISER.ICDISER2 |= 1<<11;//配置端口优先级 优先级设置为5//75/4= 18    75%4=3  ----  [15:8]ICDIPR.ICDIPR18 = (ICDIPR.ICDIPR18 & ~(0xff<<24)) | (5<<24);//配置中断源送去哪个cpu处理 0x1表示直送cpu0//寄存器分步格局 与ICDIPR 完全一样 ICDIPTR.ICDIPTR18 = (ICDIPTR.ICDIPTR18 & ~(0xff<<24)) | (0x1<<24);//GIC 面向cpu//cpu响应中断使能  =1 使能  =0 不使能CPU0.ICCICR = 1;//配置cpu过滤优先级CPU0.ICCPMR = 255;}//中断响应,c语言入口函数,在汇编汇总调用,当irq异常触发时
void do_irq(){//获取中断号int id = CPU0.ICCIAR;//根据中断id来处理对应的事件switch(id){case 75:count++;//先清除中断 源头的挂起 看门狗的中断//写入任何值清除WDT.WTCLRINT = 8;//在清除GIC分配器层中断挂起 与ICDISER_CPU 结构一样 id:57//置为1  清除ICDICPR.ICDICPR2 |= 1<<11;break;}//最后清除cpu中断挂起//写入中断id清除对应中断挂起CPU0.ICCEOIR = id;}//看门狗初始化
void dog_init(){//预分频WDT.WTCON = (WDT.WTCON &~(0xff<<8)) | (24<<8);//固定分频WDT.WTCON = (WDT.WTCON &~(0x3<<3)) | (0<<3);//触发中断信号  [2] 时间到,是否触发中断信号  = 1 触发中断 WDT.WTCON |= 1<<2;//重载寄存器WDT.WTDAT = 250;//计数寄存器WDT.WTCNT =250;//开启看门狗WDT.WTCON |= 1<<5;
}//pwm 初始化
void pwm_init(){//配置GPD0_0 为pwm功能GPD0.CON = (GPD0.CON & ~(0xf<<0)) | (2<<0);//配置pwm控制器,五路固定分频 TCFG1 [3:0] = 0  这里设不固定分频PWM.TCFG1 &= ~(0xf);//频率 =  总线时钟 /固定分频/ (分频值+1) / 重载值 ;//两路预分频 TCFG0 [7:0] = 99  100M/(99+1) = 1MPWM.TCFG0 = (PWM.TCFG0 & ~(0xff<<0)) | (99<<0);//重载值PWM.TCNTB0 = 2000;//比较寄存器  占空比 = 比较寄存器/重载值PWM.TCMPB0 = 1000;//配置总控//不使能死区PWM.TCON &= ~(1<<4);//自动重装PWM.TCON |= 1<<3;//打开输出PWM.TCON |= 1<<2;//装载TCNTB0  TCMPB0PWM.TCON |= 1<<1;//关闭装载PWM.TCON &= ~(1<<1);}//启动pwm
void pwm_start(){//启动pwmPWM.TCON |= 1;
}//关闭pwm
void pwm_stop(){//启动pwmPWM.TCON &= ~1;
}//改变音色
void chanage_pinlv(unsigned int hz){//重载值PWM.TCNTB0 = 1000000/hz;//比较寄存器 //占空比我们设为50%PWM.TCMPB0 = 1000000/hz/2;//装载TCNTB0  TCMPB0PWM.TCON |= 1<<1;//关闭装载PWM.TCON &= ~(1<<1);//打开pwmpwm_start(); //因为我们在播放音律函数时 停止了pwm 所以每次改变音色 都要重新开启pwm
}//定义音符频率
#define H1  1046
#define H2  1175
#define H3  1318
#define H4  1397
#define H5  1568
#define H6  1760
#define H7  1976
#define ST  0//播放音律
void play(){chanage_pinlv(H1);delay(1000);//响一秒pwm_stop();delay(500);//停一秒chanage_pinlv(H2);delay(1000);//响一秒pwm_stop();delay(500);//停一秒chanage_pinlv(H3);delay(1000);//响一秒pwm_stop();delay(500);//停一秒chanage_pinlv(H4);delay(1000);//响一秒pwm_stop();delay(500);//停一秒chanage_pinlv(H5);delay(1000);//响一秒pwm_stop();delay(500);//停一秒chanage_pinlv(H6);delay(1000);//响一秒pwm_stop();delay(500);//停一秒chanage_pinlv(H7);delay(1000);//响一秒pwm_stop();delay(500);//停一秒
}int main()
{uart_init();printf("music!!!\r\n");//看门狗初始化dog_init();//中断初始化exit_init();//pwm初始化pwm_init();//开启pwmpwm_start();int i=0;while(1){play();delay(2000);//所有音律播放完成总体停2秒}return 0;
}

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

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

相关文章

【玩转Node.JS】=>(内置文件系统)fs模块

文章目录 概念&#xff1a;文件写入writeFile &#xff08;异步写入&#xff09;writeFileSync&#xff08;同步写入&#xff09;appendFile &#xff08;异步追加写入&#xff09;appendFileSync&#xff08;同步追加写入&#xff09;createWriteStream &#xff08;文件流式写…

服务攻防-开发框架安全SpringBootStruts2LaravelThinkPHPCVE复现

知识点&#xff1a; 1、PHP-框架安全-Thinkphp&Laravel 2、J2EE-框架安全-SpringBoot&Struts2 章节点&#xff1a; 1、目标判断-端口扫描&组合判断&信息来源 2、安全问题-配置不当&CVE漏洞&弱口令爆破 3、复现对象-数据库&中间件&开发框架&am…

Spring Boot通过配置文件支持数据库自定义表名

直接上干货&#xff1a; 例如一个叫xxx的项目&#xff0c;yml文件里加上这段 xxxproject:db:xxxTable: xxx_dbname #自定义的数据库表名创一个Configuration类放表名和Mapper // XxxProjectAutoConfiguration.javaConfiguration MapperScan(basePackages "cn.com.xxxp…

Vue3-插槽(本质也是组件间的交流)

默认插槽 当你在父组件中&#xff0c;有标签需要插入子组件中显示&#xff0c;就需要默认插槽 具名插槽 当你在父组件中&#xff0c;有多个标签需要放置子组件的不同位置时&#xff0c;就需要具名插槽 具名-----》 v-slot:s2 作用域插槽 父组件在插槽中想要使用子组件的值&…

Less-1(sqlmap自动注入攻击)--sqli

环境准备 打开火狐浏览器&#xff0c;进入sqli第一关的页面 工具准备 sqlmap 参数解释 -u URL 指定目标URL进行注入测试。--dataDATA指定POST请求的数据进行注入测试--cookieCOOKIE指定用于身份验证的cookie进行注入测试-p PARAMETER指定要测试的参数--levelLEVEL设置测试的深…

你不知道的Tomcat

Tomcat基本概念 Tomcat是一个Servlet容器&#xff0c;也是一个web容器。我们的请求通过浏览器进入到Tomcat&#xff0c;Tomcat再把请求分发对应的Servlet。 Tomcat核心组件 Connector: 连接器负责处理进入Tomcat的传入连接和请求&#xff0c;然后将它们传递给Server服务对象中…

Qt无边框窗口拖拽和阴影

先看下效果&#xff1a; 说明 自定义窗口控件的无边框,窗口事件由于没有系统自带边框,无法实现拖拽拉伸等事件的处理,一种方法就是重新重写主窗口的鼠标事件&#xff0c;一种时通过nativeEvent事件处理。重写事件相对繁琐,我们这里推荐nativeEvent处理。注意后续我们在做win平…

MySQL知识点总结(二)——explain执行计划、SQL优化

MySQL知识点总结&#xff08;二&#xff09;——explain执行计划、SQL优化 explain执行计划typepossible_keyskeysextra SQL优化SQL优化的流程SQL优化技巧范围查询优化排序优化分组查询优化distinct优化分页查询优化join关联查询优化排序分页 关联查询分组 关联查询 排序in与…

手把手带你Git入门,从下载到精通,常用git命令

文章目录 Git概述什么是GitGit历史Git是什么 为什么要使用Git什么是版本控制系统 Git和SVN对比SVN集中式SVN优缺点 Git分布式Git优缺点 Git工作流程四个工作区域工作流程 Git下载与安装下载window版下载64位软件包安装Git Git基础环境配置设置用户信息查看配置信息 文件的两种状…

ES6.8.6 创建索引配置分词器、映射字段指定分词器、查询数据高亮显示分词结果(内置分词器、icu、ik、pinyin分词器)

文章目录 ES环境内置分词器&#xff0c;以simple分词器示例查询创建索引simple_news&#xff0c;修改分词器为simple插入模拟数据分词查询&#xff1a;返回通过分词查询到的结果、高亮分词分词匹配&#xff1a;写一次示例&#xff0c;其他分词和匹配思路基本一致第一步&#xf…

DMA 和 零拷贝技术 到 网络大文件传输优化

文章目录 DMA 控制器的发展无 DMA 控制器 IO 过程DMA 控制器 传统文件传输性能有多糟糕&#xff1f;如何优化文件传输性能零拷贝技术mmap writesendfileSG-DMA&#xff08;The Scatter-Gather Direct Memory Access&#xff09; 零拷贝技术的应用 大文件传输应该用什么方式Pag…

后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提交规范&#xff0c;需要使用preinstall来统一包管理工具。 1.1 环境准备 1…

idea 创建 spring boot

1.创建步骤 2. 编码添加 2.1 这是自动生成的启动函数 package com.example.comxjctest4;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class Application {publi…

MySql的使用方法

一.什么是MySql MySql是一种数据库管理系统&#xff0c;是用来存储数据的&#xff0c;可以有效的管理数据&#xff0c;数据库的存储介质为硬盘和内存。 和文件相比&#xff0c;它具有以下优点&#xff1a; 文件存储数据是不安全的&#xff0c;且不方便数据的查找和管理&#xf…

【3分钟开服】幻兽帕鲁服务器一键部署保姆教程,PalWorld开服联机教程

在帕鲁的世界&#xff0c;你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活&#xff0c;也可以为你在工厂工作。你也可以将它们进行售卖&#xff0c;或肢解后食用。 想要部署属于自…

从零开发短视频电商 Tesseract OCR识别增强

文章目录 概要图像预处理阶段默认反转图像重新缩放二值化噪音消除膨胀/腐蚀旋转/偏移校正边框缺少边框边框太大扫描边框去除 透明度/Alpha通道 引擎处理阶段语言模型配置提高识别速度词典、单词列表和模式表格识别 使用 Tesseract OCR 的 GUI 和其他项目 原文如下&#xff1a; …

TypeScript实战系列之合理运用类型

目录 介绍any 和 unknownerve 的用途断言type 和 interfacedeclare 关键字的作用联合类型 和 类型守卫交叉类型 介绍 这篇主要介绍下ts 常用的基本类型和一些常用的技巧性技能 any 和 unknow any 和 unknown 是两个类型关键字&#xff0c;它们用于处理类型不确定或未知的情况…

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

力扣日记1.28-【回溯算法篇】93. 复原 IP 地址

力扣日记&#xff1a;【回溯算法篇】93. 复原 IP 地址 日期&#xff1a;2023.1.28 参考&#xff1a;代码随想录、力扣 93. 复原 IP 地址 题目描述 难度&#xff1a;中等 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&…

IP地址定位技术的巧妙运用:企业网络安全的坚实防线

在当今数字时代&#xff0c;企业网络安全成为了至关重要的议题。面对不断增长的网络威胁&#xff0c;企业不得不采用创新性技术来保护其机密信息和关键系统。IP地址定位技术作为一种强大的工具&#xff0c;为企业提供了一种新颖而高效的网络安全保护手段。 IP地址定位技术简介 …