понедельник, 27 сентября 2021 г.

Зарядка двух (или более) батарей, двумя DC генераторами

Суть проблемы:

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

Пути решения:

1.       Использование только одного генератора одновременно.

2.       Использование внешнего регулятора напряжения для обоих генераторов.

3.       Использование одного генератора для зарядки стартовой батареи и другого генератора для зарядки сервисной батареи.

 

Преимущества и недостатки способов, описанных выше:

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

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

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

Вешение данной проблемы возможно при использовании ПЛК и контактора.

Алгоритм работы ПЛК должен быть следующим:

1.       Определение работоспособности генераторов.

2.       При работе двух генераторов, батареи разъединяются и каждый генератор заряжает свою батарею.

3.       При работоспособности любого одного генератора, батареи объединяются для заряда от одного источника.

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

 

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

 

Диаграмма работы реле изображена на рис. 1

 

Черновая схема с использованием электромагнитных реле на рис. 2


 

 

 

вторник, 31 июля 2018 г.

Поработал с E-Plex ELogic

На многих вся электрика управляется через E-Plex шину.
Теперь есть опыт

среда, 17 мая 2017 г.

Ericsson FSU-995

Вот такой злой аппарат.

вторник, 2 мая 2017 г.

GigE Vison как мы занялись скоростной съемкой

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

Пока анонс:

пятница, 25 декабря 2015 г.

RTOS и режим SSX

Существует модель выполнения процесса SSX (Single shot execution).
Идея ее проста - процесс представляет из себя функцию, из которой обязан выйти по истечении короткого времени.
Никаких while недопускается (почти).
Для реализации такой концепции, необходимо особым образом реализовывать потоки, но оно того стоит, так как экономится память, процессорное время и код становится намного проще.
Давайте сначала представим данную модель на очень примитивном примере, а затем будем ее совершенствовать.
Пример будет такой, у нас есть основной поток, или как его принято называть super loop.
В нем мы будем проверять нашажие кнопки, и включать красный светодиод.
И еще один поток, мигающий светодиодом.
Кроме потоков нам нужен планировшик, он должен запускать потоки, останавливать и так далее.
К планировщику нужен таймер.
Перед началом работы, запускам таймер, который должен генерировате прерывание раз  в какойто квант времени.

В обработчике прерывания от таймера прячется планировщик:

OnTimer1OVF()
{
  IF(Флаг_выполнения_потока)
  {
      //Сейчас мы не можем обрабатывать другие потоки
  }
  ELSE
  {
      FOR(i=0, i < Количество_потоков, i++)
      {
            IF(потоки[i].зазор >= потоки[i].период)
           {
            //Время с момента завершения предыдущего вызова потока, превысило или равно,                        желаемуму периоду выполнения потока, можно вызывать снова.
                Флаг_выполнения_потока = 1;              
                потоки[i].зазор = 0;
                потоки[i].shot();
                return();
           }
      }
  }
}
Завтра допишу!

пятница, 19 сентября 2014 г.

пятница, 27 июня 2014 г.

CTS-PHD-1080P12X Flex PCB или шлейф для камеры Cisco / Tandberg

Пришли мне две камеры с порванными шлейфами, думал купить шлейф - оказалось очень сложно - его нет нигде.
Правда один, заказчик сам нашел, второй не понадобился но я все же спроектировал шлейф и отправил оценить стоимость изготовления:
10 штук около 2000 - 2500$ - один примерно так же :-)
Выкладываю проект в OrCAD PCB Editor и в Gerber файлах.
Может кому пригодиться - кто закажет 10 - пришлите мне один, в качестве благодарности :-)
http://www.powerc.ru/instrukcii/FlexPCB.zip?attredirects=0&d=1

понедельник, 10 декабря 2012 г.

Глобальные флаги в стиле Renesas

Для удобства работы как с отдельными битами так и целиком с байтом или скажем словом, удобно использовать вот такую конструкцию:


typedef struct {
union {
unsigned char BYTE;
struct{
unsigned char DUMMY: 5;
unsigned char FLAGFORFUTURE: 1;
unsigned char ADCBUSY: 1;
unsigned char UARTBUSY : 1;
}BIT;
}DATA;
}_GLOBAL_FLAGS;


Затем мы создаем эту структуру:

_GLOBAL_FLAGS GLOBAL_FLAGS;

Ну и теперь с ней можно работать например так (побайтно):

GLOBAL_FLAGS.DATA.BYTE = 0;

или так (побитно):

GLOBAL_FLAGS.DATA.BIT.UARTBUSY = 1;

четверг, 25 октября 2012 г.

TCP/IP стек для Renesas RX62N

Продвигается писанина стека протоколов TCP/IP для микроконтроллера Renesas RX62N.
Пока добился вот такого:


Reader 1 и Reader 2 - это считыватели RFID подключенные по Wiegand 26
Ну а Card number соответственно последние считанные карточки.

