При обновлении с версий 4.1.4…4.1.5 до версии 4.1.6 дополнительная калибровка не требуется.

После обновления проверить значения в меню “Communication”. Проверить пункт меню “Online = YES”. Выбрать скорость в пункте ‘Baudrate’.

Для управления с ПК использовать актуальную версию DPSmaster_416 или DPSmaster_43

Скорость связи Modbus

Ниже на скриншотах:

  • Горизонтальная развертка 100мс на клетку
  • Желтый луч – Rx – запрос от мастера
  • Синий луч – Tx – ответ из DPS
Скорость 9600 обрабатывается 10 запросов в секунду
Скорость 57600 обрабатывается 22 запроса в секунду
Скорость 19200 обрабатывается 14 запросов в секунду
Скорость 115200 обрабатывается 25 запросов в секунду

Цикл микропрогаммы DPS составляет 100 миллисекунд.

В каждом цикле микропрограмма сначала выставляет выходные значения USET,  ISET -> DAC.

Затем замеряет выходные  значения ADC -> UOUT, IOUT и входное напряжение ADC ->UIN.

Затем прорисовывает экран.

После этого, в оставшееся до 100 мс время, отвечает на запросы Modbus. Сколько успеет, столько и ответит. В зависимости от скорости от 1 до 3 раз.

Таким образом, посылать запросы на запись USET/ISET или чтение UOUT/IOUT чаще, чем раз в 100 мс не имеет смысла. 

Особенности протокола и записи в регистры

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

Таким образом, можно одновременно во все ведомые устройства в сети одной групповой командой с адресом ноль записать регистры USET и ISET.

Затем,  одновременно во все ведомые устройства в сети одной  командой с адресом ноль записать один регистр LOCK.

Затем,  одновременно во все ведомые устройства в сети одной  командой с адресом ноль записать один регистр ONOFF.

После этого, можно в цикле запрашивать состояние каждого слейва по отдельности по их адресам. Например, посылать групповой запрос на чтение регистров UOUT, IOUT, POWER, UIN, LOCK, PROTECT.  Анализа регистра PROTECT может быть достаточно.

Далее, в этом же  цикле можно одновременно во все ведомые устройства в сети одной командой с адресом ноль записать один регистр USET  (или сразу USET и ISET при необходимости). Изменение ISET в цикле представляется необоснованным.

Исполняемые регистры (Executable), это регистры, при записи которых DPS выполняет некоторые действия:

  • LOCK  (7-й) – блокировка кнопок
  • ONOFF  (10-й) – вкл\выкл выхода
  • CMD (33-й) – смотри таблицу Register CMD
  • MEM (36-й) – изменение профиля М0…С9
  • CLB_CMD (41-й) – исполнение команды калибровки

Чтобы команда была исполнена, запрос на запись должен быть одиночный, а не групповой !!! (кроме CLB_CMD).

Также запись в некоторые регистры приводит к записи значений в память EEPROM:

  • CMD
  • CLB_CMD
  • Все регистры профилей M0 … C9

Так как микросхема EEPROM имеет ограниченный ресурс в 1 миллион циклов записи, программисту следует избегать частого или циклического использования этих команд. Для записи профиля следует использовать групповую запись регистров USETP … OTIM.

Зачем нужен LOCK = 1 в начале сессии

Прошивка имеет функцию автосохранения настроек для удобства пользователей, чтобы изменения сохранялись при следующем включении девайса. Эта функция сохраняет значения USET, ISET и MEM через 25 секунд после последнего изменения. Однако, в случае длительно управления через Modbus, это функция может быть вредна. Поэтому, если LOCK = 1:

  • Исключается конфликт с командами от кнопок девайса
  • Отключается функция автосохранения
  • Запускается функция автоопределения обрыва связи (срабатывает когда запросы от мастера не поступают в течении 2 секунд).

После обрыва связи девайс автоматически восстановит  свой LOCK = 0 и разблокирует кнопки.

