Close
0%
0%

Reverse Engineer the TM245P Pick and Place

Also known as the NeoDen3. Everyone wants it, several have tried it, let's do it!

Public Chat
Similar projects worth following
The TM245P is not the greatest machine. It's original software was awful, it had a wildly complicated multi-point matrix factory calibration which is unlikely to be replicated. It also lacked the vision system of the TM245V. The machine itself though, is very stout, very well build, and begging to be revived.

Can it be converted to OpenPNP?

TM245P Overview

This machine consists of an STM32F407 on it's main board, an STM32F301 inside the head unit, unknown control systems in the feeders that all communicate with UART(*unverified) over CAN Bus (SN65HVD230).

There is an additional 'Power and Communication' board but it does not contain and MCU or CAN transceiver.

Code, notes, discussion

Two Paths Forward.

OpenPNP commonly uses the Smoothieboard as the hardware interface. This has been successfully ported to the STM32F4 in the Charmhigh CHMT26VA, which, as stated above, TM245P front unit is also running. This would be ideal and beyond the port itself, would require only translating incoming G-Code to packets to be transmitted over the CAN Bus.

The second path forward is to create a drop-in replacement board for the front unit. As the interface would become OpenPNP this would only require communication over the IDC connector and the LCD/Touch screen would become optional. This would also require Reverse Engineering the protocol or replacing all of the MCUs in the system. Not ideal.

We need the protocol.

Hands down, the best option is to reverse engineer this protocol in an effort to minimize overall work. So far the best guesses are it's UART at ~512kbit/s, 1 start bit, (maybe?) two stop bits, but so far consistently good looking data has yet to come out. This is were you, Dear Reader, come in! Please take a look at the Issues list, particularly this one and please get in touch if there is any way you can help out.

ds1054z-scope-values_frame-level.csv

CSV Values for capture of entire packet or frame

Comma-Separated Values - 34.17 kB - 09/07/2022 at 18:07

Download

ds1054z-scope-values_bit-level.csv

CSV Values for capture of a single bit

Comma-Separated Values - 35.72 kB - 09/07/2022 at 18:07

Download

  • What's that UART?

    morgan09/06/2022 at 20:09 3 comments

    The groundwork for getting started on this project was laid out in this 2018 EEVBlog forum post.
    https://www.eevblog.com/forum/manufacture/neoden-tm245p-teardown-and-upgrade/
    In it, Luiz Renault suggests the data rate is 512kbit/s based on the smallest pulse width. My results before vary slightly but should be in the same range.

    The minimal bit length looks to be ~1.740us, not far off Luiz's 1.960us that can be seen in the scope shot in the second post. So 512kbit/s seems like a reasonable rounding point. Luiz also indicated they were able to decode the data, but not what the content looked like. There was also no indication of byte size, start/stop bits. So more digging....

    The next image is a single frame.
    Yellow is STM32 #PA9 (USART1_TX) <> VP230 #D (input)
    Cyan is STM32 #PA10 (USART1_RX) <> VP230 #R (output)

    Connecting a UART RX pin to the STM TX pin yields some results but things are inconsistent. At 512kbit/s nothing seems to change in the stream when messages are sent, to say, activate a feeder. Instead the same 3 bytes are seen, 0x00, 0xe0, 0xf0. By contrast when I previously thought the baud rate was 460800 I could see a noticeable 'shift' when sending commands. I've tried both 1 or 2 stop bits but cannot notice any change.

    When connecting RXs together to listen to 'return data' only the 0x00 and 0xf0 bytes are seen. When sending commands this time, it seems like that data... might be changing but it's inconsistent, and seemingly no matter which feeder I test the same byes is sent. 0xf8.

    Not sure what to poke next here, I've been looking into using TIOCGICOUNT to check for framing errors, possibly yielding the (in)correct baud rate, but its always returning 0 so unsure if that's even working.


    Looking forward to some suggestions.

View project log

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates