реклама на сайте
подробности

 
 
> ШИМ, сделать три канала?
ps1x
сообщение Oct 7 2007, 17:26
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Как сделать шим на 3 канала с одним таймером? Использовать принцип динамической индикации?
p.s. Надо подключить rgb светодиод.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Oct 11 2007, 22:16
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Тогда мы действительно не понимаем друг друга. smile.gif

Смотря как ты ШИМ реализовывал.
Я реализовывал по прерываниям. Расчитывал как бы таблицу времён-портов. В прерывании перегружал следующую константу таймера и выводил значения портов. В связи с тем, что минимальная разница - одна единица, то длительность прерывания должна быть меньше чем Тшим/Nступеней.

Такое построение имеет своё преимущество. Поскольку я первым делом вывожу состояние портов, то погрешность вывода незначительна. Есть и недостаток. В связи с тем, что прерывание занимает значительное время (вход/выход/сохранение контекста/обработка) то достичь высокой частоты ШИМ не удаётся.

Можно делать прямым опросом таймера, как я видел в примерах на PIC. Честно говоря такой подход меня не устраивает и я его не применяю.

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


Пост о котором я писал я реализовывал первым описанным способом. Управлял ШД (делал дробление) Соответственно полную синусоиду мне выводить не было необходимости. В тоже время точность вывода (число ступенек) была 3200. Что тут непонятного?
Go to the top of the page
 
+Quote Post
=GM=
сообщение Oct 11 2007, 23:01
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(SasaVitebsk @ Oct 11 2007, 22:16) *
Смотря как ты ШИМ реализовывал

Вот моя базовая процедура, выполняется за 18 МЦ, можно еще укоротить (не буду смущать народ, а то придёт сами знаете кто, и начнёт верещать...)
Код
;Процедура формирования 256-точечного 24-канального ШИМа (18МЦ)
pwmisr:  ld   temp,x+       ;обновление
        out   port1,temp    ;порта 1
        ld    temp,x+       ;обновление
        out   port2,temp    ;порта 2
        ld    temp,x+       ;обновление
        out   port3,temp    ;порта 3
        ld    temp,x+       ;новая уставка
        out   TCR0,temp     ;для сравнения
        reti

Как видишь, можно обойтись без всяких сохранений контекстов(:-).

Для твоего случая, для 12 каналов, время прерывания можно сделать порядка 10 МЦ, т.е. с клоком 20 мег время одной ступеньки будет равно 0.5 мкс, период шим = 256*0.5=128 мкс, следовательно частота шим - 7.8 кГц, это на чистом ассемблере, а у тебя 5 кГц на си, неужто компилятор генерит такой быстрый код?
Цитата(SasaVitebsk @ Oct 11 2007, 22:16) *
Пост о котором я писал я реализовывал первым описанным способом. Управлял ШД (делал дробление) Соответственно полную синусоиду мне выводить не было необходимости. В тоже время точность вывода (число ступенек) была 3200. Что тут непонятного?

Непонятно одно. Если 3200 ступеней, то как получить шим 5 кГц? У тебя время одной ступени будет 200 мкс/3200=62.5 нс, а это примерно один МЦ контроллера.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
singlskv
сообщение Oct 15 2007, 20:13
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(=GM= @ Oct 12 2007, 03:01) *
Вот моя базовая процедура, выполняется за 18 МЦ
Код
;Процедура формирования 256-точечного 24-канального ШИМа (18МЦ)
pwmisr:  ld   temp,x+      ;обновление
        out   port1,temp;порта 1
        ld    temp,x+      ;обновление
        out   port2,temp;порта 2
        ld    temp,x+      ;обновление
        out   port3,temp;порта 3
        ld    temp,x+      ;новая уставка
        out   TCR0,temp    ;для сравнения
        reti
=GM=, лихо у Вас такты подсчитаны, я так не умею biggrin.gif
Вот мой расчет для худшего случая:
3(джиттер при попадании прерывания на 4 тактовую команду) + 4(вход в прерывание) +
4*2(LD) + 4*1(OUT) + 4(RETI) + 4(максимальное количество тактов до начала следующего прерывания) = 27 тактов однако...
Go to the top of the page
 
