Есть вот такой фрагмент кода отвечающий за ШИМ в программе управления 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МГц. Как поднять частоту ШИМ (в программировании я не силен но стараюсь разобраться, данный отрывок программы брался из интернета и как он работает я понимаю хреновато)