普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2642|回复: 2

PWM占空比可调

 关闭 [复制链接]

1

主题

1

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2019-9-2 21:28:46 | 显示全部楼层 |阅读模式
求一个占空比可调,周期可调的,15KHZ的左右的PWM调试程序,用来做直流无极调压用
回复

使用道具 举报

2

主题

8

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2019-9-3 19:30:49 | 显示全部楼层
/* 配置并启动PWM,fr-频率,dc-占空比 */
void ConfigPWM(unsigned int fr, unsigned char dc)
{
    unsigned int  high, low;
    unsigned long tmp;
   
    tmp  = (11059200/12) / fr;  //计算一个周期所需的计数值
    high = (tmp*dc) / 100;      //计算高电平所需的计数值
    low  = tmp - high;          //计算低电平所需的计数值
    high = 65536 - high + 12;   //计算高电平的重载值并补偿中断延时
    low  = 65536 - low  + 12;   //计算低电平的重载值并补偿中断延时
    HighRH = (unsigned char)(high>>8); //高电平重载值拆分为高低字节
    HighRL = (unsigned char)high;
    LowRH  = (unsigned char)(low>>8);  //低电平重载值拆分为高低字节
    LowRL  = (unsigned char)low;
   
    TMOD = 0x11;   //配置T0为模式1
    TH0 = HighRH;   //加载T0重载值
    TL0 = HighRL;
    ET0 = 1;        //使能T0中断
    TR0 = 1;        //启动T0
    PWMOUT = 1;     //输出高电平
    PWMOUT2 = 0;    //输出低电平
}       
/* T0中断服务函数,产生PWM输出 */
void InterruptTimer0() interrupt 1
{

        if ((PWMOUT == 1)||(PWMOUT2==0)) //当前输出为高电平时,装载低电平值并输出低电平
    {
        TH0 = LowRH;
        TL0 = LowRL;
        PWMOUT = 0;
                PWMOUT2=1;
               
    }
    else              //当前输出为低电平时,装载高电平值并输出高电平
    {
        TH0 = HighRH;
        TL0 = HighRL;
        PWMOUT = 1;
    }
}       
回复 支持 反对

使用道具 举报

2

主题

8

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2019-9-3 19:32:16 | 显示全部楼层
想学单片机可以联系我们,我们专业单片机指导。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-24 13:09 , Processed in 0.087049 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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