STC15F104W PWM 调光

发布者:JoyfulHearted最新更新时间:2022-08-02 来源: csdn关键字:STC15F104W  PWM  调光 手机看文章 扫描二维码
随时随地手机看文章

一、原理图

二、源程序

/**

主控MCU:STC15F104W

开关:INT0(P3.2) 下降沿触发

亮度增加:INT2(P3.4) 下降沿触发

亮度减少:INT3(P3.5) 下降沿触发

PWM输出:P3.3

**/


#include

#include


//#define FOSC 24000000L //晶振频率

#define FOSC 6000000L //晶振频率


#define MACHINE_CYCLE (FOSC / 1000000) //时钟震荡6次1μs


#define _1US 1 //1us

#define _50US 50 //50us

#define _100US 100 //100us

#define _150US 150 //150us

#define _200US 200 //200us

#define _250US 250 //250us


sfr INT_CLKO = 0x8f;                //外部中断与时钟输出控制寄存器

sfr AUXR = 0x8e;                    //辅助寄存器

sfr P3M1 = 0xB1; //P3口寄存器

sfr P3M0 = 0xB2;


signed int duty_cycle; //占空比,0-10,带符号


unsigned int init_value; //定时器初值


unsigned int count; //定时器中断次数


sbit pwm = P3 ^ 3; //PWM输出口


bit flag; //灯开关状态



//INT0初始化程序

void init_int0(void)

{

INT0 = 1;

IT0 = 1;                    //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)

EX0 = 1;                    //使能INT0中断

}


//INT2初始化程序

void init_int2(void)

{

INT_CLKO |= 0x10;               //(EX2 = 1)使能INT2中断

}

//INT3初始化程序

void init_int3(void)

{

INT_CLKO |= 0x20;               //(EX3 = 1)使能INT3中断

}

//初始化计时值

void set_tm0_init_value(unsigned int value) reentrant

{

switch(value) {

case 50:

TL0 = (65536 - (_50US * MACHINE_CYCLE)) % 256;

TH0 = (65536 - _50US * MACHINE_CYCLE) / 256;

break;


case 100:

TL0 = (65536 - _100US * MACHINE_CYCLE) % 256;

TH0 = (65536 - _100US * MACHINE_CYCLE) / 256;

break;


case 150:

TL0 = (65536 - _150US * MACHINE_CYCLE) % 256;

TH0 = (65536 - _150US * MACHINE_CYCLE) / 256;

break;


case 200:

TL0 = (65536 - _200US * MACHINE_CYCLE) % 256;

TH0 = (65536 - _200US * MACHINE_CYCLE) / 256;

break;


case 250:

TL0 = (65536 - _250US * MACHINE_CYCLE) % 256;

TH0 = (65536 - _250US * MACHINE_CYCLE) / 256;

break;


default:

TL0 = (65536 - value * MACHINE_CYCLE) % 256;

TH0 = (65536 - value * MACHINE_CYCLE) / 256;

break;

}

}



//定时器0初始化程序

/**

时钟周期 = 1 / FOSC = 1 / 6 MHz = 1/6us

机器周期 = 1 * 时钟周期 = 1/6us (1T模式)

定时100us:

100us = 100 / (1/6) = 600机器周期

**/

void init_timer0(void)

{

TMOD = 0x00;                   //设置定时器0为模式0(16位自动重装载)

set_tm0_init_value(init_value);

TR0 = 1;                        //定时器0开始计时

ET0 = 1;                        //使能定时器0中断

}


/**

频率 = 1 / 周期

**/

void main(void)

{

P3M1 = 0x00;

P3M0 = 0xFF;

AUXR |= 0x80;                   //定时器0为1T模式


duty_cycle = 5; //初始占空比为50%


count = 0;


init_value = 100; //初始频率1kHz


init_int0();

init_int2();

init_int3();


init_timer0(); //定时器初始值为0.1ms,初始频率为 1 / 0.001 = 1000Hz


flag = 0;


EA = 1;



while(1);


}


//INT0中断服务程序

void ex_int0() interrupt 0       //INT0中断入口

