Blog
Recent Posts
Programming Thomson Electrac Linear Actuator - Sleep Mode
Posted by
onThis post represents an excerpt of Thomson Electrac HD Linear Actuator Motion Control per CAN Bus. The application note is available in eBook and Kindle format, and it includes a free downloadable source code. More Information...
In this post, I am explaining the actuator's sleep mode, which, if not fully understood, may cause some headache during the development process.
Thomson Electrac Linear Actuator - Sleep Mode
The Electrac HD utilizes a sleep mode operation when positioning is no longer required. This feature allows for a constant battery connection with minimal drain while the engine or vehicle is not running. After five seconds of bus inactivity, the actuator will put itself to sleep. The actuator will begin a wake-up phase when bus activity is restored, followed by an address claim request.
Note: The Sleep Mode posts a major challenge for advanced motion control applications when it is not fully understood (because its side effects are not fully documented). In the following, I will try to address these quirks – my apologies for the lengthy description but I would have been happy to have the information when I started the project.
The Sleep Mode does have some impact on the programming. If the actuator goes into sleep mode, it will cease sending feedback messages, and it will take several hundreds of milliseconds before it detects a software start signal. As documented in the user manual, “the actuator will begin a wake-up phase, followed by an address claim request.” This behavior may not impact all applications, but it is important to be aware of the consequences.
In detail, the actuator requires at least one start signal transmitted per Actuator Control Message (ACM) after address claim to start motion until the desired position is reached, meaning it takes in average three ACMs to start motion after the actuator “wakes up.” The first ACM wakes the actuator up. The actuator sends the address claim message and waits for a possible address challenge, which does not occur when the setup contains merely the actuator and the control unit. The second ACM is usually ignored since it occurs during the address claim timeout. The third ACM, e.g., representing the start signal, will be recognized.
Note: The Address Claim message provides a minimum but incomplete compliance with the SAE J1939 Standard. The purpose is to prevent address collisions within the network, i.e., two nodes can negotiate who keeps their initial address and who needs to determine a new address. The user manual does not refer to a scenario where the actuator’s address is challenged. My assumption is that an address conflict is not solved. Overall, in my experience, the Address Claim message, in its current form, is useless, and it is being ignored in my code.
Another effect is that, during that wakeup period, the actuator reports a Motion Complete status within the Actuator Feedback Message (AFM). The AFM is transmitted as a response to the ACM message. In detail, after “wake-up,” the actuator reports Motion Flag = 0 (i.e., motion completed) for about three to four data frames.
The result is, despite receiving a Motion Start signal per ACM, the actuator initially reports the motion as completed, which defies common logic thinking.
Note: All described scenarios in this section are due to my observations; they are not documented in the user manual. Initially, I sent only one ACM to start a motion cycle but encountered problems, i.e., the actuator did not move. Consequently, in our demo program, I send ACMs periodically, i.e., every 100ms (actually, as recommended in the user manual, however, without explanation why).
In my program, I went so far as to detect whether the actuator was in Sleep Mode, followed by a “wake up” command when necessary. For some applications, this may be considered overkill, but it made the actuator’s “state of mind” more predictable.
In general, I strongly recommend that you consider if and how your application needs the sleep mode feature. The Sleep Mode is supposed to conserve energy when batteries are used.
The Sleep Mode also has some major, even disruptive impact when you need to control more than one actuator.
If you need sleep mode, never ever connect two or more actuators in the same network (see chapter Multiple Actuators in the Same Network). Keep each actuator in its own network (control loop), i.e., isolated from any other CAN data traffic. Any data traffic, even that not associated with the actuator, will keep the actuator awake.
Arduino-Based ECU Development Board With Dual CAN Bus Interface
Leverage the power of an ARM Cortex M3 32-bit processing capability in combination with a dual CAN Bus interface to create your next CAN Bus or SAE J1939 application or prototype. By combining our dual CAN port interface, the Arduino DUE microcontroller, an OBD2 or SAE J1939 cable, and open-source software libraries you are ready to go with powerful a turn-key Arduino-based dual CAN bus solution.
Programming Electrac Linear Actuator - ACM, AFM Data Frames
This post represents an excerpt of Thomson Electrac HD Linear Actuator Motion Control per CAN Bus. The application note is available in eBook and Kindle format, and it includes a free downloadable source code. More Information... In this post, I am explaining the Actuator Control Message (ACM) and Actuator Feedback Message (AFM).Thomson Electrac Linear Actuator - ACM Design The [...]
STM32 Programming - Developing with FreeRTOS, Using Assembly, C/C++
The STM32F103 Arm Microcontroller and Embedded Systems: Using Assembly and C The STM32F103 microcontroller from ST is one of the most widely used ARM microcontrollers, and the blue pill board utilizes the STM32F103 microcontroller. It comes at a low price, and it is widely available around the world. This book uses the blue pill board to discuss [...]
Educational Guides To Atmel AVR Microcontroller Programming
The AVR Microcontroller and Embedded Systems Using Assembly and C: Using Arduino Uno and Atmel StudioThe AVR microcontroller from Atmel (now Microchip) is one of the most widely used 8-bit microcontrollers. Arduino Uno is based on the AVR microcontroller; it is inexpensive and publicly available around the world. In this book, the authors use a [...]
Modbus Programming in C# (TCP/RTU) With Example Projects
Modbus is a serial communications protocol developed by Modicon (now Schneider Electric) in 1979 for the use with its PLCs (Programmable Logic Controllers). Modbus has become a popular standard communication protocol, and these days is widely accessible for the means of connecting industrial electronic devices. The principal reasons for the use of Modbus for industrial [...]
Python Hands-On Guide For Writing Effective And Idiomatic Code
Python’s ease-of-use supports every engineer to become productive instantly, but this usually implies that they are not using all the features it has to offer. With this hands-on guide, you discover how to write robust, idiomatic Python code by leveraging its best, and probably most overlooked features. Author Luciano Ramalho takes the reader through Python’s core language features [...]
Guide To Development And Testing Of Linux Device Drivers
Device drivers run everything that you are interested in, such as disks, monitors, keyboards, modems and everything outside the computer chip and memory. Moreover, the development of device drivers is one of the few areas of programming for the Linux operating system that requires unique, Linux-specific knowledge. For years now, programmers have relied on the classic [...]
Visual Programming Environment For Arduino Boards And Teensy
Visuino, the latest innovative software from Mitov Software, is a visual programming environment, allowing you to program your Arduino boards in a visual way. It currently supports the official Arduino boards, Teensy, Femto IO, ESP8266, ESP32, Controllino, Goldilocks Analogue, FreeSoC2, chipKIT, Maple Mini, and other Arduino clones.The components found in the Visuino software represent their [...]
Guide To Building Real-World Artificial Intelligence Applications With Python
Python is a widely used high-level programming language for general-purpose programming, created by Guido van Rossum and first released in 1991. An interpreted language, Python has a design philosophy which emphasizes code readability (notably using whitespace indentation to delimit code blocks rather than curly brackets or keywords), and a syntax which allows programmers to express [...]
Raspberry Pi Pico W: Programming Digital Devices with MicroPython
MicroPython is a lean and efficient Python 3 programming language implementation that includes a small subset of the Python standard library and is optimized to run on microcontrollers and in constrained environments. MicroPython is packed with advanced features, such as an interactive prompt, arbitrary precision integers, closures, list comprehensions, generators, exception handling, and more. Yet, it [...]