Forwarded from Интернет ненужных вещей (Oleg Artamonov)
У моего коллеги Саши Батина (техлида проекта Станции Стрит) — первая статья на Хабре.
https://habr.com/ru/companies/yandex/articles/925610/
https://habr.com/ru/companies/yandex/articles/925610/
🔥7
Forwarded from Toxblч. Не только Linux
This media is not supported in your browser
VIEW IN TELEGRAM
А вы знали, на что готовилось нападение?!
Альт Гном команда сбросила свою йадерку!
ALR! Это аур для альта! Приплыли. Хром можно поставить на раз два. Яндекс музыку на счёт три!
И для это нужен простой, современный набор команд в ваше чёрное окно
Ссылочек вам тут насыплю:
https://altlinux.space/aides-pkgs
https://altlinux.space/aides-community
https://t.iss.one/aides_space
📹 https://youtu.be/Pv-u9DShmWg и youtube версия для друга
С понедельником Вас!
@toxblh_linux
Альт Гном команда сбросила свою йадерку!
И для это нужен простой, современный набор команд в ваше чёрное окно
epmi 386131
alr repo add aides https://altlinux.space/aides-community/aides.git
alr in yandex-music
Ссылочек вам тут насыплю:
https://altlinux.space/aides-pkgs
https://altlinux.space/aides-community
https://t.iss.one/aides_space
С понедельником Вас!
@toxblh_linux
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1
Forwarded from dlinyj
Один мой хороший товарищ - @nikhotmsk, организует фестиваль самодельной электроники и компьютерного искусства в Рощино, Ленинградская область.
Восьмой по счету Undefined состоится 16 августа и будет идти два дня подряд. Никита активно ищет докладчиков, волонтеров и просто посетителей, кто желает отважиться на путешествие в живописный лес, навстречу 8-битным консолям, старинным компьютерным играм и демосцене!
Конечно, один анонс не сможет вместить всего, что может быть на Undefined, ведь это фестиваль всего на свете.
Итак:
Телеграм-канал Никиты: @undefined_diy_fest
Сайт фестиваля Undefined: https://undefined.chaosconstructions.ru/👈
@dlinyj_news
Восьмой по счету Undefined состоится 16 августа и будет идти два дня подряд. Никита активно ищет докладчиков, волонтеров и просто посетителей, кто желает отважиться на путешествие в живописный лес, навстречу 8-битным консолям, старинным компьютерным играм и демосцене!
Конечно, один анонс не сможет вместить всего, что может быть на Undefined, ведь это фестиваль всего на свете.
В своё время, я даже принимал участие в демосцене этого мероприятия и делал демку для "Микроши", которую можно увидеть тут.
Итак:
Телеграм-канал Никиты: @undefined_diy_fest
Сайт фестиваля Undefined: https://undefined.chaosconstructions.ru/
@dlinyj_news
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
Forwarded from Грокаем C++
Volatile
#опытным
Ключевое слово, которое не embedded С++ разработчик вряд ли когда-нибудь встречал в код. Сегодня мы поговорим, для чего оно используется.
Предположим, что у нас есть переменная keyboard_press, память под которую замаплена на память устройства ввода-вывода. Когда нажимается кнопка клавиатуры, изменяется переменная keyboard_press. Оставим сам маппинг за скобками и попробуем написать какую-то детсадовскую логику с переменной keyboard_press:
Что в ассемблере?
А где цикл? А где инкремент count_test?
На самом деле код собран с -О3 и компилятор просто выкинул цикл. Он не видит, что в данном коде где-то еще изменяется keyboard_press, поэтому разумно полагает, что мы написали бесконечный цикл без сайдэффектов, который вообще-то ub.
Но keyboard_press может изменяться, просто это никак не понятно по коду программы.
Теоретически компилятор мог бы увидеть, что мы замапили устройство ввода-вывода на эту переменную. А может и не увидеть. Если маппинг происходит в другой единице трансляции, то точно не увидит. Компилятор технически не может знать всего, что творится в коде. Он оптимизирует какой-то локальный участок кода на основе своих эвристик, которые просто не могут учитывать весь код программы.
Однако компилятор точно видит тип переменной. И на него мы можем повлиять. Вот чтобы отучить компилятор от таких фокусов, нужно пометить keyboard_press ключевым словом volatile.
Теперь ассемблер выглядит так:
Все, что делает volatile - все операции над переменной становятся видимыми спецэффектами и не могут быть оптимизированы компилятором. Ну и еще операции над volitile переменными не могут переупорядочиваться с другими видимыми спецэффектами в порядке кода программы.
Говорится ли здесь что-нибудь о потоках? Нет! Здесь говорится только об оптимизациях компилятора.
Поэтому использовать volatile можно только для обработки сигналов(хэндлер которых вызывается в том же прерванном потоке), либо в тех местах, где вы работаете с переменной строго в одном потоке.
Доступ к volatile переменным не атомарный + с их помощью нельзя делать синхронизацию неатомарных переменных между потоками, так как volitile не подразумевает барьеров памяти.
Именно из-за этих ограничений volatile используется в очень узком спектре задач работы с I/O. Во всех остальных случаях в С++ используются атомики.
Don't be optimized out. Stay cool.
#cppcore #multitasking #memory
#опытным
Ключевое слово, которое не embedded С++ разработчик вряд ли когда-нибудь встречал в код. Сегодня мы поговорим, для чего оно используется.
Предположим, что у нас есть переменная keyboard_press, память под которую замаплена на память устройства ввода-вывода. Когда нажимается кнопка клавиатуры, изменяется переменная keyboard_press. Оставим сам маппинг за скобками и попробуем написать какую-то детсадовскую логику с переменной keyboard_press:
int keyboard_press = 0;
size_t count_test = 0;
void some_function() {
while(keyboard_press == 0) {
count_test++;
}
// doing stuff
}
Что в ассемблере?
some_function():
mov eax, DWORD PTR keyboard_press[rip]
test eax, eax
jne .L1
.L3: // это кстати пустой бесконечный цикл, куда нельзя попасть и откуда нельзя выбраться
jmp .L3
.L1:
ret
count_test:
.zero 8
keyboard_press:
.zero 4
А где цикл? А где инкремент count_test?
На самом деле код собран с -О3 и компилятор просто выкинул цикл. Он не видит, что в данном коде где-то еще изменяется keyboard_press, поэтому разумно полагает, что мы написали бесконечный цикл без сайдэффектов, который вообще-то ub.
Но keyboard_press может изменяться, просто это никак не понятно по коду программы.
Теоретически компилятор мог бы увидеть, что мы замапили устройство ввода-вывода на эту переменную. А может и не увидеть. Если маппинг происходит в другой единице трансляции, то точно не увидит. Компилятор технически не может знать всего, что творится в коде. Он оптимизирует какой-то локальный участок кода на основе своих эвристик, которые просто не могут учитывать весь код программы.
Однако компилятор точно видит тип переменной. И на него мы можем повлиять. Вот чтобы отучить компилятор от таких фокусов, нужно пометить keyboard_press ключевым словом volatile.
volatile int keyboard_press = 0;
size_t count_test = 0;
// same
Теперь ассемблер выглядит так:
some_function():
mov eax, DWORD PTR keyboard_press[rip]
test eax, eax
jne .L1
mov rax, QWORD PTR count_test[rip]
add rax, 1
.L3:
mov edx, DWORD PTR keyboard_press[rip]
mov rcx, rax
add rax, 1
test edx, edx
je .L3
mov QWORD PTR count_test[rip], rcx
.L1:
ret
Все, что делает volatile - все операции над переменной становятся видимыми спецэффектами и не могут быть оптимизированы компилятором. Ну и еще операции над volitile переменными не могут переупорядочиваться с другими видимыми спецэффектами в порядке кода программы.
Говорится ли здесь что-нибудь о потоках? Нет! Здесь говорится только об оптимизациях компилятора.
Поэтому использовать volatile можно только для обработки сигналов(хэндлер которых вызывается в том же прерванном потоке), либо в тех местах, где вы работаете с переменной строго в одном потоке.
Доступ к volatile переменным не атомарный + с их помощью нельзя делать синхронизацию неатомарных переменных между потоками, так как volitile не подразумевает барьеров памяти.
Именно из-за этих ограничений volatile используется в очень узком спектре задач работы с I/O. Во всех остальных случаях в С++ используются атомики.
Don't be optimized out. Stay cool.
#cppcore #multitasking #memory
❤10❤🔥2👍2
Forwarded from Embedded Doka (Dmitry Murzinov)
В электронике тоже есть своё правило№34:
Правило#35: если нет микросхемы, перепроверь еще раз у китайцев
Правило#36: всегда существует еще болеетупая дешевая дискретная реализация нужного функционала из говна и палок на рассыпухе
Правило#37: рассыпуха под рукой всегда будет не той мощности, которая нужна в данный момент, поэтому TO-3 балласт будет соседствовать с 0201
Правило#38: Всегда существует реализация которая займет больше времени на разработку и отладку и вы выберете именно ее
Правило#39: [Если вы не китаец, то] что бы вы не делали у китайцев этот же функционал реализован проще
@embedoka
На любую вашу хотелку существует готовая реализация в интегральном исполнении (с) Doka 😅
Правило#35: если нет микросхемы, перепроверь еще раз у китайцев
Правило#36: всегда существует еще более
Правило#37: рассыпуха под рукой всегда будет не той мощности, которая нужна в данный момент, поэтому TO-3 балласт будет соседствовать с 0201
Правило#38: Всегда существует реализация которая займет больше времени на разработку и отладку и вы выберете именно ее
Правило#39: [Если вы не китаец, то] что бы вы не делали у китайцев этот же функционал реализован проще
@embedoka
❤13👍1
Forwarded from Segment@tion fault
This media is not supported in your browser
VIEW IN TELEGRAM
Это я, сижу жду когда ИИ меня наконец заменит на работе
😁15
Forwarded from Единички Нолики
RP2350 Hacking Challenge
Raspberry Pi неожиданно показали отличный пример системного подхода к безопасности: как грамотно организовать bug bounty и превратить это в удачный пиар.
Для начала их контроллер использовался в бейдже на прошлогоднем DEF CON 2024 — крупнейшей в мире конференции по информационной безопасности. Нужно отметить, что DEF CON ежегодно собирает около 30 000 человек — профессионалов и энтузиастов в сфере безопасности. Это сильно гиковская тусовка, собирающая лучших хакеров со всего мира.
Одним из традиционных развлечений конференции является конкурс с бейджем — стилизованной печатной платой. Для одних это способ социализации через взаимодействие бейджей, для других — возможность пореверсить и взломать устройство, что и является сутью конкурса. Для третьих — шанс попрограммировать на новой архитектуре. Взломать бейдж — всегда азартная и престижная часть DEF CON.
Во-вторых, Raspberry не просто предоставили свой контроллер для создания бейджа — они объявили отдельный приз за успешое извлечение ключа из OTP. За время конференции никто с задачей не справился, что вполне логично: большинство приехало питьпиво Club-Mate и развлекаться. Хардкорный хакинг обычно начинается уже после конференции, на воодушевленном подъеме. Поэтому Raspberry продлили конкурс до конца года и увеличили призовой фонд с $10 000 до $20 000. И это очень правильный шаг: если вас не взламывают (за предложенные деньги) — это не значит, что вас невозможно взломать, а скорее, что за эти деньги вы просто никому не нужны.
В итоге их поломали аж пять команд — и довольно разными способами. Все подробно описано в их блоге:
1️⃣ “Hazardous threes” – Aedan Cullen
2️⃣ USB bootloader single-instruction fault with supply-voltage injection – Marius Muench
3️⃣ Signature check single-instruction fault with laser injection – Kévin Courdesses
4️⃣ Extracting antifuse secrets from RP2350 by FIB/PVC – IOActive
5️⃣ Glitch detector evaluation, and OTP read double-instruction fault with EM injection – Hextree
По итогу:
- Raspberry, по цене полугодовой зарплаты одного сильного инженера, получили пять уникальных методов взлома своего чипа — и понимание, как защищаться в следующих ревизиях.
- Отлично прорекламировали конкурс и завлекли исследователей, по сути сунув чипы каждому посетителю прямо в карман
- Назначили достойные призы, не пожадничали и расширили фонд, не обидев ни одну команду — все участники реально проделали крутую работу
- По результатам открыто рассказали о взломах, дав отличный пиар и себе, и исследователям
- Для общественности это хороший набор примеров того, что следует учитывать при проектировании безопасных чипов
До этого момента я не воспринимал RP2350 как сколько-нибудь серьёзную платформу в плане безопасности. Сейчас смотрю кардинально иначе. Может быть, потому что не было никаких ожиданий — а в итоге увидел честный, правильный подход от команды, которая действительно старается.
Возможно, такой качественный результат конкурса получился потому, что подход Raspberry одновременно и привлёк сильных ресерчеров, и за счёт необходимости хоть немного вложиться (купить железо) — отсеял тех, кто обычно приходит на багбаунти ради копейки, заваливая платформы потоком низкосортных отчётов. Чаще всего — это выводы сканеров или, теперь уже, голый выхлоп ChatGPT без малейшей проверки.
Оставлю как напоминание, как грамотно организовать bug bounty.
Как поломали RP2350 ⬇️
Raspberry Pi неожиданно показали отличный пример системного подхода к безопасности: как грамотно организовать bug bounty и превратить это в удачный пиар.
Для начала их контроллер использовался в бейдже на прошлогоднем DEF CON 2024 — крупнейшей в мире конференции по информационной безопасности. Нужно отметить, что DEF CON ежегодно собирает около 30 000 человек — профессионалов и энтузиастов в сфере безопасности. Это сильно гиковская тусовка, собирающая лучших хакеров со всего мира.
Одним из традиционных развлечений конференции является конкурс с бейджем — стилизованной печатной платой. Для одних это способ социализации через взаимодействие бейджей, для других — возможность пореверсить и взломать устройство, что и является сутью конкурса. Для третьих — шанс попрограммировать на новой архитектуре. Взломать бейдж — всегда азартная и престижная часть DEF CON.
Во-вторых, Raspberry не просто предоставили свой контроллер для создания бейджа — они объявили отдельный приз за успешое извлечение ключа из OTP. За время конференции никто с задачей не справился, что вполне логично: большинство приехало пить
В итоге их поломали аж пять команд — и довольно разными способами. Все подробно описано в их блоге:
1️⃣ “Hazardous threes” – Aedan Cullen
2️⃣ USB bootloader single-instruction fault with supply-voltage injection – Marius Muench
3️⃣ Signature check single-instruction fault with laser injection – Kévin Courdesses
4️⃣ Extracting antifuse secrets from RP2350 by FIB/PVC – IOActive
5️⃣ Glitch detector evaluation, and OTP read double-instruction fault with EM injection – Hextree
По итогу:
- Raspberry, по цене полугодовой зарплаты одного сильного инженера, получили пять уникальных методов взлома своего чипа — и понимание, как защищаться в следующих ревизиях.
- Отлично прорекламировали конкурс и завлекли исследователей, по сути сунув чипы каждому посетителю прямо в карман
- Назначили достойные призы, не пожадничали и расширили фонд, не обидев ни одну команду — все участники реально проделали крутую работу
- По результатам открыто рассказали о взломах, дав отличный пиар и себе, и исследователям
- Для общественности это хороший набор примеров того, что следует учитывать при проектировании безопасных чипов
До этого момента я не воспринимал RP2350 как сколько-нибудь серьёзную платформу в плане безопасности. Сейчас смотрю кардинально иначе. Может быть, потому что не было никаких ожиданий — а в итоге увидел честный, правильный подход от команды, которая действительно старается.
Возможно, такой качественный результат конкурса получился потому, что подход Raspberry одновременно и привлёк сильных ресерчеров, и за счёт необходимости хоть немного вложиться (купить железо) — отсеял тех, кто обычно приходит на багбаунти ради копейки, заваливая платформы потоком низкосортных отчётов. Чаще всего — это выводы сканеров или, теперь уже, голый выхлоп ChatGPT без малейшей проверки.
Оставлю как напоминание, как грамотно организовать bug bounty.
Как поломали RP2350 ⬇️
🔥14👍3❤1
Forwarded from Единички Нолики
1️⃣ “Hazardous threes” – Aedan Cullen
OTP хранит не только ключи, но и критические настройки (debug enable), а также модуль имеет логику-интерфейс (и стейт-машину), которая должна запоминать значение в условиях нестабильного питания. Вариация power-glitch, при которой при reset из OTP считывается неверное значение, и остаётся включённый JTAG. [github] [video]
2️⃣ USB bootloader single-instruction fault with supply-voltage injection – Marius Muench
Недостаток API в BootROM. Команда которая называется REBOOT_TYPE_PC_SP и позволяет сделать soft-reset с нужным PC и SP, конечно же, только из доверенного загрузчика. С помощью fault injection во время команды к USB bootloader можно было изменить команду reboot API и вызвать soft-reset с PC в RAM, где уже был наш невирицированный код.
3️⃣ Signature check single-instruction fault with laser injection – Kévin Courdesses
Классика, fault injection на функции проверки подписи. RP2350 имеет voltage-glitch detector, поэтому гличили лазером.
4️⃣ Extracting antifuse secrets from RP2350 by FIB/PVC – IOActive
Ликнули OTP значения под SEM-микроскопом. Писал об этом выше.
5️⃣ Glitch detector evaluation, and OTP read double-instruction fault with EM injection – Hextree
Атакуем сам glitch detector. С помощью electromagnetic fault injection (EMFI) можно найти место на чипе, где гличинг не будет ловиться детектором.
OTP хранит не только ключи, но и критические настройки (debug enable), а также модуль имеет логику-интерфейс (и стейт-машину), которая должна запоминать значение в условиях нестабильного питания. Вариация power-glitch, при которой при reset из OTP считывается неверное значение, и остаётся включённый JTAG. [github] [video]
2️⃣ USB bootloader single-instruction fault with supply-voltage injection – Marius Muench
Недостаток API в BootROM. Команда которая называется REBOOT_TYPE_PC_SP и позволяет сделать soft-reset с нужным PC и SP, конечно же, только из доверенного загрузчика. С помощью fault injection во время команды к USB bootloader можно было изменить команду reboot API и вызвать soft-reset с PC в RAM, где уже был наш невирицированный код.
3️⃣ Signature check single-instruction fault with laser injection – Kévin Courdesses
Классика, fault injection на функции проверки подписи. RP2350 имеет voltage-glitch detector, поэтому гличили лазером.
4️⃣ Extracting antifuse secrets from RP2350 by FIB/PVC – IOActive
Ликнули OTP значения под SEM-микроскопом. Писал об этом выше.
5️⃣ Glitch detector evaluation, and OTP read double-instruction fault with EM injection – Hextree
Атакуем сам glitch detector. С помощью electromagnetic fault injection (EMFI) можно найти место на чипе, где гличинг не будет ловиться детектором.
🔥10
Forwarded from Tänään ja ensi viikkona
Microchip анонсировали огромное количество 32-разрядных МК в низкоценовом сегменте. Даже не читая новостей, можно понять, что дела у компании идут не очень хорошо, и этим шагом компания пытается бороться за существование, взяв одну из долей рынка.
Я как разработчик продукцию Microchip для тех же ГБК не рассматривал, так как у их контроллеров, по крайней мере, раньше, был важнейший косяк — для прошивки нужен был специализированный программатор, который стоит очень дорого. Так, PICKIT-5 стоит на алиэкспрессе немилосердные 11кР, и это в то время, когда STM'овский "свисток" "нисколько не стоит", аналогичная ситуация для WCH, а для ESP32 программатор вовсе не нужен. Благо в последних контроллерах серии PIC32 я увидел JTAG, а значит, есть смутная надежда прошиваться через него.
Я как разработчик продукцию Microchip для тех же ГБК не рассматривал, так как у их контроллеров, по крайней мере, раньше, был важнейший косяк — для прошивки нужен был специализированный программатор, который стоит очень дорого. Так, PICKIT-5 стоит на алиэкспрессе немилосердные 11кР, и это в то время, когда STM'овский "свисток" "нисколько не стоит", аналогичная ситуация для WCH, а для ESP32 программатор вовсе не нужен. Благо в последних контроллерах серии PIC32 я увидел JTAG, а значит, есть смутная надежда прошиваться через него.
Forwarded from встраиваемый АлиЭкспресс | embedded AliExpress
Аппарат точечной сварки FNIRSI SWM-10 по 🫳 людской 🫳 цене с доставкой из РФ.
https://market.yandex.ru/cc/7DvniA
https://market.yandex.ru/cc/7DvniA
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8 2 2
Обзор схемотехники и микроэлектронного исполнения разных типов балансиров
YouTube
Не заряжай аккумуляторы! Пока не посмотришь это видео про балансиры!
https://alii.pub/758wpt?erid=2SDnjbvg5yW Простейший пассивный Балансир брал здесь
https://alii.pub/758xep?erid=2SDnjeP3FQ8 Плата защиты с пассивным балансиром
https://alii.pub/758xa8?erid=2SDnjeQWZic Маленький конденсаторный Балансир брал здесь
https://a…
https://alii.pub/758xep?erid=2SDnjeP3FQ8 Плата защиты с пассивным балансиром
https://alii.pub/758xa8?erid=2SDnjeQWZic Маленький конденсаторный Балансир брал здесь
https://a…
🔥7
Forwarded from Embeddemy
Давно не писал, пора наверстывать. Запускаю рубрику #косяки — тут буду делиться ошибками, которые заставляли краснеть своей тупостью или вгоняли в стресс своей неочевидностью 🤦♂️
I Ситуация😫
Спроектировал измеритель тока (80 Гц; ±2 А) на шунтe: дифф-усилитель + смещение (виртуальный ноль), чтобы мерить ток в обе стороны. Смещение дал делителем прямо на «плюс» ОУ. Получил плату. Ждал ровные 1,65 В (половина питания 3,3 В), а увидел колебания 1,65 ± 0,25 В в такт входному сигналу и насыщение (фото "BEFORE (1)"). Причина прозаична: не согласовал импеданс делителя с импедансом цепи обратной связи ОУ. Банально проморгал. Всегда моделируйте!
II Что такое согласование импедансов?✍️
Упрощенно в схемах НЧ я люблю представлять импеданс как величину тока (I = V/Z), который способна выдать схема (выходной импеданс) или который схема потребляет (входной импеданс):
1) "Высокий" выходной импеданс → схема выдает "маленький" ток.
2) "Низкий" входной импеданс → схема потребляет "большой" ток.
(поместил в кавычки, так как разница познается в сравнении токов друг с другом)
Выбор соотношения этих токов и является согласованием (в аудио и НЧ). В RF/ВЧ схемотехнике при "согласовании" добиваются равенства импедансов.
III Как их согласовывать?💔
1) Если нужно, чтобы смещение накладывалось на сигнал → источник смещения должен выдавать на порядки больший ток, чем цепь сигнала потреблять (мой случай и всегда при создании виртуальных земель)
2) Если нужно, чтобы смещение было невидимым для сигнала → возможный ток источника смещения должен быть на порядки меньше потребляемого сигналом тока (например при детектировании отрыва антенны/датчика от разъема)
IV Что в моем случае?😮
Чтобы не возиться с токами в двух плечах, представим делитель как эквивалент Тевенина — идеальный источник + последовательное сопротивление:
Vэкв = 3,3 В / 2 = 1,65 В
Rэкв = Rtop∥Rbot = 5 кОм (получаем выходное сопротивление)
1) С делителя мы можем максимум забрать: I=1.65 В / 5 кОм = 330 µA
2) Пиковое потребление в цепи обратной связи: Iload=50 µA (пик положительной полуволны, смотрел в LTspice)
Запас по току ≈ 7 : 1. Для виртуальной земли этого мало — нужно хотя бы на порядок.
Чтобы получить наблюдаемые колебания ±0,25 B, надо помножить вых.сопротивление на пиковый ток U=Iload x Rэкв = 50 µA x 5 кОм = 0.25 В.
V Как обеспечить надежное смещение?💡
1) Вариант "и так сойдет" - уменьшить ток обратной связи: увеличить на порядки сопротивления резисторов в цепи обратной связи (фото "AFTER (1)"). Амплитуда колебаний напряжения смещения уменьшится, но также уменьшится точность из-за шумов больших сопротивлений и увеличения входного тока смещения. Подойдет, если нет требований к точности и ограниченный бюджет с местом на плате.
2) Вариант оптимальный - поднять ток делителя: подать смещение с делителя не напрямую, а через ОУ-повторитель: его вход почти ничего не потребляет (мегаомы) и не окажет влияние на сигнал с делителя, а выход способен качать миллиамперы и состыкуется с токами в цепи обратной связи (фото "AFTER (2)"). Надежно, просто и сердито - рекомендую.
3) Вариант элитный - поднять ток схемы смещения: убрать делитель и поставить микросхему опорного напряжения с mA-классом выходного тока (фото "REF (3)"). Мой любимый вариант, если серия небольшая и есть бюджет на компоненты.
@embeddemy #косяки #импеданс #LTspice #измерение_тока
I Ситуация
Спроектировал измеритель тока (80 Гц; ±2 А) на шунтe: дифф-усилитель + смещение (виртуальный ноль), чтобы мерить ток в обе стороны. Смещение дал делителем прямо на «плюс» ОУ. Получил плату. Ждал ровные 1,65 В (половина питания 3,3 В), а увидел колебания 1,65 ± 0,25 В в такт входному сигналу и насыщение (фото "BEFORE (1)"). Причина прозаична: не согласовал импеданс делителя с импедансом цепи обратной связи ОУ. Банально проморгал. Всегда моделируйте!
II Что такое согласование импедансов?
Упрощенно в схемах НЧ я люблю представлять импеданс как величину тока (I = V/Z), который способна выдать схема (выходной импеданс) или который схема потребляет (входной импеданс):
1) "Высокий" выходной импеданс → схема выдает "маленький" ток.
2) "Низкий" входной импеданс → схема потребляет "большой" ток.
(поместил в кавычки, так как разница познается в сравнении токов друг с другом)
Выбор соотношения этих токов и является согласованием (в аудио и НЧ). В RF/ВЧ схемотехнике при "согласовании" добиваются равенства импедансов.
III Как их согласовывать?
1) Если нужно, чтобы смещение накладывалось на сигнал → источник смещения должен выдавать на порядки больший ток, чем цепь сигнала потреблять (мой случай и всегда при создании виртуальных земель)
2) Если нужно, чтобы смещение было невидимым для сигнала → возможный ток источника смещения должен быть на порядки меньше потребляемого сигналом тока (например при детектировании отрыва антенны/датчика от разъема)
IV Что в моем случае?
Чтобы не возиться с токами в двух плечах, представим делитель как эквивалент Тевенина — идеальный источник + последовательное сопротивление:
Vэкв = 3,3 В / 2 = 1,65 В
Rэкв = Rtop∥Rbot = 5 кОм (получаем выходное сопротивление)
1) С делителя мы можем максимум забрать: I=1.65 В / 5 кОм = 330 µA
2) Пиковое потребление в цепи обратной связи: Iload=50 µA (пик положительной полуволны, смотрел в LTspice)
Запас по току ≈ 7 : 1. Для виртуальной земли этого мало — нужно хотя бы на порядок.
Чтобы получить наблюдаемые колебания ±0,25 B, надо помножить вых.сопротивление на пиковый ток U=Iload x Rэкв = 50 µA x 5 кОм = 0.25 В.
V Как обеспечить надежное смещение?
1) Вариант "и так сойдет" - уменьшить ток обратной связи: увеличить на порядки сопротивления резисторов в цепи обратной связи (фото "AFTER (1)"). Амплитуда колебаний напряжения смещения уменьшится, но также уменьшится точность из-за шумов больших сопротивлений и увеличения входного тока смещения. Подойдет, если нет требований к точности и ограниченный бюджет с местом на плате.
2) Вариант оптимальный - поднять ток делителя: подать смещение с делителя не напрямую, а через ОУ-повторитель: его вход почти ничего не потребляет (мегаомы) и не окажет влияние на сигнал с делителя, а выход способен качать миллиамперы и состыкуется с токами в цепи обратной связи (фото "AFTER (2)"). Надежно, просто и сердито - рекомендую.
3) Вариант элитный - поднять ток схемы смещения: убрать делитель и поставить микросхему опорного напряжения с mA-классом выходного тока (фото "REF (3)"). Мой любимый вариант, если серия небольшая и есть бюджет на компоненты.
@embeddemy #косяки #импеданс #LTspice #измерение_тока
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10
Forwarded from Zenembed
Как-то совсем незаметно прошло очень важное изменение от ST. Теперь в CubeMX 6.15.0 есть полная поддержка
Для меня это крайне хорошая новость, т.к. теперь можно использовать всю инфраструктуру
Я не успел ещё протестировать
Это происходит потому, что в файле
В любом случае, проблему наверняка скоро поправят. А я думаю о том, чтобы написать третью статью из серии про работу с STM - в этот раз с акцентом на
CMake toolchain
. То есть теперь при выборе Toolchain/IDE -> CMake
ниже появится новый пункт Default Compiler/Linker
, и там можно выбрать между GCC
и Starm-Clang
.Для меня это крайне хорошая новость, т.к. теперь можно использовать всю инфраструктуру
clang
без необходимости думать о том, как подружить clangd
со специфическими GCC-макросами. Наконец-то на контроллерах можно работать с единой экосистемой.Я не успел ещё протестировать
Starm-Clang
, зато в старом конфиге (с GCC
), что-то идет не по плану и обновление ломает генерацию кода. Если воспользоваться инструкцией из моей статьи, то код просто не будет собираться, с ошибками вроде:error: implicit declaration of function ‘__LDREXW’
error: implicit declaration of function ‘__STREXW’
Это происходит потому, что в файле
CMakeLists.txt
не появилась очень нужная там строка:# Include toolchain file
include("cmake/gcc-arm-none-eabi.cmake")
14
и 15
строки содержат два \n
- как будто эти строки должны были появиться между ними, но что-то пошло не так.В любом случае, проблему наверняка скоро поправят. А я думаю о том, чтобы написать третью статью из серии про работу с STM - в этот раз с акцентом на
CMake toolchain
и более глубокой настройкой clangd
и clang-format
.🔥5
Интересная сборка АКБ LiFePO4 12V 30Ah
В ЮТ, оказывается, много скама по типу сборок на сотни ампер никелевой лентой 0.15мм, так что качественными мы делимся. Судя по части с тестированием, использовать для варки риса и чая...
В ЮТ, оказывается, много скама по типу сборок на сотни ампер никелевой лентой 0.15мм, так что качественными мы делимся. Судя по части с тестированием, использовать для варки риса и чая...
YouTube
Build a Lifepo4 Battery 12V 30Ah - Using 8pcs 32140 cell battery
In this video, i will DIY a LiFePO4 Battery 12V 30Ah For Car, Solar Power, Mobihome, RV, Caravan, Camping, Boat, Outdoor
- I am using 8PCS Lithium lifepo4 32140 3.2v/15Ah :
https://s.shopee.vn/3L8h4km4t9
- BMS 300 4S LiFePO4 Battery : https://s.shopee.vn/9UjKQ7ofom…
- I am using 8PCS Lithium lifepo4 32140 3.2v/15Ah :
https://s.shopee.vn/3L8h4km4t9
- BMS 300 4S LiFePO4 Battery : https://s.shopee.vn/9UjKQ7ofom…
❤🔥3🔥1
bbe0d11814a285b5765cb18c332c1d18.pdf
17.8 MB
Справочник инженера-технолога "Трафареты для SMT-монтажа" | Трафарез
🔥8