# Reprogramming Elcon charger myself?



## Clipper (Jan 30, 2011)

The last time I sent an ElCon charger to Sacramento for re programming, it took them six weeks.

I have read through as many threads as I can find on the subject of reprogramming Elcon PFC Chargers, including this one:
Elcon/TC Charger Firmware: Facts

Arduino boards, FET driver, 3846 SMPS, 1/2 H-bridge,...?!?! 

Are there any kind of simplified reprogramming instructions for stupid people like me?

I.E. Buy this converter cable, install a “ElCon Charger Control” program on your PC, plug the cable into your USB port and the charger, run the program...?


----------



## john61ct (Feb 25, 2017)

I thought they all are CAN controlled no?


----------



## pdove (Jan 9, 2012)

Clipper said:


> The last time I sent an ElCon charger to Sacramento for re programming, it took them six weeks.
> 
> I have read through as many threads as I can find on the subject of reprogramming Elcon PFC Chargers, including this one:
> Elcon/TC Charger Firmware: Facts
> ...





No, not really.


It is not especially complicated but there are things you have to know. The charger uses a Phillips P89LPC938 Processor and is programmed through the 5 Pin connector under the label on the side of the charger.


You need a device programmer and software that can program this chip. Hard to find these days because it's old technology. I have an FDI USB In-Circuit Programmer for LPC9XX – USB-ICP-LPC9XX. It uses flash magic software (free).



https://www.teamfdi.com/product-details/usb-icp-lpc9xx


Then you need a file with the desired functions in intel hex format. 



If you don't have this file then it has to be generated by someone with a Keil Compiler.


I can do all of this.... what are you trying to do exactly?


----------



## pdove (Jan 9, 2012)

john61ct said:


> I thought they all are CAN controlled no?



They are not all can controlled but the can be reprogrammed to be can controlled. Some use an enable signal and then shut off according to their programming.


----------



## john61ct (Feb 25, 2017)

Yes my understanding is with the CAN technology, an mcu keeps sending a "keep charging xV yA" every 15 seconds or something

and if that "heartbeat" signal stops for any reason, then after say 30sec the Elcon automatically shuts down

That seems like a much better safer protocol than relying on the BMS to halt charging and the default is the charger just keeps going.

Of course redundant failsafes should be there anyway.

Plus the ability to customize the charge cycle according to circumstances

fastest safe charge when needed

reducing current when the cells get colder and v/v


----------



## Clipper (Jan 30, 2011)

pdove said:


> No, not really.
> I can do all of this.... what are you trying to do exactly?


Hi, Pdove,

Thank you for the reply… long story short, I don’t even want to change the algorithm, I just want to lower the voltages. It is a PFC 4000, eight years old.
But it’s a daily driver and I really don’t want to wait six weeks.
I would be glad to pay you whatever reasonable amount you charge… Can you do it in less than six weeks? LOL…

I also have about half a dozen PFC 3000s... I bought them super cheap after Triac in Monterey went belly up. They would be about 10 years old, but they’re brand new (or at least, completely unused.) Elcon has said they can’t reprogram them, but they wouldn’t say why. I’d like to send you one of those and find out if the reason they can’t reprogram them is electronic or political. Maybe Triac owed them money or something.

Are you interested in doing this for me? For a price, of course.

PS...Try to stay dry today.
Thanks,
—Douglas


----------



## pdove (Jan 9, 2012)

Clipper said:


> Hi, Pdove,
> 
> Thank you for the reply… long story short, I don’t even want to change the algorithm, I just want to lower the voltages. It is a PFC 4000, eight years old.
> But it’s a daily driver and I really don’t want to wait six weeks.
> ...



I don't know if I could do 6 weeks turnaround right now because I am moving at the end of June. If you waited till July I would have more time.


Now, as far as the PFC 4000 goes it should have several voltages already programmed into the charger. The button on the side is for changing the number of cells. There should be a Label on the side telling you the voltage of each position 1 through 10. Like the one in this picture.


Send me pictures of all the labels on one of your 3000's and I will tell you if they can be reprogrammed.


----------



## pdove (Jan 9, 2012)

john61ct said:


> That seems like a much better safer protocol than relying on the BMS to halt charging and the default is the charger just keeps going.
> 
> Of course redundant failsafes should be there anyway.
> 
> ...



Actually, the TCCH chargers do not rely on a BMS. The curve is programmed into the charger. 



One would only need a BMS with the can controlled chargers.


----------



## john61ct (Feb 25, 2017)

pdove said:


> Actually, the TCCH chargers do not rely on a BMS. The curve is programmed into the charger.
> 
> One would only need a BMS with the can controlled chargers.


Obviously if the charger is programmed correctly then fine, but that is not the topic here.

And I never said a a BMS is needed.

I am saying the CAN option is better.

Safety reasons as outlined above.

Relevant to OP is also flexibility, no need to "program" your desired profile, can adjust as desired on the fly.

And a BMS is not required in any case, CAN being a trivial protocol can set up with many different MCUs for under $20.


----------



## john61ct (Feb 25, 2017)

Clipper said:


> I don’t even want to change the algorithm, I just want to lower the voltages


What we mean by "charging algorithm", more usually the "profile"

usually is meant to include the voltage setpoints.

Even if you do succeed in getting the "hard coded" programming adjusted, you should investigate the CAN option, if that is available for those old models.


----------



## Clipper (Jan 30, 2011)

john61ct said:


> And a BMS is not required in any case, CAN being a trivial protocol can set up with many different MCUs for under $20.


I am 99% sure that my charger is CAN enabled.

When I first ordered it, eight years ago, I was very new and green to the field… As I recall, somebody told me to “order all the bells and whistles.” Maybe Michael Bream. He is who I ordered it from. He and I are fairly close. But these days he’s swamped… Two years out for just about anything.

I’m going to meet with Trent, his chief engineer, on Wednesday. Maybe he can help me figure it out.

To be honest, electronic stuff like this is still very much my weak point.

If it IS CAN-enabled, then what do I need to program it?


----------



## john61ct (Feb 25, 2017)

Google for Arduino CAN modules, or find a high school geek to take it on if you don't want to learn.

The ELCON specific codes required are also documented out there.

Or, these BMS already include the ability to control Elcon via CAN, could just buy one I s'pose.

There are sniffer tools to intercept the messages if not all are documented.

Emus
Orion
Elithion
EPS

Maybe more now.

There will be upper & lower voltage limits by TCCH model, and of course a maximum current.


----------



## john61ct (Feb 25, 2017)

Some notes I dug up, from Eltek FlatPack threads but might give you jargon to use googling

CAN buss controller alternatives to smartpack

Leonardo CAN from Hobbytronics
code from Remmie http://www.hobbytronics.co.uk/leonardo-canbus
https://endless-sphere.com/forums/viewtopic.php?f=14&t=71139&start=75#p1205303
https://endless-sphere.com/forums/viewtopic.php?f=31&t=87896&start=25#p1303046

---
Raspberry Pi rPi alternative
https://endless-sphere.com/forums/viewtopic.php?f=14&t=71139&start=225#p1393712


----------



## john61ct (Feb 25, 2017)

Elcon CANbus control
http://hr-ev.blogspot.com/search/label/Charger

https://www.google.com/search?q=site:hr-ev.blogspot.com+canbus


----------



## john61ct (Feb 25, 2017)

https://1drv.ms/f/s!AmbWDB9AS-tJhb0vqhxQ9NrgCa7Rvw

https://www.elithion.com/lithiumate/php/elcon.php


----------



## pdove (Jan 9, 2012)

Clipper said:


> I am 99% sure that my charger is CAN enabled.
> 
> When I first ordered it, eight years ago, I was very new and green to the field… As I recall, somebody told me to “order all the bells and whistles.” Maybe Michael Bream. He is who I ordered it from. He and I are fairly close. But these days he’s swamped… Two years out for just about anything.
> 
> ...



Not sure what you have been told but these charger have one of two things. Either they have software that requires a CAN formatted message every second to remain on or they have a per-programmed algorithm in them that does a constant current /constant voltage charging curve. If it has the curve then it will have 10 possible combinations of voltage and capacity that can be selected with the button on the side of the unit.


Like I said send me pictures of the unit and it's labels so I can read them and I can tell you more about what you have.


----------



## john61ct (Feb 25, 2017)

I understood that the installation of the CAN option overrides the "canned" options programmed.

Isn't it possible to revert back to the latter controls by disabling / removing the CAN unit?


----------



## pdove (Jan 9, 2012)

john61ct said:


> I understood that the installation of the CAN option overrides the "canned" options programmed.
> 
> Isn't it possible to revert back to the latter controls by disabling / removing the CAN unit?



No, To change from CAN to non-CAN they unit must be reprogrammed.


The 89LPC938 chip has EEPROM and Flash memory that holds the program.


It is too small to hold more than one configuration.


----------



## Clipper (Jan 30, 2011)

pdove said:


> Send me pictures of all the labels on one of your 3000's and I will tell you if they can be reprogrammed.


OK, here you go:


----------



## pdove (Jan 9, 2012)

It is not a CAN model and it can definitely be reprogrammed.


There should be another label like the one I showed with the current algorithm that is programmed into the unit.


Those are made up of two 1500 W units connected in parallel.


One unit is the master the other unit has the slave program and is controlled by the master.


What do you want to do?


----------



## pdove (Jan 9, 2012)

Clipper said:


> I am 99% sure that my charger is CAN enabled.
> 
> When I first ordered it, eight years ago, I was very new and green to the field… As I recall, somebody told me to “order all the bells and whistles.” Maybe Michael Bream. He is who I ordered it from. He and I are fairly close. But these days he’s swamped… Two years out for just about anything.
> 
> ...



The PFC4000 is an excellent low cost solution to high voltage, high amperage charging. Being one of the more versatile chargers by being able to accept both 110v and 220v, the PFC4000 packs a punch. At 220 volts, the charger delivers 4kW of power, but throttles back to 1.5kW of power when hooked up to 110 volts, thereby allowing it to charge from a normal 15a household circuit. These chargers are voltage specific, so we have to program the charge curves before delivery. 

According to EVWest web page these are not can controlled.
The PFC4000 units are only available by special order with a 6-8 week lead time. 

https://www.evwest.com/catalog/product_info.php?cPath=12&products_id=232&osCsid=2aeerdi1rdhm5gsmqtpsp7cm85


----------



## kennybobby (Aug 10, 2012)

Link to user's manual:

PFC3000.pdf

CAN buss control:
If your Elcon PFC charger has been programmed for CAN Bus control and you received a CAN Bus adapter with your charger, pin 1 of the adapter must be connected to CAN-Lo from your BMS and pin 2 to CAN-Hi. If your BMS does not already have a 120 ohm termination resistor across CAN-Lo and CAN-Hi, you will need to add one. 

The charger expects to receive every second a message from the BMS with CAN ID 1806E5F4 and 8-byte data with the voltage and current requested. If the charger doesn't receive a valid CAN message in 5 seconds, it stops charging until it receives a valid CAN message. The charger sends out every second a CAN status message with voltage, current and status information. 

Up to 4 chargers with different CAN IDs 1806E5F4, 1806E7F4, 1806E8F4 and 1806E9F4 can be connected to the same CAN bus and be controlled by one BMS.


----------



## Clipper (Jan 30, 2011)

pdove said:


> It is not a CAN model and it can definitely be reprogrammed.
> 
> There should be another label like the one I showed with the current algorithm that is programmed into the unit.
> 
> What do you want to do?


Hi, PDove,

I’d like to send one of the 3000’s to you for reprogramming… please let me know when you’ve moved and you’re all set up to do it. 

If that works out, maybe I’ll try to sell the rest. 

As I said, I got them super cheap from Triac when they went belly up. I don’t have a label showing the algorithm… what I sent you in the photos is all the info I’ve got on them. But the Triac had the blue Calb 160Ah cells in them… So I would think they were set up for LiFe cells.

Thanks,
Clipper


----------



## Clipper (Jan 30, 2011)

Hi, PDove, are you all moved in and settled? Could I send you one of these?


----------



## pdove (Jan 9, 2012)

Clipper said:


> Hi, PDove, are you all moved in and settled? Could I send you one of these?


Sure, I had forgotten about it.


----------



## Clipper (Jan 30, 2011)

pdove said:


> Sure, I had forgotten about it.


Hi, Pdove,
The 207 address in Madison is correct?


----------



## pdove (Jan 9, 2012)

Clipper said:


> Hi, Pdove,
> The 207 address in Madison is correct?


yes


----------



## Clipper (Jan 30, 2011)

pdove said:


> yes


Hi, PDove,
I just sent it UPS Ground on Thursday.
You should have it in a few days.
Thanks!


----------



## pdove (Jan 9, 2012)

Sorry about the long wait. I had to go out of town for work, now my father dies and I have to go out of state to the funeral. I did have time to hook up the charger and take some data. It turned on an started charging when I put voltage on the enable pin so it is not a CAN controlled version. I can sniff the code out of it but I had some hardware issues. It's a tricky process since I have to inject some code which overwrites what is there so I loose that portion of the program. I have enough images that I can reconstruct what was lost but there is really no need unless you want to know what's currently in the charger. They have 10 profiles built in but I can't know what they are unless I sniff out the code. I can program them for CAN Control or change the ten profiles if you want to stay with enable function.

So to enable the charger you connect pin 3 to pin one on the front round connector. With a CAN controlled device you hook up a processor of some type that sends a command with voltage and current. These chargers don't have CAN hardware in them so if using a real CAN device to communicate you need their CAN adapter that is external. CAN Bus problems....

Let me know if you have questions. I will be back by Monday the 12th. Should only take a few days after that to complete.


----------



## Clipper (Jan 30, 2011)

Hi, Paul,
Anything happening? 
Any ETA?
Thanks,
Douglas


----------



## pdove (Jan 9, 2012)

Clipper said:


> Hi, Paul,
> Anything happening?
> Any ETA?
> Thanks,
> Douglas


Here is what I did but I haven't tested it yet.

// curves

#pragma src // Generate assembler
typedef unsigned char byte; // U8
typedef unsigned int word; // U16

byte code charge_curve = 20; // Version 2.0 data
byte code user_sel = 1; // User has chosen the third capacity (index=2)
float code Ah_capacities[10] = {
160.0, 160.0, 160.0,
160.0, 160.0, 160.0,
160.0, 160.0, 160.0,
160.0};


byte code cell_num[10] = {
138, 139, 140,
141, 142, 143,
144, 145, 146,
147
};

byte code master_info_send_en = 1; // Leave as 1 to talk to the slave if needed
byte code listen_info_send_en = 1; // Leave as 1 to emit useful data packet
float code output_line_res = 12.5e-3; // 12.5 mR line resistance (others have 25 mR)

// 26 x 3.43 = 89.18 V; call it 89.2 V? Same at full and half power since one stage
word code vol_need_full_power = 1470; // Voltage needed at full power, times 10, as integer
word code vol_need_half_power = 1620; // Voltage needed at half power, times 10, as integer
// 26 * 3.8 V = 98.8
float code unused1 = 210.0; // Unused; make it the same as below
float code vol_need_limit_max = 210.0; // Maximum voltge ever needed?
float code ac110v_power_max = 1300.0; // Maximum power to be delivered when powered from 110/120 V
float code ac220v_power_max = 3000.0; // Maximum power to be delivered when powered from 220/240 V
float code s0_batter_vol_start = 0.6; // Minimum volts per cell before charger will turn on
float code s0_batter_vol_over = 1.1; // Voltage per cell above which the battery is considered overcharged
byte code stateForIverTemp = 8; // State to go to if the battery becomes overheated
// NOTE: this may mean what to do when the voltage on pin 1 of the 7-pin connector
// does something (too high in voltage?)
// State 8 is the special "all finished, LED is solid green" state
float code s1_7_temp_over_protect_vol = 0; // ?
word code max_time_any_state = 0; // or e.g. 30 * 24 * 60; 
// Maximum amount of time (minutes) in any state. 0 means unlimited
// Have seen 43200 = 30 days
float code code_dd3 = 0.9; // ?
byte code s0_led_r[5] = { 0x11, 0x44, 0, 0, 0};
// The LED pattern for state 0 (waiting to connect to the battery at the very
// start of charging). First byte is for the red LED, second is for green;
// others seem to be provision for more LEDs in the future
// LSB comes out first, e.g. with 0x1 0x00 0 0 you would see the red LED on for
// one second, then off for 7 seconds.
byte code s8_led_r[5] = {0, 0xFF, 0, 0, 0};// LED pattern for state 8; solid green
byte code s8_SOC_percent = 100; // SOC at state 8 is 100%
byte code unused2 = 0;
float code extemp_sensor_modify = 3.0;
float code intemp_sensor_modify = 2.0;
float code intemp_sensor_use_low = 15.0;
float code intemp_sensor_use_high = 30.0;
float code bat_temp_pro_high = 50.0;
float code bat_temp_pro_high_hy = 40.0;
float code s0_batter_temp_protect_low = -20.0;
float code batter_temp_curve_base = 10.0; // Intercept and slope of temperature compensation line?
float code batter_temp_curve_lv = 0.0;
float code new_unknown1 = 10.0;
float code new_unknown2 = 0.0;

/*
* Start of curve[0] for state 1
* For this file, this is the only stage there is: CC (cv_macCur1 = 1.0) and 3.65 V (cv_vol_soft1)
*/

byte code cv_temp_compensate_en1 = 0; // ?
byte code cv_led1[5] = {0x11, 0x00, 0, 0, 0}; // Flashing red LED
byte code cv_SOC_percent1 = 0; // 0% completed at start of stage
float code cv_vol_hd_limit1 = 1.28; // Harware voltage limit, expressed as volts per cell
float code cv_maxCur1 = 0.025; // Max current this stage = 1.0C
float code cv_vol_soft1 = 0.97; // Software voltage setpoint
float code cv_vol_soft_ctrl_speed1 = 1.0; // Speed at which voltage can change? Units?
float code cv_vol_soft_p_append1 = 1./60.; // If the battery voltage rises this voltage per cell over the set point,
// then ramp down quickly with curve[CURVE].cv_cur_down_step_lv_ah1 per Ah
float code cv_cur_down_step_lv_ah1 = 1./400.; // Current (per Ah) to ramp down quickly with
float code cv_vol_soft_n_append1 = -1./120.; // Voltage per cell below the setpoint to ramp up current quickly
float code cv_cur_up_step_lv_ah1 = 1./400.; // Current (per Ah) to ramp up quickly with
float code cv__out_line_res1 = 1.0e-6; // Output line resistance per Ah, added to output_line_res for this state
byte code cv_nextToState1 = 2; // All going well, next state will be 8
float code cv_currUnder_ah1 = 0.1; // ?
float code cv_vol_over1 = 0.8; // If over this voltage, go to next stage?
float code cv_dvdtunder_15m1 = -1.0e6; // ?
float code cv_volPulseOver1 = 1.0e6; // ?
word code cv_timePulseOver1 = 0; // Some time in minutes?
float code cv_volPulseUnder1 = 0.0; // ?
word code cv_timePulse1 = 0; // ?
byte code cv_LineCutToState1 = 0; // State to jump to when wire break is detected
byte code cv_OverToState1 = 0; // State to jump to when ?
byte code cv_OverErrFlag1 = 1; // ?
float code cv_unknown1_1 = 1.0e6; // ?
float code cv_unknown2_1 = 2.0; // ?
word code cv_time_m_over1 = 240; // Total time this stage? 240 min = 4 hr
float code cv_totalAhOver1 = 1.0e6; // Maximum total Ah this state?
word code cv_time_m_over_total1 = 0xFFFF; // Some total time in minutes
byte code cv_unknown3_1 = 1; // ? State?
byte code cv_unknown4_1 = 1; // State?
byte code cv_restrt_to_state1 = 1; // State to jump to when ?
float code cv_vol_under_restrt1 = -1.0e6; // Maybe if voltage gets less than this, jump to the state above

/*
* Start of curve[1] for state 2
*/

byte code cv_temp_compensate_en2 = 0; // ?
byte code cv_led2[5] = {0xFF, 0x00, 0, 0, 0}; // Solid red LED
byte code cv_SOC_percent2 = 10; // 10% complete at start of stage
float code cv_vol_hd_limit2 = 1.28; // ?
float code cv_maxCur2 = 1.0; // Max current this stage = 1C
float code cv_vol_soft2 = 0.98; // Software voltage setpoint
float code cv_vol_soft_ctrl_speed2 = 1.0; // Speed at which voltage can change? Units?
float code cv_vol_soft_p_append2 = 1./60.; // ?
float code cv_cur_down_step_lv_ah2 = 1./200.; // ?
float code cv_vol_soft_n_append2 = -1./60.; // ?
float code cv_cur_up_step_lv_ah2 = 1./200.; // ?
float code cv__out_line_res2 = 1.0e-6; // Output line resistance per Ah, added to output_line_res for this state
byte code cv_nextToState2 = 3; // All going well, next state will be 3
float code cv_currUnder_ah2 = 0.2; // ?
float code cv_vol_over2 = 1.0e6; // If over this voltage, go to next stage?
float code cv_dvdtunder_15m2 = -1.0e6; // ?
float code cv_volPulseOver2 = 1.0e6; // ?
word code cv_timePulseOver2 = 0; // Some time in minutes?
float code cv_volPulseUnder2 = 0.0; // ?
word code cv_timePulse2 = 0; // ?
byte code cv_LineCutToState2 = 0; // State to jump to when wire break detected
byte code cv_OverToState2 = 0; // State to jump to when ?
byte code cv_OverErrFlag2 = 1; // ?
float code cv_unknown1_2 = 1.0e6; // ?
float code cv_unknown2_2 = 2.0; // ?
word code cv_time_m_over2 = 0xFFFF; // Total time this stage?
float code cv_totalAhOver2 = 1.0e6; // Maximum total Ah this state?
word code cv_time_m_over_total2 = 0xFFFF; // Some total time in minutes
byte code cv_unknown3_2 = 2; // ? State?
byte code cv_unknown4_2 = 1; // State?
byte code cv_restrt_to_state2 = 2; // State to jump to when ?
float code cv_vol_under_restrt2 = 1.0e6; // Maybe if voltage gets less than this, jump to the state above
// NOTE change of sign compared to state 1

/*
* Start of curve[2] for state 3
*/

byte code cv_temp_compensate_en3 = 0; // ?
byte code cv_led3[5] = {0x11, 0x00, 0, 0, 0}; // Flashing red LED (1:3)
byte code cv_SOC_percent3 = 70; // Roughly 70% SOC
float code cv_vol_hd_limit3 = 1.28; // ?
float code cv_maxCur3 = 0.2; // Max current this stage = 0.2C
float code cv_vol_soft3 = 1.0; // Software voltage setpoint
float code cv_vol_soft_ctrl_speed3 = 1.0; // Speed at which voltage can change? Units?
float code cv_vol_soft_p_append3 = 1./60.; // ?
float code cv_cur_down_step_lv_ah3 = 1./1000.; // ?
float code cv_vol_soft_n_append3 = -1./60.; // ?
float code cv_cur_up_step_lv_ah3 = 1./1000.; // ?
float code cv__out_line_res3 = 1.0e-6;  // Output line resistance per Ah, added to output_line_res for this state
byte code cv_nextToState3 = 4; // All going well, next state will be 4
float code cv_currUnder_ah3 = 0.02; // ?
float code cv_vol_over3 = 1.0e6; // If over this voltage, go to next stage?
float code cv_dvdtunder_15m3 = -1.0e6; // ?
float code cv_volPulseOver3 = 1.0e6; // ?
word code cv_timePulseOver3 = 0; // Some time in minutes?
float code cv_volPulseUnder3 = 0.0; // ?
word code cv_timePulse3 = 0; // ?
byte code cv_LineCutToState3 = 0; // State to jump to when wire break detected
byte code cv_OverToState3 = 4; // State to jump to when ?
byte code cv_OverErrFlag3 = 0; // ?
float code cv_unknown1_3 = 1.0e6; // ?
float code cv_unknown2_3 = 2.0; // ?
word code cv_time_m_over3 = 0xFFFF; // Total time this stage?
float code cv_totalAhOver3 = 1.0e6; // Maximum total Ah this state?
word code cv_time_m_over_total3 = 0xFFFF; // Some total time in minutes
byte code cv_unknown3_3 = 3; // State?
byte code cv_unknown4_3 = 1; // ? State?
byte code cv_restrt_to_state3 = 2; // State to jump to when ?
float code cv_vol_under_restrt3 = 0.80; // Maybe if voltage gets less than this (VPC), jump to the state above
// NOTE THIS ONE!

/*
* Start of curve[3] for state 4
*/

