首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVR PWM配置

AVR PWM配置
EN

Stack Overflow用户
提问于 2017-01-04 22:34:45
回答 2查看 382关注 0票数 0

我知道这很傻,但我真的很困惑。

我想在Atmega16上制作三种模式的脉宽调制脉冲:占空比100% 2- 4 4Khz,占空比100% 3- 1 4Khz,占空比50%。

我离开AVR近两年,我忘记了一切,所以我只需要计算计时器1在一个简单的方式。我读过的任何东西都会让我更加困惑。有什么能帮到我的吗?我在用Codevision AVR。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-16 07:15:56

我做了这个,但我有考试,所以它太长,不能张贴它。我把Fcpu设为4 4MHz

这是密码:

代码语言:javascript
复制
void set1KhzDC100()
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 500.000 kHz
// Mode: Fast PWM top=0x01FF
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x82;
TCCR1B=0x0A;
TCNT1H=0;
TCNT1L=0;
ICR1H=0x00;
ICR1L=0x00;
OCR1A=511;
}

void Set4KhzDC100()
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 4000.000 kHz
// Mode: Fast PWM top=0x03FF
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x83;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1A=1023;
OCR1BH=0x00;
OCR1BL=0x00;
}

void Set1KhzDC50()
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 500.000 kHz
// Mode: Fast PWM top=0x01FF
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x82;
TCCR1B=0x0A;
TCNT1H=0;
TCNT1L=0;
ICR1H=0x00;
ICR1L=0x00;
OCR1A=255;
}
票数 0
EN

Stack Overflow用户

发布于 2017-01-05 07:52:33

1- 1千赫,占空比100%

2- 4千赫,占空比100%

都是一样的。根本就没有实际的PWM。输出一直都很高,频率也不重要。

3- 1千赫,占空比50%

实际上是PWM。有几种类型可供选择,但如果关税周期正好是50%,那么就有简单的方法可以通过切换来实现这一点。从手册上,

在快速脉宽调制模式下输出频率(占空比为50% )波形,可以通过设置OC1A在每个比较匹配(COM1A1:0 = 1)上切换其逻辑电平来实现。这仅在OCR1A用于定义最高值(WGM13 13:0= 15)时才适用。

也就是说,将COM1A1和COM1A0比特的TCCR1A设置为01,并将TCCR1A和TCCR1B的所有WGM位设置为1。选择OCR1A和TCCR1B的CSx预标量位,这样OCR1A每0.5ms就到达一次。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41474372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档