Jump to content

Yurkin2015

Members
  • Posts

    2147
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Yurkin2015

  1. @O5-14 Это умный блок питания для мини дрели, например для сверления плат. При включении без нагрузки дрелька крутится в пол-силы. Когда начинаете сверлить, нагрузка на валу увеличивается, и, соответственно, ток потребления растёт. При этом блок питания автоматически увеличивает выходное напряжение, и дрелька начинает весело крутиться со всей дури. После того, как дырка просверлена, и нагрузка исчезла, - дрель сама возвращается на холостые пониженные обороты. Если интересно, то тут есть какое-никакое описание схемы.
  2. Что-то никак не въеду: каждый ключ привязан к одной из солнечных панелей аж на 30 В. Ну, так и пользуйте это напряжение для питания затвора ключа. И не надо никаких отдельных блоков питания с обмотками и генераторами.
  3. @Гость_Григорий_Т. Оно, конечно, облегчит жизнь диода D3, через который протекает суммарный ток предыдущих батарей при параллельном включении. Но тогда на некоторых ключах при определённых комбинациях будет приложено удвоенное напряжение батареи. Пожалуй, да, кидаем катоды прямо на нагрузку и берём более высоковольтные мосфеты. Такой ток будет только тогда, когда хреначит полный прямой солнечный свет: панель вырабатывает 240Вт мощности, при этом света на панель падает гораздо больше, типа киловатт, КПД ведь менее 100%, всё кругом нагревается нехило, шо там тех 4.5 Вт на диоде? Никто и не заметит такого мизера.
  4. Если раздобыть кучку хороших диодов, то можно значительно уменьшить число ключей. Вот, к примеру, при четырёх панелях для переключения "параллельно - последовательно" нужно всего три ключа, напряжение на ключах не превысит 32В, так что МОСФЕТы типа 10А 50В сгодятся.
  5. @Kostyanskiy Вот это sReceivedChar что за переменная? Какой у неё тип и размер?
  6. @Kostyanskiy Мы не стираем 0x0D, а записываем 0 в конец строки. Если функция srtcmp() будет сравнивать строки от начала до конца, как она узнает где конец в строке sReceivedChar? До какого места сравнивать? Признаком конца как раз и является 0. Кстати, для упрощения выкиньте strcmp() и для начала сравните только первый принятый символ: if((sReceivedChar[0] == '1')&&(FlagRecievData == 1)) { UART_Transmit("OK"); UART_Transmit((const char*)sReceivedChar); FlagRecievData = 0; }
  7. @Kostyanskiy Надо переделать обработчик прерывания: ISR(USART_RX_vect) //Прерывания после приема { if ((UCSR0A & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN)) == 0) { if (UDR0 != 0x0D) { sReceivedChar[rx_count] = UDR0; if (rx_count < sizeof(sReceivedChar)-1) rx_count++; PORTB ^= (1<<5); } else { sReceivedChar[rx_count] = 0; rx_count = 0; FlagRecievData = 1; } } }
  8. @Kostyanskiy Чтобы прерывание загасить, в обработчике прерывания надо прочитать принятый байт. Типа, вот так char data = UDR
  9. @artos5 Нет, не так. То, что обведено у вас на картинке, это задержка перед отправлением последнего байта KEY7. При получении всех байтов ключа процессор начинает их анализировать, поэтому после получения последнего байта сигнал busy = 1 самый длинный, его и изучаем. В статье так и написано: " расстояние между курсорами".
  10. Судя по статье, сигнал busy становится = 1 в момент начала SPI передачи байта и падает в 0 после окончания через некоторое время. Длительность этой единички как раз и надо измерить. В вашей программе почему-то проверяется длительность не единички, а нуля. То есть сразу после старта busy=1, мы проскакиваем while и сразу пишем время в массив. SPI1->DR=(uint8_t)data[i]; while (!(GPIOA->IDR & GPIO_IDR_IDR10)){}; //busy revers times[count]=TIM1->CNT; Надо добавить while пока busy = 1 SPI1->DR=(uint8_t)data[i]; // стартуем передачу по SPI while (!(GPIOA->IDR & GPIO_IDR_IDR10)){}; // ждём пока busy = 0, должен прыгнуть в 1 после старта передачи while ((GPIOA->IDR & GPIO_IDR_IDR10)){}; // ждём пока busy = 1 и не упадёт в 0 times[count]=TIM1->CNT; // получаем время от старта SPI до окончания busy
  11. На выходе модуля ISD1820 присутствует постоянное напряжение. Надо между модулями по линии сигнала поставить разделительный конденсатор. При этом соединить общий минус у модулей и блока питания, а сигнал взять только с одного выхода ISD1820.
  12. Дальность определяется условием прямой видимости, то есть идеально, когда приёмник и передатчик могут видеть друг друга без препятствий. Также есть кривизна Земли, и дальность зависит от высоты передающей и приёмной антенны. Например, если передачик держать в руке над головой, то такой же приёмник над головой будет принимать на расстоянии 10 км. При больших расстояниях приёмник просто скроется за горизонтом и станет невидим, связь пропадёт. LoRa модули имеют очень высокую чувствительность, при обычной мощности менее 100 мВт в космосе дальность связи таких модулей может составить тысячи километров. На Земле один модуль помещают на аэростат на высоте 18 км, а приёмник высоко в горах, типа 3-4 км над поверхностью. Тогда получают 700 км дальность связи при всего 25 мВт выходной мощности.
  13. Да, некоторые люди минус питания называют "корпус" или "земля". Минус от линии 5 В надо присоединить к минусу питания. Если копрус усилителя пластмассовый, то к нему ничего присоединять не надо, это просто так называется. То же самое и с землёй. Тут две разные земли надо соединить друг с другом и с минусом питания.
  14. Программа понравилась, приятный интерфейс, шрифты, спокойные тона картинок. Сам делаю первые шаги в андроид-программировании, так что есть к чему стремиться.
  15. Нужно сначала сравнить текущее значение с предыдущим. Если новое значение больше, чем предыдущее, то просто вычитаем. Если новое значение меньше, то к нему сначала добавляем 32, а потом вычитаем. encCount = __HAL_TIM_GET_COUNTER(&htim1); if(encCount > oldCount) result = encCount - oldCount; else result = encCount + 32 - oldCount; oldCount = encCount; Но всё равно, надо как-то увеличить максимальное значение тиков с 32 до 256, хотя бы.
  16. 10 кОм очень мало для такой схемы, надо ставить раз в 5 больше.
  17. @maksimdag0 Я собрал в Keil ваши функции, всё работает как надо, записывается массив без проблем. Может выложите здесь весь файл целиком, а не его куски?
  18. Ошибка в схеме. Надо провода, идущие на коллектор и базу Q4, поменять местами.
  19. Частота тактирования входных/выходных регистров порта равна HCLK, если посмотреть в окне Clock Configuration в кубе, по сути это просто частота ядра процессора. То есть порты всегда шарашат на максимальной частоте тактирования, от GPIO SPEED не зависит. Если вход, то при любом GPIO SPEED всегда поймаем максимально быстрое изменение на входе. А, вот, скорость нарастания выходного напряжения задаётся GPIO SPEED параметром. Поэтому, если управляете медленной периферией, типа, светодиодом поморгать, и не хотите загрязнять окружающее пространство электро-магнитным шумом от вашего изделия, то всегда выбирайте GPIO SPEED = LOW. На общий ток потребления этот параметр мало влияет. Я так думаю. Как процессоры STM изменяют выходное нарастание точного описания я найти не смог, видимо, "секрет фирмы". Кто говорит, что подключаются более мощные широкие МОСФЕТы на выход для ускорения, другие объясняют, типа, сток-затворные ёмкостя переключаются ... Хрен его знает, короче.
  20. Влекомый чувством здорового недоверия, после просмотра видео, достал первую попавшуюся плату с STM32L011 и тут же проверил этот самый GPIO SPEED. Установил скорости для выходов PB4 = LOW, PB5 = MEDIUM, PA11 = HIGH и PA8 = VERY HIGH SPEED. Эти ноги просто рядом на плате выведены. Ну, и в цикле просто устанавливаю/сбрасываю эти пины вручную. На ноги повесил конденсаторы 27 пФ нагрузки, плюс 14 пФ ёмкость кабеля осциллографа по паспорту. Потыкал осциллографом и получил вот такие скорости нарастания напряжения на выходах. Соответственно желтая линия = LOW SPEED, затем голубая, фиолетовая и, наконец,зелёная = VERY HIGH. По оси времени 10 нс на деление. Ну, и, у осцилла с кабелем собственное время нарастания, типа, три-четыре нс, думаю, надо отнять от результата.
  21. А, понял, уже поправил свой пост для большей ясности.
  22. У датчика MLX92223LUA такой резистор на +пит уже встроен внутрь микросхемы, поэтому снаружи ничего добавлять не надо.
  23. На Вашей схеме "вых" - это минус питания микросхемы. Он через кабель замкнут на массу в блоке управления, но не прямо на массу, а через резистор, например 200 Ом. Когда магнитного поля нет, то ток потребления датчика 6 мА, соответственно напряжение на резисторе в блоке = 1.2 В. Когда магнитное поле появилось, то ток потребления скачком увеличился до 25 мА, и напряжение на резисторе стало 5 В. Такие перепады напряжения и воспринимается ЭБУ как 010101 Величины токов в примере взяты дла датчика MLX92223LUA.
×
×
  • Create New...