byte code cv_temp_compensate_en4 = 0; // ?
byte code cv_led4[5] = {0xFF, 0xFF, 0, 0, 0}; // Solid yellow LED
byte code cv_SOC_percent4 = 80; // Roughly 80% SOC
float code cv_vol_hd_limit4 = 1.28; // ?
float code cv_maxCur4 = 0.02; // Max current this stage = 0.02C
float code cv_vol_soft4 = 1.0; // Software voltage setpoint
float code cv_vol_soft_ctrl_speed4 = 1.0; // Speed at which voltage can change? Units?
float code cv_vol_soft_p_append4 = 1./100.; // ?
float code cv_cur_down_step_lv_ah4 = 1./400.; // ?
float code cv_vol_soft_n_append4 = -1./100.; // ?
float code cv_cur_up_step_lv_ah4 = 1./400.; // ?
float code cv__out_line_res4 = 1.0e-6; // Output line resistance per Ah, added to output_line_res for this state
byte code cv_nextToState4 = 8; // All going well, next state will be 8 (charge finished)
float code cv_currUnder_ah4 = 0.01; // ?
float code cv_vol_over4 = 1.0e6; // If over this voltage, go to next stage?
float code cv_dvdtunder_15m4 = -1.0e6; // ?
float code cv_volPulseOver4 = 1.0e6; // ?
word code cv_timePulseOver4 = 0; // Some time in minutes?
float code cv_volPulseUnder4 = 0.0; // ?
word code cv_timePulse4 = 0; // ?
byte code cv_LineCutToState4 = 0; // State to jump to when wire break detected
byte code cv_OverToState4 = 8; // State to jump to when ?
byte code cv_OverErrFlag4 = 0; // ?
float code cv_unknown1_4 = 1.0e6; // ?
float code cv_unknown2_4 = 2.0; // ?
word code cv_time_m_over4 = 0xFFFF; // Total time this stage?
float code cv_totalAhOver4 = 1.0e6; // Maximum total Ah this state?
word code cv_time_m_over_total4 = 0xFFFF; // Some total time in minutes
byte code cv_unknown3_4 = 8; // ?
byte code cv_unknown4_4 = 1; // ?
byte code cv_restrt_to_state4 = 2; // State to jump to when ?
float code cv_vol_under_restrt4 = 0.80; // Maybe if voltage gets less than this, jump to the state above
// NOTE THIS ONE


----------



## Clipper (Jan 30, 2011)

Hi Paul,
Wow! Thassa lotta stuff! WAY over my head. But thank you for all of your efforts!
And please let me know when I can PayPal you some money for all this effort!
—Douglas


----------



## pdove (Jan 9, 2012)

Clipper said:


> Hi Paul,
> Wow! Thassa lotta stuff! WAY over my head. But thank you for all of your efforts!
> And please let me know when I can PayPal you some money for all this effort!
> —Douglas


Not that complicated. First part are the 10 button choices 160Ah and the cell count 138-148.
Then there are 8 stages of charge. I'm only using 4. Turn on at low voltage S!. Maxcurrent constant voltage S2. S3 constant voltage lower current. S4 constant voltage lower current. S8 off.


----------



## Clipper (Jan 30, 2011)

Hi Paul,

just for giggles, I sent this off to Elcon to see what their problem is. What they wrote back is kind of diametrically opposed to what you’re telling me. I still think there might be a political aspect to this… Maybe the company that bought them never paid them or something. Anyway, I thought you would find this interesting:


Douglas,

These chargers are too old (0905 - May 2009 - 12 years old) so they don't support enable/disable control or CAN bus control. The only way to enable/disable them is by installing a relay in the AC input to the charger.

Regards,

Sayyed A. Bashir

ELCON / Electric Conversions
515 N. 10th Street, Sacramento, CA 95811
www.elconchargers.comwww.zivanusa.com

-----Original Message----- From: Douglas Emley
Sent: Monday, August 16, 2021 2:33 PM
To: Electric Conversions
Subject: Reprogramming a PFC 3000

Hi Gregory,

I belong to an electric car club in San Diego, and we have eight of these Elcon PFC 3000s. (Photos attached)

One of our club members said that along time ago, he sent one in for reprogramming, and you guys couldn’t or wouldn’t do it.

Is this true? Is there a reason?

--Douglas Emley


----------



## pdove (Jan 9, 2012)

Clipper said:


> Hi Paul,
> 
> just for giggles, I sent this off to Elcon to see what their problem is. What they wrote back is kind of diametrically opposed to what you’re telling me. I still think there might be a political aspect to this… Maybe the company that bought them never paid them or something. Anyway, I thought you would find this interesting:
> 
> ...


Well, I reprogrammed it with a lithium curve to Clippers specifications and tested it. it shuts off when I disconnect enable Or when it reaches end voltage.


----------