+Quote Post
=GM=
сообщение Oct 15 2007, 22:19
Сообщение #5


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(singlskv @ Oct 15 2007, 20:13) *
3(джиттер при попадании прерывания на 4 тактовую команду) + 4(вход в прерывание) +4*2(LD) + 4*1(OUT) + 4(RETI) + 4(максимальное количество тактов до начала следующего прерывания) = 27 тактов однако...

Ну, во-первых, у меня одно и двухтактные команды в фоне, четырёхтактных нет вообще, во-вторых, джиттер считать не надо, поскольку на следующем прерывании будет такой же случайный джиттер. Матожидание там равно нуло, стало быть вклад джиттера будет нулевым.

В первом приближении вы правы, общее количество тактов = 4(сохранение программного счётчика в стеке) + 2(прыжок из вектора прерывания, это вы забыли, но можно опустить) + 12(тело программы) + 4(reti) + 1/2(выполнение одной команды) = 24 такта максимум. Я эту программу привёл просто как иллюстрацию Саше Витебскому, я такую не использую. С ходу могу её улучшить тактов на 5, поставив sei перед последней командой out, а вот почему так, подумайте на досуге, неплохая шарада перед сном(:-).

В принципе, Rst7 (мой респект!) привёл фрагмент, практически один в один совпадающий с одной из моих ранних штатных программ, там допускается 13 тактов между двумя последовательными обновлениями портов. Раз разговор зашёл о количестве тактов и о максимальных частотах, сообщаю вам, на сегодняшний день я довёл частоту шим до 11 кГц, и пока на этом успокоился(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 16 2007, 11:12
Сообщение #6


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(=GM= @ Oct 16 2007, 01:19) *
Раз разговор зашёл о количестве тактов и о максимальных частотах, сообщаю вам, на сегодняшний день я довёл частоту шим до 11 кГц, и пока на этом успокоился(:-).


Давайте, покажите код, удивите нас wink.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ps1x   ШИМ   Oct 7 2007, 17:26
- - rezident   Наверное стоит уточнить: программный ШИМ или аппар...   Oct 7 2007, 17:54
|- - SasaVitebsk   Цитата(rezident @ Oct 7 2007, 20:54) Наве...   Oct 7 2007, 21:30
- - ps1x   Ну например, можно ли реализовать 3 канала ШИМ на ...   Oct 7 2007, 21:46
|- - rezident   Цитата(ps1x @ Oct 8 2007, 03:46) Ну напри...   Oct 7 2007, 22:22
|- - ps1x   Цитата(rezident @ Oct 8 2007, 02:22) ps1x...   Oct 7 2007, 22:42
|- - =GM=   Цитата(ps1x @ Oct 7 2007, 21:42) Надо под...   Oct 8 2007, 11:38
|- - ps1x   Цитата(=GM= @ Oct 8 2007, 15:38) Вот тут ...   Oct 8 2007, 11:54
|- - =GM=   Цитата(ps1x @ Oct 8 2007, 10:54) к сожале...   Oct 8 2007, 12:18
|- - ps1x   Цитата(=GM= @ Oct 8 2007, 16:18) Да ладно...   Oct 8 2007, 23:48
- - add   Один из вариантов программно так: устанавливаем та...   Oct 8 2007, 06:19
- - SasaVitebsk   Используя таймер 1 и выводы OC1A,B,C с соответству...   Oct 10 2007, 13:25
|- - =GM=   Цитата(SasaVitebsk @ Oct 10 2007, 13:25) ...   Oct 10 2007, 22:58
|- - alexander55   Цитата(=GM= @ Oct 11 2007, 02:58) Спрашив...   Oct 11 2007, 08:23
|- - SasaVitebsk   Цитата(=GM= @ Oct 11 2007, 01:58) Сиё наз...   Oct 11 2007, 09:01
|- - =GM=   Цитата(SasaVitebsk @ Oct 11 2007, 08:01) ...   Oct 11 2007, 14:00
|- - defunct   Цитата(=GM= @ Oct 12 2007, 02:01) Код;Про...   Oct 12 2007, 08:59
|- - Rst7   Цитата(=GM= @ Oct 12 2007, 02:01) Вот моя...   Oct 12 2007, 09:29
|- - SasaVitebsk   Цитата(=GM= @ Oct 12 2007, 02:01) Как вид...   Oct 12 2007, 12:53
||- - add   Цитата(SasaVitebsk @ Oct 12 2007, 16:53) ...   Oct 12 2007, 14:28
||- - =GM=   Цитата(Rst7 @ Oct 16 2007, 10:12) Давайте...   Oct 16 2007, 16:01
|- - singlskv   Цитата(=GM= @ Oct 16 2007, 02:19) Ну, во-...   Oct 16 2007, 17:22
|- - =GM=   Цитата(singlskv @ Oct 16 2007, 16:22) В с...   Oct 17 2007, 16:44
|- - singlskv   Цитата(=GM= @ Oct 17 2007, 20:44) Ага, да...   Oct 17 2007, 19:46
|- - =GM=   Цитата(singlskv @ Oct 17 2007, 19:46) Кст...   Oct 17 2007, 21:05
|- - singlskv   Цитата(=GM= @ Oct 18 2007, 01:05) Ну пока...   Oct 17 2007, 21:35
|- - =GM=   Цитата(singlskv @ Oct 17 2007, 20:35) Сра...   Oct 18 2007, 09:50
- - add   Такой вопросик с целью понимания вопроса(тфт): Ска...   Oct 12 2007, 05:44
|- - =GM=   Цитата(add @ Oct 12 2007, 04:44) если у м...   Oct 12 2007, 09:10
|- - add   Цитата(=GM= @ Oct 12 2007, 13:10) Немного...   Oct 12 2007, 10:32
|- - =GM=   Цитата(add @ Oct 12 2007, 09:32) етож 600...   Oct 12 2007, 11:20
|- - add   Цитата(=GM= @ Oct 12 2007, 15:20) Да, при...   Oct 12 2007, 11:35
|- - Rst7   Чето я не понял. Как-то это все не стреляет. Общая...   Oct 12 2007, 11:45
|- - add   Цитата(Rst7 @ Oct 12 2007, 15:45) Надо бы...   Oct 12 2007, 12:35
|- - =GM=   Цитата(Rst7 @ Oct 12 2007, 10:45) Чето я ...   Oct 12 2007, 14:21
|- - defunct   Цитата(=GM= @ Oct 12 2007, 17:21) Ну так,...   Oct 12 2007, 15:29
|- - =GM=   Цитата(defunct @ Oct 12 2007, 14:29) В та...   Oct 12 2007, 16:15
|- - defunct   Цитата(=GM= @ Oct 12 2007, 19:15) Функция...   Oct 12 2007, 21:04
||- - =GM=   Цитата(defunct @ Oct 12 2007, 21:04) Согл...   Oct 12 2007, 21:54
||- - defunct   Цитата(=GM= @ Oct 13 2007, 00:54) Не совс...   Oct 12 2007, 22:08
||- - =GM=   Цитата(defunct @ Oct 12 2007, 22:08) имел...   Oct 12 2007, 23:56
|- - SasaVitebsk   Цитата(=GM= @ Oct 12 2007, 19:15) Первый ...   Oct 13 2007, 10:02
- - adnega   18-канальный ШИМ на Мега8 (18.432МГц) для управлен...   Oct 12 2007, 08:00
|- - =GM=   Цитата(adnega @ Oct 12 2007, 07:00) 18-ка...   Oct 12 2007, 14:45
- - Rst7   ЦитатаНо принципиально, тем не менее, так тоже мож...   Oct 12 2007, 13:01
|- - SasaVitebsk   Цитата(Rst7 @ Oct 12 2007, 16:01) Конечно...   Oct 12 2007, 13:29
- - Rst7   После размышлений, я пришел к выводу, что самый бы...   Oct 13 2007, 11:26
|- - =GM=   Цитата(Rst7 @ Oct 13 2007, 11:26) После р...   Oct 13 2007, 13:48
||- - Rst7   Цитата(=GM= @ Oct 13 2007, 16:48) В принц...   Oct 13 2007, 13:54
||- - =GM=   Цитата(Rst7 @ Oct 13 2007, 13:54) Ничего ...   Oct 13 2007, 16:18
|- - =GM=   Цитата(Rst7 @ Oct 13 2007, 11:26) Таймер ...   Oct 13 2007, 19:28
- - SasaVitebsk   Как правило обработчик прерывания по OCF получаетс...   Oct 13 2007, 14:22
- - add   Ув. =GM=, перечитал все посты не один раз, но так ...   Oct 15 2007, 10:23
|- - =GM=   Цитата(add @ Oct 15 2007, 09:23) Ув. =GM=...   Oct 15 2007, 13:49
|- - add   SasaVitebsk, Вы так все хорошо подытожили.. прям д...   Oct 16 2007, 04:01
|- - =GM=   Цитата(add @ Oct 16 2007, 03:01) Значит м...   Oct 16 2007, 10:15
|- - add   Цитата(=GM= @ Oct 16 2007, 14:15) Кодpatt...   Oct 16 2007, 11:27
|- - =GM=   Цитата(add @ Oct 16 2007, 10:27) Вот к пр...   Oct 16 2007, 12:29
|- - add   Цитата(=GM= @ Oct 16 2007, 16:29) Нет, эт...   Oct 17 2007, 04:07
|- - =GM=   Цитата(add @ Oct 17 2007, 03:07) нет, в ...   Oct 17 2007, 13:34
|- - add   Цитата(=GM= @ Oct 17 2007, 17:34) Внимате...   Oct 19 2007, 07:41
|- - =GM=   Цитата(add @ Oct 19 2007, 07:41) посты чи...   Oct 19 2007, 10:16
|- - add   Цитата(=GM= @ Oct 19 2007, 14:16) Всё не ...   Oct 19 2007, 10:37
|- - =GM=   Цитата(add @ Oct 19 2007, 09:37) =GM=, Па...   Oct 19 2007, 12:04
|- - add   Цитата(=GM= @ Oct 19 2007, 16:04) Там не ...   Oct 19 2007, 12:10
|- - =GM=   Цитата(add @ Oct 19 2007, 11:10) Сколько ...   Oct 19 2007, 13:03
|- - add   Цитата(=GM= @ Oct 19 2007, 17:03) Ну, раз...   Oct 19 2007, 14:13
|- - =GM=   Цитата(add @ Oct 19 2007, 13:13) Те. прос...   Oct 19 2007, 16:07
- - SasaVitebsk   Кстати сам СИ скомпилит не очень плохо. У меня сей...   Oct 15 2007, 20:23
- - SasaVitebsk   Я думаю некоторым это пригодится. Когда-то на заре...   Oct 15 2007, 23:29
- - muravei   Все это здорово, но я никак не пойму - какой здесь...   Oct 17 2007, 18:09
|- - =GM=   Цитата(muravei @ Oct 17 2007, 18:09) Все ...   Oct 17 2007, 18:36
|- - SasaVitebsk   Цитата(muravei @ Oct 17 2007, 21:09) Все ...   Oct 17 2007, 19:40
|- - muravei   Цитата(SasaVitebsk @ Oct 17 2007, 23:40) ...   Oct 18 2007, 10:19
|- - SasaVitebsk   Цитата(muravei @ Oct 18 2007, 13:19) Ну п...   Oct 18 2007, 17:20
- - GetSmart   Цитата(add)Какие там могут быть подводные камни?Не...   Oct 19 2007, 11:18
- - GetSmart   Цитата(=GM=)Будет она работать? Теоретически будет...   Oct 19 2007, 19:05
|- - =GM=   Цитата(GetSmart @ Oct 19 2007, 19:05) =GM...   Oct 19 2007, 20:59
- - bzx   Я с другой стороны подойду. Если малость добавить ...   Oct 19 2007, 23:00
- - =GM=   Цитата(bzx @ Oct 19 2007, 23:00) ... на в...   Oct 20 2007, 21:58


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01535 секунд с 7
ELECTRONIX ©2004-2016