Secret UART On Cheap DCDC converters

I recently bought this fairly chunky buck converter from China, manufactured by a company called Yeeco. Despite its price, it works well and the quality of manufacture is high. You can set voltage and a current limit on the “control panel”, and you get some CV/CC lights too – it tries to behave like a bench power supply.

UART_close

On closer inspection I found 4 pins in the corner, with UART written next to them.  I already had an idea for an upcoming project for which a programmable buck converter would be handy, so I soldered on some pin headers and investigated.

After some thorough scouring of the instructions it came with, as well the product page, I could find no reference to a serial port. I tried googling for other Yeeco products or if other people had investigated, but to no avail. A breakthrough came when eventually I found someone else asking about a UART in a forum post about a similar DROK product. Since there was chance that both models were manufactured in the same place and/or used the same firmware, I was slightly optimistic.

I’d misplaced my USB-serial adaptor, so I connected an Arduino MEGA with a serial bridge program running, enabling me to send commands to the unit from my PC. I connected to 5V, to ground, T to Serial1-Rx and R to Serial1-Tx. Alas, after trying different baud rates and all the commands listed I could get no response, and was beginning to think that the port was just for factory use. Just before I gave up, I switched Rx and Tx – so that T on the device went to Serial1 Tx etc. It worked! I was able to send and receive commands, and they seemed to work perfectly.

There was just one problem: when connected to the Arduino, the buck unit produced voltages 0.2V higher than those it was set to. On closer inspection it turned out that it was current leaking through the pin that was the problem. A 10K resistor between the pin and the Arduino’s Tx line solved this, and did not affect the communications.

So, I will summarise the information I found in the hope that it might save someone else a lot of trawling. I’ve also written a quick library for Arduino. I had to write it for meself anyway, so it’s on GitHub in case it’s useful to anyone else.

Summary

  • The port runs at 4800 baud
  • V -> 5V
  • G -> Gnd
  • T -> Tx (NOT Rx)
  • R -> Rx (NOT Tx)

Commands

([CR] = Carriage Return, [NL] = Newline)

Reading

  • aru[CR][NL]    Read output voltage
  • ari[CR][NL]     Read output current
  • aro[CR][NL]    Read output state (1 = on, 0 = off)

Writing

XXXX represents the numerical value to set the voltage/current to. The string must be 4 chars long. For example, 0500 = 5V. 0001 = 10mV.

  • awuXXXX[CR][NL]    Set output voltage, XXXX is voltage in centivolts (yes, I know)
  • awiXXXX[CR][NL]     Set output current, XXXX is current in centiamps
  • awoX[CR][NL]             Set output state, X is 1 or 0 (1 = on, 0 = off)

33 thoughts on “Secret UART On Cheap DCDC converters

  1. Reading capacity value is working very well until 6.5A on both BUCK display and UART. But after that, UART value rollovers and begins from 0.
    BUCK display is working very well beyond 6.5A and goes through upward. I couldn’t find the problem with the UART.

      1. Thank you for your quick response. This is the only reference on the internet for this kind of Buck Converter. Best regards…

  2. Thanks for all your efforts, you have saved me a lot of work. And these cc cv modules are rock solid. Well so far. I’m using them to charge batteries in an off grid solar setup. Was about to try what you have completed and arduino are awesome solution. Thanks again for sharing you knowledge. You were probably using a nano which is why you had to swap the rx and tx. Trips me up every so often when I forget.

  3. Hello Ben,
    Thank you to have sharing your experience about this module…
    I’m currently evalauting this module and facing to the following problem related to uart commands:
    once the output is switched-on, the command “awo0” reply “#wook” as expected and the set voltage (“00.70” in my use case) is well displayed.
    But:
    -> the out led still ON, the cc led still on
    -> the output seems switched-on. I measures 3.45V and 0.5A at output (I have a resistor load of 7Ohms)
    -> set voltage and current can be changed from buttons
    -> but, it is not possible to switch-off the output, nor by button, nor by uart command “awo0”
    -> the command “aro” reply “#ro00000000100” and sometimes reply “#ro00000000243”

    The only way to switch-off the output is to power off the module.

    Did you already faced to this issue?
    Thank you in advance for your reply.
    Best regards

    1. Hi Benjamin,
      Hmm that does sound strange. I don’t recall facing an issue like that.
      The only thing I remember that could be vaguely related is that the output had quite a bit of capacitance on it, so when the output turned off and was unloaded, it would take a while to drift back to zero.
      But it doesn’t sound like that’s what you’re experiencing as you have the output loaded and the On LED stays on.
      Sorry, I don’t think I have any other ideas!
      Cheers

      1. Hi Ben.

        I am facing the same issue. I can only issue a single write command properly, after that the write commands are not working.

        I can turn on with awo1 but cannot turn off with awo0.
        I can change voltage or current once, but on the 2nd command it goes to max (12.1A or 65V).

        Any ideea on what could be wrong?

      2. Hmm that is strange. What’s the max voltage/current on your converter? I’m wondering if modules with bigger max ratings than mine are experiencing integer overflow issues

      3. Interesting! That’s definitely higher current than my module, so I wonder if it is that. Hard for me to test as I don’t have the hardware. Does the problem occur for low currents/voltages too?

  4. Hello Ben,
    Thank you anyway for your quick reply.
    I have asked the support of DROK.
    I will share you the information in case I find a solution.
    Cheers.

  5. Hello Ben,
    The issue seems come from my terminal.
    I used a simple “Putty” tool to send bytes to the module.
    With a “Realterm” tool, it is more easier and is working fine.
    Therefore we can close the topic.

  6. I’m looking for some help setting this up to charge a 12v SLA battery using a 60v Sur Ron motorcycle battery. When set to 014.4v and 4A or 6A output, followed by the OK button, the display shows a number about “08.XX” that slowly climbs up to about “12.xx” but didn’t actually seem to be charging. I figured that leaving it for 30 minutes or so would show a definite increase in battery voltage but it did not. The fan also didn’t turn on and the unit didn’t heat up even at 6A (fan is supposed to turn on at 5A). I’m also curious how to adjust the CC and CV settings. The CV led is lit while output is on.

  7. Thank you for the research. This helps a lot. I want to build a MPPT solar inverter (for one panel) with the module. Still have to measure the input voltage and current by other means.

  8. Hi, I have the DROK model (PCB with black solder mask). I considered that the original heat sink is too small, so I moved the assembly on a bigger heat sink. Since it was detached from the original heat sink, I wondered what are those 3 parts attached to the heat sink. When I bent Q1, it simply snapped and the marking on the package (TO220) is filed down and nothing is to be seen. Does anyone have an idea on the Q1 manufacturer part number? I did not find a schematic for these DC-DC power supplyes. Thanks!

  9. Your article launched me on an over-ambitious (apparently) project to make a MPPT solar pump controller. I’m stalled at sending commands from an Uno R3 to the Drok 200310 dc-dc converter. They’re connected as shown in https://sidtupper.ca/MPPT%20pump%20controller.png and I’m using the library and example at https://github.com/bengineer19/BuckPSU. I can see with a logic analyzer that the commands are getting to the Drok Rx pin but I get no response on the Tx pin. I’ve tried 4800 and 9600 baud and also swapped Tx Rx, without success. I’d be really grateful for hints to get past this.

  10. I’m making a MPPT solar pump controller using a Drok buck PSU (200310) controlled with an arduino UNO R3, as shown at https://sidtupper.ca/wiring%20UNO%20R3%20to%20200310.jpg, using the library and example at https://github.com/bengineer19/BuckPSU. I’m stalled at not being able to communicate with the Drok. On a logic analyzer I can see that commands are getting to the Drok Rx pin but nothing is coming back on the Tx pin. I’ve tried obvious stuff like swapping Tx / Rx and various baud rates (9600 vs 4800) without success. I’d really appreciate hints on how to get past this.

    1. Sid – I’m using the same Drok buck PSU, arduino code and libraries with an arduino Mega and am having trouble communicating with the Buck Converter. Although I believe you can’t use an arduino uno as you need multiple serial ports. The mega has tx0,rx0 as well as tx1,rx1 while the uno only has tx0 and rx0. The code uses serial0 for uploading the code, and serial1 (tx/rx pins 18 and 19 on mega) for communicating with the buck converter. That’s my understanding of it. Let me know if you ever found a solution beyond this.

      1. Misery likes company … thanks for the reply. As a test I sent commands to the Drok PSU through a USB-to-serial adapter on a Windows machine, with not a peep back from the Drok. I could see with a logic analyzer that the Drok RX pin was getting the proper bytes. I have two PSUs, one made by Drok and the other a clone, and they both behave the same.

  11. Some devices don’t support multi addresses. You need to replace the address/prefix letter “a-z” with a “:” …

      1. Some devices don’t support addressing and for all commands you need to replace the first letter “a” with a “:”.
        As example, the command “aru” has to be changed into “:ru”

Leave a reply to Ben James Cancel reply