Для корректного окончания сессии мастер должен записать LOCK=0 и прекратить передачу.

Восстановление после сбоя внешнего питания

Использование опции POWER_ON_START в случае управления девайсом от внешнего контроллера представляется необоснованным.

Тем не менее, если опция POWER_ON_START используется, для корректного восстановления необходимо следить за правильностью значений в регистрах MEM, Profile.USETP, Profile.ISETP. Для сохранения этих регистров в EEPROM используйте  регистр CMD=2 или CMD=3

Добавления в протоколе

Добавлены регистры с данными счетчиков времени, ампер-часов и ватт-часов.

Communication protocol ver 4.1.6

RegisterNameRead / WriteDescriptionRangeExecutableWrite to EEPROM
0x0000USETR/Wformat 00.000...Umax
0x0001ISETR/Wformat 00.00 for DPS5020 / format 0.000 for DPS50050...Imax
0x0002UOUTRformat 00.00
0x0003IOUTRformat 00.00 for DPS5020 / format 0.000 for DPS5005
0x0004POWERRformat 0000.0
0x0005UINRformat 00.00
0x0006LOCKWLock the buttons0 or 1YES
0x0007PROTECTR*See Register PROTECT table0...25
0x0008CVCCR0 - CV, 1- CC0 or 1
0x0009ONOFFR/W0- Power off, 1- Power On0 or 1YES
0x000ABLEDR/WLCD Backlight1...5
0x000BMODELRDPS model5020
0x000CVERSIONRFirmware version18....43
0x000DTMPRTemperature in C
0x000E
0x000FDEBUG_DATAR
0x0010MGICRVersion control data
0x0011DVIDRVersion control key
0x0012COMMROnline settings
0x0013GYRORScreen rotation
0x0014MMAXR/WMax profile number0...19
0x0015RCNTR/WReset countersOdd or Even
0x0016CFR/WC or FOdd or Even
0x0017OHPR/WOverheat temperature in C0...200
0x0018SMARTR/WSmart displayOdd or Even
0x0019PWRSR/WPower on startOdd or Even
0x001AMINSR/Wminimum source battery 0%
0x001BMAXSR/Wmaximum source battary 100%
0x001CCLR1R/WPowerOff ColorRGB565
0x001DCLR2R/WCV colorRGB565
0x001ECLR3R/WCC colorRGB565
0x001F
0x0020CMDWExecute command
*See Register CMD table
YESYES
0x0021TIME_LRTime counter low word
0x0022TIME_HRTime counter high word
0x0023MEMR/WProfile number0...19YES
0x0024AHCNT_LRAmper-hour counter low word
0x0025AHCNT_HRAmper-hour counter high word
0x0026WHCNT_LRWatt-hour counter low word
0x0027WHCNT_HRWatt-hour counter high word
0x0028CLB_CMDW*See CLB_CMD tableYESYES
0x0029CLB_IDXW*See CLB_CMD table
0x002ACLB_DATA_LWLow Word for CalibRecord_t.Value
0x002BCLB_DATA_HWHigh Word for CalibRecord_t.Value

Profiles M0 ... C9

Registers ADDRRegisters (Decimal)NameWrite to EEPROM
0x0050 - 0x005F80 - 95Profile M0YES
0x0060 - 0x006F96 - 111Profile M1YES
0x0070 - 0x007FProfile M2YES
0x0080 - 0x008FProfile M3YES
0x0090 - 0x009FProfile M4YES
0x00A0 - 0x00AFProfile M5YES
0x00B0 - 0x00BFProfile M6YES
0x00C0 - 0x00CFProfile M7YES
0x00D0 - 0x00DFProfile M8YES
0x00E0 - 0x00EFProfile M9YES
0x00F0 - 0x00FFProfile C0YES
0x0100 - 0x010FProfile C1YES
0x0110 - 0x011FProfile C2YES
0x0120 - 0x012FProfile C3YES
0x0130 - 0x013FProfile C4YES
0x0140 - 0x014FProfile C5YES
0x0150 - 0x015FProfile C6YES
0x0160 - 0x016FProfile C7YES
0x0170 - 0x017FProfile C8YES
0x0180 - 0x018F384 - 399Profile C9YES
*See Profile table

