2016-10-01 9 views
0

У меня есть базовая установка AVR с ATmega328P и ядром FreeRTOS, работающим на нем. Я хочу переключить вывод GPIO как выход на высокой частоте между 30 кГц-60 кГц. Частота переключения GPIO постоянно определяется другими задачами и функциями RTOS, которая составляет от 30 кГц до 60 кГц.Высокочастотный переключатель GPIO AVR

Я хочу спросить, как переключать GPIO на таких высоких частотах, которые постоянно меняются. Я использую Atmel Studio 7. Пожалуйста, помогите.

+0

Вы считаете использование PWM или вы хотите переключить его вручную? – Julien

+0

Я не знаю, что лучший способ @Julien. Если я выбрал PWM, я не могу изменить частоту на ходу (вот что я думаю, скажите мне, если я ошибаюсь). Но если я выбрал обычный GPIO, я не знаю, как быстро его переключать, а также менять частоту на ходу. –

+0

В значительной степени зависит от того, что еще может понадобиться вашему программному обеспечению. Переключение сигналов периодически очень хорошо работает с синхронизированными циклами, если вашему программному обеспечению нечего делать. Он имеет тенденцию становиться немного волосатым, когда у вас много прерываний. – tofro

ответ

1

Если вы планируете менять частоту примерно примерно каждые два импульса, тогда ПО МОЖЕТ быть решением. Если частота будет оставаться на несколько десятых или 100 мс импульсов, PWM определенно является хорошим способом сделать.

Конечно, вы можете управлять частотой и периодом ШИМ на ходу. Вам нужно будет прочитать таймер/счетчикX с частью PWM datasheet. Если вам нужен всегда 50% -ный рабочий цикл, лучше всего настроить конфигурацию в разделе 15.7.2. Если вам нужен как рабочий цикл, так и частота, то адаптируется §15.7.3.

Покрытие всей возможной конфигурации было бы широким, чтобы писать здесь, но если вы начнете реализацию и проблемы с опытом, вы можете задать новый вопрос.

+0

После прочтения некоторых руководств и технических данных, у меня есть общее представление о том, что я должен делать @Julien. Итак, я заканчиваю то, что я понял (исправьте меня, если я ошибаюсь). Когда я изменил бы частоту (изменив верхнее значение), рабочий цикл будет выполняться в любом случае. И спасибо за то, что забрали меня так далеко. –

+0

@PrabhatNarang Это вы используете метод §15.7.2 изменение значения TOP изменит частоту и сконфигурирует 'TCCRxA'' COMxA1: 0' бит в toogle при переполнении, вы всегда будете поддерживать 50% -ный рабочий цикл без необходимости перенастроить. Конечно, если вам нужен другой рабочий цикл, чем 50%, это не сработает, и изменение значения TOP изменит пошлину. Поэтому вам всегда нужно будет повторно настроить оба одновременно – Julien

 Смежные вопросы

  • Нет связанных вопросов^_^