![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
iiv
Свой-
Постов
2 850 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Весь контент iiv
-
Добрый день, надо быстро проверить гипотезу, по которой надо одновременно оцифровывать 8, может 16, а может и 24 канала одновременно, и на каждом канале будет сигнал примерно 50кГц, то есть надо где-то 150-200КГц на канал. Хочется без бубнов это все в DMA. Я такое умею только через внешний оцифровщик + плиска, но тут и с разводкой проваландаюсь, и программированием. Хочется простой МК, и чтоб с первого раза все поехало. Вроде требования не запредельные. На тех МК, что умею, есть или только двухканальный DMA, без права одновременного семплинга с больше двух каналов (teensy 4.1), или только все ручками. Мне важен DMA, так как я хочу потом эти данные сразу друг с другом коррелировать и сохранять только корреляционные коэффициенты. Скажите, пожалуйста, стоит ли на каком-то STM32 пробовать, или PIC32, или еще на чем-то? Целевая функция - потратить минимум времени на разработку платы и программирование сбора этих данных. Спасибо!
-
Во-первых, всех с наступившим Новым Годом и пусть он будет луше предыдущих! Позвольте, пожалуйста, продолжить тему. Пришли на днях ИК лазерные диоды на 808нм / 200миливатт и 980нм / 50миливатт в TO56 корпусе. Я думал, что смогу посветить этим диодом на эту пластинку, и получить сеточку, но не тут-то было. Лазер он хоть и монохроматический получается, но светит с поверхности соприкосновения двух материалов самого диода и от него свет рассеивается как-бы широкой линией. Под рукой какая-то линза была, но то ли навесным я не смог все зафиксировать, то ли тут что-то надо делать более глобально, но сетку в ИК диапазоне я таки не смог получить, хоть даже и пытался поставить всякие волноводы от лазера до диффракциоонной решетки. Вопросов два, цель - одна - мне нужна сетка со структурированным светом в ИК (любом из 800-1000нм). Скажите, пожалуйста, 1. стоит ли пытаться прециционно линзами сфокусировать луч ИК лазерного диода и ставить далее эту дифракционну решетку, или мне все-таки нужен какой-то когерентный источник ИК? 2. есть ли еще како-то разумно бюджетный способ получения какого-то простго (желательно сеточного) паттерна в ИК? Спасибо! PS: таки смог прецизионно большим объективом сфокусироваться и перенаправить получаемый луч в дифракционную решетку с голограммой, кое-каое изображение получилось и понятно, как решать первый пункт. Второй вопрос так и остался, ибо решение по первому пункту получается довольно колхозным.
-
Супер, спасибо большое, xvr! Да, полностью с Вами согласен! Меня, кстати очень удивляет, почему этот алгоритм называют кордиком, ведь реально он использует только тот факт, что синус и косинус суммы углов можно легко представить как сумму произведений синусов и косинусов исходных углов.
-
Огромное спасибо за советы! Формально - да, только две инстанции, но я-то хотел туда же еще добавить свои типы, которых у меня суммарно 6. Пока сделал как ниже, что порешило мой пункт 3, в ассемблере теперь видно, что синус и косинус вызываются один раз и есть предвычисленные константы. Но вот с первыми моими двумя пунктами пока еще не придумал как сделать. #include <stdio.h> #include <stdlib.h> #include <math.h> #include <array> template<typename T>constexpr auto generate() { const int BL = ((sizeof(T)==4))?24:53; std::array<std::array<T, BL>, 2> res{}; T a=0.5; for(int i=0; i<BL; i++) { res[0][i]=sin(a); res[1][i]=cos(a); a*=0.5; // a/=2.; } return res; } template<typename T> void CalcSinCos(T a, T &s, T &c) // a должно быть больше 0 и меньше 1 { const int BL = ((sizeof(T)==4))?24:53; long long IntA; if constexpr (sizeof(T)==4) IntA=(int)(a*(1024.*1024*16.)); else IntA=(long long)(a*(1024.*1024.*1024.*1024.*1024.*8.)); constexpr auto BinarySinCos = generate<T>(); s=0.; c=1.; for(int i=0; i<BL; i++) if((IntA&(1<<(BL-1-i)))!=0) { // s, c на данный момент - это sin(a), cos(a), а BinarySin[i] и BinaryCos[i] - это sin(b), cos(b) // результат sin(a+b) и cos(a+b) нам надо снова получить в s, c T temp_s = s*BinarySinCos[1][i] + c*BinarySinCos[0][i]; // sin(a+b) = sin(a)*cos(b) + sin(b)*cos(a) T temp_c = c*BinarySinCos[1][i] - s*BinarySinCos[0][i]; // cos(a+b) = cos(a)*cos(b) - sin(a)*sin(b) s = temp_s; c = temp_c; } return; } int main() { for(int i=0; i<20; i++) { float a = ((float)rand()) / (float)RAND_MAX; float s, c; CalcSinCos(a, s, c); printf("a=%g, s=%g (%g), c=%g (%g)\n", a, s, sin(a), c, cos(a)); } return 0; } Спасибо! Это понятно, что Чебышевым получается обычно не плохо. Другое дело, что кордик по основанию 16 или 256 (не по основанию 2, как у меня в примере) с Тейлором для маленьких составных кордика реально в 2-3 раза быстрее, чем стандартный вызов системной sincosf. А на некоторых МК ой как плохо в стандартных библиотеках все реализовано, что кордик даже по основанию 2 начинает обыгрывать системные функции. А у меня еще есть float-float тип, для которого стандартных синусов-то и нет.
-
constexpr C++ - как инициализировать массив внутри template
iiv опубликовал тема в Программирование
Добрый день и с наступающим Вас Новым Годом! У меня есть template (кордик синус и косинус), который в зависимости от того float это или double должен считать соответсвующие пары синусов и косинусов. Для этого мне надо в зависимости от того float это или double правильно проинициализировать целочисленную переменную BL, сделать int IntA или long long IntA и вычислить ее, предварительно заполнить BinarySin, BinaryCos предвычисленными числами. Я как-то это на С++ запрограммировал, но не все мне нравиться, а именно Пункт: хочется реально сравнивать только на float и double и в остальных случаях давать ошибку, Пункт: я все привел к типу long long, и не понимаю как сделать int для float, и long long для double, Пункт: я хочу чтобы инициализация этих массивов происходила на стадии компиляции, а сейчас у меня это происходит в runtime. Пожалуйста, посоветуйте, что и как тут изменить, чтобы это все исправить! Спасибо! Код тут: #include <stdio.h> #include <stdlib.h> #include <math.h> template<typename T> void CalcSinCos(T a, T &s, T &c) // a должно быть больше 0. и меньше 1. { const int BL = ((sizeof(T)==4))?24:53; long long IntA; if constexpr (sizeof(T)==4) IntA=(int)(a*(1024.*1024*16.)); else IntA=(long long)(a*(1024.*1024.*1024.*1024.*1024.*8.)); static T BinarySin[BL]; static T BinaryCos[BL]; static int NotYetInizialized=0; if(NotYetInizialized==0) { NotYetInizialized=1; float a=0.5; for(int i=0; i<BL; i++) { BinarySin[i]=sin(a); BinaryCos[i]=cos(a); a*=0.5; // a/=2.; } } s=0.; c=1.; for(int i=0; i<BL; i++) if((IntA&(1<<(BL-1-i)))!=0) { // s, c на данный момент - это sin(a), cos(a), а BinarySin[i] и BinaryCos[i] - это sin(b), cos(b) // результат sin(a+b) и cos(a+b) нам надо снова получить в s, c T temp_s = s*BinaryCos[i] + BinarySin[i]*c; // sin(a+b) = sin(a)*cos(b) + sin(b)*cos(a) T temp_c = c*BinaryCos[i] - s*BinarySin[i]; // cos(a+b) = cos(a)*cos(b) - sin(a)*sin(b) s = temp_s; c = temp_c; } return; } int main() { for(int i=0; i<20; i++) { float a = ((float)rand()) / (float)RAND_MAX; float s, c; CalcSinCos(a, s, c); printf("a=%g, s=%g (%g), c=%g (%g)\n", a, s, sin(a), c, cos(a)); } return 0; } -
Спасибо большое, за ответ! Я пока без штатива это делал, с углом почти не получалось - грубо говоря визуально было так, что пока светишь перпендикулярно, то все получается, если от перпендикуляра отошел, то яркость картинки падает, при больших углах (30 градусов и больше) вообще ничего не видно. Еще момент. На разных длинах волн получается точно отличающаяся по размерам картинка. Я предполагаю, что со светодиодами не получилось, так как у них спектр не как у лазера и там должно полуится несколько картинок слегка разного цвета и слегка различного размера и оно все друг с другом сливается, поэтому на светодиодах ничего не получилось. ИК лазеры на 808нм и 980нм заказал, посмотрим что получится. Все-таки интересно как эта пластинка-фильтр устроена!
-
Получил эти игрушки с алиэкспресса и поигрался. Во-первых, если на них светить обычным светодиодом (красным, синим, зеленым, инфракрасным 950нм) то ничего не получается. Если светить лазером, то получается сетка. Причем я получал сетку и на красном лазере, и на синем (405nm). А не на лазере - не получал. Я предполагаю, что на лазере из-за того, что свет идет строго параллельно, все с этим фильтром получается, а если светить обычным светодиодом - то нет. Для меня загадка в том, что если это сделано на дифракционной решетке, то я не должен был на синем и красном лазере получать одинаковую картинку. Или я ошибаюсь? ИК лазера еще нет. Это второй вопрос, стоит ли его купить и попробовать.
-
Спасибо _pv за интересную ссылку! Мне правда не так надобно - мне это для 3Д сканера хочется сделать и очень желательно, чтобы было ИК, то есть невидимое глазом излучение.
-
Ой, точно! Я как-то на этот параметр не обрабил внимания, спасибо большое, что на это обратили внимание! То, что себе заказал - еще не пришло, а то, что видел у знакомого, так этим мы как раз на зеленом светодиоде (не лазере) игрались.
-
спасибо большое всем за ответы! Похоже, что готового, маленького размера и не дорогово пока в природе нет. Тогда пока буду пользовать китайские фильтры и вручную их приколхоживать к светодиодам.
-
Спасибо большое, за ответы! Я правда сомневаюсь, что сетка как-то от длины волны будет зависить, ведь такая сетка имеет ячейки существенно больше микрометра: вот пусть луч - около 2х2мм, и там только максимум 50 ячеек, тогда одна ячейка - это около 40мкм, что существенно больше длины волны 950нм ИК. Вот с Gobo - интересно. Правда пока только проэкторы находятся. Мне почему-то кажется, что такое возможно есть в охранных системах или в 3Д сканерах, и, значит, это уже могли сильно удешевить засунув в корпус самого светодиода. Пробно та китайская подделка, которую я упоминал с обычным ИК светодиодом дает именно то, что надо, правда слегка с размытым изображением, и резкость сильно зависит от того, как это все друг к другу присоединить, так как оно не создавалось друг для друга, поэтому хочется чего-то готового.
-
Спасибо большое за ответ! Прям стихи! Да, верно, но указки все в оптическом диапазоне, а мне надо ИК. То, что я выше приводил как пример - это как раз наверное для указок, но хочется что-то очень низкопрофильное - типа smd ИК светодиод, и правильная пластиковая нахлобучка, а лучше, чтобы сразу светодиод с такой нахлобучкой был бы. Спасибо!
-
Добрый день, хочется создать какой-то простой (сеточный) паттерн на ИК (850-950нм) примерно как получается их этого оптического фильтра Не хочется городить огород, то есть ставить такой пластик и как-то его закреплять поверх ИК светодиода. Хочется купить целиком такой пластик со светодиодом готовый, но не хотелось бы покупать DLP за сумашедшие деньги. Не нашел, хотя искал, вдруг кто знает как правильно такое называется, или номерок микросхемы в мойсере-дигикее, буду Вам премного благодарен! Спасибо! ИИВ
-
Спасибо большое, std за ответ! так я это уже запрограммировал, чтобы сделать полностью автоматически. У меня 24 камеры, для градуировки каждой надо снять хотя бы три кадра, а лучше с десяток. Представляете сколько я бы сидел карпел бы обрабатывая вручную каждый узел на шахматной доске в этих 240 картинках!!! Честно говоря, все это есть в OpenCL, но все пришлось самому перезапрограммировать, так как OpenCL в eps32 ну ни как не лез.
-
Спасибо большое за советы! К сожалению, именно этот вариант и обсуждается, так как камера очень широкоугольная (фотки же я выше прилагал) и дисторсия простой моделью не описывается, а также нет гарантированного совмещения оси, то есть нормаль шахматной доски, нормаль поверхности сенсора и оптическая ось объектива - три не коллинеарные вектора и, скорей всего даже линейно независимые, то есть нужны степенные функции по x, y, в дополнении к степенным по r и проще иметь что-то типа 2Д сплайна. На данный момент рабочим вариантом у меня является распознавание одного или нескольких квадратиков в центре картинки через Фурье, и далее итерационное интерполирование послойно во все стороны с дальнейшим улучшением точек такой интерполяции. Пока в esp32 все влезает, так как по сути надо только одну копию картинки в psram и с десяток чисел на каждый узел сетки, что стоит около сотни кбайт.
-
Спасибо большое, borodach! Да, вроде много... Хочу безтрансформаторный, ибо там места мало. Скажите, пожалуйста, правильно ли я понимаю, что L6562 1. можно питать по RC цепочке, чтобы обойтись без обмотки в индукторе? 2. он не будет выключаться, если нагрузка только 5-6Ватт будет? Спасибо!
-
Спасибо большое, borodach! Полностью с Вами согласен, и именно так и хочу, но не могу ничего подходящего найти, возможно я в мойсере не в тех разделах ищу, но реально не могу понять и найти что взять, чтобы выходное напряжение было бы на хоть какое-то из диапазона от 290В до 360В (в этом диапазоне я могу подстроить набор светодиодов в наших люстрах). На 90В я находил, но в люстре я так светодиоды не коммутирую. Пожалуйста, поделитесь каким-то номером подходящего компонента. Спасибо!
-
Step-up 6В в 19В
iiv ответил Dobermann тема в Силовая Преобразовательная Техника
так LiFePO4 - это самые простые батарейки - заряжать просто покупным CC-CV из алиэкспресса, при такой емкости реально и 100А током, если блок найдет. А питать лаптоп - любой какой будет boost на нужный ток. -
Step-up 6В в 19В
iiv ответил Dobermann тема в Силовая Преобразовательная Техника
там обычные 4 ячейки LiFePO4 с ограничителем по перенапряжению и все. Ничем не лучше и не хуже того, что мудрит ТС. Возможно у ТС уже есть те две ячейки, вот он и собирается их использовать, или они удобно в его лаптопную сумку лезут, всяко 2х280АЧ не сильно дешево стоят - примерно под стольник зеленых, да и весят тоже примерно с лаптоп. -
Спасибо большое, Plain за комментарий. Не, не правильно поняли. Есть последовательно соединенные LEDы (на 300В постоянного тока, но можно выбрать любое от 300В до 350В), их надо оставить, все остальное - на выброс, то, что на выброс импульсных блоков не содержало. Тендирую к тому, чтобы взять стандартный ККМ, но столкнулся с тем фактом, что обычные готовые ККМ драйверы 1. выключаются от малой нагрузки, 2. требуют дополнительного низковольтного питания (которого у меня не где взять). поэтому прошу совета, подскажите, пожалуйста, либо я плохо искал и такие драйверы есть, или таких драйверов нет, тогда у меня не останется выбора как проектировать это как-то (очень не хочу это на МК делать, предполагаю, что это будет не надежно, но не вижу готового подходящего драйвера).
-
Спасибо за ответ. Тоже думал в эту сторону, но, не складывается, так как формально в щиток лезть я не имею права, да и часто люстра совмещена с обычной розеткой, в которую в том числе что-то на пару киловатт может быть воткнуто, и тогда надо не ККМ делать, а повышающий на переменную. То есть я тоже много думал о других альтернативах, но, кроме ККМ на каждую люстру вроде бы нет разумного решения. Если бы стандартные схемы ККМ от такой маленькой нагрузки не вырубались бы, уже давно бы сделал и схема не требовала бы внешнего дополнительного низковольтного питания, уже бы сделал бы, а так, сильно в раздумьях как проще.
-
Step-up 6В в 19В
iiv ответил Dobermann тема в Силовая Преобразовательная Техника
более-менее нормальные лаптопы легко 100 ватт могут потреблять, если и графическая карта и процессор нагружены. И у меня i7 На лаптопе, и у жены Ryzen 7 под сотню ватт могут потреблять, если хорошо считаться на лаптопе, другое дело, что обычно, если это делать долговременно, то лаптопы не живут долго, или надо сразу их на специальные подставки с вентиляторами ставить. По теме, и сугубо ИМХО на основе регулярного использования больших LiFePO4 аккумуляторов. Если у ТС они два из одной партии и он их по отдельности не пользовал, даже после 2000 циклов перезарядки у них дисбаланс будет на столько маленький, что амперный пассивный BMS должен справиться. Утверждаю как пользователь таких батарей для накапливания электричества от солнца. Тут только один нюанс - нельзя какую-то батарею и, особенно один из ее контактов нагревать, вот тогда дисбаланс сразу будет огромный. -
Спасибо за ответ! Да, я тоже про конденсаторы сразу подумал и, так как я сам эти схемы проектировал и паял, первым делом именно конденсаторы попробовал на новые поменять. К сожалению, это ничего не дало. Причем у меня и керамика на 0.1мкФ и около 100мкФ стоят параллельно. да, все эти 10 лет именно так и было. Последние несколько лет питание дома переведено полностью на солнечные батареи, и, к сожалению, при больших нагрузках (станки, паяльные печки), линия проседает с 230 АС до 180 АС. Эту проблему решать пока нет финансовой возможности. Если поставить новый с мойсера линейный регулятор, то все мигания исчезают, если на нем выставить падение до 70 Вольт, но как-то не сильно хочется так делать, да и очевидно греется тогда этот регулятор очень сильно. Раньше, когда подводка к дому была, я только до 30 Вольт выставлял падения, и этого хватало, но у меня тогда и станков с печками не было. Поэтому собственно я и по поводу ККМ или какого-то аналогичного решения решил озаботиться.
-
Добрый день, имею много, примерно 20 люстр, которые когда-то сделал по принципу выпрямленное 230В через микросхему constant current (примерно как AL5890 или CL25N3-G или какой-то аналогичный, даташит потерял) на сотню последовательно соединенных CREE светодиодов. С момента, как я это сделал прошло уже больше 10 лет и микросхемы регуляции успешно подохли, то есть работают как обычный резистр и освещение стало подмигивать и стало чувствительно к просадкам сетевого. Фактически мне надо из сетевого переменного (которое у меня иногда сильно гуляет от 180 до 230АС) получить выпрямленное и поднять до какого-то, скажем 340В и воткнуть в мои люстры. Начал искать ККМ и заметил, что большинство микросхем ККМ требуют дополнительную обмотку (у меня-то нету) для низковольтного питания, и многие выключаются при маленьких нагрузках. Некоторые люстры у меня всего-то на 6 ватт расчитаны (то есть 20мА * 310В) а в некоторых немного больше, но тоже не более 20Ватт. Посоветуйте, пожалуйста, какую-то микросхему ККМ, чтобы 1. без дополнительного питания (и чтобы не рассеивать на толстом резисторе пару ватт), 2. чтобы не выключалась при маленьком потреблении, 3. а идеально, со встроенным ключем (хотя наверное, такого не бывает). Или мои хотелки не реалистичны, и придется что-то лепить со вспомогательным питанием и кучей навесного? PS: люстры менять не предлагать - это реально сложно, ибо все вписано в интерьер и жена будет категарично против. Спасибо!
-
Я сомневаюсь, что в дальней зоне от шаговиков магнитное поле имеет высокочастотные флуктуации, иначе бы там много энергии бы рассеивалось, хотя не спорю, 160 Гц - не сильно от постоянного магнитного поля отличается. Наверное, про переменное поле надо экспериментировать, может увеличивая число магнетометров, но, имея существенное число магнетометров, "как-то оптимально" расположенных вокруг шаговиков, эта задача должна, ИМХО, численно сходиться к правильному результату. То есть я не могу гарантировать, что 4-х магнетометров и любое их расположение позволит найти все эти компенсации и точно решить задачу, но, в моем случае, когда я увидел 5-и кратное превышение магнитного поля Земли, мне сразу захотелось забить на попытку использовать магнетометры, но, у меня все-таки задача таки решилась и, кстати, в моем случае, матрица Q очень не похожа на простое усреднение.