Profile ver. 4.3

RegisterNameRead \ WriteDescriptionRangeFirmwareWrite to EEPROM
0USETPR /WUset for profile0...UmaxAlt / ChinaYES
1ISETPR /WIset for profile0...ImaxAlt / ChinaYES
2SOVPR /WOVP0...UmaxAlt / ChinaYES
3SOCPR /WOCP0...ImaxAlt / ChinaYES
4SOPPR /WOPP0... Umax x ImaxAlt / ChinaYES
5BLEDR /WLCD backlight1...5ChinaYES
6SOFTR /WSoft frontOdd or EvenAltYES
7SINIR /WChinaYES
8OTIMR /WTimer value0...5999AltYES

Регистр PROTECT

Группы ошибок в регистре PROTECT

OVP…VIN – проверяются прошивкой DPS  раз в 100 мс, когда  выход включен.

EPR – проверяются прошивкой DPS при подаче внешнего питания, во время экрана с логотипом

E16…E25 – проверяются прошивкой DPS после калибровки и каждый раз в момент выключения выхода.

Все ошибки сбрасываются в момент включения выхода.

Register PROTECT

ValueNameDescriptionCondition
0OKNo error
1OVPOvervoltage protectionUout >= Uset
2OCPOvercurrent protectionIout >= Iset
3OPPOverpower protectionUout x Iout > Profile.OPP
4OTPStopped by timerTime > Profile.OTP
5OHPOverheat protectionTMP > OHP
6BATSource battery low voltage protectionUin < MINS - 10%
7ENDCharge battery low currentIout < 50mA for 30 seconds
8EVPError voltage protectionUset > Umax
9ECPError current protectionIset > Imax
10VINLow input voltage errorUset > Uin
11EPREEPROM errorCan't read from EEPROM
12
13
14
15
16E16Calibration data errorUinL >= UinH
17E17Calibration data errorADC_UinL >= ADC_UinH
18E18Calibration data errorUoutL >= UoutH
19E19Calibration data errorADC_UoutL >= ADC_UoutH
20E20Calibration data errorDAC_UoutL >= DAC_UoutH
21E21Calibration data errorIoutL >= IoutH
22E22Calibration data errorADC_IoutL >= ADC_IoutH
23E23Calibration data errorDAC_IoutL >= DAC_IoutH
24E24Calibration data errorTempH Value <= 20C
25E25Calibration data errorTempH ADC >= Temp ADC 20C

Register CMD

ValueAction
1Stores MGIC ... CLR3 registers to EEPROM.
Stores BLED register to EEPROM
2Stores MEM to EEPROM
Stores Profile registers to EEPOM. The profile number is in MEM register.
3USET -> Profile.USETP
ISET -> Profile.ISETP
Stores MEM to EEPROM
Stores Profile registers to EEPOM. The profile number is in MEM register.
4Reset Timer and Energy counters
1234Jump to Update Mode

Registers CLB_CMD and CLB_IDX

NAME=VALUEAction/ Index
CLB_CMD = 0Show calibration screen
CLB_CMD = 1Start calibration for CLB_IDX
CLB_CMD = 2Fix the value in CLB_DATA for CLB_IDX
CLB_CMD = 3Exit and save calibration
CLB_CMD = 4Exit calibration w/o saving
CLB_IDX = 1U in L
CLB_IDX = 2U in H
CLB_IDX = 3U out L
CLB_IDX = 4U out H
CLB_IDX = 5I out L
CLB_IDX = 6I out H
CLB_IDX = 7Temp H
* Use groupped request to write CLB_CMD ... CLB_DATA_H