Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 19 апр 2024, 15:55

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Организация произвольного количества ШИМ (PWM) каналов.
СообщениеДобавлено: 25 янв 2012, 22:39 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 15 май 2011, 23:00
Сообщения: 1904
Широтно-импульсная модуляция широко используется в микроконтроллерах. В каждом из таймеров МК есть по несколько таких каналов. И обычно их хватает, но что делать если нужно больше каналов? Тут выход один - делать их программно. Вот для этого и создан этот кусочек кода.
Программа для организации произвольного количества ШИМ каналов. sshot-1.png
sshot-1.png [ 9.1 КБ | Просмотров: 18884 ]
- Для каждого канала уровень ШИМ задается в переменной Bri* (где * - номер канала).
- Все действия производятся в прерываниях таймера0 (или другого по выбору).Для основной программы работа программного ШИМ незаметна. Менять уровень канала можно в любое время, в любом месте программы.
- Задействован только один регистр общего назначения (и его можно освободить храня переменную в памяти).
- Обработка одного канала занимает 7 слов памяти и 8 тактов процессорного времени (не забываем, что для обеспечения частоты ШИМ в 120Гц необходимо каналы обрабатывать 120*256=30720 раз в секунду).
- Теоретически (при частоте задающего генератора 20МГц) можно организовать до 100 таких каналов (если ножек хватит :)).P.S. Отдельной процедурой (прерыванием?) выложу вариант организации ШИМ-каналов, когда данные каналов выводятся не отдельно на ножки, а через SPI интерфейс в сдвиговый регистр (это значительно сэкономит память и процессорное время при большом количестве каналов).


Вложения:
Комментарий к файлу: Организация произвольного количества ШИМ (PWM) каналов.
PWM-test.zip [15.21 КБ]
Скачиваний: 829
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества ШИМ (PWM) каналов.
СообщениеДобавлено: 08 фев 2012, 21:18 
Не в сети

Зарегистрирован: 08 фев 2012, 10:30
Сообщения: 4
Уважаемый, GetChiper.
Пожалуйста разъясните:
1. Мне кажется таймер настроен неправильно прерывания будут 8000000/256=31250 раз в секунду,
а нам надо 120*256=30720 (Clock select:CK/256 , и добавить оператор |120->TCNT0 в тело и в обработку прерывания)
2. Почему Таймер в режиме PWM-это же аппаратный ШИМ режим?
3. Для чего сохраняем в стек R17?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества ШИМ (PWM) каналов.
СообщениеДобавлено: 08 фев 2012, 23:12 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 15 май 2011, 23:00
Сообщения: 1904
Разъясняю:
1 Разница между 31250Гц и 30720Гц несущественна. Вообще можно свободно варьировать частоту обработки каналов в широких пределах, начиная с 80Гц (меньше не стоит - будет заметно мерцание) и заканчивая 150-200Гц (больше просто бессмысленно). Частота в 120Гц (или около того) выбрано мною просто исходя из времени переполнения таймера.
2 Таймер нужен просто чтобы вызывать прерывания в заданные промежутки времени (в данном случае по переполнению) в каком режиме он работает неважно.
3 r17 сохраняю на всякий случай. Мало ли что захочется впихнуть в прерывание в будущем (билдер использует пару регистров r16 и r17 для реализации макроопераций, поэтому желательно их сохранять до обработки прерывания и восстанавливать после).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества ШИМ (PWM) каналов.
СообщениеДобавлено: 09 фев 2012, 08:48 
Не в сети

Зарегистрирован: 08 фев 2012, 10:30
Сообщения: 4
Большое спасибо. Сделаю в железе с кнопочкой отпишусь.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества ШИМ (PWM) каналов.
СообщениеДобавлено: 08 май 2012, 12:31 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3769
Откуда: Россия


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества ШИМ (PWM) каналов.
СообщениеДобавлено: 08 май 2012, 14:07 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3769
Откуда: Россия
Косвенно причину обнаружил. Это наложение прерываний от разных таймеров, а вот как это победить, пока не получается. :(


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества ШИМ (PWM) каналов.
СообщениеДобавлено: 08 май 2012, 15:39 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3769
Откуда: Россия
Упорство принесло вознаграждение. Суть: При обработке значений АЦП не хватало времени уйти на следующие прерывание для ШИМ, в итоге задержка и как результат, подмаргивания. Вышел из положения банально просто, разрешив глобальные прерывания при обработке значений АЦП, и всё стало работать корректно. Автору программы РЕСПЕКТ! :-)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества ШИМ (PWM) каналов.
СообщениеДобавлено: 21 ноя 2012, 01:14 
Делал PWM по данному алгоритму, нужно было чтобы когда 255 - то горело непрерывно.
А там один импульс пролетает. Чтобы этого не было - добавляется одна команда (на рисунке красным). Теперь если 0 - выключено, 255 - включено, от 1 до 254 - ШИМ.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества ШИМ (PWM) каналов.
СообщениеДобавлено: 21 ноя 2012, 12:24 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 15 май 2011, 23:00
Сообщения: 1904
Да, так действительно будет "чистый" высокий уровень на выходе.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества ШИМ (PWM) каналов.
СообщениеДобавлено: 18 фев 2013, 18:21 
А где же:

"P.S. Отдельной процедурой (прерыванием?) выложу вариант организации ШИМ-каналов, когда данные каналов выводятся не отдельно на ножки, а через SPI интерфейс в сдвиговый регистр (это значительно сэкономит память и процессорное время при большом количестве каналов)."

Очень ждем.


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB