STC15单片机PWM实战:手把手教你用PCA模块输出可调占空比(附代码)

STC15单片机-通过PWM调整灯亮度 PCA (全称是Programmable Counter Array**)可编程计数器阵列是STC单片机内部集成的外设**,很多场合是以CCP/PCA放在一起来描述,那么这里的CCP又代表什么意思呢?上升/下降沿捕获、软件定时器、高速脉冲输出和可调脉冲输出(PWM)。注:STC不同型号的单片机拥有的CCP/PCA资源不同,有的单片机有2路CCP/PCA,有的单片机有4路CCP/PCA,在使用时请注意查看。CCP/PCA和PCA意思是相同的,所以有时候直接简称这个外设为PCA。 阅读详情

STC15单片机PWM实战:手把手教你用PCA模块输出可调占空比(附代码)

如果你正在为蓝桥杯单片机竞赛做准备,或者正在一个嵌入式项目中需要精确控制LED亮度、电机转速,那么PWM(脉宽调制)技术绝对是你绕不开的核心技能。STC15系列单片机内置的PCA(可编程计数器阵列)模块,为生成PWM提供了强大而灵活的硬件支持。相比软件模拟PWM,它能解放CPU,实现更精准、更稳定的波形输出。但面对一堆寄存器,很多开发者容易感到无从下手。这篇文章,我将从一个实际项目开发者的视角,带你彻底搞懂STC15F2K60S2的PCA模块,从原理到寄存器配置,再到代码实战,一步步实现一个频率和占空比都可调的PWM输出系统。我们不谈空泛的理论,只聚焦于“即学即用”的实操细节。

1. 理解PCA与PWM:从硬件结构到工作模式

在深入代码之前,我们必须先建立清晰的硬件认知。STC15的PCA模块,其全称是Programmable Counter Array,即可编程计数器阵列。你可以把它想象成一个多功能的“瑞士军刀”,它不仅能实现PWM,还能用作外部中断捕获、定时器、高速脉冲输出(CCP功能)。我们今天的重点是它的PWM模式。

PCA模块的核心是一个16位的向上计数器,由CH(高8位)和CL(低8位)组成。这个计数器是三个PCA模块(模块0、1、2)共用的“心脏”,它按照设定的时钟源不停地累加。PWM输出的秘密,就在于将这个计数器的值与一个我们设定的“比较值”进行实时比对。

在8位PWM模式下(最常用),我们只关心计数器的低8位CL(0-255循环)。同时,每个PCA模块有一对9位的“影子寄存器”:[EPCnH, CCAPnH]和[EPCnL, CCAPnL](n代表模块号)。当CL从255溢出归零的瞬间,[EPCnH, CCAPnL]中的值会自动装载到[EPCnL, CCAPnL]中参与比较。这个“自动重装载”机制是实现无干扰更新PWM占空比的关键。

那么,PWM波形是如何产生的呢?规则很简单:

  • 当计数器值(CL)小于比较寄存器值([EPCnL, CCAPnL]的低8位)时,对应的CCPn引脚输出低电平。
  • 当计数器值大于或等于比较寄存器值时,引脚输出高电平。

这样,在一个计数器周期内(0-255),高电平时间所占的比例,就是占空比。例如,比较值设置为128,则占空比就是 (256-128)/256 = 50%。通过动态改变比较值,我们就能轻松调节占空比。

注意:STC15的PCA模块支持6位、7位、8位PWM模式,位数越高,占空比分辨率越精细(8位有256级),但相应的PWM频率会降低。对于大多数调光、调速应用,8位模式提供的精度已经足够。

2. 核心寄存器详解与配置策略

配置PCA模块生成PWM,本质上是操作一组特殊功能寄存器(SFR)。我们不需要死记硬背所有位,但必须理解几个关键寄存器的作用。下面这个表格梳理了与PWM模式最相关的寄存器及其关键位:

寄存器地址关键位功能说明PWM配置常用值
CMODD9HCPS[2:0]PCA时钟源选择位。决定计数器“心跳”快慢。根据所需频率选择
CIDL空闲模式下是否停止计数。通常设为1(继续)。1
ECF计数器溢出中断使能。PWM模式通常不用中断。0
CCOND8HCRPCA计数器运行控制位。1=启动,0=停止。1
CF计数器溢出标志。软件清零。-
CCFn模块n匹配/捕获中断标志。-
CCAPMnDAH (n=0)ECOMn比较器功能使能。PWM模式必须置1。1
PWMnPWM模式使能。必须置1。1
ECCFn模块n匹配中断使能。PWM模式通常不用。0
PCA_PWMnF2H (n=0)EBSn[1:0]PWM位数选择。00=8位,01=7位,10=6位。00 (8位)
EPCnH/LPWM寄存器高位,与CCAPnH/L组成9位比较值。通常设为0
CCAPnH/L--PWM比较值寄存器。直接决定占空比。动态设置
CL, CH--16位PCA计数器。通常由硬件自动运行
P_SW1 (AUXR1)A2HCCP_S[1:0]PCA模块引脚映射选择位。根据硬件连接选择

时钟源选择(CMOD寄存器的CPS位):这是决定PWM频率的第一个关键。时钟源决定了计数器CL递增的速度。例如:

  • CPS=000:系统时钟/12。如果使用11.0592MHz晶振,则时钟源频率为921.6kHz。
  • CPS=100:系统时钟。计数器以全速运行。
  • CPS=010:定时器0的溢出脉冲。这是最灵活的方式,你可以通过配置定时器0的溢出率来精确控制PCA的计数频率,从而细调PWM频率。

假设我们选择系统时钟/12(11.0592MHz / 12 = 921.6kHz)作为PCA时钟,并采用8位PWM模式。那么PWM的基础频率计算公式为: PWM频率 = PCA时钟频率 / 256 代入计算:921.6kHz / 256 ≈ 3.6kHz。这个频率对于控制直流电机或LED来说是非常合适的。

引脚映射(P_SW1寄存器):STC15为了兼容更多封装和PCB布局,允许PCA模块的引脚在不同端口间切换。例如PCA模块0(PWM输出脚)默认可能在P1.1,但通过设置CCP_S1和CCP_S0,可以切换到P3.5或P2.5。务必根据你的实际电路原理图来配置此寄存器,否则无法在预期引脚上看到波形。

3. 实战:配置一个可调占空比的PWM输出

理论铺垫完毕,现在让我们动手写代码。我们的目标是:在P1.1引脚上输出一个频率约为3.6kHz,占空比可以通过变量动态调节的PWM波。

首先,我们完成基本的初始化函数。这里假设使用第一组引脚(P1.1),时钟源为系统时钟/12。

#include "stc15.h" // 包含STC15的头文件,定义了所有寄存器

#define PWM_PIN P1_1 // 宏定义PWM输出引脚,方便代码阅读

void PCA_PWM_Init(void) {
    // 1. 选择PCA引脚映射到第一组 (P1.2/ECI, P1.1/CCP0, P1.0/CCP1)
    P_SW1 &= 0x3F; // 将CCP_S1和CCP_S0位清零,即选择00模式
    // P_SW1 = (P_SW1 & 0x3F) | 0x00; // 另一种等效写法

    // 2. 配置PCA工作模式寄存器 CMOD
    // CIDL=1 (空闲模式继续计数), CPS=000 (时钟源=SYSclk/12), ECF=0 (禁止溢出中断)
    CMOD = 0x80; // 二进制 1000 0000

    // 3. 配置PCA控制寄存器 CCON
    // CR=0 (先不启动计数器), CF和CCFn由硬件置位,软件清零,初始化为0
    CCON = 0x00;

    // 4. 配置PCA模块0为8位PWM模式
    PCA_PWM0 = 0x00; // EBS0_1=0, EBS0_0=0, 选择8位PWM模式。EPC0H/L通常保持0。

    // 5. 设置PWM初始占空比为50% (比较值=128)
    CCAP0H = CCAP0L = 0x80; // 256 * 0.5 = 128

    // 6. 配置PCA比较/捕获寄存器 CCAPM0
    // ECOMn=1 (允许比较), PWMn=1 (使能PWM输出), 其他位为0
    CCAPM0 = 0x42; // 二进制 0100 0010

    // 7. 启动PCA计数器
    CR = 1; // 置位CCON寄存器的CR位
}

现在,在主函数中调用初始化函数,P1.1就会输出50%占空比的PWM波了。

void main() {
    PCA_PWM_Init(); // 初始化PWM
    while(1) {
        // 主循环可以空跑,或者执行其他任务
        // PWM由硬件独立生成,不占用CPU时间
    }
}

