Спасибо всем кто пишет комментарии и ставит лайки, это важно для развития канала! Проблема, в коде на 10:05 в том, что указатель создан неправильно, моя ошибка, правильно так: (uint32_t*)&FMAC->WDATA С CMSIS для G4 в этом плане все в порядке, единственное, зачем надо следить, обращение ко всем регистрам FMAC должно быть только по словам "Access: word access", обращение в пол слова "half word" не работает. Код по ссылке в описании исправлен.
Какой же сверхмощный мегатруд был предпринят Обязательно продошжайте!!!!!! Вы приносите огромную пользу всему человечеству, которое за это вам крайне благодарно)))!
Там проще. Пять коэффициентов, три умножаются с входным потоком и складываются, как в КИХ, оставшиеся два умножаются с выходным потоком и вычитаются. Получается, что БИХ охвачиваются обратной связью.
Это видео доказывает, кто должен работать в Сколково. Думаю компания STM должна вас заметить ) если вы их поправляете и находите их косяки. Спасибо за информацию о фильтрах и об этом МК.
Что за компания STM и причем тут Сколково? Это видео доказывает, что его автор очень упертый и отлично разбирается в материале от чего иногда у него происходят подобные недокументированные прорывы. Хвала отладке!!!
Красавчик. Огромный труд. Разобраться, да еще и разжевать так доступно. Так держать. Очень интересно про трехфазные решения для фильтров. Даешь ликбез про кортекс... ЗЫ: С удовольствием помогу с музыкальной подложкой доя твоего канала. Будет эксклюзивно и чисто по авторским правам.
FMAC служат в основном для одной главной цели. Это аппаратная реализация функций компенсатора 2P2Z и 3P3Z и нужно это для создания БП работающих на очень высокой частоте, от 200кГц и выше (2P2Z и 3P3Z это как ПИД только круче). По принципу ADC - FMAC - PWM. Больше негде он особо не нужен.
@@TDMLab Это понятно, модуль очень простой, целочисленный 16бит умножение, применений для него кроме кок для компенсатора, очень ограниченны. Но при желании, можно конечно делать все что угодно!
@@FastChargeIsFuture там ST-шники в апноуте даже про адаптивные фильтры заикались. А по сути LP фильтры небольших порядков не вредно применять на всех каналах аналоговых данных.
@@kokotmkokot4926 В самый раз. Я, например зарядками для электромобилей занимаюсь и БП у нас 10 - 20кВт, сейчас пользую f334, но G4 на отладке, в скором времени перейдем на них.
По поводу нет даже намёка на интересующий вопрос в интернете - удивлялся много раз как такое может быть , далее идут разборки , поиски , решения. И вот и ответ - найдя ответ такой ценой люди не делится информацией. Так что вам огромное спасибо , материал отличный .
Порог вхождения в stm32 очень, ооочень высокой. Соотношение функционал / цена идеальное. Но реальность такова, что это просто кусок кремния, без головы, которая это настроит. Вот есть у меня мечта идиота, своя универсальная ЧПУ стойка. Да такая, что бы скинуть цену на один порядок ниже для людей. И конечно же на стмке. Но времени изучать всё интересное уже нету... Вашим энтузиазмом восхищён!
CUBE IDE, использованная в этом видео очень сильно его снижает. Была бы у ни ещё документация хорошая. На её создании стишники как всегда экономят. Разбираться самому по коду в их приколах порой действительно бывает трудно!
@@Электроникавдеталях-з7д была бы нормальная документация, а не портянка... была бы нормальная либа с уровнями (от простого к сложному), были бы примеры четкие и понятные.... А есть темный лес и только стараниями из народа есть возможность разобраться. Поэтому смотрю лаконичные статьи по CMSIS на Hubstub и Dimoon, смотрю видосы на нормальных каналах как этот
@@sledleo Согласен. Сам ST не слишком много внимания уделяет документации. Мягко говоря. Мог бы подкидывать немного деньжат для стимуляции каналов, которые готовы этим заниматься. Например тому, на которым мы находимся. Для него 2 - 3 тысячи баксов в месяц вообще НИЧТО, а для блогера приличные деньги благодаря которым он мого бы глубже погружаться в тему!
Спасибо за труд, познавательно, хоть лично я и лишь читаю Си со словарём, а к АРМам вообще не подступался. DMA=ПДП (прямой доступ к памяти) устоявшаяся абревиатура из СССР. Чтоб эксель принимал запятые как разделитель при копипасте - оно должно в системных свойствах стоять как разделитель. Особенно помогает когда приходится чужие CVS файлы импортировать - в них разделитель полей запятая, а у нас - она разделитель целой и дробной, приходится временно менять подарок Билли всем не англосаксам. Чисто теоретически навскидку - глядя на 2:59 структуру - решение вопроса 15:58 может выглядеть как буфера на каждую фазу 1/3 от максимальных имеющихся 127 штук, при получении АЦП выборки фазы фильтр и ДМА получают (циклов за 10-20) в качестве настройки смещения буферов конкретной фазы, далее делают ~42 умножения с накоплением для этой выборки (уже быть могет в фоне), и так по кругу для трёх фаз. Удачи в исследованиях.
Для DMA не имеет значения из/в куда отправлять данные - важно лишь что затриггерит саму передачу. То есть можно запустить передачу через DMA от АЦП, а писать из RAM в RAM, из любой переферии в любую переферию и т.д. Главное, чтобы участки памяти были доступны для DMA (можно глянуть в разделе System architecture мануала).
Ну да, но это не очевидно если не разу этим не пользовался. Даже ST в той ветке говорили что у них там бардак в документации относительно обращений по DMA к FMAC.
Да автор правильно подметил что в случае с стм нужно как минимум 4 таких канала. 3 фазы и по входу dc мерять ток. А для обычного инвертора с lc контуром мне хватило программной реализации на дешманском контроллере avr.
Благодарю за подробный разбор! CORDIC алгоритм будет весьма кстати. И вообще всё что касается DSP обработки очень интересует. DSP это вообще как "чёрная магия".
Глобальный труд! На своём опыте знаю как трудно бывает первопроходцам, когда пишешь программы не имея примеров да ещё для новых чипов с неполной неустоявшейся документацией, а иной раз имеющих ещё и хардвэрные баги не отражённые в ерратах. Что касается магии на десятой с половиной минуте, то вы скорее всего не совсем разобрались в теме. Впрочем вас уже поправили в комментариях, не буду попугайничать. Удачи в освоении этих интересных чипов.
ерунду вы пишете. в Лэисе и в Чпи это занимало 1 семестр - теория бих/ких, фурье/бпф. кроме этого, парллельно изучалось ещё как минимум 12 курсов. а автор копает только 1 направление, но в свободном плавании, без ненужного ему балласта, поэтому ему легче, чем студенту.
Автор доброе время суток, вот и вы наконец наткнулись на косяки STшек , когдато давно когда явыбирал платформу для большого массового заказа и какраз был момент что я работал с AT/ESP/i контроллерами а вот ST как то меня минули , толком IDE в те времена у них небыло сразу скажу, в общем купиля тогда 8 и 16 битный варианты истал ихизучать , и о боже чтото более сложное чем подергать ножкой запустить не могу, мне не нужны были шимы меня интересовало тогда пробуждение окнтроллера по внешнему сигналу ... поыв даташиты выяснилось что в прилагаемлом inc файле естьошибки , не верно указаны регисты и вуаля все заработало ... чутьпозже я наткнулся и на ошибку в мануале ... когда работал с аналоговым компаратором . ибо заначения коэфициента усиления указщнные в мане были обратнопропорциональны тем что я получал. с тех пор две отладки так и лежат ,а 23 бита пришедшую через месяц я даже не подключил так что я думаю что вы еще не раз хлебнете, кстати ни у кого я таких косяков не встречал, глюки IDE да а вот чтобы инки были косячные не разу или в мане такая серьезная ошибка ..
@@Fastereus Как оказалось в данном примере это я слепой, я не указатель отдавал DMA, а сам регистр)) оттого и была проблема. Думаю я не единственный который нашел такой "косяк" у ST)
У меня вопрос не по теме этого видео. Я делаю устройство для машины. В нем будет мега328-ая и блютус модуль hc-06. Я заметил что БТ модуль достаточно сильно шумит в линию питания и решил его отсадить на отдельное питание. Хочу чтоб у меги было достаточно стабильное питание чтоб не плыли показания АЦП. Планирую ставить 2 регулятора LM7805 но не знаю нужна ли какая-то дополнительная обвязка чтоб они друг другу не мешали. Конденсатор на входе я так понимаю будет один на 0.33 мкФ? Есть ли смысл ставить гальванические развязки (например изолированный DC-DC B0505-1W) чтоб убрать наводки от генератора? Спасибо за твои ролики, уже много всего полезного подчерпнул для себя!
Не судите строго, но хочу скажем так по возможности сэкономить автору время на копипастинг и замены запятых в word: в общем для конкретной задачи приведенной в ролике есть решение в excel - "=ЗНАЧЕН(ПОДСТАВИТЬ(A1;".";","))", ПОДСТАВИТЬ(A1;".";",") - сначала меняем точки на запятые, а потом заставляем excel воспринимать как число. Но иногда бывает при копировании с вебстраниц встречаются еще паразитные пробелы и вот такая конструкция предпочтительна: "=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;" ";"");".";",")) "
Дублируй название ролика на английском, и сабы тоже бы прикрутить. Я же говорил - на эту тему инфы толком нет, в общих словах только, в тч от самих ST (что странно, обычно когда они хвалят свои фишки у них целые поваренные тома выходят). А камню уже как бы год...
Английские сабы добавил партнеры просили уже, а название итак переводится на язык зрителя. Да вообще столько обновлений куба было и ничего по этому блоку не добавили. Кстати, FMAC на H7 тоже есть. Спасибо!
Да, я действительно ошибся, вообще не обратил внимания, зря гнал на ST, по крайней мере в этом плане все там в порядке. Проверил с uint32_t *Fmac_Wdata = (uint32_t *)&FMAC->WDATA; все работает корректно, спасибо, что кто-то смотрит код, а то сам порой не видишь в упор очевидного:)
Спасибо за то, что обратили внимание на данный момент и не пожалели время на то, чтобы заглянуть а даташит! Как полезно бывает снимать видео! Можно узнать много нового для себя у Аксакалов в области Embedded!
@@TDMLabЯ так понял, что один КИХ фильтр полностью соответствует принципу работы нейрона: входные значения, веса, сумматор. Осталось после сумматора запилить функцию срабатывания и фсё. Дальше плодить и размножать нейроны в слои. А дальше можно просто взять какую-нить модель, повыдёргивать оттуда веса со структурой и получится вот эта статья www.compel.ru/lib/140486 :)
Круто, не знал, что коэффициенты можно домножать, т.к. важно их соотношение. Глупый вопрос, т.к. с ЦОС недавно: подключил DSP, там типы: f32, q31, q15, q7, при этом АЦП и ЦАП 12 бит (F407). Получается, можно использовать только FIR с q7?
Q15, Q32 это просто целочисленные знаковые форматы 16 и 32 бита, они подходят для обработки целочисленных данных с АЦП 12 бит с правым выравниванием. Тип данных должен быть больше или равен размерности входящих данных, но лучше использовать Q32 будет запас по точности вычислений и динамическому диапазону.
Содержательное видео, помогло подобрать коэф. для КИХ-фильтра на G474. Но разрабатываем преобразователь, где необходим БИХ с меньшим сдвигом фазы. Тоже запускается, но в отличие от КИХ, АЧХ не соответствует рассчитаной в MATLAB. Пробовали ли вы запустить БИХ на этом FMAC?
Конкретно FMAC на БИХ не проверял, но математика есть математика. Учитывали ли вы Уменьшение разрядности до 16 бит для коэффициентов и расчетов, это в значительной степени может влиять на БИХ. Насколько АЧХ/ФЧХ отличаются? Совсем белиберда или немного другие?
@@TDMLab Предполагаю, точность могла потеряться при конвертации в формат с фикс. точкой. Согласно графику MATLAB, подавление должно начинаться от 10 кГц при частоте дискретизации 68 кГц и срезе ФНЧ 16 кГц. и 4-м порядке фильтра. На деле же амплитуда падает начиная с 3 кГц, и больше похоже на линейную характеристику.
@@Addenri У матлаба по идеи должен быть перерасчет для выбранной разрядности. Это может сильно влиять. Вообще фильтры БИХ высших порядков могут быть нестабильны, вот тут у меня немного про это есть ruclips.net/video/GN1RZkViEAE/видео.html По описанию фильтр работает совсем не так как нужно. Я бы начал с одного биквада, см видео.
Great video! I ported it to the STM32G431. Have you tried a highpass filter? I get strange results... it's like the sine wave has been cut at the 0 axis and the top arc has been pushed down and the bottom arc has been pushed up. It is a square wave with concave tops that change according to frequency. It is filtering, but a strange shift of the output has happened.
@@TDMLab проталкиваем в фильтр данные двух каналов по очереди. В четных ячейках будут данные одного канала в нечетных другого. Нули в коеффициентах маскируют второй канал.
у меня тут в моём последнем и единственном проэкте на стм32 да и вообще на МК был worning с DMA. в кубе стояло half-word а в проэкте в SW4STM32 функция ADC_чётотам_DMA принимало адресс (*uint_32) и когда я всирал ей адрес uint_16 переменной вылетал ворнинг. Но всё работало и даже при исправлении этого ворнинга всё ломалось и двухканальное сканирование писалось целиком в первый элемент массива. Это я просто к тому твоему мнению что все ворнинги надо исправить как можно скорее и не тянуть до сдачи проэкта. У меня при первом же знакомстве с МК этот ворнинг так и попал в окончательную сборку.
Иногда ворнинг локализуют, то есть понимают то отчего он и как повлияет в дальнейшем. Хотя нужно стремиться этого избегать и лучше переписать весь блок если какой-то метод приводит к ворнингу. Все решается в конкретном случае.
@@TDMLab А ты представляешь как вообще пишутся колбеки в си на аппаратные события? Особо не гуглится этот вопрос. Было бы прикольно посмореть пример программы с абсолютно пустым while() в мейне. Пускай что то простенькое но с самодельной хотя бы одной колбек функцией. Гуглится что это функция, которая принимает адрессный тип данных и больше ничего. Просто _IO переменную сделать и вписать указатель на неё в прототип функции? сомневаюсь что это будет работать. ЗЫ: извиняюсь если не точен в терминологиях.
@@pingburner так дело полагаю было не в HAL, а то как этот слой был применен. Хотя опять таки вам виднее. Это проект с пустым while если что:) У меня есть видео про вейвлет генератор, там я применяю кол-бек и рассказываю для чего.
@@TDMLab То есть чтобы очистить вайл в твоём проэкте вейвлет оставалось только перевести ацп на дма? А в этом видео я даже не заметил что вайл пустой :) У тебя очень качественный контент, спасибо.
1:37 "Обычно в задачах риалтайма у контроллера и так много дел по работе с ПИД-регуляторами..." Интересно, можно ли собственно ПИД-регулятор засунуть в FMAC? Рекуррентная формула для ПИД регулятора в дискретном времени вроде бы подходит в тот шаблон КИХ+БИХ, что заложен в FMAC.
Использовать один блок для 3х фаз... Частота в 3 раза меньше... Может легче еще один контроллер поставить только на фильтры, подешевле, с малым кол. ножек, возможно g431? Насчет CORDIC конечно интересно послушать. Кстати, CORDIC и FMAC в g431 есть.
Да не, тогда легче сделать обычный аналоговый фильтр на ОУ. ST-шники продвигают идею, что не надо больше внешних компонентов, все внутри, но пока не совсем ясно, возможно еще расскажут подробнее.
Здраствуйте! Спасибо за видео! Хотел спросить-предложить!?, не хотите на базе STM32 сделать метеостанцию ? , к примеру взять STM32 , модуль барометр BME280, модуль чтения записи MicroSD кардридер и модуль связи ,к примеру радиомодуль NRF24L01 2.4ГГц, сделать передачу данных через модуль связи на пк, видел в Ютубе на ESP8266 что то подобное делали, но там нету записи на микро сд как резерв записи. Думаю для многих людей будет очень интересно увидиеть как сделать метеостанцию на STM32. спасибо !
@@TDMLab да как бы не видел, не одной, чтоб писала информацию на сдкарту, и предавала на другой стм32,на дисплей информацию, возможно я ищу не правильно?)
@@TDMLab Я делал на Cyclone II. Там умножителей не так много, но мне хватило всего четырёх для свертки 24-битного потока с 18-битной импульсной характеристикой, длиной в 128 коэффициентов. Да, пришлось кольцевой буфер собирать на встроенных блоках памяти и ROM для ИХ. Плюс, управляющий конечный автомат и генератор адресов памяти. Ресурсов вроде немного ушло на него. Конечно, у более современных плисов уже не просто умножители, как у древнего Циклона, а навороченные DSP блоки. Особенно у Зайлинкса.
@@kardanium Да, новые плисины крутые есть. Я работал с циклоном 3, делал адаптивный КИХ фильтр, корректор АЧХ проводного канала связи. Он по известной тестовой последовательности подбирал оптимальные коэффициенты минимизируя межсимволную интерференцию и шумы. Было что то типа 64 или 128 коэффициентов. Работало прям как магия после того как мы раньше это делали отвёрткой по сигналу на осцилле, подстраивая набор из 2-3 аналоговых ФВЧ.
@@kardanium Я использовал последовательно-пораллельную схему работы аппаратных умножителей, задействуя один несколько раз за одну выборку АЦП. У меня был не высокий поток данных, 16 бит 1-2Мвыб/с
@@TDMLab Да, ныне аналог уходит в прошлое. Сейчас даже простое радио реализуют через оцифровку и последующую цифровую обработку. Ну, у меня с умножителями так же было. Один использовался на все 128 операций. Их четыре ушло, потому что они 18-битные, а выборки 24 бита. Квартус собрал из четырёх один. Скорость потока в моем случае была ещё ниже - 48кВыб. Это обычный аудиопоток. Потоков два было - для левого и правого канала. Кольцевых буферов два, одна ROM и управляющая часть тоже общая на оба канала, так как выборки поступают параллельно. Фильтр этот использовался в роли фильтра-корректора после апсемплинга и CIC интерполятора. Интерполяция много нервов съела, так как чем ближе частота сигнала к частоте Fs/2, тем сложнее технически его восстановить.
@@TDMLab да, то что FMAC на борту всего один - сильно ограничивает его применение. Хотя бы 3 завезли. Хотя бы под 3-фазные сети. И еще, может я что-то не понял, получается что на максимальной скорости семплирования 4 мсемпла/с с максимальным кол-вом коэффициентов FMAC работать не будет? Если так то это полумера от ST. МОжет поэтому они и сами на него забили и в кубе его не развивают.
@@pavel5345 Количество вычислений необходимых для расчета всех этапов фильтра на 256 при скорости 4 Мега выборки много больше производительности по тактовой частоте. То есть фильтр же обсчитывает по очереди все выходы, то есть 256 умножений и накопление и его тактирование такое же как и ЦП и он не успеет.
Видимо знающие дяди не могут запилить простую либу с уровнями сложности, например нулевой - одна функция в которую передается один параметр и т.д. И так по каждой теме
Это как? А на чем LL написан тогда?:) developer.arm.com/tools-and-software/embedded/cmsis А вообще ничего против не имею, хотя сам использую HAL + CMSIS
@@TDMLab базовый адрес FMAC в файле stm32g474xx.h #define FMAC_BASE (AHB1PERIPH_BASE + 0x1400UL). А LL - собственная библиотека ST, к CMSIS отношения не имеет. В STM32CubeMX вариантов инициализации периферии только 2 - LL и HAL
@@johnblack7536 Да, заголовочные файлы типа stm32g474xx.h это вендорная часть библиотеки CMSIS. Часть которая работает с периферией написана в данном случае ST, а часть которая работает с самим ядром написана ARM. И да, в заголовочном файле была информация об адресе регистра WDATA, я уже закрепил комментарий с разъяснениями и поправил прикрепленный к этому видео пример кода. Любая библиотека на чем-то написана, в данном случае библиотека LL написана на основе библиотеки CMSIS, которая в свою очередь использует ASM. И да, кодогенератор CubeMX представляет только два варианта автоматизированной инициализации, но пользовательская инициализация может использовать любой из набора CMSIS/LL/HAL Как это работает на моем примере: uint32_t *Fmac_Wdata = (uint32_t*)&FMAC->WDATA; // Это объявление указателя с присвоением ему адреса регистра WDATA в периферийном устройстве FMAC и написано с использованием CMSIS HAL_ADC_Start_DMA(&hadc1, Fmac_Wdata, FILTER_IN_BUFFER_SIZE); // Это запуск АЦП с передачей оцифрованных данных по DMA в регистр по указателю Fmac_Wdata и написано с использованием HAL
У Cypress PSoC5 был похожий цифровой фильтр 24х24-бит 128 taps максимум. В целом оказалась бесполезная штука. Слишком малое количество taps, и слишком сложно работать с ним. Опять же, всего один фильтр, а часто нужны несколько, и в каскаде. В-общем, не пошло, и в PSoC6 он был заброшен.
@@TDMLab Спасибо за обзор микроконтроллера. Я давно приглядываюсь к ST линейке, но руки не доходят. В PSoC6 Cypress установил два процессора, Cortex M0. + M4. Так что можно, например, общаться с периферией (ADC, DAC) используя M0, а DSP делать в M4. Однако, в целом, PSoC6 "не пошёл', и сложно сказать почему. Это очень странный маркет.
@@odissey2 У ST-шников в самом жирном H7 семействе M4 + M7 и еще и этот FMAC, а так да, второе ядро можно как математический сопроцессор использовать)) В мире правит маркетинг, "Кипарисам" просто не повезло по всей видимости, хотя то что они работают в связке с Infineon думаю без масла на хлеб не останутся:)
Мерцания происходят из-за пересвета камеры, не имея профессионального осветительного прибора рассеянного света победить это иногда достаточно сложно, а делать темнее не хочу.
На самом деле можно было найти адрес регистра FMAC_WDATA и сделать нужный указатель гораздо быстрее - обратившись к документу RM0440 Reference manual для STM32G4 Series. Сдвиг базового адреса 0x18 для регистра FMAC_WDATA указан на стр. 511 документа, а базовый регистр 0x4002 1400 для FMAC можно найти на странице 83 и того адрес нужного регистра 0x4002 1418
Проблема была не в нахождении адреса WDATA, это как раз не проблема) Настоящая засада была в том чтобы понять, что именно из-за этого модуль и не запускается.
@@TDMLab Ага понимаю, у меня после кучи потраченных часов на поиски и отладку, уже параноя появилась, теперь все используемые библиотеки проверяю на соответствие адресам регистров. Долго, зато нервы целее =).
Здоровья TDM! Провел сегодя эксперименты и выяснил пренеприятнейшую вещь. При тактировании от TIM3 в 5uS резко падает производительность кода в цикле main(). for(cnt = 0; cnt < 1000; cnt++) { __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); } HAL_GPIO_WritePin(TEST_GPIO_Port, TEST_Pin, GPIO_PIN_SET); for(cnt = 0; cnt < 1000; cnt++) { __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); } HAL_GPIO_WritePin(TEST_GPIO_Port, TEST_Pin, GPIO_PIN_RESET); При включенном FMAC цикл дергания ножкой TEST составляет 1.6mS, а при отключенном FMAC 0.3mS пятикратная разница. Потеря производительности обусловлена скорее всего тем, что запросы DMA занимают большую часть доступа к шинам (не разбирался по каким шинам идет обмен, не суть важно) . В итоге при такой реализации FMAC вещь достаточно бесполезная. И еще момент, который я не понимаю. Вы подаете выборку ADC раз в 5uS, но FMAC не может принять эту выборку ибо занимается расчетом предыдущей выборки. И это время при колличестве коэф. 127 составляет около 600us. Хотя я вижу на выходе DAC что фильтрация идет, но ... проходит ли до конца расчет для всех коэффициентов? Извините если написал глупость, тема новая и интересная, а информации мало.
Я уже не помню, а там ядро используется для вывода в ЦАП? Я там прерывание возможно использую. А если в ЦАП не выводить или опять использовать DMA? FMAC может принять новую выборку, у него есть кольцевой буфер. Фильтрация по всем 127 коэффициентам происходит корректно, это видно по отклику фильтра на дельта функцию.
Спасибо всем кто пишет комментарии и ставит лайки, это важно для развития канала!
Проблема, в коде на 10:05 в том, что указатель создан неправильно, моя ошибка, правильно так: (uint32_t*)&FMAC->WDATA
С CMSIS для G4 в этом плане все в порядке, единственное, зачем надо следить, обращение ко всем регистрам FMAC должно быть только по словам "Access: word access", обращение в пол слова "half word" не работает.
Код по ссылке в описании исправлен.
Какой же сверхмощный мегатруд был предпринят
Обязательно продошжайте!!!!!!
Вы приносите огромную пользу всему человечеству, которое за это вам крайне благодарно)))!
Зачёт и уважуха, почёт первопроходцам берущим на себя наш гемор!
Спасибо огромное! Благодаря вашему видео я наконец смог понять суть цифровых фильтров!
P.S. про БИХ фильтры послушал бы с огромным интересом
книжки надо читать и в инете всё есть. не стоит это изучать по видео программиста. это ведёт в тупик к убогим.
Там проще. Пять коэффициентов, три умножаются с входным потоком и складываются, как в КИХ, оставшиеся два умножаются с выходным потоком и вычитаются. Получается, что БИХ охвачиваются обратной связью.
Интересное видео, автор глубоко копает.
Про тригонометрический ускоритель CORDIC хотелось бы узнать по подробнее.
Необходимо узнать. Мы не можем себе позволить прорехи в знаниях.
Это видео доказывает, кто должен работать в Сколково. Думаю компания STM должна вас заметить ) если вы их поправляете и находите их косяки. Спасибо за информацию о фильтрах и об этом МК.
Что за компания STM и причем тут Сколково? Это видео доказывает, что его автор очень упертый и отлично разбирается в материале от чего иногда у него происходят подобные недокументированные прорывы. Хвала отладке!!!
Красавчик. Огромный труд. Разобраться, да еще и разжевать так доступно. Так держать. Очень интересно про трехфазные решения для фильтров. Даешь ликбез про кортекс...
ЗЫ: С удовольствием помогу с музыкальной подложкой доя твоего канала.
Будет эксклюзивно и чисто по авторским правам.
FMAC служат в основном для одной главной цели.
Это аппаратная реализация функций компенсатора 2P2Z и 3P3Z и нужно это для создания БП работающих на очень высокой частоте, от 200кГц и выше (2P2Z и 3P3Z это как ПИД только круче).
По принципу ADC - FMAC - PWM.
Больше негде он особо не нужен.
FMAC это лишь аппаратная реализация цифровых фильтров, а область применений ЦФ просто огромна.
@@TDMLab Это понятно, модуль очень простой, целочисленный 16бит умножение, применений для него кроме кок для компенсатора, очень ограниченны.
Но при желании, можно конечно делать все что угодно!
@@FastChargeIsFuture там ST-шники в апноуте даже про адаптивные фильтры заикались. А по сути LP фильтры небольших порядков не вредно применять на всех каналах аналоговых данных.
@@kokotmkokot4926 В самый раз.
Я, например зарядками для электромобилей занимаюсь и БП у нас 10 - 20кВт, сейчас пользую f334, но G4 на отладке, в скором времени перейдем на них.
спасибо, чрезвычайно полезная и интересная информация
Отличный обзор, хорошая штука этот FMAC.
По поводу нет даже намёка на интересующий вопрос в интернете - удивлялся много раз как такое может быть , далее идут разборки , поиски , решения. И вот и ответ - найдя ответ такой ценой люди не делится информацией. Так что вам огромное спасибо , материал отличный .
Большое спасибо) Жду теперь ещё БИХ фильтры) Было бы супер если помимо CubeMX был ещё CMSIS...
Спасибо за бесценную информацию! Все понятно и по делу.
Спасибо, круто!
Так это магическое число и есть адрес периферийного модуля FMAC плюс офсет регистра внутри модуля)
Так и есть)
Ничего не понял, но очень интересно. Шутка. Автору спасибо. Ценные вещи.
Порог вхождения в stm32 очень, ооочень высокой. Соотношение функционал / цена идеальное. Но реальность такова, что это просто кусок кремния, без головы, которая это настроит.
Вот есть у меня мечта идиота, своя универсальная ЧПУ стойка. Да такая, что бы скинуть цену на один порядок ниже для людей. И конечно же на стмке. Но времени изучать всё интересное уже нету...
Вашим энтузиазмом восхищён!
Видимо знающие дяди не могут запилить простую либу с уровнями сложностями, например нулевой - одна функция в которую передается один параметр и т.д.
CUBE IDE, использованная в этом видео очень сильно его снижает. Была бы у ни ещё документация хорошая. На её создании стишники как всегда экономят. Разбираться самому по коду в их приколах порой действительно бывает трудно!
@@Электроникавдеталях-з7д была бы нормальная документация, а не портянка... была бы нормальная либа с уровнями (от простого к сложному), были бы примеры четкие и понятные....
А есть темный лес и только стараниями из народа есть возможность разобраться.
Поэтому смотрю лаконичные статьи по CMSIS на Hubstub и Dimoon, смотрю видосы на нормальных каналах как этот
@@sledleo Согласен. Сам ST не слишком много внимания уделяет документации. Мягко говоря. Мог бы подкидывать немного деньжат для стимуляции каналов, которые готовы этим заниматься. Например тому, на которым мы находимся. Для него 2 - 3 тысячи баксов в месяц вообще НИЧТО, а для блогера приличные деньги благодаря которым он мого бы глубже погружаться в тему!
К сожалению стмки стали дорожать
Респект и уважение за проделанную работу 🤝
спасибо за твое терпение и упорство!
Спасибо за труд, познавательно, хоть лично я и лишь читаю Си со словарём, а к АРМам вообще не подступался.
DMA=ПДП (прямой доступ к памяти) устоявшаяся абревиатура из СССР.
Чтоб эксель принимал запятые как разделитель при копипасте - оно должно в системных свойствах стоять как разделитель.
Особенно помогает когда приходится чужие CVS файлы импортировать - в них разделитель полей запятая, а у нас - она разделитель целой и дробной, приходится временно менять подарок Билли всем не англосаксам.
Чисто теоретически навскидку - глядя на 2:59 структуру - решение вопроса 15:58 может выглядеть как буфера на каждую фазу 1/3 от максимальных имеющихся 127 штук, при получении АЦП выборки фазы фильтр и ДМА получают (циклов за 10-20) в качестве настройки смещения буферов конкретной фазы, далее делают ~42 умножения с накоплением для этой выборки (уже быть могет в фоне), и так по кругу для трёх фаз.
Удачи в исследованиях.
Тоже помню как столкнулся с ошибкой регистра в cmsis на stm32f417. Пришлось всю инициализацию по мануалу прописать
Очень круто! Большое спасибо, ждем новых видео!!!
Больше ЦОС!!! ))
Высший пилотаж!!! Поздравляю!.
Ссылка на компэловскую статью не рабочая.
За освещение темы цифровых фильтров отдельное спасибо!
Поправил ссылку.
Спасибо!
www.compel.ru/lib/139617
Удивительная настойчивость
Для DMA не имеет значения из/в куда отправлять данные - важно лишь что затриггерит саму передачу. То есть можно запустить передачу через DMA от АЦП, а писать из RAM в RAM, из любой переферии в любую переферию и т.д. Главное, чтобы участки памяти были доступны для DMA (можно глянуть в разделе System architecture мануала).
Ну да, но это не очевидно если не разу этим не пользовался. Даже ST в той ветке говорили что у них там бардак в документации относительно обращений по DMA к FMAC.
Супер! Спасибо!
Да автор правильно подметил что в случае с стм нужно как минимум 4 таких канала. 3 фазы и по входу dc мерять ток. А для обычного инвертора с lc контуром мне хватило программной реализации на дешманском контроллере avr.
Вспомнил Лайонса ЦОС. Хорошая книжка
высоцкий - цифр фильтры на имс 1984
рабинер, шаффер, цифр обраб речевых сигналов. ))
истоки, так сказать , начала.
Очень интересно, тоже себе плату заказал.
Класс, большое спасибо Вам!
Основательно подошел. Еще и с субтитрами заморочился. CORDIC тоже интересен.
Очень круто! Сними серию уроков по ЦОС, у тебя отлично получается
Есть кстати бесплатная программка WinFilter, можно считать разные фильтра, плюс умеет делать исходники.
Не matlab но на скорую руку считает хорошо.
Благодарю за подробный разбор! CORDIC алгоритм будет весьма кстати. И вообще всё что касается DSP обработки очень интересует. DSP это вообще как "чёрная магия".
Капец, я б уже трижды застрелился, если б сам разбирался в этом! Респект терпению и технической грамотности автора!
Какой ужас. Ты огромный молодец, что не сдался!
Глобальный труд! На своём опыте знаю как трудно бывает первопроходцам, когда пишешь программы не имея примеров да ещё для новых чипов с неполной неустоявшейся документацией, а иной раз имеющих ещё и хардвэрные баги не отражённые в ерратах. Что касается магии на десятой с половиной минуте, то вы скорее всего не совсем разобрались в теме.
Впрочем вас уже поправили в комментариях, не буду попугайничать.
Удачи в освоении этих интересных чипов.
Это просто круто.
Excellent video my friend.👏👏👏👏👏
Про CORDIC давайте! Интеренсно. Никто про g474 толком не пишет и не снимает. Я аж отладку заказал после ваших видосов.
Походу нужно брать Digital Signal Processing класс. Оч интересная тема.
Молорик!
Автор, ты крут !
то что делает этот человек, в институте занимает не один семестр преподавания, это нереально сжатая выжимка по теории ЦОС
ерунду вы пишете.
в Лэисе и в Чпи это занимало 1 семестр - теория бих/ких, фурье/бпф. кроме этого, парллельно изучалось ещё как минимум 12 курсов. а автор копает только 1 направление, но в свободном плавании, без ненужного ему балласта, поэтому ему легче, чем студенту.
Класс, жду видео про CORDIC
Автор доброе время суток, вот и вы наконец наткнулись на косяки STшек , когдато давно когда явыбирал платформу для большого массового заказа и какраз был момент что я работал с AT/ESP/i контроллерами а вот ST как то меня минули , толком IDE в те времена у них небыло сразу скажу, в общем купиля тогда 8 и 16 битный варианты истал ихизучать , и о боже чтото более сложное чем подергать ножкой запустить не могу, мне не нужны были шимы меня интересовало тогда пробуждение окнтроллера по внешнему сигналу ... поыв даташиты выяснилось что в прилагаемлом inc файле естьошибки , не верно указаны регисты и вуаля все заработало ...
чутьпозже я наткнулся и на ошибку в мануале ... когда работал с аналоговым компаратором . ибо заначения коэфициента усиления указщнные в мане были обратнопропорциональны тем что я получал.
с тех пор две отладки так и лежат ,а 23 бита пришедшую через месяц я даже не подключил
так что я думаю что вы еще не раз хлебнете, кстати ни у кого я таких косяков не встречал, глюки IDE да а вот чтобы инки были косячные не разу или в мане такая серьезная ошибка ..
Ну, да, не доработали они этот блок, но в целом в что-то более простое ST дает легкий вход.
@@TDMLab угу если в include нет косяков
@@Fastereus Как оказалось в данном примере это я слепой, я не указатель отдавал DMA, а сам регистр)) оттого и была проблема. Думаю я не единственный который нашел такой "косяк" у ST)
Я просто электрик,но все равно очень интересно)
Красава!🤝
Молодчина. Хотелось бы разобраться с DAC G серии. Непонятно, что значит внутренние и внешние DAC и какое всё таки кол-во каналов?
Ок, войдет в общий разбор переферии
Благодарная публика просит продолжения разбора G4 процов) Очень полезно. LL кстати пользуетесь?
Ок, все будет)
Не, LL нет, только HAL + CMSIS
вери гуд!
Вам нужно использовать fpga и настраивать под себя.
Конкретно для цифровых фильтров да, ПЛИС то что доктор прописал, но для некоторых задач управления у МК есть несомненные преимущества.
Тоже себе прикупил пару для посмотреть, что за зверь такой и чем жирный stlink v3 отличается от v2
У меня вопрос не по теме этого видео. Я делаю устройство для машины. В нем будет мега328-ая и блютус модуль hc-06. Я заметил что БТ модуль достаточно сильно шумит в линию питания и решил его отсадить на отдельное питание. Хочу чтоб у меги было достаточно стабильное питание чтоб не плыли показания АЦП. Планирую ставить 2 регулятора LM7805 но не знаю нужна ли какая-то дополнительная обвязка чтоб они друг другу не мешали. Конденсатор на входе я так понимаю будет один на 0.33 мкФ? Есть ли смысл ставить гальванические развязки (например изолированный DC-DC B0505-1W) чтоб убрать наводки от генератора? Спасибо за твои ролики, уже много всего полезного подчерпнул для себя!
Думаю, что не стоит никаких развязок так как они импульсные. Конденсаторы можно и побольше.
всё понятн ждём новых диких глюков в китайских клонах :-(
В китайских клонах не знаю, у меня нет, да и эта проблема с обращением к регистру была моим косяком, дальше расскажу)
Не судите строго, но хочу скажем так по возможности сэкономить автору время на копипастинг и замены запятых в word: в общем для конкретной задачи приведенной в ролике есть решение в excel - "=ЗНАЧЕН(ПОДСТАВИТЬ(A1;".";","))", ПОДСТАВИТЬ(A1;".";",") - сначала меняем точки на запятые, а потом заставляем excel воспринимать как число. Но иногда бывает при копировании с вебстраниц встречаются еще паразитные пробелы и вот такая конструкция предпочтительна: "=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;" ";"");".";",")) "
Спасибо)
Ну или в настройке Windows указать точку вместо запятой как десятичный разделитель 😀
Дублируй название ролика на английском, и сабы тоже бы прикрутить. Я же говорил - на эту тему инфы толком нет, в общих словах только, в тч от самих ST (что странно, обычно когда они хвалят свои фишки у них целые поваренные тома выходят). А камню уже как бы год...
Английские сабы добавил партнеры просили уже, а название итак переводится на язык зрителя.
Да вообще столько обновлений куба было и ничего по этому блоку не добавили. Кстати, FMAC на H7 тоже есть.
Спасибо!
uint32_t* Fmac_Wdata = (uint32_t*)(&FMAC->WDATA); а у вас значение из регистра в качестве адреса
Да, я действительно ошибся, вообще не обратил внимания, зря гнал на ST, по крайней мере в этом плане все там в порядке.
Проверил с uint32_t *Fmac_Wdata = (uint32_t *)&FMAC->WDATA;
все работает корректно, спасибо, что кто-то смотрит код, а то сам порой не видишь в упор очевидного:)
Спасибо за то, что обратили внимание на данный момент и не пожалели время на то, чтобы заглянуть а даташит!
Как полезно бывает снимать видео! Можно узнать много нового для себя у Аксакалов в области Embedded!
А для фильтров и дсп не пробывали библиотеку для питона scipy.signals?
Нет
Получается на КИХ фильтре можно запилить свёрточный, входной слой нейронной сети?
О, нейронные сети на микроконтроллерах. Я уже пометил это себе как одну из будущих тем)
@@TDMLabЯ так понял, что один КИХ фильтр полностью соответствует принципу работы нейрона: входные значения, веса, сумматор. Осталось после сумматора запилить функцию срабатывания и фсё. Дальше плодить и размножать нейроны в слои. А дальше можно просто взять какую-нить модель, повыдёргивать оттуда веса со структурой и получится вот эта статья www.compel.ru/lib/140486 :)
@@vovanchik_ru4208 тихо-тихо, вы все секреты раскроете до начала:)))
@@TDMLab :)
@@TDMLab если будешь что-то пилить на эту тему - рекомендую и тему "OpenMV4 Mini" затронуть
Респект Автору за подачу материалов и упорство! А что у STM с тех.поддержкой, не пробовали обращаться?
Спасибо! нет не пробовал.
Круто, не знал, что коэффициенты можно домножать, т.к. важно их соотношение. Глупый вопрос, т.к. с ЦОС недавно: подключил DSP, там типы: f32, q31, q15, q7, при этом АЦП и ЦАП 12 бит (F407). Получается, можно использовать только FIR с q7?
Q15, Q32 это просто целочисленные знаковые форматы 16 и 32 бита, они подходят для обработки целочисленных данных с АЦП 12 бит с правым выравниванием.
Тип данных должен быть больше или равен размерности входящих данных, но лучше использовать Q32 будет запас по точности вычислений и динамическому диапазону.
Лайк!
Содержательное видео, помогло подобрать коэф. для КИХ-фильтра на G474. Но разрабатываем преобразователь, где необходим БИХ с меньшим сдвигом фазы. Тоже запускается, но в отличие от КИХ, АЧХ не соответствует рассчитаной в MATLAB. Пробовали ли вы запустить БИХ на этом FMAC?
Конкретно FMAC на БИХ не проверял, но математика есть математика. Учитывали ли вы Уменьшение разрядности до 16 бит для коэффициентов и расчетов, это в значительной степени может влиять на БИХ. Насколько АЧХ/ФЧХ отличаются? Совсем белиберда или немного другие?
@@TDMLab Предполагаю, точность могла потеряться при конвертации в формат с фикс. точкой. Согласно графику MATLAB, подавление должно начинаться от 10 кГц при частоте дискретизации 68 кГц и срезе ФНЧ 16 кГц. и 4-м порядке фильтра. На деле же амплитуда падает начиная с 3 кГц, и больше похоже на линейную характеристику.
@@Addenri У матлаба по идеи должен быть перерасчет для выбранной разрядности. Это может сильно влиять. Вообще фильтры БИХ высших порядков могут быть нестабильны, вот тут у меня немного про это есть ruclips.net/video/GN1RZkViEAE/видео.html
По описанию фильтр работает совсем не так как нужно. Я бы начал с одного биквада, см видео.
@@TDMLab Спасибо, попробую разобраться с фильтрами меньших порядков.
Great video! I ported it to the STM32G431. Have you tried a highpass filter? I get strange results... it's like the sine wave has been cut at the 0 axis and the top arc has been pushed down and the bottom arc has been pushed up. It is a square wave with concave tops that change according to frequency. It is filtering, but a strange shift of the output has happened.
Скорее всего можно заставить FMAC обрабатывать два канала если записывать коэффициенты с промежутком: a1, 0, a2, 0, a3, 0, a4, 0, ...
Как вы это видите?
@@TDMLab проталкиваем в фильтр данные двух каналов по очереди. В четных ячейках будут данные одного канала в нечетных другого. Нули в коеффициентах маскируют второй канал.
@@kjlas8 Да, пожалуй это возможно. Уменьшим максимальную длину вдвое, но да, это работоспособно. Спасибо за интересный комментарий.
Классно ты расколол этот орех. Я так и не понял от куда ты взял адрес ввода на модуль. Был в готовых примерах?
Адрес регистра я взял из отладки, но его можно взяnь и из reference manual-а
у меня тут в моём последнем и единственном проэкте на стм32 да и вообще на МК был worning с DMA. в кубе стояло half-word а в проэкте в SW4STM32 функция ADC_чётотам_DMA принимало адресс (*uint_32) и когда я всирал ей адрес uint_16 переменной вылетал ворнинг. Но всё работало и даже при исправлении этого ворнинга всё ломалось и двухканальное сканирование писалось целиком в первый элемент массива. Это я просто к тому твоему мнению что все ворнинги надо исправить как можно скорее и не тянуть до сдачи проэкта. У меня при первом же знакомстве с МК этот ворнинг так и попал в окончательную сборку.
Иногда ворнинг локализуют, то есть понимают то отчего он и как повлияет в дальнейшем. Хотя нужно стремиться этого избегать и лучше переписать весь блок если какой-то метод приводит к ворнингу.
Все решается в конкретном случае.
@@TDMLab спасибо, разморочил. Переписывать HAL мы конечно же не будем. По крайней мере в этой жизни.
@@TDMLab А ты представляешь как вообще пишутся колбеки в си на аппаратные события? Особо не гуглится этот вопрос. Было бы прикольно посмореть пример программы с абсолютно пустым while() в мейне. Пускай что то простенькое но с самодельной хотя бы одной колбек функцией. Гуглится что это функция, которая принимает адрессный тип данных и больше ничего. Просто _IO переменную сделать и вписать указатель на неё в прототип функции? сомневаюсь что это будет работать. ЗЫ: извиняюсь если не точен в терминологиях.
@@pingburner так дело полагаю было не в HAL, а то как этот слой был применен. Хотя опять таки вам виднее.
Это проект с пустым while если что:)
У меня есть видео про вейвлет генератор, там я применяю кол-бек и рассказываю для чего.
@@TDMLab То есть чтобы очистить вайл в твоём проэкте вейвлет оставалось только перевести ацп на дма? А в этом видео я даже не заметил что вайл пустой :) У тебя очень качественный контент, спасибо.
1:37 "Обычно в задачах риалтайма у контроллера и так много дел по работе с ПИД-регуляторами..." Интересно, можно ли собственно ПИД-регулятор засунуть в FMAC? Рекуррентная формула для ПИД регулятора в дискретном времени вроде бы подходит в тот шаблон КИХ+БИХ, что заложен в FMAC.
В общем то да, на 4:50 пример с 3P3Z компенсатором, PID это тоже компенсатор microchipdeveloper.com/dcdt:selecting-the-compensator
👍
Использовать один блок для 3х фаз... Частота в 3 раза меньше... Может легче еще один контроллер поставить только на фильтры, подешевле, с малым кол. ножек, возможно g431? Насчет CORDIC конечно интересно послушать. Кстати, CORDIC и FMAC в g431 есть.
Да не, тогда легче сделать обычный аналоговый фильтр на ОУ. ST-шники продвигают идею, что не надо больше внешних компонентов, все внутри, но пока не совсем ясно, возможно еще расскажут подробнее.
Здраствуйте! Спасибо за видео! Хотел спросить-предложить!?, не хотите на базе STM32 сделать метеостанцию ? , к примеру взять STM32 , модуль барометр BME280, модуль чтения записи MicroSD кардридер и модуль связи ,к примеру радиомодуль NRF24L01 2.4ГГц, сделать передачу данных через модуль связи на пк, видел в Ютубе на ESP8266 что то подобное делали, но там нету записи на микро сд как резерв записи. Думаю для многих людей будет очень интересно увидиеть как сделать метеостанцию на STM32. спасибо !
Ох, этих погодных станций на просторах интернета...
@@TDMLab да как бы не видел, не одной, чтоб писала информацию на сдкарту, и предавала на другой стм32,на дисплей информацию, возможно я ищу не правильно?)
@@massacr6428 На esp8266 ruclips.net/video/VA-ZthJOjGg/видео.html
Есть ещё бесплатная программка для генерирования FIR фильтров rePhase. На неё очень даже стоит взглянуть.
Она разве позволяет забирать FIR коэффициенты? Это выглядит как просто программа для фильтрации не для расчета.
@@TDMLab , так она для генерации коэффициентов в файл и сделана. Причем в разные форматы может, в том числе, и в txt, и csv..
@@РодионБоркунов Ок, спасибо, для аудио пожалуй неплохо что имеет графический эквалайзер.
Мужик, есть частотник invt gd200. Могу дать для опытов. Надо?
Малоизвестные факт, Дмитрия на картошку не брали, он очень глубоко копал
Ха)
Кста, можно не только проги обрезать, но и прикрыть названия измерительного ПО/оборудования. Если это не спонсоры, разумеется.
Мне для сиглента ничего не жалко лишь бы обновление за 21 год сделали:))
Сделайие видео, но мне ещё далеко до такого, вся эта математика пока ещё тёмный лес для меня.
Молодец, на твоих примерах хоть учись.
Где Компел? Помощи от них нет?
Мы идем параллельными курсами:)
Great video! Can you redo in English?
Я такой аппаратный фильтр реализовал на FPGA.
Да, FPGA хорошо подходят для КИХ/БИХ фильтров, а если FPGA типа Zynq, то вообще всё для жизни уже на кристале есть.
@@TDMLab Я делал на Cyclone II. Там умножителей не так много, но мне хватило всего четырёх для свертки 24-битного потока с 18-битной импульсной характеристикой, длиной в 128 коэффициентов.
Да, пришлось кольцевой буфер собирать на встроенных блоках памяти и ROM для ИХ. Плюс, управляющий конечный автомат и генератор адресов памяти. Ресурсов вроде немного ушло на него.
Конечно, у более современных плисов уже не просто умножители, как у древнего Циклона, а навороченные DSP блоки. Особенно у Зайлинкса.
@@kardanium Да, новые плисины крутые есть.
Я работал с циклоном 3, делал адаптивный КИХ фильтр, корректор АЧХ проводного канала связи. Он по известной тестовой последовательности подбирал оптимальные коэффициенты минимизируя межсимволную интерференцию и шумы. Было что то типа 64 или 128 коэффициентов. Работало прям как магия после того как мы раньше это делали отвёрткой по сигналу на осцилле, подстраивая набор из 2-3 аналоговых ФВЧ.
@@kardanium Я использовал последовательно-пораллельную схему работы аппаратных умножителей, задействуя один несколько раз за одну выборку АЦП.
У меня был не высокий поток данных, 16 бит 1-2Мвыб/с
@@TDMLab Да, ныне аналог уходит в прошлое. Сейчас даже простое радио реализуют через оцифровку и последующую цифровую обработку.
Ну, у меня с умножителями так же было. Один использовался на все 128 операций. Их четыре ушло, потому что они 18-битные, а выборки 24 бита. Квартус собрал из четырёх один.
Скорость потока в моем случае была ещё ниже - 48кВыб. Это обычный аудиопоток. Потоков два было - для левого и правого канала. Кольцевых буферов два, одна ROM и управляющая часть тоже общая на оба канала, так как выборки поступают параллельно. Фильтр этот использовался в роли фильтра-корректора после апсемплинга и CIC интерполятора. Интерполяция много нервов съела, так как чем ближе частота сигнала к частоте Fs/2, тем сложнее технически его восстановить.
ПРошло уже 2 года с момента опубликования видео а в кубе в части FMAC так нифига и не сделано (версия пакета под G4 ->1.5.1).
Да, забили они на фмак, как собственно и я в итоге не нашел ему применения.
@@TDMLab да, то что FMAC на борту всего один - сильно ограничивает его применение. Хотя бы 3 завезли. Хотя бы под 3-фазные сети. И еще, может я что-то не понял, получается что на максимальной скорости семплирования 4 мсемпла/с с максимальным кол-вом коэффициентов FMAC работать не будет? Если так то это полумера от ST. МОжет поэтому они и сами на него забили и в кубе его не развивают.
@@pavel5345 Количество вычислений необходимых для расчета всех этапов фильтра на 256 при скорости 4 Мега выборки много больше производительности по тактовой частоте.
То есть фильтр же обсчитывает по очереди все выходы, то есть 256 умножений и накопление и его тактирование такое же как и ЦП и он не успеет.
Видимо знающие дяди не могут запилить простую либу с уровнями сложности, например нулевой - одна функция в которую передается один параметр и т.д. И так по каждой теме
Из моего опыта работы с СТМ32 - много просто нет в кубе и надо долго и нудно "курить" даташиты...
Да, так и есть)
На компонентах не пробовал без этой преблуды сделать!
cmsis st давно не развивает. Вместо cmsis использую LL.
Это как? А на чем LL написан тогда?:) developer.arm.com/tools-and-software/embedded/cmsis
А вообще ничего против не имею, хотя сам использую HAL + CMSIS
@@TDMLab базовый адрес FMAC в файле stm32g474xx.h #define FMAC_BASE (AHB1PERIPH_BASE + 0x1400UL). А LL - собственная библиотека ST, к CMSIS отношения не имеет. В STM32CubeMX вариантов инициализации периферии только 2 - LL и HAL
@@johnblack7536 Да, заголовочные файлы типа stm32g474xx.h это вендорная часть библиотеки CMSIS. Часть которая работает с периферией написана в данном случае ST, а часть которая работает с самим ядром написана ARM. И да, в заголовочном файле была информация об адресе регистра WDATA, я уже закрепил комментарий с разъяснениями и поправил прикрепленный к этому видео пример кода.
Любая библиотека на чем-то написана, в данном случае библиотека LL написана на основе библиотеки CMSIS, которая в свою очередь использует ASM.
И да, кодогенератор CubeMX представляет только два варианта автоматизированной инициализации, но пользовательская инициализация может использовать любой из набора CMSIS/LL/HAL
Как это работает на моем примере:
uint32_t *Fmac_Wdata = (uint32_t*)&FMAC->WDATA; // Это объявление указателя с присвоением ему адреса регистра WDATA в периферийном устройстве FMAC и написано с использованием CMSIS
HAL_ADC_Start_DMA(&hadc1, Fmac_Wdata, FILTER_IN_BUFFER_SIZE); // Это запуск АЦП с передачей оцифрованных данных по DMA в регистр по указателю Fmac_Wdata и написано с использованием HAL
Кордик даааа!!!
У Cypress PSoC5 был похожий цифровой фильтр 24х24-бит 128 taps максимум. В целом оказалась бесполезная штука. Слишком малое количество taps, и слишком сложно работать с ним. Опять же, всего один фильтр, а часто нужны несколько, и в каскаде. В-общем, не пошло, и в PSoC6 он был заброшен.
Согласен, если бы блоков было N-ное количество, можно было бы подумать, а так я думаю, что это "пилот".
@@TDMLab Спасибо за обзор микроконтроллера. Я давно приглядываюсь к ST линейке, но руки не доходят.
В PSoC6 Cypress установил два процессора, Cortex M0. + M4. Так что можно, например, общаться с периферией (ADC, DAC) используя M0, а DSP делать в M4. Однако, в целом, PSoC6 "не пошёл', и сложно сказать почему. Это очень странный маркет.
@@odissey2 У ST-шников в самом жирном H7 семействе M4 + M7 и еще и этот FMAC, а так да, второе ядро можно как математический сопроцессор использовать))
В мире правит маркетинг, "Кипарисам" просто не повезло по всей видимости, хотя то что они работают в связке с Infineon думаю без масла на хлеб не останутся:)
Со светом разберись. Мерцает на видео. Свет это не частотник там ШИМ без надобности.
Мерцания происходят из-за пересвета камеры, не имея профессионального осветительного прибора рассеянного света победить это иногда достаточно сложно, а делать темнее не хочу.
стоит чего то не норм!
На самом деле можно было найти адрес регистра FMAC_WDATA и сделать нужный указатель гораздо быстрее - обратившись к документу RM0440
Reference manual для STM32G4 Series. Сдвиг базового адреса 0x18 для регистра FMAC_WDATA указан на стр. 511 документа, а
базовый регистр 0x4002 1400 для FMAC можно найти на странице 83 и того адрес нужного регистра 0x4002 1418
Проблема была не в нахождении адреса WDATA, это как раз не проблема) Настоящая засада была в том чтобы понять, что именно из-за этого модуль и не запускается.
@@TDMLab Ага понимаю, у меня после кучи потраченных часов на поиски и отладку, уже параноя появилась, теперь все используемые библиотеки проверяю на соответствие адресам регистров. Долго, зато нервы целее =).
Здоровья TDM! Провел сегодя эксперименты и выяснил пренеприятнейшую вещь. При тактировании от TIM3 в 5uS резко падает производительность кода в цикле main().
for(cnt = 0; cnt < 1000; cnt++) {
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
}
HAL_GPIO_WritePin(TEST_GPIO_Port, TEST_Pin, GPIO_PIN_SET);
for(cnt = 0; cnt < 1000; cnt++) {
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
}
HAL_GPIO_WritePin(TEST_GPIO_Port, TEST_Pin, GPIO_PIN_RESET);
При включенном FMAC цикл дергания ножкой TEST составляет 1.6mS, а при отключенном FMAC 0.3mS пятикратная разница. Потеря производительности обусловлена скорее всего тем, что запросы DMA занимают большую часть доступа к шинам (не разбирался по каким шинам идет обмен, не суть важно) . В итоге при такой реализации FMAC вещь достаточно бесполезная. И еще момент, который я не понимаю. Вы подаете выборку ADC раз в 5uS, но FMAC не может принять эту выборку ибо занимается расчетом предыдущей выборки. И это время при колличестве коэф. 127 составляет около 600us. Хотя я вижу на выходе DAC что фильтрация идет, но ... проходит ли до конца расчет для всех коэффициентов? Извините если написал глупость, тема новая и интересная, а информации мало.
Я уже не помню, а там ядро используется для вывода в ЦАП? Я там прерывание возможно использую.
А если в ЦАП не выводить или опять использовать DMA?
FMAC может принять новую выборку, у него есть кольцевой буфер.
Фильтрация по всем 127 коэффициентам происходит корректно, это видно по отклику фильтра на дельта функцию.