首页 > 编程知识 正文

pwm芯片占空比调节,pwm占空比怎么调节

时间:2023-05-06 15:55:47 阅读:206374 作者:508

今天做了个PWM占空比调节的例子,已经调试通过,供大家参考.

以下是原理图:

(原文件名:PWM 调节实例原理图.jpg)

以下是程序清单:

#include "iom16v.h"

#define SLEEP()  asm("sleep")

#define WDR()    asm("wdr")

#define NOP()    asm("nop")

#define KEY1     (1<<6)

#define KEY2     (1<<7)

//------------------------------------------------------------------

//000000000000000000000000000000000000000000000000000000000000000000

//------------------------------------------------------------------

//按键子程序:

char key1_ci=0,key1_down=0;

char key2_ci=0,key2_down=0;

void kb_scan_pro()

{

if(!(PINB&KEY1))

{

if(!key1_down)

{ key1_ci++;

if(key1_ci>=200)

{        OCR1A++;             //按键KEY1按下,则增大OCR1A,占空比增大

key1_ci=0;

key1_down=1;

}

}

}

else

key1_down=0;

if(!(PINB&KEY2))

{if(!key2_down)

{

key2_ci++;

if(key2_ci>=200)

{

OCR1A--;             //按键KEY2按下,则减小OCR1A,占空比减小

key2_ci=0;

key2_down=1;

}

}

}

else

key2_down=0;

}

//按键子程序结束.

//------------------------------------------------------------------

//000000000000000000000000000000000000000000000000000000000000000000

//------------------------------------------------------------------

//主程序开始:

void main()

{

PORTA=PORTB=PORTC=PORTD=0x00;

DDRA=DDRB=DDRC=DDRD=0xff;

DDRB&=~(KEY1|KEY2);         //按键输入

PORTB|=(KEY1|KEY2);

SFIOR&=~(1<

//SREG|=1<<7;                                        //状态寄存器

WDTCR=(1<

TCCR1A=0B10000001;          //比较匹配时清零OC1A/OC1B, OC1A/OC1B在TOP 时置位 这样OCR1A越大,则占空比越大

TCCR1B=0B00001001;          //WGM13:0=5,快速PWM, TOP=0X00FF

OCR1A=100;

while(1)

{

kb_scan_pro();

WDR();

}

}

//------------------------------------------------------------------

//000000000000000000000000000000000000000000000000000000000000000000

//------------------------------------------------------------------

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。