如何动态改变占空比呢?关键在于更新比较值寄存器CCAP0H和CCAP0L。必须注意:为了实现无干扰更新,我们应该只更新CCAP0H寄存器。 当CL计数器溢出时,硬件会自动将CCAP0H的值装载到CCAP0L中。如果同时更新CCAP0L,可能会在一个PWM周期内造成毛刺。

下面是一个函数,用于平滑地改变占空比(0-100%对应值0-255):

/**
  * @brief  设置PCA模块0的PWM占空比
  * @param  duty: 占空比,范围0-255 (对应0%-100%)
  * @retval 无
  */
void Set_PCA_PWM_Duty(unsigned char duty) {
    CCAP0H = 256 - duty; // 注意:STC15的PWM逻辑是“比较值”决定低电平时间
    // 更直观的理解:duty=128时,我们希望50%高电平。
    // 根据规则,当CL<比较值时输出低电平。所以要高电平占50%,需CL在0-127时低,128-255时高。
    // 因此比较值应设为128,即256-duty。
}

例如,调用Set_PCA_PWM_Duty(64);会将占空比设置为25% (64/256)。你可以将这个函数的调用放在定时器中断里,实现呼吸灯效果;或者根据传感器输入调整,实现闭环控制。

4. 高级应用:使用定时器0作为时钟源以精确控制频率

前面的例子中,PWM频率固定为系统时钟/12/256。如果我们想获得一个非常特定的频率(比如1kHz),或者希望在不改变主频的情况下灵活调整PWM频率,最好的方法就是使用定时器0(T0)的溢出脉冲作为PCA的时钟源。

原理:将CMOD寄存器的CPS位设置为010,PCA计数器将在T0每次溢出时加1。这样,PWM的频率就完全由T0的溢出率决定: PWM频率 = T0溢出频率 / 256

我们来配置一个产生1kHz PWM的示例(8位模式,T0溢出频率应为256kHz)。

void Timer0_Init_For_PCA(void) {
    // 目标:T0溢出频率 = 256kHz, 用于产生 256kHz/256 = 1kHz 的PWM
    // 假设系统时钟 SYSclk = 11.0592MHz
    // 设置T0为1T模式(速度更快),16位自动重载
    AUXR |= 0x80;   // T0设置为1T模式
    TMOD &= 0xF0;   // 清除T0模式位,并设置为16位定时器模式(模式0或1,此处配合AUXR为1T模式)
    // 计算重载值:T0每次计数时间 = 1/11.0592MHz ≈ 90.42ns
    // 期望溢出周期 = 1/256kHz ≈ 3.90625us
    // 所需计数次数 = 3.90625us / 90.42ns ≈ 43.2
    // 取整为43,则实际T0溢出频率 = 1/(43*90.42ns) ≈ 257.5kHz (接近目标)
    TH0 = (65536 - 43) / 256; // 计算高8位重载值
    TL0 = (65536 - 43) % 256; // 计算低8位重载值
    ET0 = 0;        // 禁止T0中断,我们只需要它的溢出脉冲
    TR0 = 1;        // 启动定时器0
}

void PCA_PWM_Init_With_T0(void) {
    // 选择引脚
    P_SW1 &= 0x3F;

    // 初始化T0作为PCA时钟源
    Timer0_Init_For_PCA();

    // 配置CMOD:时钟源选择T0溢出 (CPS=010),其他位默认
    CMOD = 0x02; // 二进制 0000 0010

    CCON = 0x00;
    PCA_PWM0 = 0x00;
    CCAP0H = CCAP0L = 0x80; // 初始50%占空比
    CCAPM0 = 0x42;
    CR = 1; // 启动PCA
}

通过调整定时器0的重载值,你可以轻松地将PWM频率设置为你想要的任何值,而不受系统时钟固定分频的限制。这在电机控制、音频生成等对频率有精确要求的场景中非常有用。

5. 多路PWM输出与资源分配

STC15F2K60S2的PCA模块有3个独立的通道(模块0、1、2)。它们共享同一个计数器(CL, CH)和时钟源(CMOD设定),这意味着它们输出的PWM基础频率是完全相同的。但是,每个模块都有自己独立的比较寄存器(CCAPnH/L)和PWM控制寄存器(PCA_PWMn),因此可以输出不同占空比的PWM波。

