打印

pwm波的频率问题

[复制链接]
5190|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
16777216|  楼主 | 2013-5-11 18:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是我的pwm设置小程序  我的pwm的频率为啥最大才300HZ左右  再大大不了了  而且在两端频率 即在过小或300以上的时候 程序就出问题了 示波器测出乱七八糟的波形了

#include "reg52.h"

sbit OUT=P2^0;                     //pwm输出
sbit add=P2^7;                                 //占空比增加
sbit dec=P2^6;                                 //占空比减少

sbit addhz=P2^5;                        //改变频率  实际上是增加周期 减少频率
sbit dechz=P2^4;                        //

unsigned int tt=10;                        //
unsigned int th0=0xff;
unsigned int tl0=0xfe;
unsigned int  th;


unsigned char hpwm=50;          //高电平占空比
unsigned char lpwm=50;          //低电平

unsigned char count =0;

void time0() interrupt 1
{       


        //TH0=(65536-2)/256;
        //TL0=(65536-2)%256;
        TH0=th0;;
        TL0=tl0;

        count++;
        if (count >= 101)       
        count = 0;
               
        if (count < (100 - hpwm))
        OUT = 1;
        else
        OUT = 0;
        TR0=1;


}

void main()
{
        TMOD=0x01;
        //TH0=(65536-2)/256;
        //TL0=(65536-2)%256;
        TH0=th0;
        TL0=tl0;
        EA = 1;
        TR0=1;
        //IE=0x82;
        ET0=1;
           OUT=1;

  while(1)
  {               

          if(!add)
        {  while(add==0);
           hpwm=hpwm+10;

          
           if(hpwm>=100)
           hpwm=100;
           if(hpwm<=0)
           hpwm=0;
        }


         if(!dec)
        {  
                while(dec==0);
                hpwm=hpwm-10;


           if(hpwm>=100)
           hpwm=100;
           if(hpwm<=0)
           hpwm=0;
        }


         if(!addhz)                                                        //改变频率  实际上是增加周期 减少频率                       
                {  
                        while(addhz==0);
                    tt=tt+50;
                }

       
                  if(!dechz)
                {  
                        while(dechz==0);
                    tt=tt-10;
                }


           if(tt>=50000)
           tt=50000;
           if(tt<=0)
           tt=10;

           th=65536-tt;

           th0=th/256;
           tl0=th%256;
        }
}



相关帖子

沙发
dirtwillfly| | 2013-5-11 19:50 | 只看该作者
程序哪?

使用特权

评论回复
板凳
16777216|  楼主 | 2013-5-11 20:07 | 只看该作者
dirtwillfly 发表于 2013-5-11 19:50
程序哪?

不是在帖子里贴出来了么

使用特权

评论回复
地板
dirtwillfly| | 2013-5-11 22:32 | 只看该作者
16777216 发表于 2013-5-11 20:07
不是在帖子里贴出来了么

看到了。用手机浏览时看不到程序

使用特权

评论回复
5
16777216|  楼主 | 2013-5-11 22:36 | 只看该作者
dirtwillfly 发表于 2013-5-11 22:32
看到了。用手机浏览时看不到程序

我是 通过改变定时器0的值来改变频率的 但貌似不行呀 频率是能改变 但不符合我的要求
我就是想要 先弄出一个 频率和占空比可调的pwm  

使用特权

评论回复
6
HaydnSyx| | 2013-5-12 00:09 | 只看该作者
用51这类做PWM的用两个定时器比较简单,通过一个定时器对另一个定时器的TR0/1控制,占空比在两个定时器里分别设置

使用特权

评论回复
7
16777216|  楼主 | 2013-5-12 07:29 | 只看该作者
HaydnSyx 发表于 2013-5-12 00:09
用51这类做PWM的用两个定时器比较简单,通过一个定时器对另一个定时器的TR0/1控制,占空比在两个定时器里分 ...

为什么我原来写的有问题呢

使用特权

评论回复
8
16777216|  楼主 | 2013-5-12 07:29 | 只看该作者
HaydnSyx 发表于 2013-5-12 00:09
用51这类做PWM的用两个定时器比较简单,通过一个定时器对另一个定时器的TR0/1控制,占空比在两个定时器里分 ...

为什么我原来写的有问题呢

使用特权

评论回复
9
HaydnSyx| | 2013-5-13 15:08 | 只看该作者
16777216 发表于 2013-5-12 07:29
为什么我原来写的有问题呢

首先养成良好的编写 按键判断程序 ,你这样精简的写,会使你的tt值瞬间增大许多或减小许多。而且你对tt设定的是unsigned int格式,这样的话,它没有办法达到负值,当减到0或更小时,会直接变成大数,所以你的那条if(tt<=0) tt=10;没有什么太大的作用。
在者从你的语句看,应该是想从10uS到50mS,频率也就是20hz到100KHZ。而单片机的一条语句执行在1us到4us之间(如果是12MHZ的话),所以当你在小周期时,就是几十uS时,很容易产生冲突的

使用特权

评论回复
10
ayb_ice| | 2013-5-13 16:26 | 只看该作者
NB的人就是不一样
65536-2

你就给MCU 2个周期处理中断,

使用特权

评论回复
11
16777216|  楼主 | 2013-5-13 18:32 | 只看该作者
HaydnSyx 发表于 2013-5-13 15:08
首先养成良好的编写 按键判断程序 ,你这样精简的写,会使你的tt值瞬间增大许多或减小许多。而且你对tt设 ...

嗯 确实是这个问题 我昨天改了 已经ok了

使用特权

评论回复
12
16777216|  楼主 | 2013-5-13 18:32 | 只看该作者
ayb_ice 发表于 2013-5-13 16:26
NB的人就是不一样
65536-2

我已经搞好了 是楼上的问题

使用特权

评论回复
13
四叶草2014| | 2013-6-26 15:21 | 只看该作者
16777216 发表于 2013-5-13 18:32
嗯 确实是这个问题 我昨天改了 已经ok了

能把程序给我发一份么,1074553478@qq.com,谢谢了

使用特权

评论回复
14
16777216|  楼主 | 2013-6-26 17:18 | 只看该作者
四叶草2014 发表于 2013-6-26 15:21
能把程序给我发一份么,1074553478@qq.com,谢谢了

程序就是原来的稍加改动 变量之间的改动 主题架构没变  还有就是定时太少
程序没了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

399

帖子

1

粉丝