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

 
 
> ШИМ, сделать три канала?
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
SasaVitebsk
сообщение Oct 12 2007, 12:53
Сообщение #4


Гуру
******

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



Цитата(=GM= @ Oct 12 2007, 02:01) *
Как видишь, можно обойтись без всяких сохранений контекстов(:-).

Для твоего случая, для 12 каналов, время прерывания можно сделать порядка 10 МЦ, т.е. с клоком 20 мег время одной ступеньки будет равно 0.5 мкс, период шим = 256*0.5=128 мкс, следовательно частота шим - 7.8 кГц, это на чистом ассемблере, а у тебя 5 кГц на си, неужто компилятор генерит такой быстрый код?


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

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

А мне непонятно, что именно непонятно Вам. Частота у меня 16000. 16000/3200 = 5кГц. Для двигателей я использую 2 канала на двигатель. Дробление делаю на 16. Сдвиг фаз 90 градусов. То есть мне фактически надо формировать несколько значений. Вот я и написал в первом своём посте, что плавность не нужна а точность 3200. Вы уточнили про точность.

Но принципиально, тем не менее, так тоже можно работать. За период ШИМ необязательно делать вывод 256 раз (при 256 ступеньках) Достаточно 1 раз на один канал +1. В этом случае тоже создаётся соответствующая колбаса, только она короче. А также учитываются случаи совпадений. Ошибки будут при малых значения разницы таймера.

Цитата(add @ Oct 12 2007, 15:35) *
biggrin.gif дауж.. т.е. если у Вас GM ("частота обновления портов соответственно будет равна 1/0.9=1.1 МГц" выражаясь моими терминами smile.gif ) то это совершенно не означает что вы можете менять данные с такой скоростью(переписывать регистры новыми значениями) у вас просто не останется времени на это и плюс еще "колбаска". По честному должна быть возможность менять данные (для 256 значений) один раз через 256 прерываний. так? а сколько у вас остается "свободных"тактов (суммарных от 256-ти прерываний)? По 20МЦ-13МЦ=7МЦ (это наверное с учетом 7 циклов на вход/выход в прерывание) 7*256=1792МЦ... хм.. может быть...?! 05.gif


Вы, кстати, зря смеётесь. Те характеристики, что указывает GM я берусь реализовать и времени на расчёт останется вагон. Могу продемонстрировать. Лишь бы прерывание укладывалось в ступеньку. Время - я конечно заношу так как указывает defunct, хотя это и не обязательно. П/п линейная и ошибку можно высчитать и учесть при расчётах.
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
||- - 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   Такой вопросик с целью понимания вопроса(тфт): Ска...   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 Текстовая версия Сейчас: 19th July 2025 - 10:47
Рейтинг@Mail.ru


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