{

EA = 0;


flag = !flag;


if(flag) { //关灯

TR0 = 0;

ET0 = 0;

} else {

TR0 = 1;

ET0 = 1;

}


pwm = flag;


EA = 1;

}

//INT2中断服务程序

void ex_int2() interrupt 10       //INT2中断入口

{

EA = 0;


if(++duty_cycle > 10) {

duty_cycle = 10;

}


INT_CLKO &= 0xEF;           //若需要手动清除中断标志,可先关闭中断,此时系统会自动清除内部的中断标志

INT_CLKO |= 0x10;           //然后再开中断即可

EA = 1;

}

//INT3中断服务程序

void ex_int3() interrupt 11       //INT3中断入口

{

EA = 0;


if(--duty_cycle < 0) {

duty_cycle = 0;

}


INT_CLKO &= 0xDF;               //若需要手动清除中断标志,可先关闭中断,此时系统会自动清除内部的中断标志

INT_CLKO |= 0x20;               //然后再开中断即可

EA = 1;

}

//定时器0中断服务程序

void tm0_isr() interrupt 1 using 1

{

EA = 0;


//初始化计时值

set_tm0_init_value(init_value);


//pwm = !pwm;

if(++count > 9) {

count = 0;

}


if(count < duty_cycle) {

pwm = 1;

} else {

pwm = 0;

}


EA = 1;

}

关键字:STC15F104W  PWM  调光 引用地址:STC15F104W PWM 调光

上一篇:STC15F104W 使用 315/433 MHz 超再生模块发送/接收数据
下一篇:STC15F104W使用定时器0模拟串口

推荐阅读最新更新时间:2024-11-09 12:56

[单片机框架][bsp层][esp32s3][bsp_pwm] PWM的使用
LED PWM 控制器 概述 LED 控制器 (LEDC) 主要用于控制 LED,也可产生 PWM 信号用于其他设备的控制。 该控制器有 8 路通道,可以产生独立的波形来驱动 RGB LED 等设备。 LED PWM 控制器可在无需 CPU 干预的情况下自动改变占空比,实现亮度和颜色渐变。 功能概览 设置 LEDC 通道分三步完成。注意,与 ESP32 不同,ESP32-S3 仅支持设置通道为低速模式。 定时器配置 指定 PWM 信号的频率和占空比分辨率。 通道配置 绑定定时器和输出 PWM 信号的 GPIO。 改变 PWM 信号 输出 PWM 信号来驱动 LED。可通过软件控制或使用硬件渐变功能来改变 LED
[单片机]
[单片机框架][bsp层][esp32s3][bsp_<font color='red'>pwm</font>] <font color='red'>PWM</font>的使用
步进电机驱动器恒流脉宽调制PWM的原理
  步进电机驱动器的恒流PWM调制是一种将恒定电流输出到步进电机来驱动它旋转的技术。恒流PWM调制的原理是通过电流控制来控制步进电机的旋转,以确保在不考虑负载变化的情况下,电机始终以相同的速度旋转。在这种方式中,电流控制电路使用PWM技术来将直流电流传输到步进电机中。   当需要让电机旋转时,将使用PWM调制器来将直流电压分成若干分时段,并将每个时段的电流大小控制为预定恒定值。然后,这些时段的电流再按照固定的时间间隔被传递到电机中,以驱动电机旋转。 这就可以确保电机以需要的恒定速度来旋转,而不会受到负载变化等因素的影响而减速。   控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代
[嵌入式]
直流电机调速(simulink)之pwm发生器简介
PWM发生器 简介 该模块在PWM和REF端口之间创建脉宽调制(PWM)电压。当脉冲为低时,输出电压为零;当脉冲为高时,输出电压等于输出电压幅度参数。占空比由输入值设置。 引脚 ref+:输入电压正端 ref-:输入电压负端 pwm:PWM(平均电压)输出端 ref:PWM电压参考端 参数设置 可以将仿真模式设置为PWM或平均。 在PWM模式下 ,输出为PWM信号。 在平均模式下 ,输出恒定,其值等于平均PWM信号。 pwm PWM frequency(PWM频率) Simulation mode(仿真信号):选择PWM或者average input scaling Input voltage for 0%
[嵌入式]
直流电机调速(simulink)之<font color='red'>pwm</font>发生器简介
如何采用STM32单片机来产生PWM输出
1. TIMER输出PWM基本概念 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。 STM32的定时器除了基本定时器TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。 1.1 PWM输出模式 STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的(“110”为模式1,“111”为模式2
[单片机]
远翔FP6115:PWM控制2A同步整流降压IC
FP6115是一个用于广泛工作电压应用领域的降压开关调节器。FP611内置大电流P-MOSFET、用于将输出电压与反馈放大器进行比较的高精度参考(0.8V)、内部软启动定时器和固定频率振荡器。该振荡器用于控制最大占空比和PWM频率。 特征 ➢精密反馈参考电压:0.8V(2%) ➢宽电源电压工作范围:3.6至23V ➢低电流消耗:3mA ➢内部固定振荡器频率:340KHz(类型)。 ➢内部软启动功能(SS) ➢内置P-MOSFET,用于2A输出加载 ➢过电流保护 ➢封装:SOP-8L 应用案例 1、FP6115兼容美台Diodes型号AP1520 2、FP6115兼容美台Diodes型号AP5002 3、液晶电源管理:用FP
[嵌入式]
远翔FP6115:<font color='red'>PWM</font>控制2A同步整流降压IC
主要讨论PWM比较器的Simulink模型
PWM 比较器的功能 还是以本系列文章中,用到的三相两电平逆变器为控制对象。下图是正弦波调制(SPWM)的三相两电平逆变器的波形。 输入的是三相的正弦波信号,三角载波与正弦信号波进行比较,当正弦信号波的值大于三角载波的值,输出“1”,否则,就输出“0”;PWM比较器一共生成6个PWM信号,控制6个IGBT的开通和关断。PWM比较器输出“1”控制IGBT开通,“0”信号IGBT关断。控制逆变器输出的三相相电压和三相线电压如下图所示。 对于三相两电平逆变器,为了防止上下桥臂同时导通而短路,PWM比较器还需要插入死区时间。 此外,为了让电流、速度和位置采样与PWM占空比的更新同步,以及控制器算法模型的触发运行,必须还有中断触发信号生成功
[嵌入式]
主要讨论<font color='red'>PWM</font>比较器的Simulink模型
通过STM32实现PWM呼吸灯的教程
一,知识理论基础 什么是呼吸灯: 顾名思义,就是一个灯。灯的亮度的变化,由亮变暗,从暗变亮,有一个渐变,规律的变化,像是人的呼吸,是灯的呼吸,所以叫呼吸灯。而要让灯可以达到这样的变化,我们要让stm32的IO口上输出一个可调的电平,这时我们就要用到PWM,那什么是PWM呢,我们继续往下看。 什么是定时器: 讲PWM我们要先认识stm32的定时器,PWM是定时器的功能之一。STM32F103有TIME1和TIME8高级定时器,TIME2TIME5通用定时器,还有TIME6和TIME7基本定时器。我们要使用的STM32F103C8T6只具有4个定时器,TIME1TIME4. 那么定时器有什么功能呢?定时、输出比较
[单片机]
通过STM32实现<font color='red'>PWM</font>呼吸灯的教程
STM32 控制舵机, 动态调整PWM
伺服电机拥有更大的扭矩,可以移动沉重的负荷。 深受玩具制造商的欢迎。很多玩具都有伺服电机和直流电机 交流伺服电机可以移动更沉重的负载,一般在工业应用。直流伺服电机最多用于搬动小物品。 span font-size:14px;font-variant-numeric:normal;font-variant-east-asian:normal;line-height:18px;white-space:normal;background-color:#ffffff; = style= overflow-wrap: break-word; color: rgb(46, 48, 51); font-family: 宋体, Arial; t
[单片机]
STM32 控制舵机, 动态调整<font color='red'>PWM</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved