http://www.forum.getchip.net/ |
|
Организация произвольного количества ШИМ (PWM) каналов. http://www.forum.getchip.net/viewtopic.php?f=18&t=164 |
Страница 1 из 3 |
Автор: | GetChiper [ 25 янв 2012, 22:39 ] | ||
Заголовок сообщения: | Организация произвольного количества ШИМ (PWM) каналов. | ||
Широтно-импульсная модуляция широко используется в микроконтроллерах. В каждом из таймеров МК есть по несколько таких каналов. И обычно их хватает, но что делать если нужно больше каналов? Тут выход один - делать их программно. Вот для этого и создан этот кусочек кода. Программа для организации произвольного количества ШИМ каналов. sshot-1.png [ 9.1 КБ | Просмотров: 23755 ] - Для каждого канала уровень ШИМ задается в переменной Bri* (где * - номер канала). - Все действия производятся в прерываниях таймера0 (или другого по выбору).Для основной программы работа программного ШИМ незаметна. Менять уровень канала можно в любое время, в любом месте программы. - Задействован только один регистр общего назначения (и его можно освободить храня переменную в памяти). - Обработка одного канала занимает 7 слов памяти и 8 тактов процессорного времени (не забываем, что для обеспечения частоты ШИМ в 120Гц необходимо каналы обрабатывать 120*256=30720 раз в секунду). - Теоретически (при частоте задающего генератора 20МГц) можно организовать до 100 таких каналов (если ножек хватит ![]()
|
Автор: | LeXSS [ 08 фев 2012, 21:18 ] |
Заголовок сообщения: | Re: Организация произвольного количества ШИМ (PWM) каналов. |
Уважаемый, GetChiper. Пожалуйста разъясните: 1. Мне кажется таймер настроен неправильно прерывания будут 8000000/256=31250 раз в секунду, а нам надо 120*256=30720 (Clock select:CK/256 , и добавить оператор |120->TCNT0 в тело и в обработку прерывания) 2. Почему Таймер в режиме PWM-это же аппаратный ШИМ режим? 3. Для чего сохраняем в стек R17? |
Автор: | GetChiper [ 08 фев 2012, 23:12 ] |
Заголовок сообщения: | Re: Организация произвольного количества ШИМ (PWM) каналов. |
Разъясняю: 1 Разница между 31250Гц и 30720Гц несущественна. Вообще можно свободно варьировать частоту обработки каналов в широких пределах, начиная с 80Гц (меньше не стоит - будет заметно мерцание) и заканчивая 150-200Гц (больше просто бессмысленно). Частота в 120Гц (или около того) выбрано мною просто исходя из времени переполнения таймера. 2 Таймер нужен просто чтобы вызывать прерывания в заданные промежутки времени (в данном случае по переполнению) в каком режиме он работает неважно. 3 r17 сохраняю на всякий случай. Мало ли что захочется впихнуть в прерывание в будущем (билдер использует пару регистров r16 и r17 для реализации макроопераций, поэтому желательно их сохранять до обработки прерывания и восстанавливать после). |
Автор: | LeXSS [ 09 фев 2012, 08:48 ] |
Заголовок сообщения: | Re: Организация произвольного количества ШИМ (PWM) каналов. |
Большое спасибо. Сделаю в железе с кнопочкой отпишусь. |
Автор: | SVN [ 08 май 2012, 12:31 ] |
Заголовок сообщения: | Re: Организация произвольного количества ШИМ (PWM) каналов. |
Автор: | SVN [ 08 май 2012, 14:07 ] |
Заголовок сообщения: | Re: Организация произвольного количества ШИМ (PWM) каналов. |
Косвенно причину обнаружил. Это наложение прерываний от разных таймеров, а вот как это победить, пока не получается. ![]() |
Автор: | SVN [ 08 май 2012, 15:39 ] |
Заголовок сообщения: | Re: Организация произвольного количества ШИМ (PWM) каналов. |
Упорство принесло вознаграждение. Суть: При обработке значений АЦП не хватало времени уйти на следующие прерывание для ШИМ, в итоге задержка и как результат, подмаргивания. Вышел из положения банально просто, разрешив глобальные прерывания при обработке значений АЦП, и всё стало работать корректно. Автору программы РЕСПЕКТ! ![]() |
Автор: | Часто проходящий [ 21 ноя 2012, 01:14 ] |
Заголовок сообщения: | Re: Организация произвольного количества ШИМ (PWM) каналов. |
Делал PWM по данному алгоритму, нужно было чтобы когда 255 - то горело непрерывно. А там один импульс пролетает. Чтобы этого не было - добавляется одна команда (на рисунке красным). Теперь если 0 - выключено, 255 - включено, от 1 до 254 - ШИМ. |
Автор: | GetChiper [ 21 ноя 2012, 12:24 ] |
Заголовок сообщения: | Re: Организация произвольного количества ШИМ (PWM) каналов. |
Да, так действительно будет "чистый" высокий уровень на выходе. |
Автор: | Гость [ 18 фев 2013, 18:21 ] |
Заголовок сообщения: | Re: Организация произвольного количества ШИМ (PWM) каналов. |
А где же: "P.S. Отдельной процедурой (прерыванием?) выложу вариант организации ШИМ-каналов, когда данные каналов выводятся не отдельно на ножки, а через SPI интерфейс в сдвиговый регистр (это значительно сэкономит память и процессорное время при большом количестве каналов)." Очень ждем. |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |