pwm波的频率问题

[复制链接]
5518|13
 楼主| 16777216 发表于 2013-5-11 18:56 | 显示全部楼层 |阅读模式
以下是我的pwm设置小程序  我的pwm的频率为啥最大才300HZ左右  再大大不了了  而且在两端频率 即在过小或300以上的时候 程序就出问题了 示波器测出乱七八糟的波形了

  1. #include "reg52.h"

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

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

  7. unsigned int tt=10;                        //
  8. unsigned int th0=0xff;
  9. unsigned int tl0=0xfe;
  10. unsigned int  th;


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

  13. unsigned char count =0;

  14. void time0() interrupt 1
  15. {       


  16.         //TH0=(65536-2)/256;
  17.         //TL0=(65536-2)%256;
  18.         TH0=th0;;
  19.         TL0=tl0;

  20.         count++;
  21.         if (count >= 101)       
  22.         count = 0;
  23.                
  24.         if (count < (100 - hpwm))
  25.         OUT = 1;
  26.         else
  27.         OUT = 0;
  28.         TR0=1;


  29. }

  30. void main()
  31. {
  32.         TMOD=0x01;
  33.         //TH0=(65536-2)/256;
  34.         //TL0=(65536-2)%256;
  35.         TH0=th0;
  36.         TL0=tl0;
  37.         EA = 1;
  38.         TR0=1;
  39.         //IE=0x82;
  40.         ET0=1;
  41.            OUT=1;

  42.   while(1)
  43.   {               

  44.           if(!add)
  45.         {  while(add==0);
  46.            hpwm=hpwm+10;

  47.           
  48.            if(hpwm>=100)
  49.            hpwm=100;
  50.            if(hpwm<=0)
  51.            hpwm=0;
  52.         }


  53.          if(!dec)
  54.         {  
  55.                 while(dec==0);
  56.                 hpwm=hpwm-10;


  57.            if(hpwm>=100)
  58.            hpwm=100;
  59.            if(hpwm<=0)
  60.            hpwm=0;
  61.         }


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

  67.        
  68.                   if(!dechz)
  69.                 {  
  70.                         while(dechz==0);
  71.                     tt=tt-10;
  72.                 }


  73.            if(tt>=50000)
  74.            tt=50000;
  75.            if(tt<=0)
  76.            tt=10;

  77.            th=65536-tt;

  78.            th0=th/256;
  79.            tl0=th%256;
  80.         }
  81. }



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
不是在帖子里贴出来了么

看到了。用手机浏览时看不到程序
 楼主| 16777216 发表于 2013-5-11 22:36 | 显示全部楼层
dirtwillfly 发表于 2013-5-11 22:32
看到了。用手机浏览时看不到程序

我是 通过改变定时器0的值来改变频率的 但貌似不行呀 频率是能改变 但不符合我的要求
我就是想要 先弄出一个 频率和占空比可调的pwm  
HaydnSyx 发表于 2013-5-12 00:09 | 显示全部楼层
用51这类做PWM的用两个定时器比较简单,通过一个定时器对另一个定时器的TR0/1控制,占空比在两个定时器里分别设置
 楼主| 16777216 发表于 2013-5-12 07:29 来自手机 | 显示全部楼层
HaydnSyx 发表于 2013-5-12 00:09
用51这类做PWM的用两个定时器比较简单,通过一个定时器对另一个定时器的TR0/1控制,占空比在两个定时器里分 ...

为什么我原来写的有问题呢
 楼主| 16777216 发表于 2013-5-12 07:29 来自手机 | 显示全部楼层
HaydnSyx 发表于 2013-5-12 00:09
用51这类做PWM的用两个定时器比较简单,通过一个定时器对另一个定时器的TR0/1控制,占空比在两个定时器里分 ...

为什么我原来写的有问题呢
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时,很容易产生冲突的
ayb_ice 发表于 2013-5-13 16:26 | 显示全部楼层
NB的人就是不一样
65536-2

你就给MCU 2个周期处理中断,
 楼主| 16777216 发表于 2013-5-13 18:32 | 显示全部楼层
HaydnSyx 发表于 2013-5-13 15:08
首先养成良好的编写 按键判断程序 ,你这样精简的写,会使你的tt值瞬间增大许多或减小许多。而且你对tt设 ...

嗯 确实是这个问题 我昨天改了 已经ok了
 楼主| 16777216 发表于 2013-5-13 18:32 | 显示全部楼层
ayb_ice 发表于 2013-5-13 16:26
NB的人就是不一样
65536-2

我已经搞好了 是楼上的问题
四叶草2014 发表于 2013-6-26 15:21 | 显示全部楼层
16777216 发表于 2013-5-13 18:32
嗯 确实是这个问题 我昨天改了 已经ok了

能把程序给我发一份么,1074553478@qq.com,谢谢了
 楼主| 16777216 发表于 2013-6-26 17:18 | 显示全部楼层
四叶草2014 发表于 2013-6-26 15:21
能把程序给我发一份么,1074553478@qq.com,谢谢了

程序就是原来的稍加改动 变量之间的改动 主题架构没变  还有就是定时太少
程序没了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

399

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部