一、PWM Pulse Width Modulation脉冲宽度调制,简称PWM。 PWM(脉冲宽度调制)对模拟信号电平进行数字编码的方法,计算机只能输出0或5V的数字电压值而不能输出模拟电压,而我们如果想获得一个模拟电压值,则需通过使用高分辨率计数器,改变方波的占空比来对一个模拟信号的电平进行编码。 仍输出数字信号,因为满幅值的直流供电只有5V(1)和0V(0)两种。电压是以一种连接(1)或断开(0)的重复脉冲序列被夹到模拟负载上去的,连接即是直流供电输出,断开即是直流供电断开。通过对连接和断开时间的控制,只要带宽足够,可以输出任意不大于最大电压值的模拟电压。 输出电压=(接通时间/脉冲时间)*最大电压值 12 二、51单片机的Timer 作者用的单片机是STC89C52,其内部有3个16位Timer,分别为T/C0,T/C1,T/C2,通过配置相关寄存器即可实现Timer的功能控制。 控制PWM需要用到定时器来生成不同占空比的波形,采用定时器中断的方式。 相关寄存器: 1.IE寄存器 2. TCON寄存器 3. TMOD寄存器 控制Timer0/1的工作方式 4. Timer0/1计数寄存器 TL0 TL1 TH0 TH1 当定时开启后,TL0(TL1)自动跟随机器周期加一。当TL0(TL1)满了后,自动清零同时向TH0(TH1)进一位,不需要手动操作. 而当TL0(TL1)和TH0(TH1)都满了以后,此时如果定时中断和总中断都已经打开,那么就会发生溢出中断,同时这两个寄存器清零 三、运用PWM完成呼吸灯 1. 硬件电路 2. 软件驱动 unsigned char PWM_COUNT; //计数 unsigned int HUXI_COUNT; //占空比更新时间 unsigned char PWM_VLAUE; //占空比比对值 bit direc_flag; //占空比更新方向 void timer0_init() { TH0=0x47; //定时器溢出值设置,每隔200us发起一次中断。 TL0=0X47; TR0=1; //定时器0开始计时 ET0=1; //开定时器0中断 EA=1; //开总中断 PWM_COUNT =0; } void time0() interrupt 1 { PWM_COUNT++; HUXI_COUNT++; if(PWM_COUNT == PWM_VLAUE) //判断是否到了点亮LED的时候 LED = 1; //点亮LED if(PWM_COUNT == 10) //当前周期结束 { LED = 0; //熄灭LED PWM_COUNT = 0; //重新计时 } if((HUXI_COUNT == 600) && (direc_flag == 0)) { //占空比增加10% HUXI_COUNT = 0; PWM_VLAUE++; if(PWM_VLAUE == 9) //占空比更改方向 direc_flag = 1; } if((HUXI_COUNT == 600) && (direc_flag == 1)) { //占空比减少10% HUXI_COUNT = 0; PWM_VLAUE--; if(PWM_VLAUE == 1) //占空比更改方向 direc_flag = 0; } } void main() { HUXI_COUNT = 0; PWM_COUNT = 0; PWM_VLAUE = 5; direc_flag = 0; LED = 1; //默认LED熄灭 timer0_init(); //定时器0初始化 while(1); } 本文转自网络,版权归原作者,如果您觉得不好,请联系我们删除! 广告 关于立创商城 立创商城(WWW.SZLCSC.COM)成立于2011年,致力于为客户提供一站式电子元器件线上采购服务,成交量全国领先。拥有10000多平方米现代化元器件仓库,现货库存超100000种,集团电子全产业链自营服务涵盖:在线EDA(LCEDA)+行业领先的PCB打样/中小批量+元器件商城+钢网制造+SMT贴片+电子设计教育及方案。作为一家品种齐全、自营库存、质量有保障的电子元器件垂直商城,立创商城所有元器件均从原厂或代理商正规渠道采购,保证原装正品,为您提供专业的一站式元器件采购服务。 |
|
来自: 散士pede1hlqk3 > 《文件夹1》