
Welcome to the Analog Devices page on element14. Here you can find things such as our latest news, training videos, and product details. Additionally, you can engage with us in our forums.
During my search for a low cost electronics learning module, I came accross the ADALM1K which has interesting features for the price point (approx. 70$). It incorporates a source measure unit (SMU), an oscilloscope and a function generator. On top of that the hardware and software is open-source which is a learning experience in itself to undestand how the kit works.
My goal was first to test how the kit works overall. Once I had some confidence in its usage functions, I dived deeper into its evaluation / application software to look for automation oppurtinites with Python, where one could automate custom workflows for measurement and learning purposes.
I was able to integrate the ADALM1K with my Raspberry Pi setup and automate its functionality using the provided libsmu/pysmu Python package from Analog. I ended up creating a small Python library (pytest-analog) around libsmu so I could write some automated tested for my projects usning the ADALM1K.
As an example, I created automated test cases via Python to measure the power consumption of a DUT (ESP32 Dev board). This could be extended to create more complex test cases for your system under test using very low cost equipment such as the ADALM1K
The main hardware sepcs are as follows:
![]() |
| ADALM1K Block diagram per SMU Channel (wiki.analog.com) |
As per the above the diagram, an analog channel on the ADALM1K combines a function generator and an oscilliscope instrument on the same pin. In Rev F of the board, the analog ouput and input functions could be seperated with the two provided addiotnal split pins such that the oscillscope function is brought out along with 1 MΩ from the function generator function. Therefore, each analog channel could be configured to one of the following options:
If you would like to learn more about the ADALM1K hardware and its design, the following resources are good to read through:
![]() |
| ADALM1000 Board Upside View |
![]() |
| ADALM1000 Board Underside View |
The software landscape of the ADALM1K comprises the device firmware and the host software which can run on different platforms (Winodws / Linx / OS-X).
The ADALM1K firmware runs on an Atmel based microcontroller. The host software includes a C++ library (libsmu) containing the abstractions for streaming data to and from ADALM1K via USB. In addition, the Pixelpulse 2 and ALICE GUI-based tools are available to control the ADALM1K and make measurements with it.
In order to test the opertion of the ADALM1K via the provided GUI software Pixelpulse 2 and ALICE, I did some basic checks to test the ADALM1K analog and digital inputs/outptus via my Analog Discovery 3 (another great electronics learning tool). In these tests, I connected the two instruments to my PC and started their host softwares simultaneously to feed inputs and read outputs.
Test 1: Checking analog outputs of the ADALM1K via the Analog Discovery scope channels:
As shown in the image below, I connected the ADALM1K source channels A, B to the Analog Discovery scope channels 1, 2. Then using ALICE software I configured an output voltage on channels A, B and then read measured voltages on the scope channels via the WaveForms software of Analog Discovery 3. I configured channels A, B to output 3.6, 1.2 V. On the Analog Discovery, I read approximately similar values on channels 1, 2. There is a slight 200 mV deviations which also seem to occur when I set the ADALM1K to ouput 0 V. Therfore, the ADALM1K requires some calibration before doing any real testing.
Test 2: Checking GPIOs state of the ADALM1K via the Analog Discovery digital channels:
In this test, I connected the ADALM1K GPIO pins (0-3) to the Analog Discovery Digital IOs (0-3). Using ALICE software, I have set the ADALM1K GPIOs to a defined high / low state and then checked if the same state is read on the Analog Discovery side using its Static IO instrument in the WaveForms software. I was able to confirm the GPIOs state (high for pins 0,1 and low for pins 2,3
After integrating the ADALM1K with my Raspberry Pi setup and getting familiar with the libsmu / pysmu libraries, I decided to create a small python library (wrapper class) to ease the control of the instrument functions and also create pytest-fixtures for setting up / tear down of the instrument in an automated testing environment. The library is named pytest-analog and it also support the automation of the Analog Discovery instrument from Digilent.
To demonstrate the usage of ADALM1K with pytest-analog in automated testing context, I created a small python test case where the ADALM1K would measure the power consumption of an ESP32 microcontroller running different sketches.
Given the instrument source and measure capabilites, it can power the ESP32 with a given voltage and measure drawn current simultaneously.
The steps to create an automated test with the ADALM1K via pytest-analog are listed below:
[pytest]
# pytest options
addopts = -v --capture=tee-sys
# Filtering Warnings
filterwarnings =
ignore::DeprecationWarning
# Logging Options
log_cli=true
log_level=INFO
log_format = %(asctime)s %(levelname)s %(message)s
log_date_format = %Y-%m-%d %H:%M:%S
# ADALM1000 Fixtures Options
# Voltage Source
adalm1k_ch_a_voltage = 3.30
adalm1k_ch_b_voltage = 0.00
import numpy as np
import pytest
import time
import math
import logging
import matplotlib.pyplot as plt
from pytest_analog import ADALM1KWrapper, AnalogChannel
from datetime import datetime
def test_esp32_current_consumption(
adalm1k_voltage_source: ADALM1KWrapper
) -> None:
# 2000 samples collected at base rate 100 kHz with averaging every 1000 samples -> 20 seconds
MEASUREMENTS_COUNT = int(2000)
# Do some averaging over collected data
AVERAGE_RATE = int(1e3) # average every 1 / AVERAGE_RATE, Default sampling rate of ADALM1K is 100 kHz
samples = []
ch_a_avg_voltage = []
ch_a_avg_current = []
# Read incoming samples in a blocking fashion (timeout = -1)
for _ in range(MEASUREMENTS_COUNT):
samples.append(adalm1k_voltage_source.read_all(AVERAGE_RATE, -1))
# Average captured readings
for idx in range(MEASUREMENTS_COUNT):
# voltages in V
ch_a_voltage = [sample[0][0] for sample in samples[idx]]
# currents in mA
ch_a_current = [sample[0][1] * 1000 for sample in samples[idx]]
ch_a_avg_voltage.append(np.mean(ch_a_voltage))
ch_a_avg_current.append(np.mean(ch_a_current))
logging.info(f"Average current consumption: channel A: {np.mean(ch_a_avg_current):.3f} mA")
logging.info(f"Max current consumption: channel A: {np.max(ch_a_avg_current):.3f} mA")
# plot current profile
t = np.arange(0, MEASUREMENTS_COUNT) / (100e3 / AVERAGE_RATE) # Default sampling rate is 100 kHz
fig, ax = plt.subplots()
fig.suptitle(f"ESP32 Blinky current consumption", wrap=True)
fig.supxlabel("Time (s)")
ax.plot(t, ch_a_avg_current, color='red')
ax.set(ylabel= "CH_A I(mA)")
ax.margins()
ax.set_xlim([0, math.ceil(np.max(t))])
ax.grid(True, which='both')
ax.minorticks_on()
plt.savefig(f"I_consumption_esp32_blinky_{time.strftime(datetime.now().strftime('%H%M'))}.png")
![]() |
| Current consumption profile for ESP32 blinking an LED every 2 seconds |
![]() |
| Current consumption profile for ESP32 going into deep sleep mode for 5 seconds then waking up shortly |
After the test execution, a graph is generated with the measured current consumption profile during the test. The graphs above are for two different sketches running on the ESP32.
The first one is a basic blinky sketch where one could certainly see an increase in current draw when the LED is on. The duration of those peaks match closely with the LED-On period as expected.
The second sketch showcases the ESP32 deep sleep mode for extreme power saving applications, where the device is consuming a couple of miliamps during sleep mode and then waking up shortly every 5 seconds.
IMPORTANT: The above results can be inaccurate and require verification with a professional equipment to compare how good the ADALM1K is in capturing power characterstics of a given DUT.
by Shane O'Meara
This blog marks the second instalment in our ongoing series, delving into the fast-evolving landscape of industrial mobile robots. We initially examined how Industrial Mobile Robotics are revolutionizing the Factory of the Future Industrial Mobile Robotics - Revolutionizing the Factory of the Future Today - element14 Community
In this edition, we take a closer look at two key technologies shaping the future of mobile automation: Automated Guided Vehicle (AGVs) and Autonomous Mobile Robot (AMRs). While both AGVs and AMRs are designed to enhance efficiency and flexibility in industrial environments, they differ significantly in terms of navigation, adaptability and use cases. By examining their core similarities and distinctions, we aim to help you determine which solution best aligns with your industrial automation needs.
A mobile Automated Guided Vehicle (AGV) and an Autonomous Mobile Robot (AMR) share most of the same core fundamental attributes and will carry out similar automation tasks in an industrial application. The primary function for an AGV or an AMR is the transportation of materials from one location to another location in a factory or warehouse.
The fundamental difference between an AGV and an AMR is in their navigation capability and ability to avoid obstacles. An AGV follows a predetermined track or route and will not deviate from this path as it travels from one location to another. If an AGV detects an obstacle blocking the path it will stop and remain in place until the obstacle is removed. An AMR also has the ability to detect an obstacle but has the intelligence to adapt its route to avoid the obstacle, calculate a new route and proceed to complete its goal without user intervention.

An AGV can use different sensing techniques to detect its route.
The main advantage of AGVs is that they follow their predetermined route precisely and consistently hence making them ideal for high volume, repetitive tasks. Their main disadvantages are that they require infrastructural changes within the facility they intend to operate in and significant effort to setup and maintain. Tape, wire, markers or reflectors must be installed on the floor or walls and then maintained. Visual markers can be impacted by dirt or magnetic tape may become dislodged. Inductive wire is extremely robust but any adjustments have a significant impact on day to day operation as the floor must be redone. Additionally, as mentioned previously, they lack the ability to avoid obstacles so they stop operating if an obstacle is detected.
AMRs use Simultaneous Localization and Mapping (SLAM) to navigate the factory floor. Depth sensors, commonly Lidar scanners, mounted on the AMR are used to map the factory floor. The AMR is first driven around the facility and scans are accumulated to generate a complete map which is stored on the AMR and in fleet management control software. The generated map can be enhanced with additional information such as keep out zones, speed reduction areas and docking station locations. Goals can be placed on the map as x, y coordinates or dropped pins for the AMR to navigate between. During operation the most recent scan from the Lidar scanners is compared against the stored map and the current AMR position and orientation are calculated. The AMR then uses the built in navigation system to determine the optimized route to its goal considering the stored map and any obstacles it encounters on the path.

Disadvantages of AMRs compared to AGVs is that they have a higher initial cost and are less predictable than an AGV which takes a defined time to reach its goal. The obvious advantage of AMRs is that there is no requirement for infrastructural changes to enable their operation as an AMR has the sensing capability and intelligence to localize and navigate autonomously without markers. New tasks and goals can be updated within the map or fleet management software quickly and efficiently. Facility expansions and automation upgrades can be easily accommodated with the generation of new maps or extension of existing maps.
In the dynamic environments of the factory of the future, the ease of use, flexibility, scalability of an AMR gives it a clear advantage compared to AGVs. AMRs generally have enhanced sensing capabilities, with longer range Lidar, 3D depth sensing, radar and RGB vision technologies. These sensing modalities combined with superior compute power and artificial intelligence open up additional possibilities for advanced features and improved human robot interaction. To learn more on how ADI’s technology is enabling AMR and AGV robotic deployments, visit analog.com/mobile-robotics.
by Anders Frederiksen & Margaret Naughton
Welcome to the first installment in our blog series exploring the dynamic world of industrial mobile robots. As industries continue to push the boundaries of automation, mobile robots are becoming essential tools for achieving greater efficiency, flexibility, and scalability in manufacturing environments. This series aims to provide a holistic overview of the design challenges and technology innovations that are driving the evolution of industrial mobile robots – from understanding the right robotic fit for your industrial automation needs, to the exploration of critical topics such as localization, navigation, safety and motion control. Experts draw on ADI’s rich history in industrial automation as well as their comprehensive system level knowledge to explore how key enabling technologies are addressing the challenges faced on the path to more efficient and flexible manufacturing capabilities.
The automation of tasks is becoming commonplace in all facets of our lives. Who hasn’t seen their neighbor out mowing their lawn lately but instead has seen a robotic lawnmower happily moving around the garden keeping the grass at bay. This is just one example of where automation in the form of a mobile robot is freeing humans from repetitive tasks. As much as I love not having to mow my lawn, the real impact of mobile robotics and the automation of tasks is most evident in factories and warehouses. Where constant movement of materials and assets within a manufacturing facility is required, here you see the power of what mobile robots can do.
Autonomous Mobile Robots (AMRs) or Automated Guided Vehicles (AGVs) allow disparate parts of a production process to be connected, they can be the go-betweens for humans or other machines facilitating the handoff from one station to another.

You might wonder “why are mobile robots making more of an impact today?” – the answer is simple; firstly, they are more perceptive. Data-driven insights are making a difference in today’s automation revolution. In a true fusion of sensors, data from 3D time of flight cameras, Inertial Measurement Units (IMUs), Lidar, and many more systems are collected and processed to create a real-time awareness of the robots’ surroundings, seamlessly mapping the environment, and the robot’s location within the factory floor.
Secondly, they are efficient. With advancement in real-time perception comes more freedom, and the ability to move around a dynamically changing environment. Warehouse and factory automation is relying on mobile robotics to improve efficiency, manage inventory, and speed up operations. In large warehouses, the management and movement of inventory is streamlined with mobile robots that can scan, locate, and move equipment and products, to ensure a 24 / 7 level of operation to meet demands for fulfilment, in the case of retail and online shopping. Another key factor is that fully automated factories can operate at lower temperatures and light conditions where humans normally would not work but robots “don’t care”.
With predictable movement comes the added benefit of safety. Having mobile robots transferring materials not only brings efficiency but also removes risks inherently involved in certain tasks. A task performed by a forklift controlled by a human has the potential for injury to the driver, to others in the location, and can be unpredictable in its operation. A mobile robot will consistently choose the most efficient way of getting from point A to point B, it will move slowly to its required location and, in the case, where accidents happen, no human is there to be injured. Some tasks may involve hazardous materials, or interaction with dangerous equipment, these scenarios pose no risk to a mobile robot tasked with transporting that material or getting close to a large piece of moving equipment, unlike a human operator tasked with the same job.
Thirdly, today’s robots are more flexible, they can be programmed for new tasks as the needs arise in processes. With the quest for batch-size-of-one production facilities requiring customized processes, mobile robots that can adapt are vital. The Robot Operating System (ROS) which is a powerful developer tool for driver development has enabled many to begin their robotic journeys. Designing algorithms to bring human-like behavior to a mobile robot and the tasks that it must carry out. It’s a fascinating time to be working in the field of robotics with more standardization, more collaboration, and the digital transformation happening in the industrial world – making mobile and mounted robots capable of understanding the environment, interacting, and communicating like never before.
Intelligence at the edge, improvements in battery management, and seamlessly connected factories are all supporting the deployment of mobile robotics. While some tasks are easier than others to automate, when it comes to the world of Industrial Mobile Robotics, the tasks are more complex, the environments more challenging and the intelligence onboard the robot will be key in its seamless integration into a highly automated manufacturing environment. To learn more visit analog.com/mobile-robotics
We examined the power inverter, the power electronics block that sits at the heart of every motor drive, in the previous blog in this series . It is the controllable power element that enables modulation of the power to the motor in order that its speed and torque can be precisely controlled. Control of the inverter is thus critical to the whole operation of the drive. For any closed loop control system we generally need a set point (e.g. the desired operating point) and a measured variable (known as feedback) to compare it with, in order that the control loop can respond to any difference between these. In drives, the key measured variables are typically motor current, and motor position. Other variables such as DC bus voltage are helpful to the operation of the control loop. In this blog, we will examine the current feedback and the DC bus voltage measurement as these occur within the inverter stage described in the last blog, as indicated again in our architecture diagram below.

Figure 1: Servo Drive Architecture Diagram
What is important in the current feedback path is that the measurement is synchronized with the PWM cycle in order that no high frequency switching current ripple is introduced into the feedback path. This requires precise timing of the current sampling in order that it is sampled at the midpoint of the waveform. At this point in the waveform, the instantaneous current is equal to the PWM cycle average, and the measurement will not include any of the PWM switching ripple current. This is illustrated in Figure 2 in a simplified fashion – where the sampling point on the phase current waveform is shown, along with its relative alignment to the PWM high-side switching waveform, and the switching period Tsw. The PWM_SYNC pulse indicates the point at which sampling of the current must be triggered in this scenario (this can also be understood as the center-point of the digital filter in the case where sigma-delta ADC type sampling is used which is not a single-point sample, see [1])
Figure 2: Motor current mid-point sampling
Simultaneous sampling of at least two phases is also required, and usually 14-16 bit measurement resolution is sufficient, with microsecond-level latency so that the control loop can respond within the PWM cycle time (Tsw) or in half the cycle time for higher performance control loops.
There are a few different ways to implement the current measurement – these are shown in Figure 3, and described in the table below, along with some example part numbers to implement the scheme for a 20A application. The most accurate location to measure the motor current is in the actual motor phases, i.e the output lines of the inverter – but this usually requires galvanic isolation, due to the high voltage present at these nodes. Motor current measurements can be inferred from other locations such as inverter leg, and DC bus positive or negative rail – however these measurement locations, while potentially cheaper to implement have other disadvantages associated with them.

Figure 3: Current feedback options
|
|
Description |
Comments |
Example Parts (20A) |
|
1 |
Series shunt resistor + high common mode voltage (CMV) op-amp + simultaneous sampling ADC (SSADC) |
Usually used in <100V applications, as high CMV op-amps are usually rated for this range. |
CFN1206AFXR010 (Bourns) AD8410 (ADI) MAX11195(ADI) |
|
2 |
Series shunt resistor + isolated ADC |
Best solution for noise immunity, size and performance. Bitstream output – needs digital filter |
CFN1206AFXR010 (Bourns) ADuM7701-8 |
|
3 |
Isolated current sensor + opamp + SSADC |
Good solution for higher current levels where shunt resistors become too inefficient |
HMSR 20-SMS (LEM) AD8515 (ADI) AD7380 (ADI) |
|
4 |
Leg shunt resistor + opamp + SSADC |
Cheapest solution as no isolation needed if controller is DC bus grounded. Less accurate than in-phase shunt |
CFN1206AFXR010 (Bourns) MAX4477(ADI) MAX11195(ADI) |
High fidelity, precision, current feedback is important to the overall control loop of the inverter. It has a big impact on the overall control bandwidth and torque ripple. Bandwidth translates into faster transient performance of the motor control – which can be very important in applications like pick-and-place machines. Torque ripple translates into effects such as machining quality and finish tolerance in applications like grinding, cutting and polishing.
While current feedback is the most important feedback variable from the inverter to the controller, DC bus voltage can also be valuable as a control feedforward variable. It is not used as a controlled quantity, but because variation in the DC bus voltage impacts the dynamics of the current control loop it can be used as a feedforward variable, which improves the dynamics of the overall current controller. The end result of this is as shown in Figure 4.

Figure 4: Current Controller Block Diagram
The DC bus voltage sense signal can be derived directly from a voltage divider across the DC bus if the controller ground is at the DC bus negative, or else by using an isolated amplifier or ADC (such as the ADuM7701 mentioned previously) connected to the voltage divider output.
The next blog will look at another important feedback variable – position sensing – that is utilized in another part of the motor control system in conjunction with the current and voltage sensing described in this blog post.
References
[1] “Part 1: Optimized Sigma-Delta Modulated Current Measurement for Motor Control” by Jens Sorensen, Dara O’Sullivan, and Shane O’Meara, https://www.analog.com/en/resources/analog-dialogue/articles/optimized-sigma-delta-modulated-current-measurement-for-motor-control.html
The inverter stage is the “muscle” of the drive – a power electronics block that provides the regulated, conditioned power directly to the motor, driving it in the manner required by the end application, providing the amperes needed for torque production, the voltage needed for speed and magnetic flux regulation, and the frequency and phase relationships required for control of the speed and torque in the most efficient manner.
In a previous blog, we finished our consideration of the power supply functions within the variable speed drive (VSD). In this blog, we move into the heart of the drive – the inverter stage. This is highlighted in Figure 1.

Figure 1: Detailed Variable Speed Drive Architecture
The inverter stage fundamentally has two sets of inputs and one set of outputs. The main power input is the DC bus (discussed in the previous blog on the input stage). The main power outputs are the three-phase lines to the motor. The main control inputs are the gate signals to each of the switching power transistors in each leg of the inverter. There are various flavors of an inverter with different numbers of phases, and different power electronics topologies (multi-level, matrix, etc) but the vast majority of inverters on the market are three-phase, two-level inverters as shown in Figure 2.

Figure 2: Inverter Stage Driving Three-Phase Motor
The power transistors in each leg of the inverter are power-switching devices that turn fully on or fully off at a high frequency (usually in the range of 5-20kHz) and a controlled duty cycle or modulation index. They act as quasi-ideal switches that modulate the voltage applied at each motor phase winding and re-create a waveform with low-frequency components (typically sinusoidal) related to the motor velocity (typically in the range DC-1kHz) and instantaneous position and an averaged voltage amplitude related to the motor velocity and rated magnetic flux. This is illustrated in Figure 3. The output inverter phase-to-negative voltage is a pulse width modulated square wave switching between the DC bus voltage and zero. The inherent inductance of the motor windings will filter this signal to result in a motor current at the required low-frequency phase, frequency, and amplitude, with some undesirable switching frequency ripple present.

Figure 3: Inverter phase output voltage and current
The power transistors and associated thermal management (heat sinks, fans) are usually amongst the most expensive components in a VSD and also tend to take up the most space, especially at higher power levels. Power losses in the transistors come from the fact that they are not ideal switches, have a small voltage drop across them when conducting current, and also have non-zero turn-on and turn-off switching times when high voltage and high current within the switch overlap for short periods resulting in switching losses. Historically MOSFETs and IGBTs have dominated the power transistor market, but in recent years, there has been a trend to look to wider band-gap SiC and GaN-based power transistors. These can offer lower switching losses, which can allow for higher switching frequencies or more efficient inverters at the same switching frequency. The incentive for VSD designers to move to SiC and GaN is not quite as compelling as in other application spaces, where moving to higher switching frequencies allows for smaller filters. In VSDs, the filter is the motor winding, so in many applications, a higher switching frequency does not give a huge advantage.
Gate drivers are responsible for converting the logic level signals from the motor controller to signals that have the voltage amplitude and current drive capable of fully controlling the power transistors, and for ensuring that those drive signals are correctly referenced, as illustrated in Figure 4.

Figure 4: Switching function of a gate driver
Other functions provided by the gate drivers can be:
So gate drivers can be very complex devices with full communication interfaces (e.g. ADuM4177), or quite simple devices with only driving functionality (e.g. MAX22700). Whatever features are included in the gate driver, robustness to transients (expressed in specifications such as Common Mode Transient Immunity – CMTI) is an important feature as these devices live in a very noisy domain in the inverter, and need to be able to sit between the quiet, low voltage environment of the motor controller, and the high voltage, high current, noisy domain of the power transistors.
The power inverter is the heart of the VSD and manages the currents and voltages applied to the motor. Safe, robust, efficient switching of the power transistors within the power inverter is an important function of the gate drivers within a VSD. The next blog will consider some of the signals that are measured within the inverter stage to accurately control its operation.