当前位置: 首页 > news >正文

做网站吗百度经验手机版官网

做网站吗,百度经验手机版官网,建网站平台 优帮云,西安做网站微信公司🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 PWM基础概念STC8H芯片PWMA应用PWM配置详解占空比 PWM基础概念 PWM全称是脉宽调制(Pulse Width Modulation&#xff09…

🎬 秋野酱:《个人主页》
🔥 个人专栏:《Java专栏》《Python专栏》

⛺️心若有所向往,何惧道阻且长

文章目录

    • PWM基础概念
    • STC8H芯片
    • PWMA应用
    • PWM配置详解
    • 占空比

PWM基础概念

PWM全称是脉宽调制(Pulse Width Modulation),是一种通过改变信号的脉冲宽度来控制电路输出的技术。PWM技术在工业自动化、电机控制、LED调光等领域广泛应用。
PWM是一种将数字信号转换为模拟信号的技术,它通过改变信号的占空比来控制输出的电平。在STC8H中,PWM输出的频率和占空比可以由程序控制,因此可以用来控制各种电机、灯光和其他设备的亮度、速度等参数。

STC8H芯片

STC8H 系列的单片机内部集成了8 通道 16 位高级PWM 定时器,分成两周期可不同的 PWM,分别命名为 PWMA 和PWMB ,可分别单独设置。
第一组 PWMA 可配置成4 组互补/对称/死区控制的PWM 或捕捉外部信号。
第二组 PWMB 可配置成4 路PWM 输出或捕捉外部信号。
两组 PWM 的时钟频率可分别独立设置。
在这里插入图片描述
PWM与引脚对应关系如下图:
在这里插入图片描述

PWMA应用

控制引脚P2.7实现LED灯1的呼吸效果。

  1. 拷贝所需库文件(其他必备库请自行准备)
    a. STC8H_PWM.cSTC8H_PWM.h
    b. NVIC.cNVIC.h
    c. Switch.h
  2. 导入头文件,初始化宏及全局变量
#include "Config.h"
#include "GPIO.h"
#include "Delay.h"
#include "NVIC.h"
#include "Switch.h"
#include "STC8H_PWM.h"#define LED_SW	P45#define LED1		P27
#define LED2		P26
#define LED3		P15#define FREQ		1000#define PERIOD 	((MAIN_Fosc / FREQ) - 1)	// 周期PWMx_Duty dutyA;

配置GPIO

void GPIO_config(void) {GPIO_InitTypeDef	GPIO_InitStructure;		//结构定义// LED_SWGPIO_InitStructure.Pin  = GPIO_Pin_5;		//指定要初始化的IO,GPIO_InitStructure.Mode = GPIO_OUT_PP;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P4, &GPIO_InitStructure);//初始化// P2GPIO_InitStructure.Pin  = GPIO_Pin_6 | GPIO_Pin_7;		//指定要初始化的IO,GPIO_InitStructure.Mode = GPIO_PullUp;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P2, &GPIO_InitStructure);//初始化
}

配置PWM

void	PWM_config(void)
{PWMx_InitDefine		PWMx_InitStructure;// 配置PWM4PWMx_InitStructure.PWM_Mode    =	CCMRn_PWM_MODE2;	//模式,		CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2PWMx_InitStructure.PWM_Duty    =  0;								//PWM占空比时间, 0~PeriodPWMx_InitStructure.PWM_EnoSelect  = ENO4P | ENO4N;	//输出通道选择,	ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8PPWM_Configuration(PWM4, &PWMx_InitStructure);// 配置PWMAPWMx_InitStructure.PWM_Period   = PERIOD;					//周期时间,   0~65535PWMx_InitStructure.PWM_DeadTime = 0;					//死区发生器设置, 0~255PWMx_InitStructure.PWM_MainOutEnable= ENABLE;			//主输出使能, ENABLE,DISABLEPWMx_InitStructure.PWM_CEN_Enable   = ENABLE;			//使能计数器, ENABLE,DISABLEPWM_Configuration(PWMA, &PWMx_InitStructure);			//初始化PWM通用寄存器,  PWMA,PWMB// 切换PWM4选择PWM4_SW_P26_P27PWM4_SW(PWM4_SW_P26_P27);			//PWM4_SW_P16_P17,PWM4_SW_P26_P27,PWM4_SW_P66_P67,PWM4_SW_P34_P33// 初始化PWMA的中断NVIC_PWM_Init(PWMA,DISABLE,Priority_0);
}

编写Main函数


void main() {char direction = 1;u8 duty_percent = 0;// 0 -> 100EAXSFR();		/* 扩展寄存器访问使能, 必写! */GPIO_config();PWM_config();EA = 1;// 总开关LED_SW = 0;LED1 = 0; // P2.7 PWM4LED2 = 0;LED3 = 0;// 循环之前,设置一次pwm(可选)dutyA.PWM4_Duty = PERIOD * duty_percent / 100;UpdatePwm(PWM4, &dutyA);// 0 -> 100while(1) {duty_percent += direction;// 让duty_percent一直在0-100来回往返if(duty_percent >= 100) {duty_percent = 100;direction = -1;} else if(duty_percent <= 0) {duty_percent = 0;direction = 1;}// 修改PWM4的dutydutyA.PWM4_Duty = PERIOD * duty_percent / 100;UpdatePwm(PWM4, &dutyA);delay_ms(10);}
}

PWM配置详解

周期
系统主频:1秒钟计数多少次。
代码中的PWM周期(PWM Period),指的是按N等份切分1秒钟,每个等份的计数值。
在这里插入图片描述
例如上图,我们按照8等份切分1秒钟的总计数值MAIN_Fosc(主频),每个PWM周期的计数值为:
PWM_Period = MAIN_Fosc / 8 = 24M / 8 = 3M = 3 000 000 单位为次。
即如果将这个3M作为Period参数,可以得到PWM方波每个周期的时长为:
1 / 8 = 0.125s

代码中的配置:

#define PERIOD 	(MAIN_Fosc / FREQ)	// 周期
PWMx_InitStructure.PWM_Period   		= PERIOD - 1;

配置的是周期中的计数值。
我们的理解策略:通常我们不关心计数值,关心的是1秒钟执行多少次(即频率Hz),也就是一秒钟多少个周期。
因此在代码MAIN_Fosc / 1000中的1000表示的是1秒钟多少个周期(即频率Hz)。
MAIN_Fosc / 1000表示的是每个周期的计数值。那为什么要-1呢?因为计数器是从0开始计数的。

占空比

在一个PWM的周期计数中,高电平的计数时长百分比。
在这里插入图片描述
模式
● 冻结: CCMRn_FREEZE
● 匹配时设置通道 n 的输出为有效电平: CCMRn_MATCH_VALID
● 匹配时设置通道 n 的输出为无效电平: CCMRn_MATCH_INVALID
● 翻转: CCMRn_ROLLOVER
● 强制为无效电平: CCMRn_FORCE_INVALID
● 强制为有效电平: CCMRn_FORCE_VALID
● PWM 模式 1: CCMRn_PWM_MODE1
● PWM 模式 2: CCMRn_PWM_MODE2
常用的为PWM 模式 1PWM 模式 2
PWM 模式 1和PWM 模式 2是反向的,一个占空比越大越亮,一个是越小越亮。
使能PWM

PWMx_InitStructure.PWM_MainOutEnable= ENABLE;			//主输出使能, ENABLE,DISABLE
PWMx_InitStructure.PWM_CEN_Enable   = ENABLE;			//使能计数器, ENABLE,DISABLE
PWM_Configuration(PWMA, &PWMx_InitStructure);			//初始化PWM通用寄存器,  PWMA,PWMB

引脚配置

PWM4_SW(PWM4_SW_P26_P27);

使能配置成功后,pwm才能工作。
如果运行中pwm想停止掉,也可以通过配置使能来停止。

EAXSFR扩展寄存器
由于PWM的配置相关特殊功能寄存器位于扩展RAM区域,访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写。

EAXSFR();		/* 扩展寄存器访问使能 */
http://www.dinnco.com/news/21167.html

相关文章:

  • 龙岩全网搜系统开发凌哥seo
  • 建站吧网站建设百度高级搜索引擎入口
  • dw做网站一般需要多大尺寸seo关键词选择及优化
  • 图片在线制作免费软件汕头seo
  • 遵义网站建设1w1h自媒体怎么赚钱
  • 重庆网站建设模板制作长春最新发布信息
  • 内蒙古银税贷互动平台一键优化清理加速
  • 家具网站源码健康码防疫核验一体机
  • 个人做网站有什么好处怎么知道自己的域名
  • 字体设计网站大全seo学院培训班
  • 极速网站建设公司电话汕头网站优化
  • 济南制作网站的公司百度2019旧版本下载
  • 做图素材的网站有哪些公司网站制作
  • 兰州网站制作百度网址大全官网
  • 电商网站开发的流程图四川网站推广公司
  • c 做网站流程福建seo外包
  • dedecms 网站百度代发排名
  • 免费推广软件排行榜武汉seo网站推广培训
  • 手机网站如何站点管理网推软件有哪些
  • 如何做网站结构分析百度网址大全旧版安装
  • 个人域名做企业网站铁力seo
  • WordPress 网格布局seo优化官网
  • 网站针对爬虫爬取做的优化如何进行品牌营销
  • 长沙做网站免费职业技能培训网站
  • 网站建设管理和维护小说关键词自动生成器
  • 网站建设vip服务怎么做网页
  • 手机自适应网站建设互联网域名注册查询
  • 网站建设与管理大纲站长素材官网
  • 漳州网站开发找出博大科技电商网站卷烟订货流程
  • 晋江网站建设哪家好网站设计公司排名