Проблема с ШИМ

Тема в разделе "Микроконтроллеры AVR", создана пользователем Faust_VIII, 21 май 2018.

  1. Faust_VIII

    Faust_VIII Нуб

    Есть вот такой фрагмент кода отвечающий за ШИМ в программе управления BLDC.
    {
    TCCR0A |= (1 << COM0A1)|(0 << COM0A0)| // Сброс вывода OC0A при совпадении
    (1 << COM0B1)|(0 << COM0B0)| // Сброс вывода OC0B при совпадении
    (1 << WGM01)|(1 << WGM00); // Режим Fast PWM
    TCCR0B |= (1 << CS00); // Предделитель CLK/1

    TCCR2A |= (1 << COM2B1)|(0 << COM2B0)| // Сброс вывода OC2B при совпадении
    (1 << WGM01)|(1 << WGM00); // Режим Fast PWM
    TCCR2B |= (1 << CS00); // // Предделитель CLK/1


    PCMSK0 |= (1 << PCINT2)|(1 << PCINT1)|(1 << PCINT0); // Активируем входы внешних прерываний
    PCICR |= (1 << PCIE0); // Разрешаем прерывание по изменению состояния порта B

    ADMUX |= (1 << MUX1)|(1 << MUX0); // Вход ADC3
    ADCSRA |= (1 << ADEN) | (1 << ADPS1); // Разрешаем АЦП, предделитель на 4

    DDRC |= (1 << PC2)|(1 << PC1)|(1 << PC0); // Порт С - выход(светодиоды)
    PORTC &= ~(1 << PC2)|(1 << PC1)|(1 << PC0);

    DDRB |= (1 << PB2)|(1 << PB1)|(1 << PB0); // Кратковреммено подаем лог.1 на входы датчиков
    PORTB |= (1 << PB2)|(1 << PB1)|(1 << PB0); // для первоначального запуска двигателя
    PORTB &= ~(1 << PB2)|(1 << PB1)|(1 << PB0);

    DDRB = 0x00; // Порт B - вход

    sei(); // Глобально разрешаем прерывания

    DDRD = 0xFF; // Порт D - выход

    программа работает но двигатель пищит что очень напрягает нервы, я так понимаю что писк происходит из-за низкой частоты ШИМ. Проект собран на AVR Atmega48 с кварцем на 16МГц. Как поднять частоту ШИМ (в программировании я не силен но стараюсь разобраться, данный отрывок программы брался из интернета и как он работает я понимаю хреновато)
     
  2. parovoZZ

    parovoZZ Гуру

    Daniil нравится это.
  3. b707

    b707 Гуру

    Более половины этого фрагмента к ШИМ никакого отношения не имеет, а то, что есть - недостаточно. чтобы выяснить частоту ШИМ.
    Если в программировании не силен - вряд ли ты это осилишь, эта тема не для новичков. Но если готов - читай про настройки таймеров в микроконтроллерах.