找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4978|回复: 10
收起左侧

单片机pwm呼吸灯 效果呢 呼吸的不均匀感觉有点抖 而且感觉好像只有从暗到亮 求解决

[复制链接]
ID:370913 发表于 2018-7-15 16:50 | 显示全部楼层 |阅读模式
本帖最后由 ckeai 于 2018-7-17 17:47 编辑

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uintunsigned int
  4. #define ucharunsigned char
  5. sbit pwm =P2^1;
  6. uintcount=0,timer1=0,value=0;
  7. bit DIR=1;
  8. void main()
  9. {
  10. TMOD=1;
  11.     TH0=(65536-1)/256;
  12.        TL0=(65536-1)%256;
  13.        EA=1;//开总中断
  14.        ET0=1;//开定时器0中断
  15.    TR0=1;//TR0置位,启动定时器

  16. while(1)
  17. {
  18.   
  19.   if(timer1>value)
  20.   {
  21.      pwm=1;
  22.   }
  23.   else
  24.   {
  25.   pwm=0;
  26.   }

  27.        }
  28. }

  29. void time0()interrupt 1 using 1
  30. {
  31.        TH0=(65536-1)/256;
  32.        TL0=(65536-1)%256;
  33.        timer1++;
  34.        count++;
  35.        if(timer1>700)
  36.        {
  37.        timer1=0;
  38.        }
  39.        if(count>100)
  40.   {
  41.   count=0;
  42.      if(DIR==1)
  43.        {
  44.         value++;
  45.        }
  46.        if(DIR==0)
  47.        {
  48.         value--;
  49.        }
  50.   }

  51.   if(value==700)
  52.   {
  53.        value=0;
  54.   }
  55.       
  56. }
复制代码


QQ图片20180717174536.png
回复

使用道具 举报

ID:372056 发表于 2018-7-15 17:10 | 显示全部楼层
你写一个从亮到暗的不就好了
回复

使用道具 举报

ID:372204 发表于 2018-7-15 22:30 | 显示全部楼层
感觉有点抖的原因是因为人眼对光的亮度的感觉和占空比的均匀增加不是同步的,就是人眼感觉pwm波控制的灯亮度不是线性的,比如占空比从20%增加到30%与从90%增加到100%人眼会感觉前者的亮度变化比较大。

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:164602 发表于 2018-7-16 08:14 | 显示全部楼层
我的这个程序,可以从这到暗,再从暗到亮。
#include<reg51.h>       

#define LED P2

unsigned int T=0,Tt=500,i=0,Ii=100,j=0;

bit A=1;

void TimeConfig();

void main(void)
{
        TimeConfig();
        while(1)
        {
                if (T>=Tt)
                {
                        T=0;
                }
                if (i>=Ii)
                {
                        i=0;
                        if (A==1)
                        {
                                j++;
                        }
                        else
                        {
                                j--;
                        }
                }
                if (j==Tt)
                {
                        A=0;
                }
                if (j==0)
                {
                        A=1;
                }
                if (T<=j)
                {
                        LED=0x00;//LED灯亮               
                }
                else
                {
                        LED=0xff;
                }
        }
}

void TimeConfig()
{
    TMOD = 0x01;
    TH0 = 0xff;       
    TL0 = 0xff;
    EA = 1;               
    ET0 = 1;       
    TR0 = 1;       
}

void Time0() interrupt 1
{
        TH0 = 0xff;       
    TL0 = 0xff;
        T++;       
        i++;
}

/*
此占空比的变化,数据是线性关系,但显示出来的视觉不是线性关系。因为占空比是功率换算,
有平方根的倒数关系,所以这要进步算法才行。
*/

回复

使用道具 举报

ID:328714 发表于 2018-7-16 11:29 | 显示全部楼层
建议你拿示波器看一下波形,是不是正弦波或者三角波
回复

使用道具 举报

ID:370913 发表于 2018-7-17 11:30 | 显示全部楼层
437374033 发表于 2018-7-15 17:10
你写一个从亮到暗的不就好了

我这个是有由暗到亮的程序的,但是不知道为什么没显示
回复

使用道具 举报

ID:370913 发表于 2018-7-17 11:51 | 显示全部楼层
HC6800-ES-V2.0 发表于 2018-7-16 08:14
我的这个程序,可以从这到暗,再从暗到亮。
#include       

有平方根的倒数关系?能详细说一下吗?不太理解
回复

使用道具 举报

ID:151348 发表于 2018-7-17 11:54 | 显示全部楼层
驱动电路是怎样的
回复

使用道具 举报

ID:370913 发表于 2018-7-17 17:47 | 显示全部楼层
imxuheng 发表于 2018-7-17 11:54
驱动电路是怎样的

已上传
回复

使用道具 举报

ID:370913 发表于 2018-7-17 18:17 | 显示全部楼层
JYLI 发表于 2018-7-15 22:30
感觉有点抖的原因是因为人眼对光的亮度的感觉和占空比的均匀增加不是同步的,就是人眼感觉pwm波控制的灯亮 ...

那如何在程序是线性的情况下,使它不抖
回复

使用道具 举报

ID:376769 发表于 2018-7-21 19:49 | 显示全部楼层
呼吸灯只有是线性变化才可以保证能够取到各个阶段有效电压值,亮度主要是由有效电压确定的,都的原因是有些有效电压之没有取到,可以减少占空比步幅实现
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表