Перейти к содержанию
    

arhiv6

Свой
  • Постов

    1 039
  • Зарегистрирован

  • Посещение

Весь контент arhiv6


  1. 1) Правильно сделанный источник lm2596 гореть не будет. Что сделать, чтобы он заработал - я пытался объяснить вам Вашем прошлом топике, но похоже мой последний пост пропустили. 2) То что Вы делаете - нельзя назвать источником напряжения. Источник напряжения - как это понятно из его названия - поддерживает на выходе заданное напряжение не зависимо от тока нагрузки (в пределах допустимых 0-1A). Для этого используется цепь обратной связи. Без неё - выходное напряжение будет сильно плавать от нагрузки.
  2. ТС, вы лучше напишите, чего хотите получить - а Вам подскажут, какую схему лучше использовать. Это - работать не будет.
  3. Это что за кварц такой? Обычно конденсаторы на кварце ~10-20pF... Смотрите в приложенном файле.
  4. Мне кажется, алюминиевые будут гораздо дороже пластиковых. А какие габариты, масса? От каких воздействий необходимо защищать (влага/удары/температура)?
  5. 43В - уже много. Никогда не ориентируйтесь на значения, прописанные в разделе "Absolute Maximum Ratings", только на "Operating Conditions", для данной микросхемы - это 40В. это на нем так написано. А в реальности, учитывая возраст (там на корпусе год изготовления есть?) емкость могла уменьшиться, ESR увеличиться. нет возможности посмотреть Ваше видео - измерения проводились при подключенной нагрузке? На холостом ходу даже плохой конденсатор обеспечит выпрямление напряжения. + У Вас длинные провода между входным конденсатором и микросхемой - они создают паразитную индуктивность, которая при изменении тока даст выбросы по напряжению, что тоже может быть одной из причин выхода микросхемы из строя.
  6. 35 вольт по входу - а чем мерили? У Вас входной выпрямитель - диодный мост + непонятно какой конденсатор (скорее всего никакой, если судить по этой фотографии), при этом реальное пиковое напряжение может быть больше 35В, по-хорошему, смотреть надо осциллографом.
  7. Разбирался с переключением контекста, появился вопрос: можно ли в обработчике прерывания 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(); вроде же команды равнозначны, но получается на одну инструкцию меньше. Или есть причины делать переход по адресу, а не по метке?
  8. Для совсем простых вещей работаю без ОС, для некоторых - хватает упомянутого планировщика, для чего-то сложнее - разумеется, использую готовую ОС. Появилась идея немного доработать планировщик, это скорее для самообразования (для этих же целей, например, писал простой кооперативный планировщик на setjmp/longjmp - чтобы научиться работать с setjmp/longjmp, чтобы на своём опыте попробовать карусельную ОС). Исходники смотрел. Например, scmRtos - на сколько хватает моего понимания - для каждой задачи выделяется в памяти своя область для хранения стека, в PendSV_Handler происходит сохранение текущего указателя на стек, сохранение регистров, восстановление значений регистров новой задачи, в регистр указателя стека записывается указатель на стек новой задачи и происходит выход из прерывания - и т.к. указатель на стек мы поменял -> автоматически переходим в новую задачу. Но, к сожалению, у меня не хватает знаний о том, какой алгоритм должен быть для переключения задач в моём случае. Первое, что пришло в голову - использование прерывания и работа в его контексте. При этом при вызове обработчика прерывания автоматически сохранится контекст текущей задачи, создастся новый - для обработчика прерывания. Даже ассемблер не нужен, всё сделает компилятор. Но, т.к. вложенные прерывания запрещены, все ограничивается одним уровнем приоритета. Какие есть средства обойти это? Только использовать подмену адреса в указателе на стек и выходить из обработчика прерывания? Или можно как-то сообщить ядру что обработка прерывания закончена и при этом остаться в контексте прерывания (по сути - разрешить вложенные прерывания)? Или как-то по другому?
  9. Добрый день. Есть вопрос по правильному применению PendSV в Cortex-M4. Пару раз использовал простой планировщик, написанный на Си. В нем задачи - это простые функции, которые, в отличии от обычных вытесняющих OS, не содержат в своем теле бесконечного цикла, а выполняются до завершения. Решил добавить задачам приоритеты и добавить возможность более приоритетным задачам приостанавливать менее приоритетные, как в Super Simple Tasker (SST). Как я это вижу: Стек общий на все задачи. При выполнении задачи (A), если требуется передать управлении более приоритетной (B) - в кольцевой буфер кладём указатель на необходимую задачу и вызываем прерывание PendSV. Попадаем в обработчик прерывания PendSV_Handler (при этом стек предыдущей задачи сохранился, в него мы попадём при выходе из прерывания). В обработчике видим, что есть потребность исполнения более приоритетной задачи B -> вызываем её (как функцию), выполняем, возвращаемся в тело обработчика прерывания и выходим из прерывания, возвращаясь задачу A и продолжаем её выполнение. Проблема в том, что вызывая задачу В я остаюсь в контексте прерывания PendSV и я не смогу передать (если это потребуется) управление ещё более приоритетной задаче (С), т.к. нельзя ещё раз вызвать прерывание PendSV. Как-то можно это обойти?
  10. Если нужен индикатор напряжения, самый бюджетный вариант: http://www.edn.com/design/analog/4363566/S...r-uses-two-LEDs
  11. Это одно и тоже. Ионистор - отечественное название этого элемента. А суперконденсатор - дословный перевод от его иностранного названия supercapacitor. Вики подсказывает, что есть ещё варианты: ультраконденсатор, двухслойный электрохимический конденсатор, electric double-layer capacitor (EDLC). Типовое напряжение ячейки 2.7В, то что выше - обычно последовательные сборки.
  12. У TI недавно появились GaN полумосты со встроенными драйверами. LMG5200 - 80V, 10A, t<50ns
  13. В любом учебнике это расписано. Например: http://easyelectronics.ru/kondensator-poso...hrezhdenij.html http://electricalschool.info/main/463-kond...nnogo-toka.html Нет там никакого избытка. Есть ошибка измерения.
  14. Теперь Вы входной сигнал поделили на 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?
  15. 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МГц.
  16. Вроде всё нормально. Покажите как настраиваете тактирование.
  17. Выкладывайте код. Интересует инициализация UART.
  18. Тогда ещё можно попробовать намотку "внавал" или ещё лучше "Универсаль".
  19. Если речь идёт о межвитковой ёмкости трансформатора, то методики её уменьшения рассмотрены в книге Мартина Брауна, "Источники питания", глава 3.5.9 "Методики намотки трансформаторов, работающих в импульсном режиме".
  20. brag, спасибо большое за разъяснение, теперь всё понятно. А можете посоветовать что почитать для тех кто хочет больше узнать про асинхронное программирование (не привязываясь к языку, чтобы упор был именно на алгоритмы)?
  21. brag, спасибо за ответ. Но всё-равно не всё понятно. 1) Вот в этом месте я не могу представить - как происходит передача управления менее приоритетным задачам, при использовании SST. Пусть наша задача X имеет высший приоритет. Пусть нам в этой задаче надо сделать А, потом записать что-то во флешку, потом сделать B. Как это выглядит: сделали А, отправили с помощью DMA данные, по приходу прерывания от DMA сделали B. На время работы DMA управление можно отдать менее приоритетным задачам. Задаче Y управление отдать не можем - она прервана задачей X и к её стеку доступ мы получить не можем. Отдаем управление низкоприоритетной задаче Z. Если работу с ней мы закончим до прерывания DMA - всё будет хорошо - стек задачи Z нам уже не нужен, можем по прерыванию вернуться к X. А если Z будет работать ещё долго? Произойдёт прерывание DMA, как мы сможем восстановить контекст задачи X, если на вершине стека лежат данные задачи Z? А управление передать необходимо - ведь у X приоритет больше... 2) Даже если всё делать через очереди, то как в задаче X сохранить контекст (например локальные переменные) между A и B ? Это до меня пока не доходит
  22. brag, на сколько я понял, в обычном SST пока задача X не выполнена, менее приоритетные задачи блокированы. В таком случае, если эта задача X заняла ресурс - ту же шину SPI, мы никак не можем отдать управление менее приоритетным процессам и ядро простаивает. Если не сложно, можете подробнее описать, как правильно избавиться от этого ограничения? На сколько я понял, у Вас задача делится на несколько независимых (X1, X2) и они работают по событиям: X1 заняла шину и закончила работу, по событию освобождения шины вызвалась задача X2. Так?
×
×
  • Создать...