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

=AK=

Свой
  • Постов

    3 234
  • Зарегистрирован

  • Посещение

  • Победитель дней

    5

Сообщения, опубликованные =AK=


  1. 2 minutes ago, Arlleex said:

    А Вы хоть когда-нибудь открывали сниффер USB-порта, даже не нагруженного? С ПК под виндой или линухой? И что там, хоть раз удалось поймать 19 балков на один и тот же EP внутри кадра (1 мс)? А хотя бы 5?

    Да. В былые времена я много чего рассматривал в USB, по долгу службы, так сказать. В ходе разработки некого USB-"осциллографа". Правда, мы от FS и балк быстро отказались, но начинали с этого.

  2. On 5/22/2023 at 4:17 AM, jcxz said:

    Втыкаю USB-свисток на FT232. Наблюдаю в его дескрипторе 2 ep (IN и OUT): по 64 байта каждая. Соответственно - макс.размер кадра в котором передаются данные USB-CDC = 64 байта. Если по UART пришёл непрерывный кадр размером 70 байт, то очевидно USB-хосту он будет отправлен как минимум в двух USB-bulk-кадрах

    Очевидно вы с USB знакомы понаслышке. То, что вы называете "размер кадра" (data payload), практически ни на что не влияет. Об этом в спецификации USB сказано так: The division of the data stream into smaller chunks is not visible to the client

    USB СDC реализован поверх USB bulk. При размере "кадра" 64 байта, в одном фрейме FS (т.е. за 1 мс) передается до 19 "кадров" балк, т.е до 1216 байт. В FT232 передающий буфер имеет размер  256 байт, куда пакет размером 70 байт прекрасно поместится и будет отправлен в одном фрейме в виде двух "кадров": первый "кадр" 64 байта, следующий за ним "кадр" 6 байт.

    С приходом переданного фрейма в приемном буфере USB хоста весь пакет в 70 байт появится сразу, одномоментно.

    При желании хост может определить, что пакет пришел целиком, а не является частью какого-то очень длинного пакета, не уместившегося в один фрейм. Но для этого придется отказаться от услуг CDC и опуститься непосредственно на уровень балк. Конец пакета обозначен "кадром" длиной менее 64 байт. Если длина передаваемого пакета кратна 64 байтам, то окончание пакета обозначается "кадром" нулевой длины.

    Случаи перегруженного USB можно не рассматривать в силу их экзотичности.

  3. On 4/29/2023 at 6:50 PM, borodach said:

    Позволю немного позанудствовать, но я педант. Тиристор - это общее название управляемых ПП приборов. В эту группу входят динисторы, тринисторы, симисторы

    В рамках формальной русскоязычной терминологии вы правы. Но слово тиристор в английском вполне конкретно обозначает то, что в русском (редко кто) называет тринистором. Похоже что слово тринистор в недалеком будущем совсем перестанет употребляться, останутся термины как в английском:
    тиристор - thyristor
    динистор - diac
    симистор - triac

  4. 4 hours ago, khlenar said:

    напряжение полуволны не доходит до нуля и поэтому симистор не выключается.

    Симистор, как и тиристор, выключится тогда, когда ток через него будет равен нулю. При этом какое на нем будет напряжение, более-менее не играет рояли.

    Соответственно, при индуктивной нагрузке, когда фаза тока сильно отличается от фазы напряжения, рассуждать о напряжениях не имеет большого смысла.

  5. 3 hours ago, Evgenij said:

    Компиляция файла ассемблера с помощью MPLAB IDE V8.92 прошла успешно, но файл mp2hex.exe не создается (Error spawning mp2hex.exe). Сталкивался ли кто-то с таким?

    А не является ли соответствующая папка read-only?

  6. 16 minutes ago, jcxz said:

    те же самые 2 строки, только элементов поболее. Где вы углядели запятую перед "OK" - понятия не имею.

    Запятые были между байтами ответа "20,15,10,200,7" во всех версиях описания АТ комманд, от самых ранних, до самой последней. А вы полагаете, что между 7 и "ОК" будет символ перевода строки? Только CR или два символа, CR и LF?

    Удивительно, что вы не понимаетете этих вопросов, коль скоро "у вас есть работающий проект". Вы сами этот проект писали, или вам его написали другие люди, после чего "он у вас есть"?

    Я это спрашиваю, потому что мне удивительно, чтобы имея столь нечеткое описание, человек, который сам разбирал этот хлам, вдруг удивлялся, когда этот нечеткий хлам называют хламом. То ли вы не сами писали код, то ли ваши требования к качеству кода очень непритязательны, поэтому вы довольствуетесь чем-то вроде фуззи-логики вместо вменяемого описания.

  7. 23 minutes ago, jcxz said:

    А что такое "20,15,10,200,7" и причём оно тут? - понятия не имею.

    Я же сказал, что это ответ из раздела Example. В этом разделе (который есть и в v3.0.1 на стр 47) в ответ на команду AT+CIPBUFSTATUS может быть, например, получен ответ 20,15,10,200,7 

    А вы полагаете, что на самом деле ответ будет 20,15,10,200,7 ОК, я правильно вас понял? Между 7 и ОК пробел или запятая? Или вам все равно, вы в своей программе "ОК" вообще не ожидаете, чтобы не париться?

  8. 3 hours ago, jcxz said:

    Не понятно - откуда это откопали??? Открываю даташит на AT-команды ESP8266 v3.0.1 от 2019г

    По-моему, я внятно, черным по белому написал про проект 8-летней давности. Оттуда же и даташит, самый свежий из имевшихся на тот момент. Что вам в этом непонятно?

    Наличие "работающего проекта" вряд ли может служить доводом. Требования, предъявляемые к "работающим проектам" у разных разработчиков и заказчиков могут сильно отличаться.

    В частности, в современной версии АТ комад, выданной Гуглом, ver 1.5.4,  описание AT+CIPBUFSTATUS – Check status of TCP-send-buffer осталось, судя по всему, неизменным, каким оно было 8 лет назад. Если вам сейчас стало понятно, когда надо ожидать "ОК", будьте добры, растолкуйте простыми словами. Если, как в примере, я послал команду AT+CIPBUFSTATUS и получил на нее ответ 20,15,10,200,7, то когда придет "ОК"? До того, как пришел ответ 20,15,10,200,7? После того? Или вообще не придет? Замечу, в вашем описании так и не определено, когда придет "ОК".

    А на v3.0.1 ссылочку не пришлете?

  9. 16 hours ago, jcxz said:

    Приведите, пожалуйста, конкретный пример "дырявости". И - какую именно ситуацию "невозможно определить"?

    Мне очень не хочется поднимать свои исходники 8-летней давности и перечитывать документацию на АТ команды. Просто примите к сведению. Впрочем, никто не мешает вам самому прочитать китайскую документацию, пропарсить ответы на АТ команды и выстроить машины состояний.

    PS: конкретный пример, берем ESP8266 AT Instruction Set, rev 0.60, стр 58, команда 7. AT+CIPBUFSTATUS – Check status of TCP-send-buffer

    В разделе Example:
    Single connection:
    AT+CIPBUFSTATUS returns 20,15,10,200,7
    20 : means the latest segment ID is 19, next time we call AT+CIPSENDBUF, the segment ID returned will be 20;
    15: means TCP segment of which ID is 15 is the latest segment that sent(may not succeed);
    10: means TCP segment of which ID is 10 sent successfully;
    200: TCP-send-buffer remain 200 bytes that available;
    7: available TCP queue number, it’s not reliable; when queue number is 0, no more TCP data can be sent

    В разделе Response:
    <next segment ID>, < segment ID of which has sent >, < segment ID of which sent successfully>, <remain buffer size>, <queue number>
    OK
    If connection is not established, returns ERROR

    Как видите, Example как-то соотносится с Response, но нет обещанного ОК, когда этот ОК появится и появится ли вообще - неизвестно, а реакция "ненадежна" по собственному признанию авторов. Ну и через "китайский английский" продираться тоже удовольствия мало.

  10. 25 minutes ago, jcxz said:

    Конкретные факты приведите.

    Китайцы написали АТ команды для человека, который сидит за терминалом, посылает команды и смотрит ответы. У них ответы не систематизированы, программно занимает много сил на то чтобы их обработать. Вдобавок ответы "дырявые", многие ситуации невозможно определить. Программно обрабатывать ответы китайских АТ команд - бессмысленная трата времени.

    То есть, ответы на АТ команды ESP представляют собой очень рыхлый псевдо-язык, а на создание интерпретатора этого языка требуется неоправданно много усилий.

  11. On 3/24/2023 at 5:54 AM, jcxz said:

    Прошейте в ESP AT-командную прошивку и управляйте ею с STM-а AT-командами.

    Лучше вообще выбросить STM и написать прикладную программу для ESP в среде Ардуино.

    В крайнем случае, если от STM избавиться не получится, то хотя бы не связываться с AT командами для ESP, это тупиковый путь. Они криво реализованы.

    В разы проще и быстрее создать связное приложение для ESP в среде Ардуино. Тогда для реализации MQTT клиента можно взять готовую библиотеку PubSubClient.

  12. Чаще всего слово "симистор" каверкают, называя его "семистором", от слова "семит", наверное. Но впервые вижу настойчивое написание с двумя 'м'. Буду ждать, когда кто-тобудь напишет его с двумя 'и', "симмиистор".

  13. On 2/15/2023 at 3:41 AM, zheka said:

    Нужно связать два микроконтроллера на расстоянии 20 метров, планирую прикрутить к ним RS485.

    В таком случае очень желательно использовать RS422, т.е. одна витая пара для работы в одном направлении, вторая витая пара - для работы в обратном направлении. Шинники RS485 годятся, но их надо использовать в режиме RS422, т.е. передатчик все время включен. При работе в режиме RS422 можно вообще не беспокоиться о протоколе и просто гнать данные в обоих направлениях как заблагорассудится, а помехоустойчивость при этом будет максимально возможная.

  14. 13 hours ago, Terrry said:

    Перед цепью питания стоит полевик. Момент его включения происходит после этих помех. Помеха есть даже когда втыкаешь пустую плату, где кроме дорожек ничего нет.

     

    Это прямое указание на то, что помеха вызвана зярядом малых емкостей дорожек, порядка единиц - десятков пик. Плата, очевидно, многослойная, емкость дорожек над земляным полигоном немаленькая. Очевидный рецепт - уменьшать емкости и ставить токоограничивающие резисторы на все контакты разьема как можно ближе к разьему. У резистора проходная емкость доли пикофарад, это существенно поменяет картину.

  15. 53 minutes ago, alexvu said:

    Тогда, возможно, у Вас цифровая земля подключается первой и по ней статика разряжается. Хорошо бы сделать конструктив так, чтобы гарантированно сначала соединялось что-то другое, например корпус или земля питания +48В (а в это время по сигнальным проводам были бы достаточные зазоры).

    Не играет роли что соединяется первым, земля или питание. Помеха с питания все равно перейдет в землю через развязывающие конденсаторы.

    Чтобы проверить, является ли помеха электростатической, достаточно уравнять потенциалы. В простейшем случае можно держаться одной рукой за корпус прибора, а другой вставлять блок. Если помеха не исчезнет, значит, дело не в статике.

    Могу предположить, что помеха возникает из-за ничем не ограниченного тока заряда входных конденсаторов питания (т.е. в цепи 48 В) во вставляемом блоке. Чтобы это проверить, можно добавить токоограничивающий резистор в линию питания 48 В

     

  16. Если сравнивать Форт с С, то преимуществ у Форта мало.

    Главные преимущества - простота и самодостаточность, если это зачем-то нужно. Из чего вытекают и главный недостаток: Форт - это "вещь в себе".

    В подавляющем большинстве реальных приложений С превозмогает гарантированным уровнем предоставляемного сервиса. А в случаях развитых библиотек, как, например, Ардуино, Форт не способен ничего адекватного противопоставить.

    Форт - это очень красивая идея на раннем этапе развития вычислительной техники.

  17. Полевой транзистор (ПТ) - это не резистор, управляемый напряжением. В отличие от резистора,  ПТ при положительной и при отрицательной полуволнах сигнала на стоке ведет себя по-разному. Чтобы уменьшить искажения и сделать их симметричными, оба резистора, подключенные к затвору, должны быть одинакового номинала, скажем по 100 кОм, как предложили выше.

    После этого ПТ будет неплохо работать в качестве управляемого резистора при сигналах на стоке амплитудой примерно до 200 мВ. При дальнейшем увеличении амплитуды искажения будут возрастать.

    Если ваша схема обеспечит на выходе сигнал амплитудой 4 В, то на стоке ПТ будет сигнал половинной амплиутуды, т.е 2 В, потому что два резистора с одинаковым кривым номиналом 8.8 кОм ослабят сигнал амплитудой 4 В ровно в два раза.  Чтобы амплитуда сигнала на стоке ПТ была порядка 200 мВ, надо уменьшить резистор слева от стока и увеличить резистор сверху от стока, чтобы их отношение составило примерно 1:20.

     

  18. 8 hours ago, Plain said:

    Это стандартный, а требуемый автору — нет

    "Стандартный" годится, если менять частоту чтения контакта. Скажем, 10 мс на замыкание, 100 мкс на размыкание, если реакция на размыкание требуется максимально быстрая. Я бы побоялся принимать решение по одному чтению контакта, это может дать ложное срабатывание от помехи.

  19. 22 hours ago, Слесарь said:

    Как обрабатывать сигнал таких контактов и преобразовывать в простой дискретный сигнал для автоматики ЧПУ ?
     

    Сигнал от таких контактов надо обрабатывать для подавления дребезга. В момент замыкания/размыкания контакт может выдавать серию импульсов. Длительность этих имульсов и длительность серии зависят от механических характеристик контакта.

    Например, сигнал от tactile switch (кнопка с мембранным контактом) обычно вообще не имеет никакого дребезга. А контакты очень "дубового" механического выключателя могут дребезжать сотню-другую миллисекунд.

    Соответственно, чтобы не было ложных срабатываний, алгоритм подавления дребезга должен учитывать ожидаемое время дребезга.

    Простой, но робастный алгоритм подавления дребезга можно реализовать так:

    - С равными интервалами времени считываем текущее состояние контакта и вдвигаем его как 0 или 1 в некий сдвиговый регистр, например, 16-битный. Если интервал времени взять 10 мс, то такой регистр заполнится за 160 мс.

    - После этого проверяем содержимое сдвигового регистра. Если там все единицы (0xFFFF), то контакт замкнут. Если там все нули (0x0000), то контакт разомкнут. Если там любое другое значение, то состояние контакта считается прежним, не изменившимся.

    Это можно реализовать на любом самом маленьком микроконтроллере до того, как передавать результат по линии 4-20 мА.

  20. On 11/15/2022 at 8:49 PM, Nikkolaj said:

    Разве 200 кГц не сгладятся выходным фильтром стабилизатора напряжения?

    По даташиту, там останется каких то 50мВ.

    Напомнило анекдот. Заблудился мужик в лесу. Ходит, кричит: "Эй, кто нибуддь! Ау!". Вдруг сзади его кто-то хлопает по плечу. Оборачивается - перед ним огромный медведь. Медведь говорит:

    - Чего орешь-то?

    - Да вот... Заблудился... Думал, может меня услышит кто...

    - Но вот, я тебя услышал. Что тебе, легче стало?

     

    Фильтр, конечно, сгладит. Однако эти 10-20 или сколько там метров провода к нагрузке (к катушке индуктивности) - чем это не антенна? Отличная антенна даже для длинноволнового диапазона, к которрому относится передатчик частотой 200 кГц.  И этой антенне глубоко наплевать на то, что какой-то фильтр где-то там эту частоту сгладит. Эта антенна будет эффективно излучать помеху, невзирая ни на какие невесть где расположенные фильтры.

  21. On 11/14/2022 at 11:33 PM, ElectroDOZ said:

    img-2022-11-14-15-47-55.png
    имеется линейка ТТЛ уровня на выходе ABZ
    выпаял у ПЛК резистор 2.4k и сменил на 100ом, для того чтобы входы воспринимали сигнал ТТЛ

    Что такое "сигнал ТТЛ" в вашем случае? Опишите гарантированный размах напряжения и допустимую величину нагрузки.

    Сопротивление 100 Ом надо увеличить до максимально возможного значения, при котором ваш "сигнал ТТЛ" все еще будет устойчиво восприниматься. Между входом X0 и общим S/S надо добавить резистор как можно меньшего сопротивления, настолько низкоомный, насколько позволяет нагрузочная способность вашего "сигнала ТТЛ".

    Резистор 1к можно зашунтировать конденсатором. Величину конденсатора в первом приближении можно выбрать так. Предположим, минимальная длительность импульса или паузы на входе составляет t (микросекунд). Тогда емкость конденсатора может быть до C = t/(5*R), где С - емкость в нанофарадах, а   R = 1 килоом. Это не точный расчет, он годится для примерной оценки макс. величины С, при котором схема еще будет работать.

    Если не поможет, то придется вернуть на место резистор 2.4к и разгонять сигнал до 24В на передающем конце. При помощи транзистора, например.

    • Upvote 1
  22. 18 hours ago, Nikkolaj said:

    Прочитал что у синхронного buck потери меньше.
    Разве это не так?

    Если немного подумать головой, то можно понять, что "меньше потери" - это значит "больше кпд". И, соответственно, "максимальный кпд" означает "минимальные потери". Или нынче в школах не учат, что значит "кпд"?

  23. 35 minutes ago, byRAM said:

    Самая простая схема для этой задачи давно уже описана в предыдущих темах:

    1. Регулируемый по напряжению внешним сигналом источник напряжения с некоторым запасом мощности.

    2. Регулируемый внешним сигналом линейный стабилизатор тока.

    Это хороший вариант при малых токах нагрузки. А при 10А линейный стабилизатор будет сильно греться. ТС постоянно напирает на то, что buck должен быть синхронным, не приводя доводов почему. Возможно ему кто-то подсказал что синхронный buck обеспечит максимальный кпд.

  24. 22 hours ago, Nikkolaj said:

    Но как сделать источник тока на индуктивную нагрузку я даже не представляю.
     

    Идеальному источнику тока все равно какая нагрузка, что индуктивность, что просто кусок провода (т.е. короткое замыкание выхода). По сравнению с коротким замыканием, катушка индуктивности имеет

    -- ненулевое сопротивление R

    -- какую-то индуктивность L

    Чтобы выдать в нагрузку сопротивлением R заданный ток I, ваш источник должен быть способен при таком токе развивать на выходе напряжение U = I*R

    Чтобы выдать заданный ток в индуктивную нагрузку, ваш источник должен "не сходить с ума", если в момент включения ток через нагрузку потечет не сразу, а с опозданием. Ибо ток через индкуктивность не может меняться мгновенно. Лучше всего если ваш источник будет иметь "soft start", т.е. устанавливать заданный ток не сразу, а плавно, постепенно.

    Теперь можно взять любой подходяший источник напряжения и преобразовать его в источник тока, обладающий упомянутыми выше свойствами. Выбранный вами ISL8117 вполне пригоден. Если вы откроете даташит на стр.8, то схема fig.4 вполе годится за основу.

    Преобразовать ток нагрузки в напряжение можно разными способами:

    1) Можно поставить низкоомный шунт последовательно в уходящим в нагрузку проводом от терминала GND. Выделенное на шунте падение напряжения желательно усилить неинвертирующим усилителем на базе rail-to-rail ОУ, чтобы не рассеивать на шунте много мощности. Это самый простой и очевидный вариант.

    2) Можно поставить низкоомный шунт последовательно в уходящим в нагрузку проводом от терминала VOUT. Выделенное на шунте напряжение необходимо как-то привести к земляному потенциалу. Как вариант, можно поставить дифференциальный усилитель на ОУ. Кроме этого, есть специальные микросхемы именно для таких применений, которые high-side падение напряжения преобразуют к земле. Этот вариант сложнее, зато один из уходящих в нагрузку проводов будет земляным, иногда это бывает важно.

    3) Можно поставить микросхему с датчиком Холла, на таких специализируется к примеру фирма Allegro

    В общем, простор для творчества. Полученное после преобразования напряжение над подать, естественно, на пин FB (пин 8).

    На этом пине надо просуммировать три сигнала:

    -- напряжение с выхода преобразователя ток-напряжение (через резистор)

    -- выходное напряжение VOUT, пропущенное через диод зенера, это для того чтобы чтобы ограничить выходное напряжение в каких-то разумных пределах; пока зенер закрыт он не оказывает влияния

    -- сигнал с выхода схемы "soft start", которая в момент включения питания обеспечила бы достаточно большое напряжение, которое затем медленно бы уменьшилось; обычная RC-цепочка на базе электролитического конденсатора, развязанная от FB диодом (маломощным кремниевым), скорей всего отлично подойдет

    А конденсатор C6 желательно оставить как есть на fig.4, между VOUT и FB. То есть, параллельно зенеру.

  25. 13 hours ago, Nikkolaj said:

    Цель - поддерживать заданный ток в нагрузке (в катушке).
     

    По большому счету это не играет никакой роли. Можно стабилизировать выходное напряжение, можно ток, без разницы. Равно как не играет роли что нагрузкой является катушка индуктивности, а не резистор, или, в случае токового выхода - просто кусок провода.

    Причина, по которой характер вашей нагрузки должен быть исключен из рассмотрения, состоит в том, что она находится далеко от источника, в десятках метров. Поэтому подавать на нее надо постоянный ток. Иначе будет много помех, а влияние паразитных параметров линии связи будет слишком велико. Не стоит даже заморачиваться.

    Будет ли такой источник постоянного тока линейным или импульсным, а в случае импульсного - с топологией buck или fly-back  - тоже большой роли не играет.

×
×
  • Создать...