[技术问答]

PWM基础概念知识

[复制链接]
634|17
手机看帖
扫描二维码
随时随地手机跟帖
yiyigirl2014|  楼主 | 2020-1-31 12:07 | 显示全部楼层 |阅读模式
PWM脉宽调制,是靠改变脉冲宽度来控制输出电压,通过改变周期来控制其输出频率。而输出频率的变化可通过改变此脉冲的调制周期来实现。这样,使调压和调频两个作用配合一致,且于中间直流环节无关,因而加快了调节速度,改善了动态性能。

由于输出等幅脉冲只需恒定直流电源供电,可用不可控整流器取代相控整流器,使电网侧的功率因数大大改善。利用PWM逆变器能够抑制或消除低次谐波。加上使用自关断器件,开关频率大幅度提高,输出波形可以非常接近正弦波。

使用特权

评论回复
yiyigirl2014|  楼主 | 2020-1-31 12:16 | 显示全部楼层
#include <hidef.h>      
#include "derivative.h"      

#define LEDCPU     PORTB_PB1        //定义连接发光二级管的PORTB_PB1口数据寄存
                                   //为LED,写'0'亮,写'1' 灭
#define LEDCPU_dir DDRB_DDRB1       //定义连接发光二级管的PORTB_PB1口方向寄存器
                                   //为LEDCPU_dir,写'0'做输入口,写'1'做输出口


void INIT_PLL(void)       //busclock 32M
{   
   
   CLKSEL_PLLSEL=0;         //总线时钟来源于晶振
           
   PLLCTL_PLLON=0;  //先关闭PLL

   SYNR=0x40 | 0x03;        
   REFDV=0x80 | 0x01;              
   POSTDIV=0x00;  //PLL配置为64MHz     

   PLLCTL_PLLON=1;  //打开PLL

   _asm(nop);         
   _asm(nop);
   while(!(CRG**_LOCK==1)); //确定PLL是否稳定LOCK=1 稳定,=0 不稳定  
   CLKSEL_PLLSEL =1;     //总线时钟来源于PLL                       
}

void init_pwm(void)
{
  PWMCTL_CON01= 1;   //级联0号和1号通道形成16位PWM通道号,由PWM1输出
  PWMPOL_PPOL1= 1;   //通道01的极性为高电平有效
  PWMPRCLK = 0x55;   //A时钟和B时钟的分频系数为32,频率为1MHz
  PWMSCLA  =   25;   //SA时钟设置寄存器
                     //CLOCK SA=CLOCK A/(2*PWMSCLA)
                     //CLOCK SA=1M/2*25=20KHz
  PWMCLK =0x02;      //通道01用SA时钟作为时钟源
  PWMPER01  = 200;   //通道01的周期为100Hz
  PWMDTY01  = 0;     //通道01的占空比为0%  
  PWME_PWME1 = 1;    //使能通道01
}

void delay(void)
{
    unsigned int i,j;
    for(i=0;i<20;i++)
      for(j=0;j<50000;j++);
}


void main(void) {
  DisableInterrupts;       //禁止所有中断打开
  INIT_PLL();              //初始化PLL模块
  init_pwm();              //初始化pwm模块
  LEDCPU_dir=1;            //设置连接发光二级管的PORTB_PB0口为输出口
  LEDCPU=1;                //初始化发光二极管为亮
  EnableInterrupts;        //允许所有中断打开

  for(;;)
  {
      delay();
      PWMDTY01=20;     //占空比为10%
      delay();
      PWMDTY01=40;     //占空比为20%
      delay();
      PWMDTY01=60;     //占空比为30%
      delay();
      PWMDTY01=80;     //占空比为40%
      delay();
      PWMDTY01=100;     //占空比为50%
      delay();
      PWMDTY01=120;     //占空比为60%
      delay();
      PWMDTY01=140;     //占空比为70%
      delay();
      PWMDTY01=160;     //占空比为80%
      delay();
      PWMDTY01=180;     //占空比为90%
      delay();
      PWMDTY01=200;     //占空比为100%
      delay();
      PWMDTY01=180;     //占空比为90%
      delay();
      PWMDTY01=160;     //占空比为80%
      delay();
      PWMDTY01=140;     //占空比为70%
      delay();
      PWMDTY01=120;     //占空比为60%
      delay();
      PWMDTY01=100;     //占空比为50%
      delay();
      PWMDTY01=80;       //占空比为40%
      delay();
      PWMDTY01=60;      //占空比为30%
      delay();
      PWMDTY01=40;      //占空比为20%   
  }                     
}

使用特权

评论回复
yiyigirl2014|  楼主 | 2020-1-31 12:22 | 显示全部楼层
延时也很重要,另外分级也不用太多

使用特权

评论回复
xixi2017| | 2020-1-31 14:00 | 显示全部楼层
可以做模拟的DAC

使用特权

评论回复
天灵灵地灵灵| | 2020-1-31 15:43 | 显示全部楼层
PWM用处很多

使用特权

评论回复
天灵灵地灵灵| | 2020-1-31 15:48 | 显示全部楼层
弄个例子试试看。

使用特权

评论回复
xuanhuanzi| | 2020-1-31 15:53 | 显示全部楼层
操作思路非常赞。

使用特权

评论回复
wahahaheihei| | 2020-1-31 18:52 | 显示全部楼层
这个方法操作非常赞,还可以用个循环做,就不用搞这么多行了。

使用特权

评论回复
wahahaheihei| | 2020-1-31 19:15 | 显示全部楼层
可用不可控整流器取代相控整流器

使用特权

评论回复
heisexingqisi| | 2020-1-31 19:40 | 显示全部楼层
加个平滑滤波。

使用特权

评论回复
xinxianshi| | 2020-1-31 20:00 | 显示全部楼层
新塘的库函数就使用的好像是百分比设置。

使用特权

评论回复
mintspring| | 2020-1-31 20:12 | 显示全部楼层
感谢分享

使用特权

评论回复
xinxianshi| | 2020-1-31 20:39 | 显示全部楼层
因而加快了调节速度,改善了动态性能。

使用特权

评论回复
小明的同学| | 2020-1-31 21:16 | 显示全部楼层
我只知道两种应用:无极调光,电机驱动

使用特权

评论回复
zhuomuniao110| | 2020-1-31 21:34 | 显示全部楼层
PWM频率高了好还是低了好

使用特权

评论回复
643757107| | 2020-1-31 22:19 | 显示全部楼层
分享的资料非常不错。

使用特权

评论回复
734774645| | 2020-1-31 22:36 | 显示全部楼层
逆变器好像就要用到这个

使用特权

评论回复
heisexingqisi| | 2020-1-31 22:37 | 显示全部楼层
加快了调节速度,改善了动态性能

使用特权

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

本版积分规则

199

主题

3442

帖子

10

粉丝