Есть вот такой фрагмент кода отвечающий за ШИМ в программе управления 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МГц. Как поднять частоту ШИМ (в программировании я не силен но стараюсь разобраться, данный отрывок программы брался из интернета и как он работает я понимаю хреновато)
Здесь посмотри http://www.gaw.ru/html.cgi/txt/app/motor/index_motor.htm Если нет желания читать, то у нас нет желания разбираться вместо тебя)))
Более половины этого фрагмента к ШИМ никакого отношения не имеет, а то, что есть - недостаточно. чтобы выяснить частоту ШИМ. Если в программировании не силен - вряд ли ты это осилишь, эта тема не для новичков. Но если готов - читай про настройки таймеров в микроконтроллерах.