Еще не одолел TCP таймауты, быстрый повтор и т.д.

понедельник, 20 августа 2012 г.

Восстановление Mercedess DAS

Кому надо, тот поймет!
for XP recover is: starrecover
for Xentry is: killxentry
for DAS is: killdas
for WIS is: killwis

понедельник, 13 августа 2012 г.

TCP/IP стек для RX62N

Давно я не писал в своем блоге.
За это время, я успел написать недоделанный TCP/IP стек для Freescale MC9S12NE64 после чего отказался от нее в пользу Renesas RX62N и стал портировать его туда.
Так что у меня теперь есть два недоделанных стека :-)
На Renesas'е уже работает Ethernet/ARP/IP/ICMP/TCP и примитивный HTTP но с TCP пока еще дел полно. Сейчас сокет только один поддерживается, таймауты еще не сделаны вообще.
ЗАТО работает прием и передача фрагментированных IP пакетов. Например можно послать ICMP пинг с размером скажем 1900 байт, можно разбить его к тому же на скажем 5 фрагментов, да еще и заголовок с опциями послать, и все равно мы получим ответ.
Так же есть возможность задать MTU.
Так что работа, как говориться кипит...
Скоро, скоро, совсем скоро вы увидите как оно будет работать.

Защита батарейного медицинского прибора от переполюсовки батареи

Одним из условий стандарта IEC 60601-1 (наш аналог ГОСТ Р МЭК 60601-1), в случае батарейного питания, является безопасность неправильного подключения батареи.
Одним из простейших способов реализации данного условия, является включение в цепь батареи, диода. Однако на диоде будет нежелательное падение напряжения. И в целом КПД прибора снизится.
Альтернативным вариантом является использование MOSFET ключа, но мы рассмотрим более простую схему. Мы подключим в цепь батареи, самовосстанавливающийся предохранитель Polyfuse, а за ним, параллельно шинам питания, шунтирующий диод в обратном включении.
В случае, если пользователь неправильно подключит батарею, ток потечет через предохранитель и включенный в прямом направлении диод. Вследствие большого тока, предохранитель разорвет цепь. После нормального подключения батареи, работоспособность устройства восстановится.

Выбирать номиналы элементов защиты следует следующим образом:

1. Определить максимальный ток потребления прибора. Iconsump

2. Выбрать предохранитель, на ток, в 2 - 3 раза больше максимального тока потребления.
Ifuse = Iconsump * 2

3. Выбрать диод, с максимальным током, в 2 раза больше тока предохранителя.
Idiode = Ifuse * 2


среда, 22 июня 2011 г.

Библиотека для работы МК Renesas V850ES совместно с ЖК модулем

Библиотека предназначена для работы с модулями на контроллере KS0066U, HD44780U и совместимыми и микроконтроллером Renesas UPD70F3793 но может быть адаптирована под любой МК.
Питание дисплея осуществляется от 3.3V.
На вывод контраста подается отрицательное напряжение полученое на инвертирующем зарядовом насосе.
Подключение дисплея к МК осуществляется так:
ЖК модуль <-> uPD70f3793
-----------------------
DB0 <-> PDL0
DB1 <-> PDL1
DB2 <-> PDL2
DB3 <-> PDL3
DB4 <-> PDL4
DB5 <-> PDL5
DB6 <-> PDL6
DB7 <-> PDL7

RS -> PDL8
R/W -> PDL9
E -> PDL10
-----------------------
На таймере P генерируется ШИМ 200КГц и подается с вывода P35 на зарядовый насос.
Ограничивая ширину импульсов, можно регулировать контрастность дисплея.
Схема зарядового насоса:

Перед выполнением функций чтения/записи, надо вызвать LCD_init()

Функция LCD_write_command_or_data имеет два параметра - первый указывает что будем записывать - команды (LCD_COMMAND или LCD_COMMAND_NO_BF_CHECK) или данные (LCD_DATA или LCD_DATA_NO_BF_CHECK) а затем собственно команда или байт данных.
Приставка NO_BF_CHECK означает что не будем проверять флаг Busy от дисплея (на моем дисплее он работал не правильно).
Вот пример вывода двух цифр в верхнюю и нижнюю строки:

Запишем адрес начала верхней строки (0x80 потому что адрес 0x00 а первый бит - команда записи адреса)
LCD_write_command_or_data(LCD_COMMAND_NO_BF_CHECK, 0x80);

