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

Tokes

Members
  • Постов

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

  • Посещение

Информация

  • Пол
    Мужчина
  • Город
    Гомель

Электроника

  • Стаж в электронике
    3-5 лет
  • Оборудование
    lukey702, ОМЛ3М, Victor88E, AutoprogSE, RLC-2. (Инфа малёк устарела :) )

Посетители профиля

3 129 просмотров профиля

Достижения Tokes

Экспериментатор

Экспериментатор (5/14)

  • 10 лет  на форуме
  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

7

Репутация

  1. Позвольте привести функциональные диаграммы для обоих ОУ. Слева - TL072, справа - LM358. @Falconist, вы говорите "совершенно иная схемотехника входного каскада". Смотрю на входные каскады, т.е. те, что находятся слева диаграмм. Кроме того, что у TL072 стоят полевые транзисторы, а у LM358 биполярные Дарлингтоны, я не вижу здесь "совершенно иной" схемотехники. Конечно, я допускаю возможность того, что я технически слеп, если так, то пожалуйста, просто укажите на мою ошибку конкретно, по возможности. В обоих входных каскадах я вижу источник тока, дифференциальную пару и токовое зеркало, у одного простое, у другого трехтранзисторное. Если "совершенно иная схемотехника входного каскада" выражается в технологии применяемых входных транзисторов, то об этом нюансе я сам упоминал в оригинальном посте. Тем не менее, мне это не даёт понимания причин неработоспособности вышеприведённой схемы на TL072 при однополярном питании. Уже вторые сутки как пытаюсь найти вразумительный ответ на вопрос "в чём принципиальная разница", помимо FET и BJT на входе. Если кто-то сможет дать ключевое слово или фразу, типа "смотри Signal input pins, Differential voltage" или "всё дело в Input voltage range" - пойду рыть дальше сам глубже. Конечно же, буду рад и развёрнутому ответу. p.s. Заказал несколько разных типов ОУ и компараторов, полагаю, для моей задачи хватит и половины LM339 с каким-нибудь стабилитроном или TL431, однако, меня не оставляет в покое мысль, что можно сделать "здесь и сейчас и из того, что есть", просто нужно как-то подать необходимое смещение на оба входа или ещё как-то.
  2. Доброго времени! Никак не могу понять, почему в схеме усиления напряжения с шунта ОУ TL072 ведёт себя гораздо хуже (по крайней мере, в симуляторе), чем LM358. В симуляции протеуса: На схеме переменные резисторы, изображающие нагрузку - RV1, RV2. На выходе у микросхем, в зависимости от сопротивления переменного резистора, изображающего нагрузку: max R: LM358 - 0.7 V, TL072 - 1.72 V mid R: LM358 - 1.19 V, TL072 - 1.74 V min R: LM358 - 4.0 V, TL072 - 3.46 V Вживую смог протестировать только схему с TL072 (несколько штук перебрал) ввиду отсутствия любого другого ОУ на данный момент. Только поменял переменный резистор на 1 МОм, а шунт на 1 кОм. В симуляторе принцип работы не поменялся от такой "рокировки". Так вот, вживую, с однополярным питанием, как на схеме - ваще никакой реакции на движок, выход стоит строго на 4,38 V. Если же минус питания утащить в "-5 В" - схема работает удовлетворительно - от 0,7 В до 4 с мелочью. Но я не могу себе позволить отрицательное питание. Вообще, мне нужно банально при определённом значении напряжения на шунте (порядка 40 мВ), открывать транзистор, который включит кулер. Для этого буду использовать вторую часть ОУ в виде компаратора. Когда искал готовое решение - всюду натыкался на LM358, либо на r2r, либо на инструментальные ОУ. Мне и в голову не могло прийти, что упомянутые в схеме ОУ будут иметь настолько разный результат в данном контексте. Пытался найти какое-то отличие в документации на них. Единственное кардинальное отличие, которое я обнаружил, это что TL072 - FET-Input, то есть с полевыми транзисторами на входе, тогда как у LM358 - на входе биполярные транзисторы. Собственно, вопроса три: Как можно модифицировать схему с TL072, чтобы при однополярном питании (это важно) реакция на изменение положение движка резистора была такой, как в схеме с LM358? Какая характеристика влияет на данное положение дел между этими двумя ОУ? Почему эта характеристика так влияет на работу схемы? P.S. в протеусе первый раз работаю, сходу не нашёл, как поменять + и - в обозначении ОУ, чтобы выглядело культурнее. Ну и в целом, на очень скорую руку рисовал.
  3. Господа, посоветуйте, пожалуйста, что почитать на тему радиопротоколов. Хочу сделать обмен между устройствами через приёмники/передатчики на 433 МГц, которые только в on-off-keying умеют. Так же хочу нарулить шифрование, чтобы нельзя было просто распарсить/повторить посылку, но чтобы устройства могли прочитать посылку даже если потерялось несколько пакетов (типа наперёд рассчитывать как-то что ли). То есть основная идея - защищённый обмен данными по радио с помощью on off keying. Хочу понять принципы и лучшие практики. Ну и закодить самостоятельно.
  4. Выходные Шоттки соответствуют новому напряжению? Если с фазировкой при перемотке ничего не перепутали, попробуйте немного снизить частоту и посмотреть, измениться что-то или нет. А то может и правда Шоттки не успевают закрыться.
  5. Не нашёл решения изящнее, чем взять первый свободный пин, посадить его на D- и в коде написать следующее: GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); __disable_irq(); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET); uint32_t i; for(i = 0; i < 10000; i++); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET); GPIO_InitStruct.Mode = GPIO_MODE_INPUT; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); __enable_irq(); Вообще хотел обойтись минимальной кровью, т.е. без задействования какого-либо пина и всё не мог понять, почему не работает управление пином, если инициализирован USB. В даташите потом почитал, что "As soon as the USB is enabled, these pins are connected to the USB internal transceiver automatically." То есть чтобы это порешать надо было деинициализировать USB, потом заново.... В общем, если будет решение лучше - с удовольствием почитаю @Вуйко , спасибо за участие )
  6. Здравствуйте. CUBEMX + CUBEIDE + PUTTY + STLINK V2 Есть blue pill. Создал новый проект в CUBEMX. Включил там USB как COM порт. Завёл приём сообщений (модифицировал static CDC_Receive_FS функцию). Всё хорошо работает ровно до тех пор, пока в CUBEIDE не нажимаю F11 (build + flash + debug). После этого необходимо руками вытаскивать и засовывать кабель, чтобы можно было продолжать пользоваться терминалом. В то же время достаточно коснуться контакта "USB-" - и происходит тот самый желанный реконнект, после которого достаточно нажать restart session в терминале и всё продолжает работать нормально. Вопрос - как сделать программно, чтобы при старте устройство ("com port" или "usb com emulator") само себя "переподключало"?
  7. @Falconist , не могли бы вы подсказать, где про это можно подробнее почитать? Если ориентироваться по документации, то какой параметр смотреть? Input common mode voltage range? Переводится как "диапазон входного напряжения общего режима", но в даташите на ту же TL072 указано значение плюс-минус 11 Вольт. Не понятно, как этим пользоваться. В наличии есть LM393 - у него открытый коллектор - это даже хорошо. В общем надо знать, какой параметр в даташите отвечает за то, что можно сравнивать где-то от 1-1,5 Вольт, а где-то -0,3. Подскажите, пожалуйста. Вы верно угадали, питание однополярное, под землёй я подразумевал минус питания.
  8. Здравствуйте. Проблема в том, что вроде как если на неинвертирующем выходе (+ который) будет меньшее напряжение, чем на инвертирующем (-) - выход ОУ должен притянуться к земле. Я же сегодня у друга наблюдал картину, что неинв. вывод (номер 3 у TL072 и 062, несколько штук которых мы пробовали) если притянут к земле, а на инв. (вывод 2 тех же ОУ) напряжение больше - на выходе ОУ (1 вывод тех же микросхем) почти пять Вольт. Питается ОУ от 7805. А если напряжение на неинв. выводе чутка поднять - выход сваливается в ноль, как и должно быть. Поясните, пожалуйста, почему так происходит?
  9. Моя проблема около трёх страниц назад решилась, когда начал использовать драйвер шины. Всё чётко, практически без задержек, работает как часы. Код не менял, только поставил драйвер. За STM32 - я так понимаю, что лучше в начале поработать с голыми регистрами, а потом уже юзать разные библиотеки. Ибо, зная по себе - хрен бы я что мог нормально отладить, если бы того же ассемблера не знал, а сразу сел на Си писать. Свисток для прошивки камня заказал. Думаю, что надо начать с "привет мир по-микроконтроллерски", то есть помигать светиком. Я так понял там целое приключение после AVR будет. Настроить тактирование, убрать сброс с портов IO, настроить их на выход и включить мигалку. Кстати, пока ресет модуля активен - его настраивать можно? А если после настройки модуля дать ресет кратковременно - он в дефолт сбросится? Дочитаю книгу про это ядро, что на русском есть - сяду курить опорный мануал и даташит. А там, наверно, ветку создам, что ли, там попробую конкретные вопросы задавать, а то тут только дай волю - за свои инструменты будут ложить друг друга на лопатки
  10. @MasterElectric , надо ловить посылку CANbus, и в нужный момент давать АСК. @mail_robot , а что такое ppm? Только ребят, не надо начинать вот этото всего. Просто дайте пруфы на то, что так можно или нельзя. Взаимный срач это нифига не здорово. Решил просвятиться немного, почитал пару смежных тем, типа И знаете что? Там только срач. Не хотелось бы и здесь начать читать такое. Нахрен надо! Пруфы чётко по делу - и всем будет счастье. Наверно. Ну правда, не начинайте Возникли вопросы: 1. Я так понял - HAL, SPL, CMSIS - это всё библиотеки, облегчающие работу с STM32. А в чём принципиальная разница между ними? Можно про преимущества и недостатки каждой? 2. Есть плата для ардуино с STM32 на борту. Брал год назад где-то, но до сих пор руки не доходили, а тут жутко интересно стало, что да как. Собственно вопрос - если я напишу некий код в НЕ Arduino IDE - как мне этот код можно в эту плату запихать? Просто USB интерфейса достаточно будет или надо исключительно через UART/SWD и прочее? 3. Наткнулся на статейки DI_HALTa про STM32 - а есть ещё что-то подобное? Он-то пишет хорошо, но мало. Документацию на инглише проглотить мне будет не так просто, как хотелось бы. Я понимаю, что надо, и буду читать, но это вообще ни разу не быстро По изучению ответов возникнет ещё порция вопросов. Или если такой подход - не тру, может, есть какая годная литература, покрывающая большинство вопросов начинающих о знакомстве с Cortex © ?
  11. @ruhi , интересный вариант тоже, обдумаю. По поводу опечатки - у меня всё верно. Читаем внимательно: определённый флаг сбрасывается записью единицы в соответствующий бит соответствующего регистра - это по документации. Представьте ситуацию, где в регистре, например, TIFR установлено несколько флагов. А мы берём эти несколько флагов, проводим с ними операцию ИЛИ и записываем все эти флаги вместе с установленным в этот же регистр. Что произойдёт в итоге? Правильно - вместо какого-то конкретного мы сбросим все установленные флаги, которые были установлены в единицу на момент операции ИЛИ. Дальше, Clock Prescale Register - я так понял позволяет на ходу подключать прескалер к тактовому генератору? Я даже не знал, что в этом МК такое можно Не пользовался этим регистром, поэтому, подозреваю, этот прескалер отключён. Иначе бы я не получал точных временных выдержек. @mail_robot , я тут почитал. Хочу себе феррари Есть у меня в запасах платка, типа для ардуино, там F103 серия. Скачал референс мануал, а так же даташит на эту серию. Сходу разобраться не получилось. Там указана максимальная тактовая в 72 МГц, так же где-то читал недавно, что порты IO не могут на такой частоте работать. Это так? Ну и другой вопрос - я эту платку смогу использовать где-то кроме как в среде ардуино, которую я так не перевариваю?
  12. @IMXO , про задержку NOPами подумаю, спасибо за идею. Но на дешёвых AVR я, похоже, упёрся в потолок. Давно смотрю на STM32, но как подумаю, сколько там всего...
  13. @IMXO , посмотрел. В даташите это время, если я всё верно понял равно четырём тактам осциллятора: В дизассемблере проход по этим двум командам ветвления плюс переход на начала цикла занимает 6 инструкций, некоторые по два такта за инструкцию Пусть будет 10. Итого, по идее, максимум должно быть в самой плохой ситуации 10+4+10 - 24 такта. При тактовой в 24Мгц это 1 мкс. А у меня как будто всё в самом худшем случае, а то и ещё хуже, как в Беларуси ) @Геннадий , а если сюда ещё прерывания добавить, пока перейдёт на старт ПП прерывания, пока всё это сохранит/вытащит из стека, потом возврат... - это будет точно дольше, чем такая конструкция в данной ситуации. Хотя я уже ни в чём не уверен Ладно, а кто-нибудь видит способ выйти из ситуации победителем?
  14. Есть код такого плана: while (1){ if (TIFR & (1 << TOV0)){ // if timer overflow run_timer4us(); ON; OFF; resetTOV0; // reset overflow flag } if (GIFR & (1 << INTF0)){ // if pin level change run_timer6us(); ON; OFF; ON; OFF; resetINTF0; // reset INTF0 interrupt } } Т.е. в бесконечном цикле идёт опрос двух флагов. Первый - на переполнение таймера, второй - на смену лог. уровня пина PD2. Контроллер ATtiny 2313A. Всё вроде бы не плохо, если бы не одно но. В логике цикла заложена такая штука, что если произошла смена лог. уровня - таймер взводится на 6 мкс (чтобы попасть на середину следующего бита в передаче), а если смены за 4 или 6 мкс не наблюдалось - значит мы как раз на середине принимаемого бита. Но иногда переполнение с 4 мкс наступает раньше, чем должно, а событие по смене уровня отрабатывается потом. Никаких прерываний не используется, ON, OFF - макросы для своего рода дебага в железе типа PORT_LED |= (1 << LED_PIN). run_timerXus() - inline функции с одной строкой TCNT0 = fUs4, где fUs4 - константа, ресеты тоже макросы типа resetTOV0 TIFR &= (1 << TOV0). Картина того, что иногда идёт не так: Сверху - принимаемый сигнал - внизу - результат работы команд ON/OFF в условиях. Тут видно, что вторая смена уровня отрабатывается позже, чем переполнение таймера в 4 мкс, хотя измеритель показывает, что прошло как раз 6 мкс. А вот как оно должно быть по задумке: То есть отрабатывается смена логического уровня и через 6 мкс уже срабатывает переполнение. Но даже это время отклика меня несколько смущает. Сам уровень вроде давно поменялся, а условие только где-то через микросекунду а то и больше срабатывает. Есть вероятность, что фронты/спады недостаточно крутые, пока нечем посмотреть, но это не критично. Критична именно ситуация на первом фото. Как такое вообще может произойти? P.S. Прерывания не использую, потому что с ними вообще не успеваю, период 4 мкс, кварц 24 (!) МГц стоит, (на 20 под рукой не было), константы есть под оба варианта, но это уже другая история
  15. Скажите, пожалуйста, все ли переменные, значение которых может измениться в прерывании нужно помечать словом volatile? Может, есть какие-то устоявшиеся правила на этот счёт?
×
×
  • Создать...