PWM寄存器初始化

news2025/2/27 14:31:55

本模块主要实现输出频率占空比可调的 PWM 波形功能和输入捕获功能,同时也可作为计数器使用。

一、主要特性

1. 16位向上或向下计数器;
2. 支持最多6路PWM通道;
3. 每个通道支持输出比较或边缘对齐PWM模式波形输出,支持设置、清除、切换输出比较操作,PWM输出的 极性可选;
4. 每个通道支持上升、下降或任何边输入捕捉触发;
5. 在所有通道上,支持中央对齐脉冲宽度调制;
6. 定时器时钟源,可选为系统时钟、晶振时钟或外部时钟输入,支持时钟 1/2/4/8/16/32/64/ 128分频;
7. 支持每个通道一个功能中断以及计数器溢出中断;
8. 每个通道口和外部时钟口单独使能选通,支持PWM计数工作时不使能通道口或外部时钟口,它们均可单 独配置作为GPIO功能使用;
9. 支持支持PWM计数触发ADC采样;

二、初始化

pwm_init

/*!
    \brief      pwm initialize 
    \param[in]  pwm_sc: pwm control register  
    \param[in]  pwm_mod: pwm mod count        
    \param[out] none
    \retval     none
*/
void pwm_init(uint8_t pwm_sc,uint16_t pwm_mod)
{
    PWM_MOD = pwm_mod;
    PWM_SC = pwm_sc;
    if((pwm_sc & PWM_SC_TOIE) != 0U){
        NVIC_EnableIRQ(PWM_TOF_IRQN);
    }else{
        NVIC_DisableIRQ(PWM_TOF_IRQN);
    }
}

输入的是 pwm_sc寄存器和pwm_mod  

pwm_sc寄存器:

是八位

0-2位是 PWM_SC_CLK_DIV   (XXX)   计数时钟为X的 PWM_SC_CLK_DIV次幂分频

3-4位 PWM_SC_CLK_SEL  (01)  表示选择系统时钟计数

5位 PWM_SC_CPWMS   (0)  表示向上计数

6位 PWM_SC_TOIE  (1) 打开中断使能

7位 PWM_SC_TOF (0) 未溢出

0-2位PWM_SC_CLK_DIV寄存器如下,我们选择32分频就是5 转化为2进制为 (101) 

 则pwm_sc配置为 01001101 转换为16进制为0x4D

 pwm_mod寄存器:

是0到15位,意思是 计数器周期 最大值为111111111111111 转换为十进制就是32767

计数器模数寄存器
配置计数器周期,系统复位或写PWM_CNT寄存器均清零计数器。写入模
数寄存器前需关闭计数器或复位计数器,以避免造成首次计数器溢出
发生时间的混乱。

 我们设置成2000(周期是2ms),具体多大看你怎么用,一般不会太大,我是用PWM驱动电机。

转换为16进制就是 0x07D0

所以pwm_init初始化为    pwm_init(0x4D,0x07D0);

pwm_ch1_init 通道初始化

输入 pwm_ch_sc控制寄存器 和 pwm_ch_cnt

pwm_ch_sc

/*!
    \brief      pwm channel 1 initialize 
    \param[in]  pwm_ch_sc: pwm channel 1 control register
    \param[in]  pwm_ch_cnt: pwm channel 1 count  
    \param[out] none
    \retval     none
*/
void pwm_ch1_init(uint8_t pwm_ch_sc,uint16_t pwm_ch_cnt)
{
    PWM_C1SC = pwm_ch_sc;
    PWM_C1V = pwm_ch_cnt;   //占空比
    if((pwm_ch_sc & PWM_CnSC_IE) != 0U){
        NVIC_EnableIRQ(PWM_CH1_IRQn);
    }else{
        NVIC_DisableIRQ(PWM_CH1_IRQn);
    }
}

0-2位是 PWM_SC_CLK_DIV   (000)   计数时钟为2的 PWM_SC_CLK_DIV次幂分频

3-4位 PWM_SC_CLK_SEL  (01)  表示选择系统时钟计数

5位 PWM_SC_CPWMS   (1)  表示向上计数后向下计数(中央对齐)

6位 PWM_SC_TOIE  (1) 打开中断使能

7位 PWM_SC_TOF (0) 未溢出

pwm_ch1_sc 为 01101000


pwm_ch_cnt

计数值寄存器
记录当前计数值,系统复位或写该寄存器均清零计数器。

 三、周期和占空比

PWM 信号的周期由模数寄存器 PWM_MOD 的值确定(十六进制0x07D0=十进制2000=2ms)

占空比由通道寄存器 PWM_C x V 中的设置确定。这个 PWM 信号的极性由 PWM_C x SC_ELS 控制位中的设置确定。0%和 100%的占空比 都是可能的。

PWM_CxV在pwm_ch1_init通道初始化里面  PWM_C1V = pwm_ch_cnt;

PWM_C1V  是寄存器地址如下

 占空比 = (pwm_ch_cnt)/(pwm_mod)

50% = 1000/2000 = 0x03E8 / 0x07D0

然后pwm就一直输出50的占空比,如果要调整占空比就调整pwm_ch_cnt大小。

在硬件上原理大概就是pwm输入高电平,导致三极管连通,然后使正负极相连然后驱动电机,接着占空比的速度就是在周期内设置高电平的时间。一个周期全是高电平他就是100%占空比。

方向的话一般配合继电器控制电机方向,PWM控制电机速度。

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

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

相关文章

关于 CSDN-AI 机器人 programmer_ada —— 阿达·洛夫莱斯(Ada Lovelace)

收到早期文章的一条新评论: 文笔和内容稍稍透漏着机器人的风格,打开主页果不其然 看到个人介绍中的巴贝奇的分析机,突然觉得头像很是眼熟。 最近刚读了《人工智能简史》,第4章——从汇编语言到TensorFlow,人工智能的…

使用layui组件库制作进度条

使用layui组件库制作进度条 html代码 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Example</title><!-- 引入 layui 的 CSS 文件 --><link rel"stylesheet" href"https://cdn.staticfil…

Day948.组件化成熟度评估,你的目的地在哪里呢 -系统重构实战

组件化成熟度评估&#xff0c;你的目的地在哪里呢 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于组件化成熟度评估&#xff0c;你的目的地在哪里呢的内容。 一、组件化成熟度模型 组件化成熟度模型可以帮助咱全局去思考当前的现状&#xff0c;并制定更有针对性的…

ChatGPT带火的百万年薪职业究竟是什么?

对话有ChatGPT、画图有Midjourney&#xff0c;哪怕被封号了&#xff0c;国内的文心一言、通义千问也不遑多让。 ChatGPT等生成式AI工具涌现程度堪比“乱花渐欲迷人眼”。 拟一份演讲稿&#xff0c;画一张海报&#xff0c;做一份PPT大纲&#xff0c;生成个图表&#xff0c;敲一…

【数据结构】- 线性表+顺序表(上)

文章目录前言一、线性表二、顺序表2.1概念及结构2.2接口实现2.3具体实现总结前言 所有的失败都是上帝在考验你是否真的热爱 本章是关于数据结构中的顺序表和链表 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、线性表 线性表&#xff08;linear …

Xilinx CDC Constraints(ug903: Chapter6 )

&#xff08;1&#xff09;About CDC Constraints 跨时钟域约束适用于具有不同启动和捕获时钟的定时路径。根据启动和捕获时钟的关系以及在CDC路径上设置的时序异常&#xff0c;有同步CDC和异步CDC。例如&#xff0c;同步时钟之间但被错误路径约束覆盖的CDC路径不被定时…

传统图像处理——颜色迁移

转自知乎&#xff1a;https://zhuanlan.zhihu.com/p/267832794,仅供学习。 利用一张图片的颜色去修改另一张图片的颜色风格。 原理是利用颜色空间的正交化&#xff0c;即更改某个颜色&#xff0c;不会影响到其它属性。这里的色彩迁移的论文则是使用了LAB空间&#xff08;RGB颜…

C语言初阶--连用scanf(以%c读取时)遇到的问题

目录前言总结前言 在我们写程序的过程中&#xff0c;会频繁使用scanf函数&#xff0c;当在一个程序中scanf用多了&#xff0c;会出现输入不了的问题&#xff01;大家有没有想过是什么原因导致的该问题呢&#xff1f;下面我们一起探讨一下吧&#xff01; 遇到问题的例子&#…

Linux环境下安装JDK1.8

目录 一、下载jdk 二、安装准备 三、解压缩包到指定安装目录 四、配置环境变量 五、验证安装结果 一、下载jdk 这部分依然是从Oracle官网下载&#xff0c;下载速度还是很快的。 下载完成后&#xff0c;将该压缩包放到Linux环境下&#xff0c;准备解压安装。 二、安装准备…

Redis性能调优详解

文章目录前言确认是否是Redis真的变慢了&#xff1f;什么是基准性能&#xff1f;具体如何做&#xff1f;使用复杂度过高的命令哪些属于复杂度过高命令--聚合类命令、 大值数据针对这种情况如何解决呢&#xff1f;操作bigkeybigkey耗时原因如何定位出bigKey--bigkeys这里我需要提…

34岁本科男,做了5年功能测试想转行,除了进厂还能干什么?

我的建议是不要给自己设限。任何一个行业只要做到顶尖都是很有作为的&#xff0c;何况是IT行业&#xff0c;本身就比别的行业有优势&#xff0c;如果你现在是功能测试&#xff0c;应该想的是进阶自动化测试或者测试开发 如何在半年时间由功能测试成长为年薪30W的测试开发&#…

【Hydro】常用地下水与溶质运移模拟软件

饱和地下水流和溶质运移常见的模拟软件 常用的求解地下水水流和溶质运移方程的数学方法有两种&#xff1a;有限差分法和有限元法。两者主要的差别在于离散模型区的方法不同。基于不同的数学方法&#xff0c;当前市场上有一些地下水模拟图形用户界面&#xff0c;它们在基本功能…

【Python基础入门学习】Python工具Pycharm的安装与使用

一、关于Python 1.1 下载Python 在下载与安装pycharm工具前&#xff0c;一定要先安装python 打开Python官网&#xff1a;python下载打开上述网站&#xff0c;选择 Downloads -> 系统 我是Windows系统&#xff0c;点击进入后&#xff0c;找到自己要安装的安装包以及想安装的…

UE4/5多人游戏详解(四、加入游戏会话,数值key和value,寻找IP地址)

目录 加入游戏会话 找到会话 加入会话 代码&#xff1a; 设置会话key和value 代码&#xff1a; 在寻找会话中添加匹配&#xff1a; 代码&#xff1a; 寻找IP地址&#xff1a; 代码&#xff1a; 回调函数onJoinSessionComplete实现&#xff1a; 代码&#xff1a; 测试…

音视频开发六:FFmpeg日志使用

常用日志级别 在 FFmpeg 中&#xff0c;error、warning、info、verbose 和 debug 是指不同的日志级别&#xff0c;各自对应的是不同类型的日志信息。具体的解释如下&#xff1a; error: 输出错误信息&#xff0c;表示程序出现了无法恢复的错误&#xff0c;需要立即停止执行。…

通过数据库逆向生成表和属性word文档(PDMan/PowerDesigner)及遇到问题记录

目录背景通过PDMan导出word文档步骤导出文档格式自定义格式导出Word失败问题解决出错原因&#xff1a;[object Object]解决方式通过PowerDesigner导出word文档导出步骤导出结果PowerDesigner使用问题记录DSN警告Could not Initialize JavaVM!mysql odbc安装使用下载安装版&…

数据结构——算法的时间复杂度和空间复杂度

文章目录算法效率时间复杂度时间复杂度的定义大O渐进渐进表示法常见的时间复杂度计算举例空间复杂度算法效率 我们在算法的设计中&#xff0c;会去衡量算法的好坏。那么算法效率就是衡量标准之一。除此之外&#xff0c;我们也会关注到算法的健壮性、正确性、可读性、效率与低存…

C语言课设项目-51单片机-定时器和计数器

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、定时器的原理 1、CPU时序的有关知识 2、在学习定时器之前需要明白的 3、定时/计数器的工作原理 4、…

Mybatis(八)动态Sql的实现原理

一、动态Sql的使用 顾名思义&#xff0c;动态sql值得是事先无法预知具体条件&#xff0c;需要在运行时根据具体的情况动态生成Sql语句。例如: <sql id"userAllField">id,create_time, name, password, phone, nick_name</sql><select id"getUse…

通过工具生成指定 类型 大小 文件

今天给大家介绍一个神器 首先 大家在开发过程中或许经常需要涉及到文件上传类的功能 需要测试文件过大 空文件等等清空 不同大小的文件 而这种文件大小是比较不好控制的 但大家可以下载我的资源 文件生成工具(可生成指定大小 类型文件) 下载下来里面就有一个 fileGeneration…