如果你想输出不同频率的PWM,唯一的办法是利用PCA_PWMn寄存器中的EBSn位,为不同的模块设置不同的PWM位数(6位、7位或8位)。位数越少,频率越高。例如:

  • 模块0设为8位PWM:频率 = PCA时钟 / 256
  • 模块1设为7位PWM:频率 = PCA时钟 / 128 (频率是模块0的两倍)

初始化第二路PWM(模块1,默认引脚P1.0)的代码示例如下:

void PCA_Multi_PWM_Init(void) {
    // 初始化时钟源、计数器等共用部分
    P_SW1 &= 0x3F;
    CMOD = 0x80; // SYSclk/12
    CCON = 0x00;
    CR = 1;

    // 初始化模块0 (P1.1, 8位PWM,50%占空比)
    PCA_PWM0 = 0x00;
    CCAP0H = CCAP0L = 0x80;
    CCAPM0 = 0x42;

    // 初始化模块1 (P1.0, 8位PWM,25%占空比)
    PCA_PWM1 = 0x00; // 同样8位模式
    CCAP1H = CCAP1L = 0xC0; // 256 * 0.75 = 192, 注意逻辑:比较值=256-期望低电平占比
    // 占空比 = (256-192)/256 = 25%
    CCAPM1 = 0x42; // 使能模块1的比较器和PWM模式
}

这样,P1.1和P1.0就会同时输出频率相同但占空比分别为50%和25%的PWM波。在驱动多个LED或控制多个舵机时,这个功能非常强大。

6. 调试技巧与常见问题排查

即使代码看起来正确,实际硬件上也可能看不到预期的波形。以下是一些实用的调试步骤和常见陷阱:

  1. 引脚配置:STC15的I/O口上电后默认为准双向口模式。PCA的PWM输出功能需要将对应引脚设置为推挽输出模式,才能提供足够的驱动能力和得到清晰的波形。

    P1M1 &= ~(1 << 1); // 清除P1.1的模式位1
    P1M0 |= (1 << 1);  // 设置P1.1的模式位0,组合为推挽输出 (模式0)
    // 对于P1.0(模块1)也同样需要设置
    P1M1 &= ~(1 << 0);
    P1M0 |= (1 << 0);
    
  2. 测量不到波形?

    • 检查引脚映射:确认P_SW1寄存器配置是否正确,你的示波器探头是否接在了正确的物理引脚上。
    • 检查时钟源:如果PCA计数器没有“心跳”,自然没有输出。确认CMOD的CPS位设置,并确保时钟源本身是存在的(例如,如果选择T0溢出,要确保T0已启动TR0=1)。
    • 检查PWM使能位:CCAPMn寄存器中的ECOMn和PWMn位必须同时置1。一个常见的错误是只设置了PWMn而忘了ECOMn。
  3. 占空比调节不线性或不对?

    • 理解比较值逻辑:记住公式 比较值 = 256 - 期望的占空比数值。期望占空比数值范围是0-255。如果你希望输出高电平比例是50%,那么CCAPnH应该设为128。
    • 更新时机:尽量在CL计数器溢出时(即一个PWM周期结束时)更新CCAPnH值。虽然硬件有影子寄存器机制,但为了绝对稳定,可以在主循环中快速更新,或者使用PCA计数器溢出中断(如果使能了ECF)来同步更新。
  4. PWM频率不符合计算值?

    • 首先用示波器测量实际频率。
    • 核对系统时钟频率:你的代码是否配置了正确的IRC频率或外部晶振?使用SysClk相关的宏或寄存器确认。
    • 核对分频系数:仔细检查CMOD寄存器的CPS位。
    • 如果使用了T0作为时钟源,请双重检查T0的初始化代码、工作模式(1T/12T)和重载值计算。

最后,分享一个我在调试呼吸灯项目时踩过的坑:我试图通过不断修改CCAP0L和CCAP0H来实现占空比渐变,结果波形出现了严重的毛刺。后来才发现,在PWM输出过程中,直接写CCAP0L会导致当前周期比较值突变。正确的做法是只更新CCAP0H,让硬件在下一个周期开始时自动装载。这个小细节让我折腾了好几个小时,希望你能避开。

STC15系列单片机硬件PWM模式配置教学 关于STC15系列自带的PWM模式的详细教学 阅读详情

相关推荐

