|
ШИМ, сделать три канала? |
|
|
|
 |
Ответов
|
Oct 15 2007, 13:49
|

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

|
Цитата(add @ Oct 15 2007, 09:23)  Ув. =GM=, перечитал все посты не один раз, но так и непонял сути Вашего алгоритма. Как я понял Вы заранее подготавливаете данные для вывода в порт а также константу сравнения для таймера. Но если у вас для всех 24-х каналов устанавливается длительность одновременно, как меняется значение в каждом канале? Или у Вас задан массив в котором значение для одного канала задается не в одном байте а в х-отом бите каждого байта, а текущая длительность интервала импульса шима по прерыванию либо добавляется, либо нет к интегралу всего периода? Поправьте пожалуйста, если что-то не так понял. Какое максимальное кол-во значений ступенек можно в таком случае реализовать? И на сколько МЦ затратно подготовка данных для такого шима? Ну, если по-честному, то я здесь свой алгоритм и не выставлял, немудрено его не понять. Был выложен фрагмент Саше Витебскому просто для иллюстрации, как я реализовывал свой алгоритм, ничего более. Но потом народ стал спрашивать подробности, я стал отвечать, теперь вроде бы должен нести ответ(:-) Итак, приступим к выявлению момента истины...Несколько аксиом для разгона. 1) Будем использовать МК с ОЗУ не менее 1 Кбайта и тактовой частотой 20 МГц, ну и ног должно хватить по крайней мере для 24 выходных шимов. Пусть это будет атмега88. 2) Формирование выходных сигналов 24-канальной шим осуществляется в прерывании таймера0 по сравнению в Output Compare Unit (подробнее см. в doc8025а, с.98). Программа выдачи приведена в моём посте #18. Время выполнения 18 машинных циклов (можно снизить до 13). 3) За период шима может возникнуть максимум 24 прерывания (по числу сигналов шим). 4) Полное время на все прерывания не более 18*24*0.05=21.6 мкс. Как это всё работает. В начале периода шим обнуляются все 24 шим сигнала и таймер начинает работать с 0. В регистр сравнения OCR0A из текущего буфера запихивается первая уставка, т.е. таймерное время, когда некоему шиму (или нескольким, не важно) необходимо перейти из состояния 0 в состояние 1. При достижении равенства уставки и значения в таймере происходит прерывание OCF0A, начинает работать программа из поста #18, которая выставляет в порты сформированные заранее образы всех ТРЁХ портов. Затем программа записывает в OCR0A вторую уставку и засыпает до следующего прерывания. В это время фоновая программа подготавливает следующий буфер для следующего периода шим. Буфер состоит из 24 записей. Каждая запись содержит 4 байта. Общий вид таблицы таков Код уставка образ п.А образ п.B образ п.C .db 0x10, 0b0000000, 0b0000000, 0b00000011 .db 0x20, 0b0000000, 0b0000000, 0b00000111 .db 0x21, 0b0000000, 0b0000000, 0b00001111 .db 0x50, 0b0000000, 0b0000000, 0b00011111 . . . . . . . . . . . . . . . . . . . . . . . . . . . .db 0x8F, 0b1011111, 0b1111011, 0b00011111 .db 0xB9, 0b1111111, 0b1111111, 0b11111111 Как можно видеть, бит образа порта, перешедший из состояния 0 в состояние 1 в N-ой записи, остаётся в этом состоянии до конца таблицы. Основными задачами фоновой программы (с точки зрения формирования шим) являются приём извне (или вычисление) новых уставок для каждого канала и подготовка на их основе нового буфера. По окончанию подготовки нового буфера адрес нового буфера записывается в ячейку памяти. При нулевом времени таймера этот адрес записывается в регистр Х, как я уже говорил ранее. Далее фоновая программа принимает новые уставки и ждёт начала нового периода шим для подготовки нового буфера. Ну вот, вгрубе и всё описание. В завершение, ответы на ваши вопросы. Максимальное количество ступенек – 256, за один период шима (для 6 кГц) фоновая программа успевает учесть в подготовке все 24 уставки (подчеркну, если они будут готовы), об этом тоже писалось ранее. Например, в одном периоде можно установить все сигналы в 1, а в следующем – в 0. На выходе всех каналов будет меандр с Fшим/2. Как видите, можно легко и непринуждённо достичь частоты Найквиста(:-).
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Oct 16 2007, 04:01
|

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

|
SasaVitebsk, Вы так все хорошо подытожили.. прям даже не хотелось больше вопросов задавать :-) Цитата(=GM= @ Oct 15 2007, 17:49)  Ну, если по-честному, то я здесь свой алгоритм и не выставлял, немудрено его не понять. .. Значит мое предположение посте №48 оказалось верным. :-) Еще один мАААлюсенький вопросик, ну для полного блаженства :-).. Вот например если мы работаем с массивом постоянно меняющихся значений шима (.db 23,45,255,10 ....и т.п.) , то в озу необходимо подготавливать данные, а как? Ролами(rol)?, рорами(ror)? Как лучше перелопатить массив необходимую форму?
--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
|
|
|
|
|
Oct 16 2007, 10:15
|

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

|
Цитата(add @ Oct 16 2007, 03:01)  Значит мое предположение посте №48 оказалось верным. :-) Еще один мАААлюсенький вопросик, ну для полного блаженства :-).. Вот например если мы работаем с массивом постоянно меняющихся значений шима (.db 23,45,255,10 ....и т.п.) , то в озу необходимо подготавливать данные, а как? Ролами(rol)?, рорами(ror)? Как лучше перелопатить массив в необходимую форму? Ну я рад, что оно оказалось верным, только какое?(:-). Для подготовки данных я беру раттерны для каждого канала, они лежат в пзу, вид у них такой Код pattern: .db 0x01,0x00,0x00,0xFF ;образец для канала 1 .db 0x02,0x00,0x00,0xFF ;образец для канала 2 .db 0x04,0x00,0x00,0xFF ;образец для канала 3 и обычное OR три раза. Как-то так. Вообще, табличные методы сильно убыстряют процесс. Надо только найти подходящее табличное представление.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
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 Такой вопросик с целью понимания вопроса(тфт): Ска... 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 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|