【问题标题】:AVR PWM configurationAVR PWM 配置
【发布时间】:2017-01-04 22:34:45
【问题描述】:

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

我想在 Atmega16 上制作具有 3 种模式的 PWM 脉冲: 1- 1Khz,占空比 100% 2- 4Khz,占空比 100% 3- 1Khz,占空比 50%

我离开 AVR 快 2 年了,我忘记了一切,所以我只需要简单地计算 Timer 1。 我读过的任何东西都让我更加困惑。有什么可以帮助我的吗? 我正在使用 Codevision AVR。

【问题讨论】:

  • 您在electronics.stackexchange.com 会有更好的运气。这可能是题外话,因为您根本不是在谈论代码,而是在谈论 AVR 上的硬件计时器

标签: microcontroller avr codevisionavr


【解决方案1】:

1- 1Khz 占空比 100%

2- 4Khz,占空比 100%

都是一样的。根本没有实际的 PWM。输出一直很高,频率无关紧要。

3- 1Khz,占空比 50%

实际上是PWM。有几种类型可供选择,但如果占空比正好为 50%,那么有很简单的方法可以通过切换来实现这一点。从手册中,

快速 PWM 模式下的频率(占空比为 50%)波形输出可以通过设置 OC1A 在每次比较匹配(COM1A1:0 = 1)时切换其逻辑电平来实现。这仅适用于使用 OCR1A 定义 TOP 值 (WGM13:0 = 15)。

即设置TCCR1A的COM1A1和COM1A0位为01,将TCCR1A和TCCR1B的WGM位全部设置为1。选择 OCR1A 和 TCCR1B 的 CSx 预分频位,以便每 0.5 ms 到达 OCR1A。

【讨论】:

    【解决方案2】:

    我做了这个,但是我有考试,所以发布它的时间太长了。 我将 Fcpu 设置为 4MHz

    这里是代码:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2015-10-06
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2021-11-25
      相关资源
      最近更新 更多