STC8G1K08A之PWM占空比调整

STC8G1K08A之PWM占空比调整PWM的占空比影响因素: PWM的占空比影响因素: 由描述可知控制PWM占空比为XCCAPnL以及CCAPnL中的值。当CL中的值比XCCAPnL+CCAPnL中的值小时,输出低电平。 CCAPnL的值可以直接进行地址访问进行赋值: XCCAPnL的值在PCA_PWMn的地址中进行赋值: 以下为示例代码: 输出占空比为10%。 若想输出占空比为50%: ...

chuncongrun3534的博客 1万+

STC15W408AS单片机CCP/PCA/PWM应用

STC15W408AS单片机集成了3路可编程计数器阵列(CCP/PCA)模块可用于软件定时器、外部脉冲的捕捉、高速脉冲输出以及脉宽调制(PWM)输出。

weixin_45616832的博客 3626

通过IO口控制STC15F2K60S2系列单片机输出pwm

本文介绍如何通过IO口输入的电平来控制STC15F2K60S2系列单片机输出pwm,试验基于STC15L2K60S2型号单片机。 STC15F2K60S2系列单片机有3路pwm输出引脚,STC15F2K60S2系列单片机的CCP/PWM/PCA可以在3组不同管脚之间进行切换: [CCP0/P1.1, CCP1/P1.0, CCP2/CCP2_2/P3.7]; [CCP0_2

qq_35158400的博客 1万+

stc15系列c语言pwm编程,分享一下stc15单片机的PWM波程序

#include "include.h"/*------------------pwm功能初始化-------------------*/void PWM_GO(void){PWMCFG &= 0xBF; //将CBTADC位置0,即PWM计数器归零时不触发ADC转换PWMIF &= 0xBF; ...

weixin_39932458的博客 619

【STC单片机】通过ADC外部输入调节PWM占空比输出并串口打印当前脉冲值

【STC单片机】通过ADC外部输入调节PWM占空比输出并串口打印当前脉冲值

perseverance51博客 4107

STC8G之PCA模块详解

STC8G系列有1个PCA控制器,它带有3个通道(3 channel),或者说3个子模块,他们都共用一个16位的定时器:PCA Base Timer。这个定时器为3个子模块提供时基。PWM发生器(对外输出PWM波)软件模拟定时器脉冲输出(输出可编程的方波信号)捕获模式(对外部输入到引脚的电平信号进行采样)

luliplus的博客 3804

STC12单片机设置50Hz的PWM波驱动舵机

本文将使用STC12C5A60S2配置PWM波,驱动SG90舵机。采用的开发板包括了CH340芯片,因此下载程序只需要使用MicroUSB转USB连接线使用软件下载程序即可。

qq_45362336的博客 4111

Vim 入门到够用:Linux 文本编辑器的三种模式、常用操作与实战技巧

i 进入编辑模式Esc 退出编辑模式回到命令模式: 从命令模式进入底行模式编辑,不一定非得“打开就直接打字”。一旦你接受了“模式”这件事,后面很多操作都会顺起来。学 Vim,不要追求一次学全,先把“命令模式—编辑模式—底行模式”这条主线练熟。只要这条主线通了,后面的复制、删除、搜索、替换,都是顺手补上去的能力。

Web安全工具库 803

基于STC8G1K08A的可调节占空比和频率的PWM应用案例

基于STC8G的可调节占空比和频率的PWM应用案例优快云的小白分享前言一、STC8G系列的介绍二、使用记录1建立工程2.打开工程所需的芯片功能总结 优快云的小白分享 前言 学习单片机以来,都是写了就算的态度。总结的话用TXT和WPS文档老是容易忘掉放在了哪里。而且排版也不好看,无意间发现了可以在这里面做记录,于是就开始了啦! 由于工程需要(三色灯切换同时呼吸效果),最近在研究一款比较合适用来做面板LED控制的小成本芯片:以下就是STC8G1K08A系列的开发记录,实现了可调频调占空比的PWM输出。 一

weixin_44006415的博客 2万+

uniapp+华为HBuilder X 4.29跑鸿蒙模拟器报错没有签名授权

uniapp+华为HBuilder X 4.29跑鸿蒙模拟器报错没有签名授权报错信息11:39:47.976 安装 .hap 到鸿蒙设备 ...11:39:48.517 运行所需的权限没有签名授权,请参考 配置文档11:39:48.517 安装失败。

weixin_66071584的博客 1352

ZEMAX学习 6.一个照相物镜的设计

曲线越平滑表示场曲越小,曲线越接近水平,系统边缘与中心对比度越接近,虚实越接近表示色差和色散越好;第1个面设计不合理,出现前后表面相交的情况,点击第1面厚度,选择边缘厚度,设置为0.1,第1面厚度被控制在0.1mm厚,系统根据这一设置始终保持第1面边缘厚度为0.1mm。要求:设计一个照相物镜,焦距f=9mm,F#为4,视场角40°;添加有效焦距操作数EFFL 9mm 权重为1,设置优化变量,如下图,ctrl+shift+o打开优化界面。报告中系统数据有效焦距为67.381mm,设计要求为9mm;

qq_24542783的博客 4715

蓝桥杯STC15F2K60S2单片机 CCP/PCA/PWM模块的学习与使用

蓝桥杯单片机CCP/PCA/PWM的认识与使用,文末会安排代码硬件实验,使其实现外部中断、定时器、PWM输出功能,并附上源码。讲解与基础代码都十分详细。

NULL指向我的博客 7938

Python爬虫案例:从39问医生网爬取口腔科的在线问答记录(单轮问答)

本次实验爬取39问医生网中口腔科分类下的所有在线单轮问答记录,每页32条,共100页,总数据量为3200条,最终结果以excel格式保存。

JieBao11的博客 1645

11.STC15W408AS单片机CCP/PCA/PWM应用

STC15W408AS单片机集成了3路可编程计数器阵列(CCP/PCA)模块可用于软件定时器、外部脉冲的捕捉、高速脉冲输出以及脉宽调制(PWM)输出。 一、与CCP/PWM/PCA应用有关的特殊功能寄存器 STC15系列 1T 8051单片机 CCP/PCA/PWM特殊功能寄存器表 CCP/PCA/PWM SFRs 1.1PCA工作模式寄存器CMOD PCA工作模式寄存器的格式如下: CMOD : PCA工作模式寄存器 CIDL:空闲模式下是否停止PCA计数的控制位。 当CIDL=0时

小猿猪哥的博客 1万+

基于ZYNQ的HP总线与DDR交互:实现PL与PS高效数据传输的完整指南

本文将深入探讨如何通过AXI HP总线实现PL与PS的DDR交互,结合代码示例、硬件配置与创新优化,助力开发者掌握这一关键技术。ZYNQ内部通过AXI HP接口直接连接PL与DDR控制器,PL通过AXI协议发送读写请求,绕过PS的CPU直接操作DDR。通过AXI HP总线实现PL与PS的DDR交互,开发者可充分发挥ZYNQ异构架构的优势。在Xilinx ZYNQ系列芯片中,PS(Processing System)与PL(Programmable Logic)的协同设计是其核心优势。

QQ_778132974的博客 1225

Spring AI 项目实战(十):Spring Boot + AI + DeepSeek 构建智能合同分析技术实践(附完整源码)

摘要:基于Spring AI的智能合同审核系统开发 本文介绍了基于Spring Boot 3.2.0和Spring AI 1.0.0-M4构建的智能合同审核系统。系统采用分层架构设计,整合DeepSeek API实现文档解析、条款提取和风险分析功能。核心技术栈包括Spring AI、H2数据库、Apache POI/PDFBox等文档处理工具,实现了合同条款语义分析、异常识别和审核报告自动生成。项目解决了传统人工审核效率低、主观性强等问题,为合同管理提供了智能化解决方案。文章详细阐述了系统架构设计、技术选型

博客 654

【问天Block】STC15单片机PWM输出讲解

【问天Block】STC15单片机PWM输出讲解

perseverance51博客 1万+

OSError We couldn‘t connect to https://huggingface.co to load file, couldn‘t find it chatglm3-6b解决方案

本文主要介绍了OSError: We couldn’t connect to https://huggingface.co to load this file, couldn’t find it in the cached files and it looks like THUDM/chatglm3-6b is not the path to a directory containing a file named config.json.解决方案,希望能对学习python的同学们有所帮助。

weixin_43178406的博客 5万+

PCA模块生成PWM方波

电机可以通过单片机产生PWM方波来驱动,那么重点就放在PWM方波上。 PWM 什么是PWM 首先什么是PWM方波?这里直接摘抄百度百科的知识了。 PWM全称Pulse width modulation,中文名脉冲宽度调制技术,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化。 占空比 那什么又是占空比呢? 正占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,那么当然负占空比也就是

weixin_45247630的博客 6229

32、AI责任认定:法律与社会视角的探讨

本文探讨了人工智能(AI)在法律与社会视角下的责任认定问题。从疏忽与责任标准、严格责任制度的适用性,到AI是否能够承担法律责任等角度展开分析,指出随着AI技术的发展,传统的责任概念需要重新审视。文章进一步将AI与法人进行类比,提出AI作为物理-社会系统的责任认定框架,并强调需要建立适应AI特点的法律体系以实现公平与安全的平衡。

star5的专栏 200

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【STC15库函数上手笔记】7、PCA与PWM

目录硬知识硬件知识CCP/PWM/PCA模块的结构软件知识PCA初始化函数PWM更新占空比函数测试程序PWM模式产生PWM信号main.c实验现象16位软件定时器模式模式产生PWM信号main.c实验现象捕获模式测量周期长度main.c实验现象 STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 硬件知识      &nbsp

乙酸氧铍的博客 4742

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

STC单片机——PCA介绍及使用

目录一、介绍二、4种模式2.1、捕获模式2.2、软件定时器模式2.3、高速脉冲输出模式2.4、PWM三、相关寄存器四、其他寄存器 一、介绍 PCA是可编程计算器整列 是STC单片机内部集成外设,很多时候以CCP/PCA放在一起描述,CCP:捕获,比较,脉冲调剂。 4种工作模式 上升/下降沿捕获、软件定时器、高速脉冲输出(用于输出频率值比较高的脉冲信号场合)和可调脉冲输出(PWM)。 STC8A8K64S4A12单片机有4路独立的PCA 每路有4个gpio供使用(4选1,只能生效一个) 二、4种模式

小伟的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【STC15W402AS】T0定时器做时钟源,PCA模块输出PWM

完整代码: #include<STC15W.h> //在STC-ISP烧录软件中找头文件 #include "intrins.h" #define uint unsigned int #define uchar unsigned char void Timer0_init(void)//设定定时器的溢出频率为1,105,920Hz @11.0592MHz { AUXR |= 0x80; //定时器时钟1T模式 TMOD = 0x00; TL0 = 0xD5

qq_21246169的博客 3832

51单片机(STC89C52)的多路PWM脉冲宽度调制输出

软件方式输出PWM PWM用于输出强度的控制, 例如灯的亮度, 轮子速度等, STC89/90系列没有硬件PWM, 需要使用代码模拟 使用纯循环的方式实现PWM 非中断的实现(SDCC环境编译) #include <8052.h> #define Led10 P0_7 typedef unsigned int u16; int atime = 64; // 仅作为延时, pms...

IOsetting的专栏 1万+

51单片机STC8G1K08输出PWM

摘要: 本文详细介绍了STC8G1K08单片机PWM功能的配置方法。使用PCA0模块映射到P1.1引脚,选择定时器0溢出脉冲作为计数源,实现频率和占空比可调的10位PWM输出。文章给出了PWM频率和占空比的计算公式,频率计算基于系统时钟和定时器重载值,占空比由比较值寄存器控制。提供了初始化代码和PWM驱动函数,包括启动/停止PWM、设置频率和占空比等功能,适用于蜂鸣器等需要可变频率驱动的应用场景。

wanglong3713的博客。 1832

STC - PWM输出汇总

<br />STC单片机PWM的实现方法与原理<br />一款单片机提供的pwm实现变频输出。程序将变频pwm输出到led上作测试。<br />#include sfr CCON = 0xD8; sfr CMOD = 0xD9; sfr CL = 0xE9; sfr CH = 0xF9; sfr CCAP0L = 0xEA; sfr CCAP0H = 0xFA; sfr CCAPM0 = 0xDA; sfr CCAPM1 = 0xDB; sbit CR = 0xDE; sbit led

djimon的专栏 1万+
上一篇: jQuery 安全攻防实战手册:从 CVE 漏洞剖析到 OWASP 最佳实践
下一篇: ElementUI表格分页避坑指南:解决动态加载与路由跳转的5个典型问题
lambda
博客等级 码龄23年 49粉丝 1303原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值