И выведем цифру 1
LCD_write_command_or_data(LCD_DATA_NO_BF_CHECK, (0x31);

Запишем адрес начала нижней строки (0xC0 потому что адрес 0x40 а первый бит - команда записи адреса получаем 11000000b тоесть 0xC0)
LCD_write_command_or_data(LCD_COMMAND_NO_BF_CHECK, 0xC0);

И выведем цифру 2
LCD_write_command_or_data(LCD_DATA_NO_BF_CHECK, (0x32);

Исходники написаны на C в среде IAR.
Скачать можно здесь:
uPD70F3793_LCD.zip

понедельник, 16 мая 2011 г.

EEPROM в SFP модулях

По спецификации, на SFP и SFP+ модулях,установлен EEPROM объемом 128 байт.
Первые 96 байт специфицированы, оставшиеся - отводятся производителю.
Нас интересуют первые 96.
Итак:
Байт: Значение: Описание:
-------------------
Базовый блок
-------------------
0 0x03 Тип модуля - 0x03 SFP
1 0x04 Расширенный тип - 0x04 GBIC/SFP функционал доступен через I2C
2 0x07 Тип коннектора - 0x07 LC коннектор
3-10 xx Электрическая или оптическая совместимость (опишу отдельно)
11 0x06 Тип кодировки данных - 0x06 64B/66B
12 0x67 Номинальная скорость передачи бит в 100Mbps 0x67=103x100Mbps
13 0x00 RATE_ID нас пока не касается
14 0x28 Дальность на SMF в километрах - 0x28 = 40Km
15 0xFF Дальность на SMF в 100 метрах - 0xFF больше не лезет видимо
16 0x00 Дальность на оптике с ядром 50мкм OM2 в 10 метрах
17 0x00 Дальность на оптике с ядром 62.5мкм OM1 в 10 метрах
18 0x00 Дальность на меди в метрах
19 0x00 Дальность на оптике с ядром 50мкм OM3 в 10 метрах
20-35 xx Название производителя в ASCII
36 0x20 Электрическая или оптическая совместимость (опишу отдельно)
37-39 xx IEEE код производителя
40-55 xx Партийный номер модуля в ASCII
56-59 xx Ревизия в ASCII
60-61 0x060E Длинна волны - 0x060E - 1550нм
62 0x00 Зарезервировано
63 xx Контрольная сумма базового блока (просто 8 бит от суммы всех байт от 0 до 62)
------------------
Расширенный блок
------------------
64-65 0x601A Опциональные сигналы (опишу позже)
66 0x00 Верхний зазор по битрейту в процентах
67 0x00 Нижний зазор по битрейту в процентах
68-83 xx Серийный номер модуля в ASCII
84-91 xx Дата производства
92 0x68 Реализованная диагностика (опишу позже)
93 0xF0 Реализованная расширенный функционал (опишу позже)
94 0x20 SFF-8472 совместимость
95 xx Контрольная сумма расширенного блока (просто 8 бит от суммы всех байт от 64 до 94)

Допишу позже

вторник, 15 марта 2011 г.

Беда в Японии

Внимание! В связи с тяжелейшими последствиями землетрясения и цунами в Японии, произошедшими 11 марта 2011 года, Российский Красный Крест объявил чрезвычайный сбор средств, для оказания помощи пострадавшим жителям Японии. Вся подробная информация и реквизиты есть на официальном сайте Российского Красного Креста.
Так же, на официальном сайте Американского Красного Креста открыт аналогичный сбор средств, там можно перевести деньги по кредитной карте. Подробности смотрите тут

среда, 31 марта 2010 г.

Входные каскады электрокардиографа на дифференциальных усилителях Maxim с архитектурой indirect current-feedback

Итак, нужно снять кардио сигнал с двух электродов на руках, и еще один электрод на правой ноге используется как общий. Состав сигнала обычно такой - синфазный сигнал 50Гц от наводок сети 220V, постоянная составляющая между руками около 150мВ и собственно полезный сигнал размахом в районе 2,5мВ.
Обычно делается так:
На входе дифференциальный усилитель, далее фильтры (в частности удаляющие постоянную составляющую - частота среза как правило 0.5Гц, режекторный на 50/60Гц и т.д.) и еще один усилитель, а затем АЦП.
И еще, обычно на правую ногу подают синфазный сигнал для того чтоб держать его в допустимых пределах.
Есть вот какая идея, во первых отказаться от аналоговых фильтров (использовать только пассивны Anti Aliasing фильтр первого порядка перед АЦП), во вторых подать на правую ногу виртуальную землю и в третьих не убирать полностью постоянную составляющую, с выхода первого усилителя сигнал подать на первый канал АЦП, в соответствии с результатами измерений и фильтрации ЦАП,ом установить на не инвертирующем входе второго усилителя нужное напряжение чтоб он не ушел в насыщение, а с выхода второго усилителя подать сигнал через nti Aliasing фильтр на сигма-дельта АЦП. А уже после оцифровки, отфильтровать попавшие 50Гц и т.д.
В схеме используются инструментальные усилители Maxim с архитектурой indirect current-feedback с коэффициентом усиления 10.
Для простоты в качестве полезного сигнала - синусоида