搜索
bottom↓
回复: 28

单片机控制pwm输出

[复制链接]

出0入0汤圆

发表于 2013-3-8 17:43:47 | 显示全部楼层 |阅读模式
我用单片机2个定时器控制pwm波输出,使得输出电压非常不稳定,跳动极大,这个是和频率有关还是,滤波电容有关啊,我的晶振是12M的,然后我设置40Khz,20kHz,10khz都十分不稳定,请高手帮我看看啦!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-3-8 17:50:52 | 显示全部楼层
自己顶一下
头像被屏蔽

出0入0汤圆

发表于 2013-3-8 17:51:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2013-3-8 17:52:19 | 显示全部楼层
楼主根本没打算让输出电压稳定啊!!

出0入0汤圆

 楼主| 发表于 2013-3-8 18:07:35 | 显示全部楼层
我对pwm不懂啊,我的打算是用pwm控制lm317输出的,

出0入0汤圆

 楼主| 发表于 2013-3-8 18:07:52 | 显示全部楼层
JQ_Lin 发表于 2013-3-8 17:52
楼主根本没打算让输出电压稳定啊!!

怎么不是啦,详细点咯

出0入0汤圆

 楼主| 发表于 2013-3-8 19:56:54 | 显示全部楼层
来人呐,在线等解答

出0入0汤圆

 楼主| 发表于 2013-3-8 21:29:58 | 显示全部楼层
你说,是不是电容坏了?

出0入0汤圆

发表于 2013-3-8 22:11:47 | 显示全部楼层
用的AVR芯片吗?很多芯片都自带PWM功能的,一个定时器就可以了;如果是普通12分频的8051,那楼主这个就有问题了。

出0入0汤圆

发表于 2013-3-8 22:21:48 | 显示全部楼层
chensheng00 发表于 2013-3-8 18:07
我对pwm不懂啊,我的打算是用pwm控制lm317输出的,

lm317用PWM控制 这个好像不对吧  

出0入0汤圆

发表于 2013-3-8 22:22:49 | 显示全部楼层
楼主的目的是什么呢 如果需要得到高电压的PWM 可以有很多方法

出0入0汤圆

 楼主| 发表于 2013-3-9 09:54:27 | 显示全部楼层
X594008 发表于 2013-3-8 22:11
用的AVR芯片吗?很多芯片都自带PWM功能的,一个定时器就可以了;如果是普通12分频的8051,那楼主这个就有问 ...

我的是8051啊,用定时器的,但是频率感觉真心达不到啊

出0入0汤圆

 楼主| 发表于 2013-3-9 09:55:39 | 显示全部楼层
MINI2440 发表于 2013-3-8 22:22
楼主的目的是什么呢 如果需要得到高电压的PWM 可以有很多方法

如果我的pwm波频率为20khz,得把滤波器的电阻电容设置为多少才能使电压稳定啊

出0入0汤圆

 楼主| 发表于 2013-3-9 09:58:09 | 显示全部楼层
chensheng00 发表于 2013-3-9 09:54
我的是8051啊,用定时器的,但是频率感觉真心达不到啊

我控制单片机pwm输出频率为20khz,把0.047uf电容换成了0.1uf但是还是不行。我想问的是在pwm输出频率稳定为20khz的情况下,滤波器参数选择多少才好呢

出0入0汤圆

 楼主| 发表于 2013-3-9 19:40:20 | 显示全部楼层
来人啊

出0入0汤圆

 楼主| 发表于 2013-3-9 23:01:06 | 显示全部楼层
来人啦

出0入0汤圆

发表于 2013-3-9 23:17:12 | 显示全部楼层
12分频8051,12M晶体除以12得1M工作频率,PWM的分辨率为256的话,1M除以256也就3.9K的样子,楼主如何得到40K,20K的,你的是增强型8051吗

出0入0汤圆

 楼主| 发表于 2013-3-10 10:04:22 | 显示全部楼层
X594008 发表于 2013-3-9 23:17
12分频8051,12M晶体除以12得1M工作频率,PWM的分辨率为256的话,1M除以256也就3.9K的样子,楼主如何得到40 ...

不是增强型,12M的晶振,pwm的分辨率的设为50,所以1M除以50就得到了20K啊,我的理解是这样,还有我pwm输出是用定时器0固定pwm周期也就是50us,定时器1控制占空比的

出0入0汤圆

 楼主| 发表于 2013-3-10 16:56:24 | 显示全部楼层
.....

出0入0汤圆

发表于 2013-3-10 17:18:37 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 2013-3-10 18:49:23 | 显示全部楼层
X594008 发表于 2013-3-9 23:17
12分频8051,12M晶体除以12得1M工作频率,PWM的分辨率为256的话,1M除以256也就3.9K的样子,楼主如何得到40 ...

在不?在的话帮我下

出0入0汤圆

发表于 2013-3-10 19:09:23 | 显示全部楼层
贴程序和电路图出来,这里高手多的是,肯定可以帮你解决的。

出0入0汤圆

 楼主| 发表于 2013-3-10 19:21:02 | 显示全部楼层
X594008 发表于 2013-3-10 19:09
贴程序和电路图出来,这里高手多的是,肯定可以帮你解决的。

好的,马上

出0入0汤圆

 楼主| 发表于 2013-3-10 19:31:13 | 显示全部楼层
X594008 发表于 2013-3-10 19:09
贴程序和电路图出来,这里高手多的是,肯定可以帮你解决的。

由于我是分块调试的,我只挑了单片机pwm输出部分调试,所以程序老师们只需要看定时器部分控制pwm输出就可以了。我自己也尝试了,改变单片机输出频率,达到500kz时,跳动就只有0.03v左右了,但无奈单片机输出这个频率的话就不能做任何事了,更不用说可调了,所以我还是觉得改变pwm的滤波电路最可行!请各位老师指导!

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit Lcden=P3^4;
sbit RS   =P3^5;
sbit RW   =P3^6;
sbit duan =P2^6;
sbit wei  =P2^7;

uchar code table[]="0123456789.UVIA=";

//显示读取的数处理
uchar date1,date2,date3,date4;
void DataProcessing()
{
                uint temp=0x40;
                date1=(temp*50*9/255)/100;
                date2=(temp*50*9/255)%100/10;
                date3=(temp*50*9/255)%100%10;
}
void Delay(uchar delay_ms)
{
        for(delay_ms;delay_ms>0;delay_ms--)
        {       
                uint i=120;
                while(i--);
        }       
}

void Lcd_write_com (uchar com)  //根据硬件时序图写
{
        RS=0;
        P0=com;
        Delay(3);
        Lcden=1;
        Delay(2);
        Lcden=0;
}
void Lcd_write_date (uchar date)
{
        RS=1;
        P0=date;
        Delay(3);
        Lcden=1;
        Delay(2);
        Lcden=0;       
}
void Lcd_Init()
{
        duan =0;
        wei  =0;
        Lcden=0;
        RS   =0;
        RW   =0;
        Lcd_write_com(0x38);//设置16x2显示,5x7点阵,8位数据接口
        Delay(1);
        Lcd_write_com(0x0f);//开显示,光标,光标闪烁       
        Delay(1);
        Lcd_write_com(0x06);//读或写一个字符地址指针加一,光标加一
        Delay(1);
        Lcd_write_com(0x01);//显示清屏,数据指针和所有显示清零
        Delay(1);
        Lcd_write_com(0x80);//数据指针初始化       
}
void Display()
{  
        Lcd_write_com(0x80+1);
        Delay(1);
        Lcd_write_date(table[11]);
        Delay(1);
        Lcd_write_com(0x80+2);
        Delay(1);
        Lcd_write_date(table[15]);
        Delay(1);;
        Lcd_write_com(0x80+3);
        Delay(1);
        Lcd_write_date(table[date1]);
        Delay(1);
        Lcd_write_com(0x80+4);
        Delay(1);
        Lcd_write_date(table[date2]);
        Delay(1);
        Lcd_write_com(0x80+5);
        Delay(1);
        Lcd_write_date(table[10]);
        Delay(1);
        Lcd_write_com(0x80+6);
        Delay(2);
        Lcd_write_date(table[date3]);
        Delay(2);
        Lcd_write_com(0x80+7);
        Delay(2);
        Lcd_write_date(table[12]);
        Delay(2);
}

/*定时器赋初值----------------*/
unsigned char pwm_on;
sbit pwm_out=P2^4;//pwm输出端口
void TimerInit(void)
{
        TMOD=0x55;//定时器0和定时器1工作于模式一
        TH0=(65536-50)/256;//初值50us,pwm频率为20khz
        TL0=(65536-50)%256;
        TR0=1;//启动定时器0
        ET0=1;//打开定时器中断
        ET1=1;
        EA=1;//开总中断
}


void main()
{
        Lcd_Init();//LCD初始化
        TimerInit();
        pwm_on=20;
        while(1)
        {
                DataProcessing ();//数据处理
                Display();
        }
}

//中断控制pwm
void Timer0irp (void) interrupt 1
{       
        TR1=0;
        pwm_out=~pwm_out;
        TH0=(65536-50)/256;
        TL0=(65536-50)%256;//定时器0设置为50ms的周期
        TH1=(65536-pwm_on)/256;       
        TL1=(65536-pwm_on)%256;;//由定时器1设置占空比
        TR1=1;
//        CLK=~CLK;
       
}
void Timer1irp (void) interrupt 3
{
        TR1=0;
        pwm_out=1;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-3-10 19:52:16 | 显示全部楼层
高手们出来吧,

出0入0汤圆

 楼主| 发表于 2013-3-10 20:18:25 | 显示全部楼层
高手高手在那里啊

出0入0汤圆

发表于 2013-3-10 21:24:27 | 显示全部楼层
d:/未命名.bmp你的程序和电路我仿真了一下效果很好,只有几个毫伏的波动,你好好检查一下你的板子,再有就是那二个0.047U的积分电容可以再选大点的。

出0入0汤圆

 楼主| 发表于 2013-3-10 22:13:25 | 显示全部楼层
X594008 发表于 2013-3-10 21:24
你的程序和电路我仿真了一下效果很好,只有几个毫伏的波动,你好好检查一下你的板子,再有就是那二个0.0 ...

也许还真是板子有问题吧,我换了0.2uf的电容,效果变化不大

出0入0汤圆

 楼主| 发表于 2013-3-10 22:16:38 | 显示全部楼层
X594008 发表于 2013-3-10 21:24
你的程序和电路我仿真了一下效果很好,只有几个毫伏的波动,你好好检查一下你的板子,再有就是那二个0.0 ...

还有。真的很感谢你,还帮我特地去仿真
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 18:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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