|
генерация 12 шимов |
|
|
|
Jan 9 2010, 19:34
|
Частый гость
 
Группа: Участник
Сообщений: 144
Регистрация: 27-12-09
Из: Пермь
Пользователь №: 54 501

|
Цитата(aaarrr @ Jan 10 2010, 00:26)  Если взять SAM7A3, то можно и аппаратно устроить 12 каналов. На остальных придется программно. Если не нужна большая разрядность (которую не грех было бы указать сразу) и какие-то особые требования к джиттеру, то способ вполне сойдет за "красивый". at91sam7s256. пасиб. есть идейка генерировать не так: pin0: __--__________--_____ pin1: ____--__________--___ pin2: ______--__________--_ а так: pin0: __--__________--_____ pin1: __--__________--_____ pin2: __--__________--_____ т.е. устонавливать все пины в один момент, а сбрасывать по мере срабатывания. только есть подозрение, что при одинаковых временах будет сильно глючить из-за отложенных прерываний. так было на авре, на арме, думаю, данный способ может быть прокатит...?
|
|
|
|
|
Jan 9 2010, 23:39
|
Частый гость
 
Группа: Участник
Сообщений: 144
Регистрация: 27-12-09
Из: Пермь
Пользователь №: 54 501

|
Цитата(aaarrr @ Jan 10 2010, 01:10)  Синхронные 12 каналов сделать много проще, естественно. Почему только "одинаковые времена" должны как-то сказываться? Все каналы обрабатываются в одном прерывании, на ARM'е можно задействовать под это дело FIQ для пущей пущести. ну.. я не знаю как арм, но авр как-то долго обрабатывает прерывание. на сохранение регистров уходит довольно большое время, что приводит к глюкам.
|
|
|
|
|
Jan 10 2010, 12:33
|
Частый гость
 
Группа: Участник
Сообщений: 144
Регистрация: 27-12-09
Из: Пермь
Пользователь №: 54 501

|
Цитата(ReAl @ Jan 10 2010, 13:27)  Не совсем понятны требования. Длительность импульса изеняется только в пределах 0,9-2,1, длиннее не быват? А с какой дискретностью? да, должны быть такие пределы. что касается разрешения по времени, то, думаю, достаточно разбить весь промежуток на 100 частей, т.е. ~16 us.
|
|
|
|
|
Jan 10 2010, 13:03
|
Профессионал
    
Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347

|
сервы  ? должно хватить одного таймера, импульсы формировать можно программно (прерывание таймера с высоким приоритетом). если нужна субмикросекундная точность и контроллер серезно нагружен другими задачами, нужен таймер с ШИМом и внешним коммутатором (напр. 2x74HC4051). по переполнению таймера включается соответствующий канал коммутатора и загружается значение ШИМа. хотя для точной выдержки 20мс цикла нужно 2 ШИМа, в 20мс влезет макс.9 каналов. Цитата Длительность импульса изеняется только в пределах 0,9-2,1, длиннее не быват? А с какой дискретностью? думаю 8 бит хватит http://www.hooked-on-rc-airplanes.com/servo-tutorial.html
Сообщение отредактировал ukpyr - Jan 10 2010, 13:12
|
|
|
|
|
Jan 10 2010, 14:19
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(srm @ Jan 10 2010, 14:33)  достаточно разбить весь промежуток на 100 частей, т.е. ~16 us. Тыщща тактов процессора на тик. "Швабода" Посмотрите тему http://electronix.ru/forum/index.php?showtopic=61182&hl=Для всех каналов одновременно выводить значение из подготовленного массива, т.е. все импульсы начинаются одновременно, заканчиваются кто когда. Если несколько должны заканчиваться одновременно, то так и будет за одно прерывание, просто в следющей маске для вывода будет несколько бит взведено. На AT91SAM7 маски формировать удобнее под вывод в PIO_СODR, тогда для каждого выхода 1-ка в массиве будет в одном слове. p.s[0] Жаль, что DMA у AT91 не умеет по таймеру пересылать из памяти PIO_SODR (по сути тоже в память), было бы вообще чудесно, джиттр минимальный и нагрузка на ядро никакая. p.s[1] А DMA ATXmega умеет пересылать откуда угодно куда угодно по event-ам, которые могут и таймером активироваться, но порты 8-битные, а инкремент адреса получателяв burst-е на расстояние между двумя портами невозможен (хотя можно и два канал задействовать, но это уже жирно). "нет в жизни совершенства"
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jan 10 2010, 14:22
|
Частый гость
 
Группа: Участник
Сообщений: 144
Регистрация: 27-12-09
Из: Пермь
Пользователь №: 54 501

|
Цитата(ukpyr @ Jan 10 2010, 18:03)  сервы  ?[/url] угум. сервы. просто я видел в продаже плату, насколько мне помнится, на 20 серв. плата эта собрана на восьмой меге. вобщем скорее всего они извратились и разбросали сервы на все 3 таймера, вобщем сделали гавнокод, хоть и рабочий. а может и как-то по другому - не знаю. вот и спрашиваю - может быть есть мегаспособ завязать всё красиво, на одном таймере. хотя, можно разделить во времени, скажем на 1 мс. совпадения возможны, но будут происходить редко: pin0: __--_____ pin1: ___--____ pin2: ____--___
Сообщение отредактировал rezident - Jan 10 2010, 16:53
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
Jan 10 2010, 14:52
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(srm @ Jan 10 2010, 16:22)  угум. сервы. просто я видел в продаже плату, насколько мне помнится, на 20 серв. плата эта собрана на восьмой меге. Ну так для 100 градаций у меги 300 байт под массив для 20 выходов найдётся. Тактовая ниже, 16мкс*16МГц = 256, но если писать на асме - то с указателем и счётчиком, находящимися уже в регистрах, прерывание будет очень коротким.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|