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

news2025/2/28 20:14:13

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);
    //禁用PWM
    PWM2->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(){
    // 使能pwm
    PWM2->PWMCR |= (0x1 << 0);
}

//关闭PWM
void pwm_off(){
    // 关闭pwm
    PWM2->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 1000

extern void pwm_test();
#endif 

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

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

相关文章

neo4j 图表数据导入到 TuGraph

neo4j 图表数据导入到 TuGraph 代码文件说明后文 前言:近期在引入阿里的 TuGraph 图数据库&#xff0c;需要将 原 neo4j 数据导入到新的 tugraph 数据库中。预期走csv文件导入导出&#xff0c;但因为格式和数据库设计问题&#xff0c;操作起来比较麻烦&#xff08;可能是个人没…

Docker介绍、安装、namespace、cgroup、镜像-Dya 01

0. 容器简介 从生活上来说&#xff0c;容器是一种工具&#xff0c;可以装东西的工具&#xff0c;如衣柜、背包、行李箱等等。 从IT技术方面来说&#xff0c;容器是一种全新的虚拟化技术&#xff0c;它提高了硬件资源利用率&#xff0c;结合k8s还可以让企业业务快速横向扩容、业…

鱼跃医疗获评2024年国家级“绿色工厂”,以绿色制造树立行业标杆

近日&#xff0c;工业和信息化部公布了2024年度绿色制造名单&#xff0c;鱼跃医疗凭借在绿色制造和可持续发展方面的卓越表现&#xff0c;成功入选并获评国家级“绿色工厂”。 “绿色工厂”是工信部为贯彻落实国家《工业绿色发展规划》&#xff0c;加快推动绿色制造体系建设&a…

建投数据与腾讯云数据库TDSQL完成产品兼容性互认证

近日&#xff0c;经与腾讯云联合测试&#xff0c;建投数据自主研发的人力资源信息管理系统V3.0、招聘管理系统V3.0、绩效管理系统V2.0、培训管理系统V3.0通过腾讯云数据库TDSQL的技术认证&#xff0c;符合腾讯企业标准的要求&#xff0c;产品兼容性良好&#xff0c;性能卓越。 …

Java-30 深入浅出 Spring - IoC 基础 启动IoC 纯XML启动 Bean、DI注入

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

基础入门-Web应用蜜罐系统堡垒机运维API内外接口第三方拓展架构部署影响

知识点&#xff1a; 1、基础入门-Web应用-蜜罐系统 2、基础入门-Web应用-堡垒机运维 3、基础入门-Web应用-内外API接口 4、基础入门-Web应用-第三方拓展架构 一、演示案例-Web-拓展应用-蜜罐-钓鱼诱使 蜜罐&#xff1a;https://hfish.net/ 测试系统&#xff1a;Ubuntu 20.04 …

【长城杯】Web题 hello_web 解题思路

查看源代码发现路径提示 访问…/tips.php显示无用页面&#xff0c;怀疑…/被过滤&#xff0c;采用…/./形式&#xff0c;看到phpinfo()页面 注意到disable_functions&#xff0c;禁用了很多函数 访问hackme.php,看到页面源码 发现eval函数&#xff0c;包含base64 解密获得php代…

【测试】Pytest

建议关注、收藏&#xff01; 目录 功能pytest 自动化测试工具。 功能 单元测试&#xff1a;用于验证代码的最小功能单元&#xff08;如函数、方法&#xff09;的正确性。 简单的语法&#xff1a;不需要继承特定类或使用复杂的结构。断言语句简化。 自动发现测试&#xff1a;P…

Python语法之字典

免责说明&#xff1a;此内容不包含嵌套字典 关注我更新更多初学实例 字典 一.字典的应用场景 思考:数据顺序发生变化&#xff0c;每个数据的下标也会随之变化&#xff0c;如何保证数据顺序变化前后能使用同一的 标准查找数据呢&#xff1f; 答&#xff1a;字典&#xff0c…

mysql客户端命令

目录 结束符 ; \g \G 中断输入 ctrl c 查看命令列表 help ? (\?) connect (\r) status (\s) delimiter (\d) exit (\q) quit (\q) tee (\T) ​编辑 notee (\t) prompt (\R) source (\.) system (\!) ​编辑 use (\u) help contents 结束符 ; \g \G 当我…

更频繁的 Android SDK 发布:更快的创新、更高的质量和更完善

Android 一直致力于让创新更快地进入用户手中。除了每年的平台发布之外&#xff0c;我们还投资了Project Treble、Mainline、Google Play 服务、每月安全更新和季度发布&#xff0c;为 Pixel Drops 提供支持。 未来&#xff0c;Android 将更频繁地发布 SDK&#xff0c;计划于 …

蓝卓总裁谭彰:AI+工业互联网推动制造业数字化转型

近日&#xff0c;新一代工业操作系统supOS6.0在2024中国5G工业互联网大会上重磅发布。 大会期间&#xff0c;工信部新闻宣传中心《人民邮电报》对蓝卓总裁谭彰就“工业互联网人工智能技术融合的思考”“supOS6.0的探索与实践”“未来工业互联网平台的发展方向”展开专题访谈&am…

【WRF-Urban】输入空间分布人为热排放数据的WRF运行全过程总结

目录 数据准备检查新增变量配置(如果有)WPS预处理修改namelist.wpsStep1: geogridStep2: ungribStep3: metgridWRF运行修改namelist.input调试namelist.input运行./real.exe运行./wrf.exe参考WRF模型的基本流程如下: 数据准备 空间分布热排放数据下载及制备可参见另一博客…

如何利用Python爬虫获得1688按关键字搜索商品

在当今的数字化时代&#xff0c;数据已成为企业竞争的核心资源。对于电商行业来说&#xff0c;了解市场动态、分析竞争对手、获取商品信息是至关重要的。Python作为一种强大的编程语言&#xff0c;其丰富的库和框架使得数据爬取变得简单易行。本文将介绍如何使用Python爬虫技术…

Python从0到100(七十三):Python OpenCV-OpenCV实现手势虚拟拖拽

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…

【Go】-倒排索引的简单实现

目录 什么是倒排索引 定义 基本结构和原理 分词在倒排索引中的重要性 简单倒排索引的实现 接口定义 简单数据库的实现 倒排索引 正排索引 测试 总结 什么是倒排索引 定义 倒排索引&#xff08;Inverted Index&#xff09;是一种索引数据结构&#xff0c;它是文档检…

php生成图片

前提 开启dg2库 去掉前面的;注释&#xff0c;有的可能会带.dll后缀影响不大 extensiongd2代码 <?php $file imagecreate(100,50); //先生成图片资源$color imagecolorallocate($file,255,255,255); //白色$c imagecolorallocate($file,0,100,255);imagefill($file,0…

MySQL数据库——门诊管理系统数据库数据表

门诊系统数据库his 使用图形化工具或SQL语句在简明门诊管理系统数据库his中创建数据表&#xff0c;数据表结构见表2-3-9&#xff5e;表2-3-15所示。 表2-3-9 department&#xff08;科室信息表&#xff09; 字段名称 数据类型 长度 是否为空 说明 dep_ID int 否 科室…

02、10个富士胶片模拟的设置

二色彩 1、色彩的加减控制全局的饱和度增减&#xff1b; 2、色彩效果只提升暖色系饱和度&#xff1b; 3、FX蓝色大幅度提升蓝色系饱和度&#xff1b; 4、三个参数都不改变颜色的色相。 2.1 色彩 色彩调整的是拍摄画面整体的色彩饱和程度 2.2色彩效果 调整的是画面中暖色…

java全栈day19--Web后端实战(java操作数据库3)

一、MyBatis 1.1介绍 前提引入&#xff1a; controller(控制层)作用&#xff1a;接受请求&#xff0c;响应数据 service(业务层)作用&#xff1a;负责具体的逻辑处理 dao(持久层)作用&#xff1a;数据访问层 一般的访问流程&#xff1a;浏览器发起请求过来&#xff0c;先…