Jump to content

    

LAS9891

Участник
  • Content Count

    246
  • Joined

  • Last visited

Community Reputation

0 Обычный

About LAS9891

  • Rank
    Местный

Recent Profile Visitors

2589 profile views
  1. Статьи шикарные. Особенно понравились подобные фразы: Но всё равно спасибо, поищу ещё подобные статьи.
  2. Здравствуйте! Возникло желание рассчитать LC-фильтр. Но начну сначала. Есть необходимость использовать НЧ-фильтр на входе импульсного стабилизатора напряжения. Решено, что это будет так называемый Г-образный LC-фильтр. Предполагается такая схема: Теперь к расчёту. Нашел такую статью, где предлагают свести расчёт элементов фильтра к расчёту обычного делителя напряжения при условии его работы на частоте среза фильтра. Принимаю исходные данные для расчёта: напряжение на входе Uin = 1 В; напряжение на выходе Uout = 0,7 В; частота среза fср = 1 кГц. Необходимо рассчитать индуктивность катушки и ёмкость конденсатора. Далее, в статье при расчёте Г-образного ФВЧ на конденсаторе и дросселе присутствует такой текст Значит для начала надо задать "значение входного или выходного сопротивления фильтра как делителя напряжения на частоте среза АЧХ". Правильно ли я понимаю эту фразу? Входное сопротивления фильтра - это сопротивление катушки индуктивности, а выходное сопротивления фильтра - это сопротивление конденсатора. Соответственно нужно определиться с одним из параметров, либо с сопротивлением катушки на частоте среза, либо с сопротивлением конденсатора на частоте среза. Ну, допустим, определимся с сопротивлением конденсатора на частоте среза. Затем по значению этого сопротивления можно будет рассчитать ёмкость. Далее зная соотношение сопротивлений на частоте среза, можно определить сопротивление индуктивности, а уже по нему значение индуктивности. Теперь вопросы: 1) Правильно ли я вообще рассуждаю? 2) Как определиться с одним из параметров, либо с сопротивлением катушки на частоте среза, либо с сопротивлением конденсатора на частоте среза? Вычитал ещё такое: "Так как сопротивление нагрузки, подключаемой к выходу делителя, влияет на выходное напряжение, то значение сопротивления R2 (в моём случае конденсатора) должно быть в 100 раз меньше входного сопротивления нагрузки. Это правило также справедливо и при расчетах фильтров." Если, к примеру, этот фильтр подключался бы к входу операционного усилителя (у которого в идеале бесконечно большое входное сопротивление), то я бы выбрал значение в 100 Ом для сопротивления конденсатора на частоте среза, и по нему рассчитал бы емкость и индуктивность элементов. Но у меня вход источника питания. Как быть в этом случае? P.S.: Хоровица и Хилла уже читаю.
  3. Спасибо. Прочитал - проблема решилась.
  4. В смысле не пишите не читаете? Я в Scatter-файле указываю область памяти SRAM1. При сборке проекта в этой области размещаются данные. Их не я сам принудительно размещаю. Вот например что расположилось в SRAM1 при сборке (.map-файл): Execution Region RW_SRAM1 (Exec base: 0x30000000, Load base: 0x08011968, Size: 0x00000910, Max: 0x00020000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object 0x30000000 0x08011968 0x0000002c Data RW 36 .data functions.o 0x3000002c 0x08011994 0x00000004 PAD 0x30000030 0x08011998 0x0000006e Data RW 442 .data calibration.o 0x3000009e 0x08011a06 0x00000002 PAD 0x300000a0 0x08011a08 0x00000008 Data RW 679 .data font12.o 0x300000a8 0x08011a10 0x00000008 Data RW 2489 .data system_stm32h7xx.o 0x300000b0 - 0x00000200 Zero RW 34 .bss functions.o 0x300002b0 - 0x00000060 Zero RW 2631 .bss c_w.l(libspace.o) 0x30000310 - 0x00000200 Zero RW 2 HEAP startup_stm32h743xx.o 0x30000510 - 0x00000400 Zero RW 1 STACK startup_stm32h743xx.o Кроме SRAM1 в Scatter-файле также указаны области DTCM, AXI SRAM, SRAM4. В них тоже располагаются какие-то данные. Если в Scatter-файле указать только эти области, то все работает без проблем, если добавить SRAM1 - Hard Fault.
  5. Убрал. Потом в код добавил: uint32_t* pointer = (uint32_t*)0x30000000; *pointer = 1; Результат в отладке: Ещё наблюдение: Пробовал зажигать светодиод в прерывании по HF. Диод не горит, подозреваю, что это происходит из-за того, что инициализации порта не была проведена.
  6. Как? В отладку не зайти. В окошке Command сыплются "Cannot access Memory". Allregia что-то знает, но молчит.
  7. ; Reset handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP перед __main
  8. Похоже это мой случай. Если я использую такой scatter: ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00200000 { ; load region size_region ER_IROM1 0x08000000 0x00200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } RW_DTCM 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } RW_AXI_SRAM 0x24000000 0x00080000 { .ANY (+RW +ZI) } RW_SRAM4 0x38000000 0x00010000 { .ANY (+RW +ZI) } } Всё работает. Стоит мне добавить область SRAM1: ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00200000 { ; load region size_region ER_IROM1 0x08000000 0x00200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } RW_DTCM 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } RW_AXI_SRAM 0x24000000 0x00080000 { .ANY (+RW +ZI) } RW_SRAM1 0x30000000 0x00020000 { .ANY (+RW +ZI) } RW_SRAM4 0x38000000 0x00010000 { .ANY (+RW +ZI) } } Всё летит в Hard Fault. Тактирование SRAM1 включено в функции SystemInit (void): RCC->AHB2ENR |= (RCC_AHB2ENR_D2SRAM1EN | RCC_AHB2ENR_D2SRAM2EN | RCC_AHB2ENR_D2SRAM3EN); В отладчике проверил - тактирование включено. В чём проблема?
  9. СПАСИБО! Пока проверить не на чем, так что пока не важно. Мне интересно всё ли я сделал чтобы заработала SRAM1. В код добавил строчку: RCC->AHB2ENR |= RCC_AHB2ENR_SRAM1EN; // SRAM1 interface clock is enabled. В Scatter добавлю все необходимое благодаря Darth Vader. Что то ещё требуется для подключения SRAM1 в STM32H73 ?
  10. Не подскажите в чём была причина с проблемой С хипом и стеком? Столкнулся с чем то подобным, не получается корректно подключить область RAM1. Если кратко описать проблему, то я пробовал включать SRAM1 так: RCC->AHB2ENR |= RCC_AHB2ENR_SRAM1EN; // SRAM1 interface clock is enabled. В Scatter так: RW_SRAM1 0x30000000 0x00020000 { .ANY (+RW +ZI) } Собрал, перешил, запустил - проект стартует и рушится (вылетает блок GPIO, который удерживает питание для контроллера (ключ)). Мне кажется я как то не так включаю SRAM1.
  11. Я делал так же как автор вначале: В Scatter так: LR_IROM1 0x08000000 0x00200000 { ; load region size_region ER_IROM1 0x08000000 0x00200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } RW_IRAM1 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } RW_IRAM2 0x24000000 0x00080000 { .ANY (+RW +ZI) } } Потом в программе так: uint8_t L8_160x120[57600]__attribute__((section("RW_IRAM2")))={0x00};// uint8_t L82_160x120[57600]__attribute__((section("RW_IRAM2")))={0x00};// и это работало. Что не так делал автор поясните? Что такое Execution Region? Что такое выходная секция? и почему у меня работало а у автора нет?
  12. Учтем на будущее. Пока изображение устраивает. Важнее теперь это. Самодельный блок питания на импульсниках.
  13. Подаю снаружи. Если я заливаю дисплей одним цветом, то изображение однородно без полос. Это не оправдывает питание? При этом все равно питание может быть причиной полос на картинке?
  14. Здравствуйте! Имеется задача. С аналоговой камеры видеосигнал поступает в STM32 через встроенный АЦП. Необходимо вывести изображение на дисплей. В качестве видеобуфера используется RAM контроллера. Изображение размером 160x120, поэтому встроенной RAM достаточно. Изображение буду выводить через LTDC. Вот тут вычитал, что руководить этим должен LTDC. В смысле, если используется несколько видеобуферов, то LTDC должен формировать прерывание в конце кадра и в прерывании менять адреса видеобуфера. Запуск камеры, я так понимаю, тоже должен быть в этом прерывании. Но какими должны быть частоты работы камеры и вывода изображения на дисплей в этом случае? В смысле, кто быстрее должен работать? или нужно подобрать одинаковые частоты? Действительно ли требуется минимум 3 видеобуфера или при определенных соотношениях частот достаточно 2?