Products > Other Equipment & Products

Greenworks 60v battery Ohm terminal

<< < (14/15) > >>

BornToRepair:

--- Quote from: typoknig on February 21, 2022, 06:55:44 pm ---Here is the waveform I captured.  Obviously the snowblower isn't pulling down the omega pin the way it should.  I believe this is because the code you provided doesn't ever switch the pin back to an INPUT after the initial OUTPUT.  Still, you can see what signal the snowblower is trying to generate in the attached picture.

--- End quote ---
This waveform is promising. Once you will see the answer from motor driver you should be good to go. To me it looks Arduino port is not changed to input and port is driven HIGH after each query. You need to include line
--- Code: ---pinMode(PIN, INPUT);
--- End code ---
in the code to change pin mode – please check my updated code below. Remove all external resistors. AVRs have internal ones 😊.


--- Quote from: typoknig ---I believe this is either because the Arduino can't produce pulses precise enough for the Renesas IC to consider valid (Arduino is 8 bit and 16 MHz and the Renesas R5F100ACA used by the Greenworks battery is 16 bit and 32 MHz), or because there is some logic that won't accept the exact same series of pulses over and over again.
--- End quote ---
As per my investigation motor driver is very tolerant on timings. With Arduino I tried to ‘stretch’ and ‘squeeze’ the waveforms (they call it jitter, I guess?). Both were working fine. Also frequency of frames does not matter much. 5Hz (T=200ms) is native factory rate. I tried 10Hz and 1Hz – also works fine. It stops working at <~0,3Hz (>~T=3s).
https://youtu.be/Xx3xUMFyDFs
I think transmission looks like Manchester coded. This kind of transmission is self-clocked, what explains it’s tolerance on different timings.
Because existing hack works for me I did not try to decode answer frames (those are ignored in this project anyway).


--- Quote from: JunkPlusTools ---I have a GW 60V trimmer that I bought for parts, and can confirm that when powered from a 66V battery with just + and - terminals, it runs for ~3sec then powers off. No audible beeper.
--- End quote ---
Seems there are different types of driver boards for different power tools and some of them are not equipped with buzzer on board.

For power tools with buzzer, I found following “error codes” so far:
-   3x beeps: battery communication error
-   6x beeps: onboard 5V error (5V hall power line overload)
-   8x beeps: Hall sensor error

Down below I have attached modified version of software. Although previously works just fine I figured two vulnerabilities:
- query period was not exactly 200ms (slightly less). In new software I used timer to generate exact 200ms interrupt. As a result I got rock solid 5Hz query.
- under some super-hot ambient condition mower turns in to error state (6 beeps) after some time (15 min in my case). This was caused by Arduino extensive current draw on 5V hall sensor power line. Activation Power Down mode in Arduino and desoldering unnecessary power LED, lowered power consumption from 16mA to 6mA (I am using Arduino UNO R3 clone).


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


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


//02.04.2022 BornToRepair mod:
//200ms timer added.
//query cycling removed

//02.04.2022a BornToRepair mod:
//power down mode:
//- LED diodes desoldering
//- sleep modes (16mA -> 6mA).
//- eaxat 5Hz query every.

#include <avr/sleep.h>
#include <avr/power.h>

#define PIN 6
boolean toggle1 = 0;
volatile int f_timer=0;

void enterSleep(void)
{
  set_sleep_mode(SLEEP_MODE_IDLE);
 
  sleep_enable();


  /* Disable all of the unused peripherals. This will reduce power
   * consumption further and, more importantly, some of these
   * peripherals may generate interrupts that will wake our Arduino from
   * sleep!
   */
  power_adc_disable();
  power_spi_disable();
  power_timer0_disable();
  power_timer2_disable();
  power_twi_disable(); 

  /* Now enter sleep mode. */
  sleep_mode();
 
  /* The program will continue from here after the timer timeout*/
  sleep_disable(); /* First thing to do is disable sleep. */
 
  /* Re-enable the peripherals. */
  //power_all_enable();
}

void setup()
{
cli();//stop interrupts
//set timer1 interrupt at 5Hz (T=200ms)
  TCCR1A = 0;// set entire TCCR1A register to 0
  TCCR1B = 0;// same for TCCR1B
  TCNT1  = 0;//initialize counter value to 0
  // set compare match register for 1hz increments
  OCR1A = 3124;// = (16*10^6) / (5*1024) - 1 (must be <65536)
  // turn on CTC mode
  TCCR1B |= (1 << WGM12);
  // Set CS10 and CS12 bits for 1024 prescaler
  TCCR1B |= (1 << CS12) | (1 << CS10); 
  // enable timer compare interrupt
  TIMSK1 |= (1 << OCIE1A);
sei();//allow interrupts
 
pinMode(PIN, OUTPUT);
}

ISR(TIMER1_COMPA_vect)
{//timer1 interrupt 5Hz generates a query
pinMode(PIN, OUTPUT);
digitalWrite(PIN, HIGH);
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 < 13; i++)
{
digitalWrite(PIN, HIGH);
delayMicroseconds(100);
digitalWrite(PIN, LOW);
delayMicroseconds(100);
}

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

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

pinMode(PIN, INPUT);
digitalWrite(PIN, HIGH);

  /* set the flag. */
   if(f_timer == 0)
   {
     f_timer = 1;
   }
}

void loop()
{
    if(f_timer==1)
  {
    f_timer = 0;
    /* Re-enter sleep mode. */
    enterSleep();
  }
}

--- End code ---

I was able to purchase another cheap PowerWorks/GreenWorks power tool. This time 60V trimmer together with brand new 2,5Ah 60V battery. Thus, I was able to take few more experiments 😊.
Trimmer works with this hack as well however I will be using it with stock 2.5Ah battery (better balance). For large mower I will stick to my Makita hack :-).

Nioko:
Anyone tried with Stiga tools?
I have a chainsaw + trimmer both using the STIGA SBT 5048 AE Battery, which unfortunately I don't own, and is ridiculously expensive.

These Batteries and tools look like they are from the same factory, and also have the Omega Port. The Stiga Battery I would need to emulate is a 12s battery (marketed as 48v).
I've tried all the codes I've found on eevblog, but none worked with these tools.

typoknig:
Sorry, I have not.  This project tends to take the back burner for me when it isn't snowing since a snowblower is the only GW tool I have!

samocos191:
Hello! Thank you for sharing your experiences. You can try this firmware. It will work with an Arduino based on Atmega328 or a Chinese LGT8F328P clone (developed on the latter). It was possible to achieve stable operation on a 60V trimmer.
Of the disadvantages, constant power is required through the converter, since there is no reduced power consumption mode. IO_PIN needs to be connected to the Ohm terminal via a 150 ohm resistor.

Zucca:
I would like to thank everyone in this wonderful thread!

I almost pulled the trigger on a used no battery Greenworks 80V mower assuming all it needs is a + and - wires with 80VDC on it.

It makes me vomiting to see companies implementing a communication protocol with the battery, there is no real need for it, it will only piss off customers.

Greenworks if you are reading this, I did not buy your product because you made me difficult to use it as I want it.

Navigation

[0] Message Index

[#] Next page

[*] Previous page

There was an error while thanking
Thanking...
Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod