[技术问答] PWM基础概念知识

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

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

 楼主| yiyigirl2014 发表于 2020-1-31 12:16 | 显示全部楼层
  1. #include <hidef.h>      
  2. #include "derivative.h"      

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


  7. void INIT_PLL(void)       //busclock 32M
  8. {   
  9.    
  10.    CLKSEL_PLLSEL=0;         //总线时钟来源于晶振
  11.            
  12.    PLLCTL_PLLON=0;  //先关闭PLL

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

  16.    PLLCTL_PLLON=1;  //打开PLL

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

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

  35. void delay(void)
  36. {
  37.     unsigned int i,j;
  38.     for(i=0;i<20;i++)
  39.       for(j=0;j<50000;j++);
  40. }


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

  48.   for(;;)
  49.   {
  50.       delay();
  51.       PWMDTY01=20;     //占空比为10%
  52.       delay();
  53.       PWMDTY01=40;     //占空比为20%
  54.       delay();
  55.       PWMDTY01=60;     //占空比为30%
  56.       delay();
  57.       PWMDTY01=80;     //占空比为40%
  58.       delay();
  59.       PWMDTY01=100;     //占空比为50%
  60.       delay();
  61.       PWMDTY01=120;     //占空比为60%
  62.       delay();
  63.       PWMDTY01=140;     //占空比为70%
  64.       delay();
  65.       PWMDTY01=160;     //占空比为80%
  66.       delay();
  67.       PWMDTY01=180;     //占空比为90%
  68.       delay();
  69.       PWMDTY01=200;     //占空比为100%
  70.       delay();
  71.       PWMDTY01=180;     //占空比为90%
  72.       delay();
  73.       PWMDTY01=160;     //占空比为80%
  74.       delay();
  75.       PWMDTY01=140;     //占空比为70%
  76.       delay();
  77.       PWMDTY01=120;     //占空比为60%
  78.       delay();
  79.       PWMDTY01=100;     //占空比为50%
  80.       delay();
  81.       PWMDTY01=80;       //占空比为40%
  82.       delay();
  83.       PWMDTY01=60;      //占空比为30%
  84.       delay();
  85.       PWMDTY01=40;      //占空比为20%   
  86.   }                     
  87. }
 楼主| 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 | 显示全部楼层
加快了调节速度,改善了动态性能
您需要登录后才可以回帖 登录 | 注册

本版积分规则

230

主题

3676

帖子

10

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