Author Topic: Greenworks 60v battery Ohm terminal  (Read 3078 times)

0 Members and 1 Guest are viewing this topic.

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Greenworks 60v battery Ohm terminal
« on: February 11, 2021, 01:58:48 am »
I got a Greenworks 60v snowblower that didn't have a battery. I'm on the DeWalt stack so I have several 60v DeWalt batteries. I 3D printed an adapter and went to test it out, but the snow blower will only run for 3 seconds then stops. Took it apart to see what was going on and found the electronics are potted :(

A Greenworks battery has 4 terminals and the snow blower uses 3 of them. The outter two are power and ground, the other one has an ohm symbol on it.  What precious little info I've found about that terminal indicates it is for "battery communication". The wire from the snow blower that would attach to the terminal in question produces 5v when I engage the snow blower and remains 5v for at least 3 seconds or until I disengage the snow blower.

I've tried putting various resistors across it to ground, but that hasn't worked.

Any thoughts? What does this wire do? How do I make it happy?
« Last Edit: February 11, 2021, 02:19:59 am by typoknig »
 

Offline aargee

  • Frequent Contributor
  • **
  • Posts: 822
  • Country: au
Re: Greenworks 60v battery Ohm terminal
« Reply #1 on: February 11, 2021, 02:29:35 am »
I'm guessing that it is a thermistor. Mostly used by the charger but will also get warm if there is an excessive discharge through the pack.
How it is connected, I'm not sure. Mostly between that terminal and ground in packs I have.
Maybe about 10k would be worth a go or get a resistance wheel and experiment.

I don't *think* it would be as complex as some one-wire device for either temperature or ID of some sort.

I'd be interested to see your battery adapter though, I've been tempted to try something similar here for a DeWalt battery to a Black and Decker tool.
Not easy, not hard, just need to be incentivised.
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #2 on: February 11, 2021, 02:59:16 am »
From my reading I also thought it might be a thermistor. I tried a 10k and 11k with no luck. I'll try some more in that range and see what happens.

I made the adapter in several parts. The one I'm using now was a "failure" in the sense that I neglected to account for some nooks and crannies of the Greenworks battery hole and had to take the Dremel to the adapter to make it fit. Printing a new one as we speak. Once I've verified my design I'll share it.
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #3 on: February 11, 2021, 04:00:20 am »
Tried 10k to 11k in increments of 100 ohms with no luck.
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #4 on: February 11, 2021, 11:27:08 pm »
Looks like the wire is expecting a PWM signal from the battery.

https://endless-sphere.com/forums/viewtopic.php?f=1&t=79384&start=100#p1559001

This Arduino code will apparently generate the correct pulse for a brushless 60V Greenworks tool. Based on the thread I linked to it seems 80V batteries have a different signal.

Code: [Select]
// written 5/26/2020
// Working battery interface signal from the "Omega" port
// of a Greenworks Pro 60V battery

#define PIN 6

void setup()
{
pinMode(PIN, OUTPUT);
}

void loop()
{

digitalWrite(PIN, HIGH);
//Delay 188,000us
for(uint8_t i = 0; i < 188; i++)
{
delayMicroseconds(1000);
}

digitalWrite(PIN, LOW);
delayMicroseconds(400);

for(uint8_t i = 0; i < 3; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(200);
}

for(uint8_t i = 0; i < 9; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

delayMicroseconds(100);

for(uint8_t i = 0; i < 1; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(200);
}

// 5
for(uint8_t i = 0; i < 4; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}
delayMicroseconds(100);

for(uint8_t i = 0; i < 4; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(200);
}

for(uint8_t i = 0; i < 3; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

digitalWrite(PIN, HIGH);
delayMicroseconds(1000);
digitalWrite(PIN, LOW);
delayMicroseconds(200);

for(uint8_t i = 0; i < 2; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}
delayMicroseconds(100);

for(uint8_t i = 0; i < 1; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(200);
}

for(uint8_t i = 0; i < 2; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

delayMicroseconds(100);

for(uint8_t i = 0; i < 4; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

delayMicroseconds(100);

for(uint8_t i = 0; i < 3; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

delayMicroseconds(100);

for(uint8_t i = 0; i < 2; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

delayMicroseconds(200);

for(uint8_t i = 0; i < 1; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

delayMicroseconds(100);


}

I don't have an Arduino so now I have to decide if I want to buy one or try port the above code to an ESP8266 (and buy a voltage regulation to get from 60V to 3.3V) or de-pot the electronics and try to circumvent the required signal.
« Last Edit: February 12, 2021, 12:12:58 am by typoknig »
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #5 on: February 12, 2021, 01:19:55 am »
I bought a used Greenworks 60V Self Propelled mower (w/o batt) that I am working on converting also.

I have the same problem-Runs for 3 seconds then shuts off and beeps 3 times.

I found the posts about the Arduino and bought a Nano. Programmed one of them and the signal looks good on the scope.

I connected pin 6 to the Omega terminal on the mower and excitedly turned it on.

The result-it ran for about 3 seconds then shut off and beeped 3 times?

Not sure what to try next...I think the problem is still with the signal... Weird that typoknig said it puts out 5V but the other forum posts suggest it takes in a signal?


[attach=1]
[attach=2]
[attach=3]





« Last Edit: February 12, 2021, 02:09:23 am by BradK »
 

Offline james_s

  • Super Contributor
  • ***
  • Posts: 15176
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #6 on: February 12, 2021, 05:02:24 am »
I really wish some of these companies would get together and develop a common battery standard that works across several brands. I have at least 5 different cordless tool battery standards and none of them work with each other. Wishful thinking I know.
 
The following users thanked this post: BradK

Offline bob91343

  • Super Contributor
  • ***
  • Posts: 1889
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #7 on: February 12, 2021, 05:08:23 am »
I solved that problem years ago.  I no longer use battery operated tools.  So if I have to run a power cord, no big deal.  Not only is it more efficient but will not die in the midst of use.  The cost is much less.  The tool longevity is better.
 
The following users thanked this post: BradK

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #8 on: February 12, 2021, 05:44:07 am »
I bought a used Greenworks 60V Self Propelled mower (w/o batt) that I am working on converting also.

I have the same problem-Runs for 3 seconds then shuts off and beeps 3 times.

I found the posts about the Arduino and bought a Nano. Programmed one of them and the signal looks good on the scope.

I connected pin 6 to the Omega terminal on the mower and excitedly turned it on.

The result-it ran for about 3 seconds then shut off and beeped 3 times?

Not sure what to try next...I think the problem is still with the signal... Weird that typoknig said it puts out 5V but the other forum posts suggest it takes in a signal?


[attach=1]
[attach=2]
[attach=3]

I think the tool (in my case the snow blower) is just pulling the pin high to 5v.  Once connected to the battery it could be pulled low and then have pulses generated on it as well.

As far as what to try next, that thread I linked to indicated that the 60v motors with and without brushes require different PWM signals. Maybe try a different one? Or if you have a Greenworks battery and the mower works with it, try hooking up the scope with it running and seeing what your signal is then program the Arduino as needed.
« Last Edit: February 12, 2021, 05:56:28 am by typoknig »
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #9 on: February 12, 2021, 05:52:09 am »
I really wish some of these companies would get together and develop a common battery standard that works across several brands. I have at least 5 different cordless tool battery standards and none of them work with each other. Wishful thinking I know.

I hear ya.  In my research I found that that electrically Greenworks, Kobalt, Snapper, some Ryobi, and some Walmart brand (Proworks, Protools, or something generic like that) are all the same within their respective voltage ranges. The cases are different though. DeWalt is different animal it seems. DeWalt 60V tools have 6 pins tool side and 8 pins battery side. I hooked up the scope to it and did a few tests to see if any of its pins generated a PWM signal when the battery was under load. I found no such signal, but my tests weren't exhaustive.
« Last Edit: February 12, 2021, 06:33:14 am by typoknig »
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #10 on: February 12, 2021, 06:44:18 am »
james_s

I agree. If I can't get a tool to run on my Ryobi batteries (which is all I have) I will get something else.
I converted a snow blower (Snowjoe ION18SB) a few months back to run on dual Ryobi batts and it works great.
That tool convinced me that I want a cordless lawn mower as well, just have to figure out how to make it work which is what brought me here.

typoknig

There are 3 different programs for the Arduino that I saw on the other forum. I have two of them. This first one they said did not work.
I will try the other tomorrow or this weekend and see what happens. Also, I am considering buying a brand new Greenworks 60V Mower with batt to see if I can catch the signal. I really want this to work, but if I can't get it I'll just try it with a different brand mower.
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #11 on: February 12, 2021, 06:58:51 am »
typoknig,

The picture in the above post is the snowblower I converted to run on dual Ryobi batts.
It's a 40V Snowjoe ION18SB. Got it on the local ads for $40, then sold the two batts and charger it came with for $150.
All I did was 3d print two cases, covers and some end clamps, then installed the cases/clamps on an aluminum bar I wrapped with black vinyl wrap.
The Ryobi 18V 4Ah batts have the same number of cells as the original Snowjoe batts and it works really well. I actually bought a second one on the local ads for $10 and converted it to run on a single 6Ah Ryobi batt for my mother in laws small driveway. Used a DC boost converter to get the voltage up. I have yet to test it though.

UPDATE: Forgot to mention the Snowjoe does not require a 3rd terminal on the battery, it will work with any batteries that provide 40V.
I removed the back cover, put ring terminals on the wires from the Ryobi batts and put them right on the existing terminals that I found under the back cover.
I have never had a gas snowblower so I may be biased but I am more than impressed with it. So much better than shoveling and now I actually want it to snow LOL.


« Last Edit: February 12, 2021, 07:10:20 am by BradK »
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #12 on: February 12, 2021, 06:38:47 pm »
Tried a few different things today.

First I uploaded the other program to the Arduino, checked it on the scope and connected everything.
I tried it with the same results (powers on for 3 seconds then shuts off and beeps 3 times).

I then removed the Arduino connection to the Omega port on the mower side the took a voltage measurement.
I'm getting 2.8V between the Omega port and ground on the mower side?

I also considered that my Ryobi batteries BMS's might be cutting power from an overcurrent, but I ruled that out in a few different ways:
1. Manufacturer specs claims 60V 5Ah battery will run 60 mins so avg current draw will be 5 Amps.
2. My batteries are rated for 30A peak
3. If I don't turn anything on but just press the lever switch on the handle I still get the 3 beeps after about 3 seconds

Seems the Omega port is still the problem here (or my motor controller). For now I am at a loss, without an actual battery I can't see what I need to so I might just buy one in the future and go from there.
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #13 on: February 12, 2021, 09:04:45 pm »
I went ahead and ordered an Arduino instead of porting the code to an ESP8266 and having to worry about a 3.3v to 5v level shift. Once I get it and try it out I'll post back.
 
The following users thanked this post: BradK

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #14 on: February 14, 2021, 08:39:18 pm »
Received the Arduino Nano in the mail to day and got it programmed and hooked up. I've tried the 3 Arduino "sketches" that were available on the website I linked to in my previous post to no avail.  I'll do some more hunting for other Arduino code, but I might have to breakdown and buy a battery unless someone has a battery and can scope out the signal.
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #15 on: February 15, 2021, 01:16:13 am »
I reworked the code I found at https://endless-sphere.com/forums/viewtopic.php?f=1&t=79384&start=75#p1275544 to make it easier to pick between various pulse mappings.  I used a scope to verify the code is doing what I expect it to do, but neither of the pulse mappings are working for my 60V snow blower.  Maybe it will help someone though.  Just modify "SELECTED_BATTERY_TYPE".  I'll either find or buy a battery this week to get to the bottom of this mystery.

Code: [Select]
// Battery types
#define BATTERY_TYPE_60V 1
#define BATTERY_TYPE_80V 2

// Change SELECTED_BATTERY_TYPE to one of the battery types listed above
#define SELECTED_BATTERY_TYPE BATTERY_TYPE_80V

// Pin number to put signal on
#define PIN 6

#if SELECTED_BATTERY_TYPE == BATTERY_TYPE_60V

#define NUMBER_OF_PULSES 41

// All hold times are in microseconds
uint16_t pulse_low_hold_times[NUMBER_OF_PULSES] = {
  400,
  200, 200, 200,
  100, 100, 100, 100, 100, 100, 100, 100,
  200, 200,
  100, 100, 100,
  200, 200, 200, 200, 200,
  100, 100, 100,
  200,
  100,
  200, 200,
  100,
  200,
  100, 100, 100,
  200,
  100, 100,
  200,
  100,
  300,
  200
};

// All hold times are in microseconds
uint32_t pulse_high_hold_times[NUMBER_OF_PULSES] = {
  100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
  1000,
  100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
  189000
};

#else if SELECTED_BATTERY_TYPE == BATTERY_TYPE_80V

#define NUMBER_OF_PULSES 41

// All hold times are in microseconds
uint16_t pulse_low_hold_times[NUMBER_OF_PULSES] = {
    400,
    200, 200, 200,
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    200, 200, 200,
    100, 100, 100, 100, 100,
    200,
    100,
    200, 200,
    100,
    200,
    100, 100, 100,
    200,
    100, 100,
    200,
    100,
    200
};

// All hold times are in microseconds
uint32_t pulse_high_hold_times[NUMBER_OF_PULSES] = {
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    500,
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    189900
};

#endif

void setup() {
  // set pin 6 to an output
  pinMode(PIN, OUTPUT);
}

void loop() {
  // Loop through all the pulse data
  for (uint8_t i = 0; i < NUMBER_OF_PULSES; i++) {
    // Pull pin low
    digitalWrite(PIN, LOW);

    // Hold pin low for required amount of time
    delayMicroseconds(pulse_low_hold_times[i]);

    // Pull pin high
    digitalWrite(PIN, HIGH);

    // If we aren't on the last pulse, assume hold time is small enough to be handled by the delayMicroseconds function
    if(i + 1 != NUMBER_OF_PULSES) {
      // Hold pin high for required amount of time
      delayMicroseconds(pulse_high_hold_times[i]);

    // If we are on the last pulse, assume hold time is too large to be handled by the delayMicroseconds function
    } else {
      // Split hold time into milliseconds and microseconds
      uint32_t milliseconds;
      uint8_t microseconds;
      milliseconds = pulse_high_hold_times[i] / 1000;
      microseconds = pulse_high_hold_times[i] % 1000;

      // Hold pin high for required amount of time
      delay(milliseconds);
      delayMicroseconds(microseconds);
    }
  }
}
« Last Edit: February 15, 2021, 09:15:11 pm by typoknig »
 
The following users thanked this post: BradK

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #16 on: February 15, 2021, 10:38:44 pm »
Typoknig,

Are you getting the same result as before (snowblower runs for 3 seconds then shuts off?

Seems no matter what I do it does the same thing.

I wonder if something weird is going on...Like the controller requires an initial full voltage (GW batts are actually 64V fully charged from what I have read) before it will allow operating on a freshly inserted battery?
« Last Edit: February 15, 2021, 10:56:27 pm by BradK »
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #17 on: February 16, 2021, 04:39:07 am »
Yeah, I get the same results I've always got. I ordered a GW battery today and I should have it by Wednesday of next week. Then we will know for sure.
 
The following users thanked this post: BradK

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #18 on: February 20, 2021, 05:00:43 am »
Typoknig,

I just ordered the Logic Analyzer recommended on the Endless-Sphere GW thread. Still looking for a good deal on a battery.
I have been watching videos on Arduino programming and looking over the code to see if I can find any errors. I'll post any thoughts/findings here.
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #19 on: February 22, 2021, 09:11:43 pm »
GW battery was delivered today.  Fully charged it is 60.53V and the DeWalt battery is 58.42V.  I wouldn't think that voltage difference would prevent it from running, but maybe?  The pulses generated were slightly different, but when I plugged them in I get the same result I had been getting.  I did notice in the waveform that the low pulses aren't pulled all the way to ground.  The low pulses that occur before the single 1000us high pulse are pulled down to 600mv and the low pulses that occur after the are pulled down to 200mv.  I wouldn't think that would be causing this issue either, but again, maybe?  I've attached a .wfm file generated from my Rigol MSO5074.
« Last Edit: February 22, 2021, 09:20:55 pm by typoknig »
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #20 on: February 22, 2021, 11:43:29 pm »
Typoknig,

You mean with the GW battery your snowblower is still only running for 3 secs then shutting off?

Your 58V batt should work just fine. The GW battery I was looking at had a tag on it that said it was actually a 54V battery with a max of 60V. I also found out the 2Ah 60V batts have 15 cells in them.

Have you tried measuring both the GW battery signal and the Arduino signal at the same time then overlapping them to see if there are any differences other than the voltage offset?

I should be getting my logic analyzer this week but still looking for a good deal on a GW battery.

 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #21 on: February 23, 2021, 12:00:29 am »
You mean with the GW battery your snowblower is still only running for 3 secs then shutting off?

No, the snow blower works fine with the GW battery.  When I scope out the signal the GW battery generates and update the Arduino code to use those pulses, it still only runs for 3 sec with the DeWalt battery.

Have you tried measuring both the GW battery signal and the Arduino signal at the same time then overlapping them to see if there are any differences other than the voltage offset?

No, but I'm getting ready to set that up now.
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #22 on: February 23, 2021, 04:27:04 am »
Didn't make any breakthroughs tonight.  The waveforms I was using where all really close to what the battery generates.  The pulses might actually be 92.6us, but we have 100us coded up.  I tried more exact pulse widths and it didn't change anything.  I am running my buck converter at 5v exactly and the snow blower pulls the Omega terminal high to 4.7V.  There are a bunch of little differences that I wouldn't think would matter, but apparently one or more of them do.  To summarize, the difference are:

1.) DeWalt battery is 58.X volts, GW battery is 60.X volts.
2.) Arduino pulls Omega terminal high to 5V (I can adjust my buck converter to make it match), snow blower only pulls it high to 4.7V.
3.) Highs and lows of pulses aren't exactly on 100us intervals.  Sometimes they are weird numbers like 92.6us for a low pulse, or 103us for a high pulse.
4.) All the pulses the GW battery pulls low before the 1000us high pulse are only pulled down to 600mv, not 0v.  After the 1000us high pulse the GW battery only pulls the low pulses down to 200mv.

I'll investigate these differences one at a time in an attempt to narrow down what is causing this battery to be such a pain.
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #23 on: February 23, 2021, 06:57:10 am »
Crap!

I was hoping this would be as easy as the users on Endless-sphere made it sound.
I sent one of the guys there (StinkyGoalieGuy) a PM and he replied with the following:

Quote
"This is the logic analyzer I used: https://www.amazon.com/gp/product/B077L ... UTF8&psc=1

Yeah, it wouldn't hurt to check that the Arduino output matches the code with a logic analyzer.

I'm using a battery I built from 18 a123 cells in series. They are 3.3v nominal, so ~59.4volts.

I used the logic analyzer on a Greenworks 60V battery to get the pulse pattern. Unfortunately, I don't have that battery anymore, otherwise I would check its voltage for you."

Great observations, Those all seem like very minute details but then again if its not working it must be something like that.

The other thing I have been wondering is if the pulses change with battery voltage....Perhaps the pulse pattern has to match the battery voltage ,at least initially to fool the controller?


 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #24 on: February 25, 2021, 04:04:38 am »
I've took some more samples and noticed that as the snow blower starts up, the signal is different for about 2 seconds.  There are several places where the "normal" signal (the one we have been replicating with an Arduino thus far) are mixed into the starting signal, but the starting signal is predominantly large pulses (in the ms range, not the us range).  This may be a coincidence, but there are exactly 41 of the larger pulses, the same number of us range pulses in the "normal" signal.  I was going to use my scope's built in function generator to try to feed the signal back into the snow blower while actually using the DeWalt battery, but my function generator's range is 2.5v to -2.5v, so that will not work.  I'll take a couple of more samples tomorrow and see if the staring signal is the same each time.  If it is I'll try to duplicate it with the Arduino.  I've attached a waveform that shows this if anyone else cares to analyze it.

I took more samples and never saw the "larger pulses" I mentioned above again, so I guess that was fluke generated by the GW battery?  The starting signal is slightly different though.  From here on I'll refer to a "pulse group" as a series of pulses separated by a large (relatively speaking) delay.  The first pulse group always happens 1.1 seconds after the Omega pin is pulled high and only has 40 pulses, not 41.  The first 5 pulse groups occur with only a 90ms delay between them, where all the pulse groups after than have a roughly 190ms delay between them.  I duplicated this, but the snow blower still only runs for 3 seconds.  Next, the first 5 pulse groups are have slightly different delays between the pulses.  I'm getting ready to duplicate that now.

I also spliced in the Arduino while using the GW battery so the Arduino was generating the signal for the Omega pin instead of the battery.  This tells me that the minor voltage difference between the DeWalt battery and the GW battery is no the cause of the problem.

I deleted the original wave I attached and I've attached a new wave recorded from my Rigol MSO5074 which show the start sequence and several seconds of the tool running correctly.
« Last Edit: March 01, 2021, 05:10:04 pm by typoknig »
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #25 on: February 28, 2021, 11:45:02 pm »
Thanks for sharing.

I just bought a 60V 4Ah GW battery-should be here on the 8th. Once I get it I'll post the data from the logic analyzer as well.
I'm still confused how those on the other forum got it working and we did exactly what they mentioned with no luck? Hopefully we'll figure it out.
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #26 on: March 01, 2021, 03:20:43 am »
GreenWorks: 1, Typoknig: 0

I have produced the signal within 2us of precision and used the 5 unique initialization pulse groups, but that is apparently not good enough.  I set up my scope to record both the GW battery Omega pin signal and the signal generated by the Arduino at the same time and had the Arduino start generating the signal at the same time (there was about a 50us delay for the Arduino starting because I was using the GW battery Omega pin signal as a trigger) and the wave forms are essentially on top of each other with only very minor differences that I'm unable to remove due to the precision of the Arduino.

I felt I had exhausted all possibilities trying do duplicate the signal without knowing more about the actual data.  I didn't think that GW would bang out their own protocol, so I took the battery apart to seen what was inside.  No surprise, it was potted just like the snow blower controller, but it wasn't nearly as thick.  There was one large chip that looked like it might be a controller, so I scraped off the potting material and found it is a Renesas R5F100ACA.  Datasheet from Mouser attached.  I'll dig into the datasheet this week to see WTF this chip wants from us, but the first thing I noticed is that it is a 32MHz chip compared to the Arduino Nano which is only 16MHz.  That could definitely cause a resolution problem.

Also attached is a spreadsheet of the pulses I recorded from my scope. The actual pulses were often a fraction, so I always rounded down to a whole number.
« Last Edit: March 01, 2021, 05:13:54 pm by typoknig »
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #27 on: March 05, 2021, 08:57:08 pm »
My GW battery arrived yesterday.

I looked at the signal on the scope and it looks exactly like the one I'm producing with the Arduino code.
I thought like you said it might be the voltage difference (+5V Arduino vs +2.3V GW batt) so I hooked up a POT and used it as a voltage divider to take the signal down to about 2.3V...Still didn't run (I used a 2k pot-perhaps it also needs a specific current?). I also noticed like you said the initial pulse group only went low to about 60mV and the 2nd pulse group went to about 20mV?

I will try connecting to my logic analyzer sometime this weekend but so far everything looks fine on the scope?

I guess if this doesn't work I'll just keep the GW battery and use my additional batts with it to give me a longer runtime.
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #28 on: March 06, 2021, 03:30:25 am »
Don't give up!  That's what they want!  :)

I haven't had a chance to dive into the datasheet I posted.  That controller is complex enough that nothing was jumping out at me at first glance.  I also had to send my scope in for service so I'll be without it for a couple of weeks.

Here is one thing that give me hope though.  If this is a timing issue (which is still one of the most likely cases) here is post about producing sub microsecond accuracy.  I haven't had a chance to implement it yet, but I did notice that a lot of the pulses from the GW battery were XX.5us, so the method described in this post could help us get closer to that mark:

https://forum.arduino.cc/index.php?topic=96971.0
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #29 on: March 06, 2021, 08:54:30 am »
Hooked everything up to the logic analyzer tonight,

For some reason (probably me) I am only getting the signal from the Arduino to come up on the logic analyzer.
I have the signal from the Arduino adjusted to 2.3V. I have never used a logic analyzer so I'm sure its something I'm doing wrong...Perhaps the GW batt signal not going to 0V is the problem, I'll try a few different triggers tomorrow and see what I can get.
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #30 on: March 06, 2021, 09:40:44 pm »
Good news,

I found my mistake (grounding issue on the GW signal-logic analyzer) and captured both signals.
You can see many differences between them on the PDF screen capture (attached).
Channel 0  (top) is the signal from the Arduino, Channel 1 (bottom) is the GW battery.

Typoknig, like you mentioned there are some differences in pulse lengths etc.

Now the bad news, I know very little about 'decoding' the signals and changing the Arduino code to match it. The only thing I know how to do is put my cursor on each pulse and compare the measurements.

I tried attaching the file but it is not an 'Allowed File Type'.
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #31 on: March 06, 2021, 10:56:02 pm »
For anyone who wants the original file:

Download the free logic analyzer software @ https://www.saleae.com/downloads/

Send me a PM with your email and I will email you the .logicdata file.

UPDATE: So I have been going through the signals and found 26 mismatches on both High and Low pulse widths.
More to come...
« Last Edit: March 07, 2021, 02:03:41 am by BradK »
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #32 on: March 08, 2021, 07:35:34 am »
Here's where I'm at:

Measured GW batt logic using a sample rate of 16Ms/s.
Compared High and low pulse lengths-noted mismatches.
Wrote a program for my nano, rounding the high and low pulse lengths to the nearest uS.

Signal looked good on scope, connected voltage divider to produce 2.3V peak and connected to mower.
   *Result: Beep beep beep!


Thoughts/troubleshooting:
1. Code not precise enough (although other forum users claimed theirs worked?)
2. Timing between applied power and signal needs to be precise (Right now I have my Arduino powered by a separate PS-I wonder if the Mower has to see the signal within ____mS of seeing 60V power?
3. GW pulse pattern LOWs do not go all the way to 0V as stated by Typoknig.

After this I looked over my Arduino code, made a few changes and found an error that I fixed and then uploaded the new program and tried it again. Result, Beep beep beep. I'm getting really tired of hearing those beeps, I feel like the mower is laughing at me.

Tomorrow I will connect the Arduino to the batteries in hopes of testing if the timing between applied power and the signal is the problem, but I am doubting it. Here's the Arduino code I wrote so far:

Quote
void setup()
{
pinMode(6,OUTPUT);
}

void loop()  {
digitalWrite(6,HIGH);
delay(189);

digitalWrite(6,LOW);
delayMicroseconds(411);

ditigalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH)
delayMicroseconds(103);

digitalWrite(6,LOW);
delayMicroseconds(214);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(214);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(103);

digitalWrite(6,LOW);
delayMicroseconds(130);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(103);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(103);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(103);

digitalWrite(6,LOW);
delayMicroseconds(214);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(103);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(117);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(102);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(116);

digitalWrite(6,LOW);
delayMicroseconds(214);

digitalWrite(6,HIGH);
delayMicroseconds(103);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(103);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(103);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(103);

digitalWrite(6,LOW);
delayMicroseconds(115);

digitalWrite(6,HIGH);
delayMicroseconds(526);

digitalWrite(6,LOW);
delayMicroseconds(204);

digitalWrite(6,HIGH);
delayMicroseconds(96);

digitalWrite(6,LOW);
delayMicroseconds(104);

digitalWrite(6,HIGH);
delayMicroseconds(96);

digitalWrite(6,LOW);
delayMicroseconds(204);

digitalWrite(6,HIGH);
delayMicroseconds(96);

digitalWrite(6,LOW);
delayMicroseconds(204);

digitalWrite(6,HIGH);
delayMicroseconds(96);

digitalWrite(6,LOW);
delayMicroseconds(104);

digitalWrite(6,HIGH);
delayMicroseconds(96);

digitalWrite(6,LOW);
delayMicroseconds(205);

digitalWrite(6,HIGH);
delayMicroseconds(96);

digitalWrite(6,LOW);
delayMicroseconds(105);

digitalWrite(6,HIGH);
delayMicroseconds(96);

digitalWrite(6,LOW);
delayMicroseconds(105);

digitalWrite(6,HIGH);
delayMicroseconds(96);

digitalWrite(6,LOW);
delayMicroseconds(105);

digitalWrite(6,HIGH);
delayMicroseconds(95);

digitalWrite(6,LOW);
delayMicroseconds(206);

digitalWrite(6,HIGH);
delayMicroseconds(95);

digitalWrite(6,LOW);
delayMicroseconds(105);

digitalWrite(6,HIGH);
delayMicroseconds(95);

digitalWrite(6,LOW);
delayMicroseconds(106);

digitalWrite(6,HIGH);
delayMicroseconds(95);

digitalWrite(6,LOW);
delayMicroseconds(206);

digitalWrite(6,HIGH);
delayMicroseconds(94);

digitalWrite(6,LOW);
delayMicroseconds(106);

digitalWrite(6,HIGH);
delayMicroseconds(94);

digitalWrite(6,LOW);
delayMicroseconds(206);

digitalWrite(6,HIGH);
delayMicroseconds(94);

digitalWrite(6,LOW);
delayMicroseconds(206);
}   



If the timing test does not solve the problem I will probably look over the program a few more times, measure the GW sig at a higher sample rate and try to get more accuracy out ot it. If that does not work I'll probably give up and figure the problem is beyond my knowledge and just use the GW batt and my batts in parallel to at least double the run time.
« Last Edit: March 08, 2021, 03:13:10 pm by BradK »
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #33 on: March 08, 2021, 05:35:45 pm »

Today I connected everything to my batteries to see if the issue was timing.
Found out my 5V regulator circuit had a short in it and I overvolted my last Arduino Nano (+18V to +5V pin), CRAP!
I may order another Nano but right now this project has taken too much time from other projects.
I'm just going to wire up my existing setup to the mower and use it with the GW battery.

I am still confused how those on the other forum had success as their Arduino program did not even come close to matching what I am seeing coming from the GW battery???
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #34 on: March 09, 2021, 03:27:22 am »
This is just a guess, but I suspect some of the older GW tools were a bit looser on their timing requirements, so the microsecond precision signal generated by an Arduino worked. I suspect newer tools implement another Renesas chip and the timing requirements are now in the nanosecond range which the Arduino can't do reliability via the delay function.
 

Offline NiHaoMike

  • Super Contributor
  • ***
  • Posts: 7266
  • Country: us
  • "Don't turn it on - Take it apart!"
    • Facebook Page
Re: Greenworks 60v battery Ohm terminal
« Reply #35 on: March 09, 2021, 03:46:16 am »
This is just a guess, but I suspect some of the older GW tools were a bit looser on their timing requirements, so the microsecond precision signal generated by an Arduino worked. I suspect newer tools implement another Renesas chip and the timing requirements are now in the nanosecond range which the Arduino can't do reliability via the delay function.
My guess is that the line is a bidirectional bus (similar to 1Wire) and therefore imitating the waveform would only work if the playback starts at exactly the right time. Perhaps make a small inductive pickup to tell which end is driving the line while reverse engineering with the scope?
Cryptocurrency has taught me to love math and at the same time be baffled by it.

Cryptocurrency lesson 0: Altcoins and Bitcoin are not the same thing.
 

Offline BradK

  • Contributor
  • Posts: 17
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #36 on: March 09, 2021, 04:17:47 am »
Typoknig,

I think your right...Very annoying since most tools use 18650s yet the manufacturers act like their batteries are special.
So far I've converted a weed eater, snow blower, power supply, and a water pump to run on my Ryobi batts.

NiHaoMike,

I think that is something to look into.
Perhaps a DPST switch to turn on both Arduino and apply 60V signals at the same time then add the initial wait time to the Arduino code?
I just ordered a few more parts and will try again in a few weeks.
But I do think Typoknig may be right about the sub uS requirement.

UPDATE: Tonight I soldered in the wires for my Ryobi batts and tested it with the GW batt in parallel. Works great. Can't wait to actually try this mower out on real grass.
« Last Edit: March 09, 2021, 07:56:42 am by BradK »
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #37 on: March 09, 2021, 07:59:06 am »
This is just a guess, but I suspect some of the older GW tools were a bit looser on their timing requirements, so the microsecond precision signal generated by an Arduino worked. I suspect newer tools implement another Renesas chip and the timing requirements are now in the nanosecond range which the Arduino can't do reliability via the delay function.
My guess is that the line is a bidirectional bus (similar to 1Wire) and therefore imitating the waveform would only work if the playback starts at exactly the right time. Perhaps make a small inductive pickup to tell which end is driving the line while reverse engineering with the scope?

Good thought. Bidirectional communication would also explain the two different levels of low pulses (600mv and 200mv).
 

Offline BornToRepair

  • Newbie
  • Posts: 1
  • Country: pl
Re: Greenworks 60v battery Ohm terminal
« Reply #38 on: May 28, 2021, 06:57:51 pm »
Quote
Good thought. Bidirectional communication would also explain the two different levels of low pulses (600mv and 200mv).
Definitely it is like you said.
I have bought Powerworks 60V mower cheap without battery.
My idea was to run it with 3x Makita 18V batteries which I have a lot.

To make it run I have modified Arduino sketch available on Endless sphere thread.
I simply removed second part of a script to check if the answer form mower will still appear on a bus. Indded it was.

Unfortunatley this was not enough for reliable opration. Mover turns off after 1-2 min of running with 6 loud beeps.

Reading carefull this thread and endless sphere theread I figure out that query frame is not the same all the time.
Dumb luck I was able to generate different random query and sitll receive answer from mower.

https://youtu.be/Y7Tlfim-A8w

I tried to alternate this query every 2sec. and to my surprise it works!
I was able to mow grass in my entire garden for ~60min.

https://youtu.be/ER4f0lgI0SA
 
Preliminarly I was worried about lack of power in battery powered mower.
Mower draws only ~5A continous, 10A max and this reflecs to only 300 - 600W of power, compared to 2-3kW gas powered mowers.
However it turns to be opposite - gas powered mowers seems to be overpowered for such simple task as grass cutting ;-).

BTW. to power Arduino form 5V you do not need separete DC/DC 60V to 5V converter.
5V is available at motor hall sensor harness!


Here is my working Arduino sketch:
Code: [Select]
// written 5/26/2020
// Working battery interface signal from the "Omega" port
// of a Greenworks Pro 60V batter


//20.05.2021 BornToRepair mod:
//reply frame removed
//pin6 input mode enabled beetween query frames
//query cycling each 2000ms

#define PIN 6

void setup()
{
pinMode(PIN, OUTPUT);
}

void loop()
{

for(uint8_t a = 0; a < 10; a++)

{
digitalWrite(PIN, HIGH);
//Delay 188,000us
for(uint8_t i = 0; i < 188; i++)
{
delayMicroseconds(1000);
}


pinMode(PIN, OUTPUT);

digitalWrite(PIN, LOW);
delayMicroseconds(400);

for(uint8_t i = 0; i < 4; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(200);
}

for(uint8_t i = 0; i < 10; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

delayMicroseconds(100);

for(uint8_t i = 0; i < 1; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

// 5
for(uint8_t i = 0; i < 3; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}
delayMicroseconds(100);

for(uint8_t i = 0; i < 2; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(200);
}

for(uint8_t i = 0; i < 1; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

for(uint8_t i = 0; i < 1; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(200);
}

for(uint8_t i = 0; i < 3; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

pinMode(PIN, INPUT);
}



for(uint8_t a = 0; a < 10; a++)
{
digitalWrite(PIN, HIGH);
//Delay 188,000us
for(uint8_t i = 0; i < 188; i++)
{
delayMicroseconds(1000);
}
pinMode(PIN, OUTPUT);

digitalWrite(PIN, LOW);
delayMicroseconds(400);

for(uint8_t i = 0; i < 3; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(200);
}

for(uint8_t i = 0; i < 9; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

delayMicroseconds(100);

for(uint8_t i = 0; i < 1; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(200);
}

// 5
for(uint8_t i = 0; i < 4; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}
delayMicroseconds(100);

for(uint8_t i = 0; i < 4; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(200);
}

for(uint8_t i = 0; i < 3; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}
pinMode(PIN, INPUT);
}
}

« Last Edit: May 28, 2021, 07:13:07 pm by BornToRepair »
 

Offline james_s

  • Super Contributor
  • ***
  • Posts: 15176
  • Country: us
Re: Greenworks 60v battery Ohm terminal
« Reply #39 on: May 29, 2021, 12:41:03 am »
Maybe you can find a worn out battery to reverse engineer? Once a tool has been out for a while there should be some dead ones floating around.

Despite the hassles I do love my cordless tools and hate cords. I gave away all my corded electric tools except for my circular saw and miter saw. I gave away my gas lawnmower last year too, I have a small lawn and realized I was spending more time fussing with the carburetor than I was mowing.
 

Offline typoknig

  • Regular Contributor
  • *
  • Posts: 74
Re: Greenworks 60v battery Ohm terminal
« Reply #40 on: June 22, 2021, 08:52:52 pm »
Awesome!  It is hot AF in the Midwest right now, so this project has been on the back burner for me.  When we get closer to having snow again I'll give your mod a try.  It would be great to be able to do this with an Arduino and not have to upgrade to something faster.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf