SWM181按键控制双通道PWM固定占空比输出

news/2024/12/5 0:21:06/

SWM181按键控制双通道PWM固定占空比输出


  • 📌SDK固件包:https://www.synwit.cn/kuhanshu_amp_licheng/

  • 🌼开发板如下图:
    在这里插入图片描述

  • ✨注意新手谨慎选择作为入门单片机学习。目前只有一个简易的数据手册和SDK包,又没有参考手册,就目前的资料来看,数据手册虽然可以帮助到你了解该芯片的外设功能以及相关寄存器介绍,但是SDK包又是使用的库函数,关键是很多都没有注释,也没有相关的库函数手册,一些被定义的结构体参数都不知道控制什么的。

typedef struct {__IO uint32_t CLKDIV;uint32_t RESERVED[3];__IO uint32_t FORCEH;__IO uint32_t ADTRG0A;__IO uint32_t ADTRG0B;__IO uint32_t ADTRG1A;__IO uint32_t ADTRG1B;__IO uint32_t ADTRG2A;__IO uint32_t ADTRG2B;__IO uint32_t ADTRG3A;__IO uint32_t ADTRG3B;uint32_t RESERVED2[7];__IO uint32_t HALT;						//刹车控制__IO uint32_t CHEN;__IO uint32_t IE;__IO uint32_t IF;__IO uint32_t IMSK;__IO uint32_t IRAWST;
} PWMG_TypeDef;

🎉面对上面的PWMG_TypeDef结构体,除了一个刹车成员参数注明了,我不知道有多少人知道其它参数具体的意思,更别说使用了,这可能是编写代码的人自需要自己知道就可以了。这样的芯片怎么让开发者深入的展开学习和探索。😪,大家都说支持国产芯片,拿什么来支持你,这毕竟不能买来当饭吃,而是要开发才能使用的。 吐槽贵吐槽,既然展开了一页,就自己去翻阅数据手册慢慢找。

📋本案例基于官方SDK案例中的PWM案例和按键控制案例相结合,采用双按键控制:一个按键控制PWM刹车,另一个按键负责启动PWM。

📑SWM181 PWM介绍

  • 4 组 16 位宽 PWM 控制,最多可产生 8 路 PWM 信号
    ⚫ 支持互补、中心对称、单步模式
    ⚫ 提供高电平起始中断及周期结束中断
    ⚫ 支持硬件死区设置
    ⚫ 可选择初始输出电平选择
    ⚫ 支持刹车功能 。
  • PWM 模块提供了 8 路(4 组)输出,支持独立、互补、中心对称等模式,支持死区生
    成及初始电平配置。

📜PWM 模块建议按照如下顺序配置

  • 注意:分频寄存器需要在初始电平设置完成后进行配置。
  • PWM 模块建议按照如下顺序配置:
  1. 配置初始电平
  2. 配置周期及中断相关寄存器
  3. 初始化时钟分频
  4. 引脚功能切换
  5. PWM 使能

刹车与暂停功能

  • PWM 发生器模块支持外部信号输入与内部软件操作对输出进行暂停。
    软件可以通过配置 FORCEH 寄存器,使对应 PWM 通道引脚输出为 1。此时,PWM 模块计数依然继续进行,当禁能该寄存器对应位时,PWM 可继续输出。波形如下图所示:
    在这里插入图片描述
    外部信号可通过 PWM_BREAK 引脚输入指定电平对 PWM 模块进行刹车操作,使用前
  • 🛠配置如下:
    • 配置 PORTCON 模块中 INEN 寄存器使能引脚输入功能
    • 通过 PORT_SEL 寄存器将引脚切换为数字功能
    • 通过 FUNMUX 寄存器将引脚配置为 PWM_BREAK 功能
    • 对 HALT 寄存器进行设置,配置刹车输入有效电平、刹车过程中输出电平、刹车后 PWM 是否继续计数、该功能影响的通道
    • 配置 HALT 寄存器 BIT[0]进行使能。使能后,当外部输入指定电平时,对应通道执行刹车功能
    • 刹车电平恢复后,将根据 HALT 寄存器配置决定 PWM 波形是否继续输出.

寄存器映射

在这里插入图片描述
在这里插入图片描述

📝测试代码

/*
功能说明:在PA4上产生频率600Hz占空比为25%的方波;
在PA5上产生频率600Hz占空比为50%的方波,
PA6为PWM刹车,PA14为重新启动PWM输出*/#include "SWM181.h"int main(void)
{PWM_InitStructure  PWM_initStruct;SystemInit();PWM_initStruct.clk_div = PWM_CLKDIV_4;		//时钟周期配置F_PWM = 24M/4 = 6MPWM_initStruct.mode = PWM_MODE_INDEP;		//配置 PWM 输出模式:A路和B路独立输出					PWM_initStruct.cycleA = 10000;				//6M/10000 = 600Hz			PWM_initStruct.hdutyA =  2500;				//2500/10000 = 25%PWM_initStruct.deadzoneA = 10;		//死区PWM_initStruct.initLevelA = 1;PWM_initStruct.cycleB = 10000;//B路周期PWM_initStruct.hdutyB =  5000;				//5000/10000 = 50%PWM_initStruct.deadzoneB = 10;//B路死区时长,取值0--63PWM_initStruct.initLevelB = 1;//B路初始输出电平,0 低电平    1 高电平PWM_initStruct.HEndAIEn = 0;//A路高电平结束中断使能PWM_initStruct.NCycleAIEn = 0;//A路新周期开始中断使能PWM_initStruct.HEndBIEn = 0;//B路高电平结束中断使能PWM_initStruct.NCycleBIEn = 0;//B路新周期开始中断使能PWM_Init(PWM1, &PWM_initStruct);PORT_Init(PORTA, PIN4, FUNMUX_PWM1A_OUT, 0);//端口引脚功能选择PORT_Init(PORTA, PIN5, FUNMUX_PWM1B_OUT, 0);PWM_Start(PWM1, 1, 1);//启动PWM输出GPIO_Init(GPIOA, PIN14, 0, 1, 0, 0);			//输入,上拉使能,接KEY/* 刹车功能测试 */
#if 1PORT_Init(PORTA, PIN6, FUNMUX_PWM_BREAK, 1);//PA6输入使能	PWMG->HALT =(1 << PWMG_HALT_EN_Pos) |(1 << PWMG_HALT_PWM1_Pos)    |(1 << PWMG_HALT_STOPCNT_Pos) |(0 << PWMG_HALT_VALIDI_Pos)  |(0 << PWMG_HALT_VALIDO_Pos);	// PWM_BREAK电平位低时,PWM1输出变成低
#endifwhile(1){if(GPIO_GetBit(GPIOA, PIN14) == 0)		//按键被按下{PWM_Start(PWM1, 1, 1);}}
}

http://www.ppmy.cn/news/29268.html

相关文章

Qt音视频开发19-vlc内核各种事件通知

一、前言 对于使用第三方的sdk库做开发&#xff0c;除了基本的操作函数接口外&#xff0c;还希望通过事件机制拿到消息通知&#xff0c;比如当前播放进度、音量值变化、静音变化、文件长度、播放结束等&#xff0c;有了这些才是完整的播放功能&#xff0c;在vlc中要拿到各种事…

JS混淆加密:Eval的未公开用法

JavaScript奇技淫巧&#xff1a;Eval的未公开用法 作者&#xff1a;http://JShaman.com w2sft&#xff0c;转载请保留此信息很多人都知道&#xff0c;Eval是用来执行JS代码的&#xff0c;可以执行运算、可以输出结果。 但它还有一种未公开的用途&#xff0c;想必很少有人用过。…

1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等

文本抽取任务Label Studio使用指南 1.基于Label studio的训练数据标注指南&#xff1a;信息抽取&#xff08;实体关系抽取&#xff09;、文本分类等 2.基于Label studio的训练数据标注指南&#xff1a;&#xff08;智能文档&#xff09;文档抽取任务、PDF、表格、图片抽取标注等…

Nginx 入门

Nginx 入门源码方式安装安装配置开启 NGINXdocker方式安装寻找Nginx镜像下载Nginx镜像创建Nginx配置文件创建Nginx容器并运行首先 Nginx 是一个网络服务器&#xff0c;使用 非阻塞、事件驱动 架构&#xff08;有点像 Node.js&#xff09;实现高性能。也能用来做负载均衡、HTTP …

Java开发 - 分页查询初体验

前言在上一篇&#xff0c;我们对es进行了深入讲解&#xff0c;相信看过的小伙伴已经能基本掌握es的使用方法&#xff0c;我们知道&#xff0c;es主要针对的是搜索条件&#xff0c;在这方面es具有无可比拟的优势&#xff0c;但我们也会注意到&#xff0c;有时候搜索条件过于宽泛…

有些笑话,外行人根本看不懂,只有程序员看了会狂笑不止

我一直都觉得我们写代码的程序员与众不同&#xff0c;就连笑话都跟别人不一样。 如果让外行人来看我们一些我们觉得好笑的东西&#xff0c;他们根本不知道笑点在哪里。 不信你来瞧瞧&#xff0c;但凡有看不懂的地方&#xff0c;说明你的道行还不够深。 1.大多数人开始学编程时…

【spring】IOC

IOC Inversion of Control&#xff0c;翻译为“控制反转”或“反转控制” 把创建对象过程交给 Spring 进行管理, 强调的是原来在程序中创建Bean的权利反转给第三方 这里使用到了工厂模式&#xff0c;使对象的创建和使用分离&#xff0c;实现解耦 底层原理 原始方式 耦合度太…

windows 下 安裝mysql 5.7.41 (64位) 超简单方式

文章目录1. 安装包下载2.安装步骤3. 服务卸载方式4. 配上 my.ini 常用配置1. 安装包下载 注意&#xff0c;截至2023年2月23日&#xff0c;MySQL所有版本不提供ARM芯片架构的Windows版本(8.0.12开始支持Red Hat系统的ARM版本)&#xff0c;所以ARM架构的Windows无法安装MySQL&am…