-
Постов
1 039 -
Зарегистрирован
-
Посещение
Весь контент arhiv6
-
собираю источник питания
arhiv6 ответил radioboy тема в В помощь начинающему
1) Правильно сделанный источник lm2596 гореть не будет. Что сделать, чтобы он заработал - я пытался объяснить вам Вашем прошлом топике, но похоже мой последний пост пропустили. 2) То что Вы делаете - нельзя назвать источником напряжения. Источник напряжения - как это понятно из его названия - поддерживает на выходе заданное напряжение не зависимо от тока нагрузки (в пределах допустимых 0-1A). Для этого используется цепь обратной связи. Без неё - выходное напряжение будет сильно плавать от нагрузки. -
собираю источник питания
arhiv6 ответил radioboy тема в В помощь начинающему
ТС, вы лучше напишите, чего хотите получить - а Вам подскажут, какую схему лучше использовать. Это - работать не будет. -
-
Мне кажется, алюминиевые будут гораздо дороже пластиковых. А какие габариты, масса? От каких воздействий необходимо защищать (влага/удары/температура)?
-
поддельная lm2596
arhiv6 ответил radioboy тема в В помощь начинающему
43В - уже много. Никогда не ориентируйтесь на значения, прописанные в разделе "Absolute Maximum Ratings", только на "Operating Conditions", для данной микросхемы - это 40В. это на нем так написано. А в реальности, учитывая возраст (там на корпусе год изготовления есть?) емкость могла уменьшиться, ESR увеличиться. нет возможности посмотреть Ваше видео - измерения проводились при подключенной нагрузке? На холостом ходу даже плохой конденсатор обеспечит выпрямление напряжения. + У Вас длинные провода между входным конденсатором и микросхемой - они создают паразитную индуктивность, которая при изменении тока даст выбросы по напряжению, что тоже может быть одной из причин выхода микросхемы из строя. -
поддельная lm2596
arhiv6 ответил radioboy тема в В помощь начинающему
35 вольт по входу - а чем мерили? У Вас входной выпрямитель - диодный мост + непонятно какой конденсатор (скорее всего никакой, если судить по этой фотографии), при этом реальное пиковое напряжение может быть больше 35В, по-хорошему, смотреть надо осциллографом. -
Разбирался с переключением контекста, появился вопрос: можно ли в обработчике прерывания PendSV_Handler() вместо " LDR R1, =os_context_switch_hook \n" // call os_context_switch_hook(); " BLX R1 \n" использовать " BL =os_context_switch_hook \n" // call os_context_switch_hook(); вроде же команды равнозначны, но получается на одну инструкцию меньше. Или есть причины делать переход по адресу, а не по метке?
-
А где приложенный файл?
-
Для совсем простых вещей работаю без ОС, для некоторых - хватает упомянутого планировщика, для чего-то сложнее - разумеется, использую готовую ОС. Появилась идея немного доработать планировщик, это скорее для самообразования (для этих же целей, например, писал простой кооперативный планировщик на setjmp/longjmp - чтобы научиться работать с setjmp/longjmp, чтобы на своём опыте попробовать карусельную ОС). Исходники смотрел. Например, scmRtos - на сколько хватает моего понимания - для каждой задачи выделяется в памяти своя область для хранения стека, в PendSV_Handler происходит сохранение текущего указателя на стек, сохранение регистров, восстановление значений регистров новой задачи, в регистр указателя стека записывается указатель на стек новой задачи и происходит выход из прерывания - и т.к. указатель на стек мы поменял -> автоматически переходим в новую задачу. Но, к сожалению, у меня не хватает знаний о том, какой алгоритм должен быть для переключения задач в моём случае. Первое, что пришло в голову - использование прерывания и работа в его контексте. При этом при вызове обработчика прерывания автоматически сохранится контекст текущей задачи, создастся новый - для обработчика прерывания. Даже ассемблер не нужен, всё сделает компилятор. Но, т.к. вложенные прерывания запрещены, все ограничивается одним уровнем приоритета. Какие есть средства обойти это? Только использовать подмену адреса в указателе на стек и выходить из обработчика прерывания? Или можно как-то сообщить ядру что обработка прерывания закончена и при этом остаться в контексте прерывания (по сути - разрешить вложенные прерывания)? Или как-то по другому?
-
Добрый день. Есть вопрос по правильному применению PendSV в Cortex-M4. Пару раз использовал простой планировщик, написанный на Си. В нем задачи - это простые функции, которые, в отличии от обычных вытесняющих OS, не содержат в своем теле бесконечного цикла, а выполняются до завершения. Решил добавить задачам приоритеты и добавить возможность более приоритетным задачам приостанавливать менее приоритетные, как в Super Simple Tasker (SST). Как я это вижу: Стек общий на все задачи. При выполнении задачи (A), если требуется передать управлении более приоритетной (B) - в кольцевой буфер кладём указатель на необходимую задачу и вызываем прерывание PendSV. Попадаем в обработчик прерывания PendSV_Handler (при этом стек предыдущей задачи сохранился, в него мы попадём при выходе из прерывания). В обработчике видим, что есть потребность исполнения более приоритетной задачи B -> вызываем её (как функцию), выполняем, возвращаемся в тело обработчика прерывания и выходим из прерывания, возвращаясь задачу A и продолжаем её выполнение. Проблема в том, что вызывая задачу В я остаюсь в контексте прерывания PendSV и я не смогу передать (если это потребуется) управление ещё более приоритетной задаче (С), т.к. нельзя ещё раз вызвать прерывание PendSV. Как-то можно это обойти?
-
Индикатор заряда
arhiv6 ответил vzhik777 тема в В помощь начинающему
Если нужен индикатор напряжения, самый бюджетный вариант: http://www.edn.com/design/analog/4363566/S...r-uses-two-LEDs -
Это одно и тоже. Ионистор - отечественное название этого элемента. А суперконденсатор - дословный перевод от его иностранного названия supercapacitor. Вики подсказывает, что есть ещё варианты: ультраконденсатор, двухслойный электрохимический конденсатор, electric double-layer capacitor (EDLC). Типовое напряжение ячейки 2.7В, то что выше - обычно последовательные сборки.
-
У TI недавно появились GaN полумосты со встроенными драйверами. LMG5200 - 80V, 10A, t<50ns
-
ADZ12112H, 1393315-2, 2203194-1, 2-1414939-2 подойдут?
-
В любом учебнике это расписано. Например: http://easyelectronics.ru/kondensator-poso...hrezhdenij.html http://electricalschool.info/main/463-kond...nnogo-toka.html Нет там никакого избытка. Есть ошибка измерения.
-
Теперь Вы входной сигнал поделили на 2 (RCC_CFGR_PLLXTPRE), потом умножили на 4. Итого = 32 МГц. Должно быть: RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL4); или RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL8); А функция RCC_GetClocksFreq может вернуть ошибочное значение, если установлено неправильное значение в дефайне HSE_VALUE. У Вас что записано в HSE_VALUE?
-
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL8); - тактируемся от HSE (16МГц), в PLL умножаем на 8 = 128МГц. Или умножайте на 4, или включите предделитель PLLXTPRE (HSE divider for PLL entry). Хотя странно, что МК вообще заработал - для SYSCLK максимальная частот 72МГц.
-
Вроде всё нормально. Покажите как настраиваете тактирование.
-
Выкладывайте код. Интересует инициализация UART.
-
Тогда ещё можно попробовать намотку "внавал" или ещё лучше "Универсаль".
-
Если речь идёт о межвитковой ёмкости трансформатора, то методики её уменьшения рассмотрены в книге Мартина Брауна, "Источники питания", глава 3.5.9 "Методики намотки трансформаторов, работающих в импульсном режиме".
-
Новый сервис: Каталог типовых решений
arhiv6 ответил terraelectronica тема в Магазины
Скорее копия https://www.arrow.com/en/reference-designs -
brag, спасибо большое за разъяснение, теперь всё понятно. А можете посоветовать что почитать для тех кто хочет больше узнать про асинхронное программирование (не привязываясь к языку, чтобы упор был именно на алгоритмы)?
-
brag, спасибо за ответ. Но всё-равно не всё понятно. 1) Вот в этом месте я не могу представить - как происходит передача управления менее приоритетным задачам, при использовании SST. Пусть наша задача X имеет высший приоритет. Пусть нам в этой задаче надо сделать А, потом записать что-то во флешку, потом сделать B. Как это выглядит: сделали А, отправили с помощью DMA данные, по приходу прерывания от DMA сделали B. На время работы DMA управление можно отдать менее приоритетным задачам. Задаче Y управление отдать не можем - она прервана задачей X и к её стеку доступ мы получить не можем. Отдаем управление низкоприоритетной задаче Z. Если работу с ней мы закончим до прерывания DMA - всё будет хорошо - стек задачи Z нам уже не нужен, можем по прерыванию вернуться к X. А если Z будет работать ещё долго? Произойдёт прерывание DMA, как мы сможем восстановить контекст задачи X, если на вершине стека лежат данные задачи Z? А управление передать необходимо - ведь у X приоритет больше... 2) Даже если всё делать через очереди, то как в задаче X сохранить контекст (например локальные переменные) между A и B ? Это до меня пока не доходит
-
brag, на сколько я понял, в обычном SST пока задача X не выполнена, менее приоритетные задачи блокированы. В таком случае, если эта задача X заняла ресурс - ту же шину SPI, мы никак не можем отдать управление менее приоритетным процессам и ядро простаивает. Если не сложно, можете подробнее описать, как правильно избавиться от этого ограничения? На сколько я понял, у Вас задача делится на несколько независимых (X1, X2) и они работают по событиям: X1 заняла шину и закончила работу, по событию освобождения шины вызвалась задача X2. Так?