PWM在51的运用

PWM在51的运用

PWM个人理解

  1. PWM脉冲快读调制(英文我不会,度娘救一下), 51单片不借助其他芯片或模块的帮助,四十个引脚都只能发出高5v或者低0V的电压,那要做出直流电机或者IED呼吸灯这种需要电压变化的效果呢?这就要靠PWM通过频率变化来模拟电压变化。

  2. 一秒的5v电压等于一秒10V电+一秒0v电;这就是PWM的基本原理,把时间拉长一秒内电压变化50次,在这20毫秒变化一次的变化中我让他高电频输出5毫秒,低电平输出15毫秒是不是完成了一秒5/20*5V=1.25V的电压输出了呢?PWM

  3. 如果能用51完成以上步骤说明你就可以调出50Hz每周期空占比25%的PWM的输出了。在这里插入图片描述

程序奉上

  • PWM需要时刻变化如果放在主函数里太浪费资源了而且51单核运转这样main函数就干不了任何事了所以为了不浪费资源一般放在外置硬件或者用内置定时器调用。
#include <REGX52.h>
#define uchar unsigned char

uchar high,low;
sbit EM=P2^5;

low=5;

void main(void)
{   //设置计时器为一毫秒计时,打开计时器0的中断和总中断的开关
    TMOD &= 0xF0;
    TMOD |= 0x01;
    TL0 = 0x18;
    TH0 = 0xFC;
    TF0 = 0;
    TR0 = 1;
    ET0=1;
    EA=1;
    PT0=0;
    while(1);
}

void Timer0_Routine() interrupt 1
{
    //为计时器设定,不然下一次计时器将从0~65534开始计时。
    //这个计时和单片机的频率有关,一个周期计数加一还是什么,
    //反正这个东西不是赋值一般我用软件算没太了解。
    static unsigned int T0Count;
    TL0 = 0x18; 
    TH0 = 0xFC;
    high++;
    high%=20;//当high=20时归零
    if(high<low)//这样就做到25%的空占比了
    {
        EM=1;
    }
    else Em=0;
}

闲扯两句

  • 我学习单片机的初衷应该是电影《钢铁侠》谁不想成为高科技富二代啊,但学习了才知道只有看不懂的代码和更看不懂的电路连接,还有接口协议,模电数电。富二代是不可能的,只有在知识海洋里掉落的头发和慢慢发福的身体。写了一上午的程序,到头来发现是依托答辩也是常有的,这一度让我很迷茫,但B站的两位up给了我很大的影响一位是稚辉君当代钢铁侠,一位是yjmwxwx这位更是狠人一个项目两万多行汇编,当时给我人看傻了都。所以啊不懂的东西需要慢慢去学,先动起来把知识运用起来学起来焦虑解决不了问题,先行后知,知难行易
  • 发了折磨多牢骚是因为PWM原理很简单但往往简单的东西运用起来就越难
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值