Leave a comment

Comments 95

victor_ionov June 9 2020, 15:25:19 UTC
могу посоветовать отказаться от инжекторных каналов и настроить цепочку преобразований на регулярных каналах. в таком случае все становится немного проще. просто указываете ацп какие каналы используются в работе, какое количество каналов будет обсчитываться, настраиваете дма для работы и запускаете ацп в работу. далее ацп само складывает новые значения после преобразований в один массив, в котором все указанные для обсчета каналы лежат последовательно.

Reply

leoniv June 9 2020, 15:31:07 UTC
Не увидел разницы. У меня получается то же самое, только каналы складываются в разные массивы, что удобней.

Reply

victor_ionov June 9 2020, 15:33:11 UTC
задействован только 1 канал дма и можно настроить любую цепочку, с любой последовательностью каналов. нет "гемороя" с дополнительным таймером т.к. связка ацп-дма будет работать в автомате, а мы только забираем значения из массива.

Reply

leoniv June 9 2020, 15:35:50 UTC
Так и в группе инжектированных каналов можно настроить любую цепочку, только ограничение в 4 канала максимум. Но мне надо только два. Один канал DMA - это на мой взгляд минус, все будет валиться в кучу в один массив. Или я чего-то не понимаю?

Reply


ramonacby June 9 2020, 16:48:52 UTC
могу порекомендовать spl, он был в какомто раннем кайле. код не назвать оптимальным, зато все понятными буквами в коде написано.

Reply

leoniv June 9 2020, 16:52:22 UTC
Смотрел. Решил, что на освоение потрачу столько же, но это менее продуктивно, чем регистры.

Reply

mbr June 9 2020, 17:51:49 UTC
И я согласен с этим решением :) Там такие тонны индусского говнокода, что лучше через регистры. Причем, в большинстве своем тупые врапперы без особой нагрузки.

Reply

ramonacby June 10 2020, 05:46:04 UTC
поморгать лампочками сойдет и говнокод, главное чтобы быстро заработало.
а функции потом и переписать можно.

Reply


ТОП: 22:00 (московское) magict30p June 9 2020, 19:00:10 UTC
Вы попали в Т30P самых обсуждаемых тем в блогосфере.
Это Ваш 9-й ТОПовый пост в этом году.
Посмотреть статистику автора можно в карточке топблогера.
... )

Reply


leoniv June 10 2020, 06:21:22 UTC
Спасибо!

Reply

dimorlus June 10 2020, 17:09:34 UTC
По-моему, это все касается fp арифметики и старших stm32, сомневаюсь, что это пригодно для f10x

Reply


megasd June 10 2020, 22:58:30 UTC
Вы тут себе понасоздавали дополнительных трудностей, чтобы потом успешно их преодолевать, поэтому и СТМ32 кажется чересчур сложным. Ну зачем еще инжектированные входы АЦП? Они не для этого предназначены. И подбирать время, когда преобразование завершено и данные помещаются в регистр - решение плохое ( ... )

Reply

leoniv June 11 2020, 07:02:23 UTC
Никак не могу понять, почему все видят в инжектированных каналах какие-то дополнительные трудности. Это такие же каналы, как и регулярные, но имеющие следующие отличия: плюс - раздельные регистры, минус - их всего 4. В остальном все одинаково.

По поводу подбирать время - а не то же самое с регулярными каналами? Они ведь тоже будут запускаться от таймера, поэтому надо так подобрать время выборки и время преобразования АЦП, чтобы в период таймера гарантированно помещалось преобразование группы каналов. И это тоже пришлось бы проверять осциллографом. А если оно гарантированно помещается, то я могу не проверяя флаг конца преобразования данные читать. Разве не так?

Совет сделать глобальный буфер данных АЦП - плохой. Мое решение лучше, где раздельные буферы спрятаны внутри своих экземпляров класса.

Сложность STM32 на грани возможностей человека, напряг такой, что невозможно себя заставить заниматься этим процессором. Короче, камень для гениев. И философов. Философский камень.

Reply

megasd June 11 2020, 08:01:10 UTC
С регулярными все проще: есть таймер, генерирующий TRGO с нужной частотой (96 КГц в вашем случае), от таймера запускается АЦП, который оцифровывает последовательность из двух каналов. В настройках АЦП стоит флаг "использовать DMA", поэтому по окончанию оцифровки каждого канала он автоматически дает сигнал контроллеру DMA на трансфер 16-ти бит. Ничего подбирать не надо. Использовать таймер для непосредственной активации DMA - неправильно, трансфером должно управлять устройство, поставляющее данные ( ... )

Reply

leoniv June 11 2020, 08:11:27 UTC
Как это подбирать не надо? А где гарантия, что серия преобразований влезет в период таймера?

Использовать таймер для активации DMA, конечно, менее красиво, но нет другой возможности привязать два канала DMA к АЦП. Какую конкретно угрозу в этом решении Вы видите? В период таймера гарантированно помещается серия преобразований АЦП. Что может быть не так с DMA? А то решение здесь критикуют, но конкретного минуса никто назвать не может.

Совет иметь общий буфер - как раз и есть индусский. Я стремлюсь к красоте кода, как и к красоте плат. И эта красота достигается иногда нетривиальными решениями, как здесь с двумя каналами DMA.

Reply


Leave a comment

Up