
Понижающий преобразователь XY6020l поддерживает управление по протоколу modbus. На просторах интернета можно найти инструкцию по командам для управления.
Вот пример из инструкции. В первой таблице описана команда для считывания двух байт со значениями напряжения и тока, выставленными на преобразователе. Вторая таблица показывает пример ответа от преобразователя, в котором преобразователь отвечает, что напряжение 5В и ток 1.5А.

Arduino
uint32_t tmr;
//
byte modRtuArray[8] = {0}; // буфер для команды modbus rtu
byte buf[40] = {0};
void setup() {
// put your setup code here, to run once:
Serial.begin( 115200);
// записываем команду на установку напряжения 500 (5 вольт)
set_cv(modRtuArray, 500);
Serial.write(modRtuArray,8);
tmr = millis(); // сброс таймера
}
void loop() {
if (millis() - tmr >= 1000) {
// этот код начинает вызываться
// через 1000 мс после старта
//записываем в буфер modRtuArray команду считывания тока и напряжения
read_cv_cc(modRtuArray);
// отправляем команду
Serial.write(modRtuArray,8);
tmr = millis();
}
if (Serial.available()) {
// есть входящие данные
Serial.readBytes(buf,39);
int cv = (buf[3]<<8)|buf[4];
int cc = (buf[5]<<8)|buf[6];
Serial.print("\n");
Serial.print("Напряжение: ");
Serial.println(float(cv)/100, 2);
Serial.print("Ток: ");
Serial.println(float(cc)/100, 2);
}
}
void read_cv_cc(byte *buf) {
buf[0] = 0x01; // адрес ведомого устройства 01
buf[1] = 0x03; // код функции 03 - чтение регистров
buf[2] = 0x00;
buf[3] = 0x02; // адрес первого регистра 0002
buf[4] = 0x00;
buf[5] = 0x02; // количество считываемых байт 0002 - 2 байта
//вычислим контрольную сумму 2 байта, запишем в конец буффера: младший байт, старший байт
uint16_t crc = ModRTU_CRC(buf,6);
buf[6] = crc; // младший байт
buf[7] = crc>>8; // старший байт
}
void set_cv(byte *buf, uint16_t cv_value){
buf[0] = 0x01; // адрес ведомого устройства 01
buf[1] = 0x06; // код функции 06 - запись одного регистра
buf[2] = 0x00;
buf[3] = 0x00; // адрес регистра 0000
buf[4] = cv_value>>8; // старший байт
buf[5] = cv_value; // младший байт
//вычислим контрольную сумму 2 байта, запишем в конец буффера: младший байт, старший байт
uint16_t crc = ModRTU_CRC(buf,6);
buf[6] = crc; // младший байт
buf[7] = crc>>8; // старший байт
}
uint16_t ModRTU_CRC(byte *buf, int len)
{
uint16_t crc = 0xFFFF;
for (int pos = 0; pos < len; pos++) {
crc ^= (uint16_t)buf[pos];
for (int i = 8; i != 0; i--) {
if ((crc & 0x0001) != 0) {
crc >>= 1;
crc ^= 0xA001;
}
else
crc >>= 1;
}
}
// Помните, что младший и старший байты поменяны местами, используйте соответственно (или переворачивайте)
return crc;
}Файлы для скачивания:
xy6020l-modbus-interface (скачать)
Количество скачиваний: 32. Размер: 96.7 KB. Дата: 05 Янв. 2026


Добавить комментарий