A Variable Frequency Driver (VFD) is an electrical driver that is used to control the speed and other parameters of an AC induction motor. VFDs can also be referred to as: variable speed drivers, adjusted frequency drivers, AC drivers, Inverters, and more. Regardless of what you may call them they are a way to control various processes that utilize a motor.

In this guide, we focus on connecting an HMI, a PLC, and a VFD to affect motor function. You’ll learn how to create connections between all devices using Modbus communication and modify data registers to control motor speed.

Figure depicting an HMI, PLC, and VFD, in a control panel

VFD’s are used in the industry to control machinery such as: fans and pumps in HVAC systems, speeds of mixers and conveyor belts in manufacturing settings, and other industrial plant equipment. If an application requires overload protection, additional control options to adapt to numerous loads, and/or efficiency management to increase the life-span of a motor – users may consider using a VFD. By changing the frequency, as well as the acceleration and deceleration parameters, motors are able to ramp to speed in a controlled, safe, and efficient manner.

We know that VFDs are used to control motors, but how do we configure a VFD? Below we list various methods of controlling a VFD (which in turn controls a motor).

Most VFDs have both digital and analog (I/O) terminals that can be used to adjust various controls such as the frequency output, start/stop commands, and more. These I/O terminals can be wired to a Programmable Logic Controller’s (PLCs) I/O’s for dynamic control or wired to physical buttons, potentiometers, and lights installed on a control panel.


Similar to how you can control Wi-Fi light bulbs with your phone by sending and receiving commands using the Wi-Fi protocol, a VFD can be controlled by other devices over various communication protocols. Depending on the VFD manufacturer you may have access to different protocols, however, the most common communication protocol (with VFD manufactures) is Modbus.


While not the most convenient control method, if your VFD has a keypad you can configure all parameters (such as voltage, frequency, and run commands) directly from the VFD.


Like most control systems, the requirements of your system will affect the control mechanism you choose, which ultimately may require a combination of control methods. For example, you may want to control the VFD with a PLC but also have some physical controls connected to the VFD in case of an emergency.

For this example, we will be using a Maple HMI, a Maple PLC, and a VFD to showcase how to create a simple motor control system that incorporates visual elements, simple programming, and general control design.

The HMI will be used to visualize the VFD operations and also send control instructions to the PLC (via Modbus TCP/IP). The PLC will receive command instruction from the HMI, run logic instructions based on information received, and send run commands to the VFD (via Modbus RTU).


The general steps to configuring a VFD require a user to:

  1. Select and enable the desired communication protocol
  2. Adjust the parameters of the communication protocol
  3. Map the registers needed to control a motor

Every VFD is setup a little different so refer to the manufacturers documents for configuration requirements (including wiring).

This example will utilize the most common VFD manufacturing communication protocol Modbus (RTU using RS-485), with the driver set to node address 1, the communication speed set to 9600bps, and parity set to no parity.

Below are settings and wiring diagrams for various VFDs:

Yaskawa GA500

Enable Modbus Communication for Frequency and Run Commands (pg. 226)
B1-01 set to 2 (Enable Modbus Communication Control of Frequency)
B1-02 set to 2 (Enable Modbus Communication Control of Run Commands)

Set the Communication Parameters (pg. 701-702)
H5-01 set to 1 (Drive node address (Slave ID) of 1)
H5-02 set to 3 (Communication speed of 9600bps)
H5-03 set to 0 (Parity Selection of No Parity)
H5-04 set to 0 (Communication Error Stop of Ramp to Stop)

The GA500 VFD has seven multi-function digital input commands that can be used to customize motor control. Below we will set two of them to the forward and reverse jog commands.

Multi-function Digital Input Command Parameters (pg. 643)
H1-01 set to 12 (Forward Jog)
H1-02 set to 13 (Reverse Jog)

Alarm Display at External 24V Power Supply (pg. 95)
o2-26 set to 0 (Alarm Display disabled when only external 24V power supplied – “Ready” LED light will be flashing when “motor” is ready)

Powering the Control Circuit:
To power the external power supply used to operate the drive, without having to wire the main circuit power, we wire +24Vdc to PS terminal and the -24Vdc to the AC terminal.

Wiring Modbus RTU RS-485 Communication:
For communication between devices, the Maple PLC and the GA500 both utilize a 2-wire RS-485 connections, meaning we can directly wire D+ to D+, D- to D-, and SG (Signal Ground of PLC) to AC (GND of VFD).
Note: Set DIP switch s2 to the ON position (termination resistor for the last drive in Modbus network)

Please refer to the GA500 Manual for all configuration settings and specifications of a particular model of the VFD.

Note: The parameters listed are only meant to establish communication with the PLC and control the VFD function commands of the driver – this example does not include a motor or the motor parameter needed to be adjusted for a three-phase motor.

Allen Bradley PowerFlex 525

Coming Soon!

Automation Direct GS21-20P2 (w/ 1-Phase Motor)

Coming Soon!

After all configuration changes are made, we can layout which Modbus addresses are used to control the motor. Below is the table of Modbus addresses we will use to control the GA500 VFD.

Addressing can sometimes feel daunting, however, if you layout all the addresses used to control your motor like we do in the table above – it becomes straight forward. For example, if we write a value of 6000 to the 4×3 register, the VFD will update it’s reference frequency to 60Hz (6000*0.01Hz). And if we turn ON the 0th bit of the 4×2 register, we can now control the motor to run forward at 60Hz.

Again, the general procedure to configuring any VFD is the same regardless of the manufacturer, however, for the continued article we will use Yaskawa’s VFD for addressing and control parameters.


Next, we will need to do is download our respective product software’s, EBPro for our HMI and MapleLogic for our PLC. Below are links to the direct download of each software:

After you have installed both software programs, we can start configuring and programming our demo application. The HMI and PLC programs used in this demo project can be downloaded at the bottom of the page.


Starting off with the MapleLogic (the PLC software), after creating a new project, we double click the PLC parameter window. Here we can go into the Ethernet tab and change our IP address to 192.168.1.111. This address will be used later for the HMI to communicate with the PLC via Modbus TCP/IP.

Next, we can go into the Modbus tab of the PLC Parameter window and change the slave ID to 0. The addresses listed in this tab will be the Modbus registers the HMI will target via the Modbus TCP/IP protocol. Moving on to the communication between PLC and VFD, we can go into the CH2 tab where we can setup the Modbus RTU parameters. Here we change the master station number to 0 and the communication parameters to match the VFD (9600bps, no parity, 8-bit data, and 1 stop bit).

While the HMI, as the master device, can access registers from the PLC with minimal configuration, we will have to create a Modbus master program to write to the VFD addresses – that being said it is very simple.

As depicted in table 1, we know which Modbus addresses we need to write to in order to control the motor operations. To program these commands into our PLC we first create a new RTU-Master Special program by right-clicking the program tab in the project window, select slot 0 (our CPU), and set Channel to CH2 (RS-485). Now we just select the PLC registers that will control the run commands and the frequency reference register; for this example we will select D0 for the run command and D1 for the reference command. Clicking “Add” will create a new communication block that can be configured. From the figure above, block 0 is programmed to target slave ID 1 (the VFD) and write (06 function) the value of device D0 to the 4×2 register which control the run commands.

Lastly, we will set up the master communication from the HMI to the PLC. Start by opening up a new project in EBPro (our HMI software) and go into the System Parameters – here is where we can add our PLC. By clicking the “New Device/Server…” button we can create our “Modbus TCP/IP Master” device to control our PLC – here we make sure the IP address and device default station number matches what the PLC is set to (IP: 192.168.1.111 and Station Number: 0).

For more information on how to setup master RTU communication check out our How to Set Up your Maple PLC and Maple HMI using Modbus RTU and TCP Communications tutorial.


We are almost there! Below is simple scan program, using ladder logic, to control the VFD. As you can see we only utilize a few contacts, output coils, set bits, and reset bits to control the motor. Below is the complete program that is used for this example.

As you may have noticed there are additional registers being used apart from the already mentioned D0 and D1 registers – the reason for this is to create flexibility when controlling the motor while adding additional safety conditions to the motor. For example Row 3 shows that if Y100 is ON and Y102 is OFF, the reverse run command will be reset to (bit 1 of 4×2) and the forward run command will be turned on (bit 0 of 4×2) – this insures that either the motor will run forward or reverse but not both.

Above is a table that shows the addresses that are present in the HMI and mapped to the PLC. We can see that the frequency is directly mapped to the D001 register of the PLC, however, the run commands from the HMI are mapped to the Y100-Y104 range instead of the D002 range. The reason for this is we can use the run commands (like start, stop, etc.) from the HMI as conditions to use in logic to create more dynamic control of the motor. While this is a simple project, you can expand on this project to include various: ramp times, frequency conditions, and more.


Moving on to the HMI, we want to create objects we can manipulate to send and receive data from our PLC.

Knowing the Modbus addresses of the PLC registers, in EBPro we can easily add a display object with that address. Below you can see how to create a numeric object by going to the object tab and clicking the “Numeric” button. Here we can specify what device we want to connect with and what Modbus Address we want to control.

We can follow the same steps to create a push button by clicking the “Set Bit” button, specifying the Modbus address, and selecting momentary for the button style.

Expanding on this, we can create a HMI project that can control all Modbus registers listed in Table 2.


The last few steps are to wire up all devices, supply power, and download the respective projects to your HMI and PLC. Then run your applications!

This downloadable file has all the necessary projects to recreate and run the VFD demo project described in this article.

Video tutorial coming soon!


For a more in depth tutorial on connecting HMI to PLC, in video form, make sure to check out the following videos below. This video tutorial will guide you step-by-step establishing communication between both devices, covering both ethernet and serial communication, with demonstration on how to create HMI and PLC projects.

Thumbnail for a video tutorial on how to connect Maple HMI to Maple PLC using Modbus RTU and TCP Communications.

Scroll to Top