Arkadaşlar merhaba, H230 VFD'yi ESP32 kullanarak RS485 üzerinden MODBUS ile kontrol etmeye çalışıyorum. Durdurma ve başlatma kısımlarını hallettim fakat iş hız ayarlamaya geldiğinde takılıyorum. Sanırım manueli tam anlayamadım bu ilk VFD sürme deneyimim, kullandığım fonksiyon ve VFD sürücünün manueli ektedir, hangi registera hangi adresi yazmalıyım?
esp32_modbus:
// Calculate CRC16 for Modbus RTU
uint16_t modbus_crc16(uint8_t *buffer, uint16_t buffer_length)
{
uint16_t crc = 0xFFFF;
for (uint16_t pos = 0; pos < buffer_length; pos++) {
crc ^= (uint16_t)buffer[pos];
for (int i = 8; i != 0; i--) {
if ((crc & 0x0001) != 0) {
crc >>= 1;
crc ^= 0xA001;
} else {
crc >>= 1;
}
}
}
return crc;
}
// Function to create and send Modbus RTU frame to write a single register
void send_modbus_write_register(uint8_t slave_addr, uint16_t reg_addr, uint16_t reg_value)
{
uint8_t modbus_frame[8];
modbus_frame[0] = slave_addr; // Slave address
modbus_frame[1] = 0x06; // Function code: Write Single Register
modbus_frame[2] = (reg_addr >> 8) & 0xFF; // Register address high byte
modbus_frame[3] = reg_addr & 0xFF; // Register address low byte
modbus_frame[4] = (reg_value >> 8) & 0xFF; // Register value high byte
modbus_frame[5] = reg_value & 0xFF; // Register value low byte
uint16_t crc = modbus_crc16(modbus_frame, 6);
modbus_frame[6] = crc & 0xFF; // CRC low byte
modbus_frame[7] = (crc >> 8) & 0xFF; // CRC high byte
// Set RE/DE to transmit mode
gpio_set_level(RS485_RE_DE_PIN, 1);
// Send Modbus frame
uart_write_bytes(RS485_UART_NUM, (const char *)modbus_frame, sizeof(modbus_frame));
uart_wait_tx_done(RS485_UART_NUM, pdMS_TO_TICKS(100));
// Set RE/DE back to receive mode
gpio_set_level(RS485_RE_DE_PIN, 0);
}