|
ШИМ, сделать три канала? |
|
|
|
 |
Ответов
|
Oct 12 2007, 05:44
|

Местный
  
Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459

|
Такой вопросик с целью понимания вопроса(тфт  ): Скажите уважаемые коллеги, если у меня 256 ступенек шима и порт я обновляю с частотой 25кГц, то минимальное (суммарное значение длительности импульсов) за 1с получается 1/256с?так? И могу ли я справедливо назвать что шим 25Кгц? зы: делал программный 32-ух канальный шим для управления диодами. 25кГц,256дискрет.
--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
|
|
|
|
|
Oct 12 2007, 10:32
|

Местный
  
Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459

|
Цитата(=GM= @ Oct 12 2007, 13:10)  Немного не так. Обновление порта может случиться на любой из ступенек, следовательно, частота 256-ступенчатого шима ровно в 256 раз меньше частоты обновления порта, т.е. 97 Гц. Спасибо! таким образом получается что ШИМ который имеет значение 256 дискрет, и частоту обновления 5Кгц, незя называть 5-ти килогерцовым шимом?  и как тада получается : Цитата Спрашиваю потому, что тоже реализовал 24 канала шим с частотой 6 кГц, правда, на ассемблере. Шим был 8-разрядный, т.е. 256 позиций. Клок 20 МГц. етож 6000*256=1536000 ~1.5МГц! и на 20МГц, да еще и 24 канала? зы:видел гдето что шим можно и на апаратном уарте сделать. (последовательно данные выдвигаем), но тут уже надо 32байта запихнуть в USART на один дискрет.
--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
|
|
|
|
|
Oct 12 2007, 11:20
|

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

|
Цитата(add @ Oct 12 2007, 09:32)  етож 6000*256=1536000 ~1.5МГц! и на 20МГц, да еще и 24 канала? Ну, в ваших терминах, это будет частота обновления трёх 8-ми битных портов одновременно, чтобы получить 24 канала. Программка обработки прерывания 24-канальной шим, которую я привёл выше (см.пост #18), выполняется за 18 МЦ (машинных циклов). Один машинный цикл для клока 20 МГц выполняется за 0.05 мкс. Получается обработка прерывания выполняется за 18*0.05=0.9 мкс. То есть за это время обновляются три порта. Частота обновления портов соответственно будет равна 1/0.9=1.1 МГц, ну а частота шим будет в 256 раз ниже, т.е. 1.1/256=4.3 кГц. Никаких чудес, всё по-честному. (Замечу в скобках, что время выполнения можно ещё малёк подсократить, скажем до 13 МЦ, тогда частота 24-канального шима будет порядка 6 кГц. Цитата(Rst7 @ Oct 12 2007, 08:29)  Это конечно класно. Но вопрос возникает тогда, когда надо подготовить колбаску в озу для выдачи в порт. Это же очень медленно. Т.е. если понадобится изменить заполнение какого-либо канала, то на это нужно потратить очень много времени Да, приём исходных данных и подготовка "колбаски" проводится в фоне и занимает относительно много времени, порядка 2500 МЦ, т.е. 125 мкс. Максимальное занятое время процессора, с учётом времени работы прерываний, составит 148 мкс, в то же время период шим равен 166 мкс. Сиё означает, что есть возможность за ОДИН период шима сменить ВСЕ ДВАДЦАТЬ ЧЕТЫРЕ временные уставки, и еще останется свободными 18 мкс (360 МЦ). Смысла менять уставки чаще, чем период шима, я не вижу(:-) Пока других, более быстрых способов программного формирования многоканальных шим, я не нашёл.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Oct 12 2007, 11:45
|

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

|
Чето я не понял. Как-то это все не стреляет. Общая идея то понятна, и будет работать, но вот цифры не сходятся  Цитата(=GM= @ Oct 12 2007, 14:20)  (Замечу в скобках, что время выполнения можно ещё малёк подсократить, скажем до 13 МЦ, тогда частота 24-канального шима будет порядка 6 кГц. Пусть будет 13 тактов. И еще надо добавить 4 - на вычитывание вектора и т.д. - внутренние операции. Итого 17. Теперь с другой стороны. За 166мкс*20МГц=3320 тактов надо выполнить 256 прерываний. На прерывание 12.97 тактов. Меньше 17. Значит свободного времени у процессора нет совсем. И есть недобор. Почти в 1.5 раза. Непонятно, где-же время на генерацию колбаски? Надо бы рыбку уменьшить
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Oct 12 2007, 14:21
|

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

|
Цитата(Rst7 @ Oct 12 2007, 10:45)  Чето я не понял. Пусть будет 13 тактов. И еще надо добавить 4 - на вычитывание вектора и т.д. - внутренние операции. Итого 17. Теперь с другой стороны. За 166мкс*20МГц=3320 тактов надо выполнить 256 прерываний. На прерывание 12.97 тактов. Меньше 17. Значит свободного времени у процессора нет совсем. И есть недобор. Почти в 1.5 раза. Непонятно, где-же время на генерацию колбаски? Надо бы рыбку уменьшить  Ну так, прерываний-то всего 24 (по совпадению) + 1 (по переполнению таймера). За период 166 мкс (период шим) потратится в лучшем случае 25*0.05*17=21.25 мкс. Остальное время 166-22=144 мкс, вагон и маленькая тележка времени, 86% всего времени процессора, между прочим, можно пустить на расчёт "колбаски" по вашей терминологии. Цитата(add @ Oct 12 2007, 10:35)  Ну в Вашем случае вы подготавливаете "колбаску" вне прерывания.. adnega делает это внутри прерывания.. Есть ли в Вашем способе (скажу что способ вообщем то один и тотже) смысл выносить подготовку "колбаски за прерывание"?В таком случае для экономии времени в прерывании прийдется работать с флагами (события по окончанию обновления "колбаски").. и возможен пропуск момента смены значений? в чем выигрыш? может полагаясь на то что данные выводимые в шим обновляются не так часто? тогда какой смысл так "задирать"частоту"шима? Способ не один и тот же. Уже ответил, повторюсь. У меня всего максимум 24+1 прерывание на период шима, и только одно прерывание может возникнуть в течение одного кванта. На периоде шима умещается 256 квантов. Хотите увеличить частоту шима, не меняя количество квантов (или "ступеней" по-простому), уменьшайте длительность кванта. Смена значений происходит во время прерывания от таймера (квант 255). Скажу больше, пока прерывания работают с одной "колбаской" в течение текущего периода шима, фоновая программа готовит другую "колбаску" для следующего периода шима, так они поочерёдно и меняются, всё по-честному. Подчеркну ещё раз, при данном подходе есть принципиальная возможность менять уставки ВСЕХ шимов для КАЖДОГО периода шим. Другой вопрос (и не такой простой), откуда возьмутся новые 48 байт уставок (2 байта на один канал) за период шима (166 мкс).
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Oct 12 2007, 16:15
|

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

|
Цитата(defunct @ Oct 12 2007, 14:29)  В таком случае почему вы меняете TCR0, а не OCR0? И почему не модифицируется X? 24 * 4 = 90 байт, на авто переполнение расчитывать здесь не получится Здесь описка, конечно OCR0, вроде регистра TCR0 нет в авроровской природе. В течение периода шим возникает до 24 прерываний по совпадению, В конце периода шим возникает последнее прерывание, по переполнению, там происходит обнуление портов и с помощью команды lds xl,pwmtable заносится адрес другого буфера. И всё по-новой! И вновь продолжается бой!(:-) Да вот фрагмент, собственно Код ;Процедура обработки прерывания таймер0 по переполнению (15МЦ) eopwm: ldi temp,0 ;обнуление out porta,temp ;порта 1 out portb,temp ;порта 2 out portc,temp ;порта 3 mov r3,temp ;начало шим lds XL,pwmtable ;адрес текущего буфера уставок ld temp,X+ ;первая уставка out OCR0,temp ;нового периода шим reti ;сделано Первый раз я выложил функцию просто для демонстрации SasaVitebsk, как я организовывал шим. ни в одну из описанных им схем я не вошёл. Да собственно, так, как показано, я не делаю, слишком медленно(:-). Теперь, надеюсь, на все ваши нынешние и предыдущие вопросы ответил? Цитата(defunct @ Oct 12 2007, 07:59)  1. теряем ценный регистр X. 2. не понятно где осуществляется сброс X в начальное состояние. 3. почему ОCR0 меняется самым последним? 4. Зачем он вообще меняется (25-й канал)?
Функция по тактам возможно и оптимальна, но с т. з. функциональности то, что вы привели - это разрозненные колбасные обрезки Функция по тактам практически оптимальна, с учетом выбранного алгоритма. И с точки зрения функциональности тут всё нормально, повторюсь, она была выложена просто для демонстрации одной из реализаций шим, ничего более, не как законченная программа, которую взял, прошил и пользуйся. Насчёт ценного регистра. А куда их девать, солить что ли(:-)?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Oct 12 2007, 21:04
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(=GM= @ Oct 12 2007, 19:15)  Функция по тактам практически оптимальна, с учетом выбранного алгоритма. И с точки зрения функциональности тут всё нормально, повторюсь, она была выложена просто для демонстрации одной из реализаций шим, ничего более, не как законченная программа, которую взял, прошил и пользуйся. Согласен, красивый способ как для чисто вывода многоканалного ШИМа, остается вопрос смены данных? Получается нетривиальная задача сформировать (фактически упаковать) 24 канала. При изменении значения любого одного канала весь массив придется перестроить. С какой частотой дискретизации у вас обновляется массив?
|
|
|
|
|
Oct 12 2007, 21:54
|

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

|
Цитата(defunct @ Oct 12 2007, 21:04)  Согласен, красивый способ как для чисто вывода многоканалного ШИМа, остается вопрос смены данных? Получается нетривиальная задача сформировать (фактически упаковать) 24 канала. При изменении значения любого одного канала весь массив придется перестроить. С какой частотой дискретизации у вас обновляется массив? Не совсем уверен, что такое "частота дискретизации" обновления массива(:-). В течение каждого периода шим, т.е. за 166 мкс (поскольку частота шим 6 кГц), формируется упорядоченная таблица для вывода с помощью приведённой выше программы обработки прерываний по совпадению. Задача была непростая в реализации, поскольку я никогда не занимался сортировкой. Пришлось освоить, был выбран модифицированный пузырьковый метод. Программа даже в неоптимальном виде полностью выполняется в течение периода шим. Далее адрес начала упорядоченной таблицы записывается в ячейку памяти, откуда её берёт программа обработки прерываний по переполнению и засылает в тот самый пресловутый регистр Х, который по-вашему очень "ценный". Вроде всё.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
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 SasaVitebsk Тогда мы действительно не понимаем друг друга.
С... Oct 11 2007, 22:16 =GM= Цитата(SasaVitebsk @ Oct 11 2007, 22:16) ... Oct 11 2007, 23:01  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  singlskv Цитата(=GM= @ Oct 12 2007, 03:01) Вот моя... Oct 15 2007, 20:13   =GM= Цитата(singlskv @ Oct 15 2007, 20:13) 3(д... Oct 15 2007, 22:19    Rst7 Цитата(=GM= @ Oct 16 2007, 01:19) Раз раз... Oct 16 2007, 11:12     =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 Цитата(=GM= @ Oct 12 2007, 15:20) Да, при... Oct 12 2007, 11:35     add Цитата(Rst7 @ Oct 12 2007, 15:45) Надо бы... Oct 12 2007, 12:35          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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|