This page lists some items for developers they can pick from
GenBoard/UnderDevelopment/FirmwareChanges is updated when some feature makes it into a release
Actual 1.1.8x feature brainstorming (features that are not sufficiently clarified yet, or not decided if/when they can go in)
- Boost Control "Speed input selector"
- to choose between "WSpeed 1" and "WSpeed 2" in config (like in the Launch Control dialog)
- driven wheel wired to "Wheelspeed 1" (done this way on MANY installs), and now that we have a "Wheelspeed 2" input, I wired a car using "Wheelspeed 2" as the non-driven speed. The boost control is working from the Driven wheel, and I want it to use the non-driven wheel - without having to re-wire the cars.
We are using the Rear Wheel Speed (non-driven) to control the launch RPM and the Boost (Using simple refDC per Wheelsopeed), and
we are using the Front Transmission (Speedometer Sensor) to log the Front Wheel Speed and wheel spin (FWD Drag car)
- FW Issue - it seems that with 1.1.88 fw, the WheelSpeed? 1 input is now "spiky". I will email a data log to show this.
- If you have SD-card, and enable "triggerlog format" in SD-card logging menu (available since 1.1.89 when "GPS data to SDcard" was implemented, please use 1.1.94 to capture), than publish the saved SDcard... .vemslog and .triggerlog files (zip them, don't forget to send both). This is invaluable help to diagnose/reproduce your wheelspeed pattern (is it possible that it might be uneven pattern ?)
- another 8x1 table enrichment(analog_input*configurable_const - MAP) or enrichment (analog_input). The absolute_
- the MAT/TPS could also be more generic if some other input could be used instead of MAT (than the in-flash MAT enrichment could be applied, or configurably none)
- Add settings per gear for 'boost valve off until X pressure'
- How would it be configured? Why isn't 116 kPa good in all gears ?
- Gear indicator flickers to next gear when crossing 5000 RPM effects boost DC settings. Can more filtering be applied?
- likely misconfigured gear-refspeed table. As usual, vemslog makes it possible to help (without vemslog chances to help are significantly reduced)
- Check your refspeed versus the speed sensor gear settings. The gear indicator for me has been rock solid. KevinBlack?
- Something was noted around 1.1.84 about filter changes on speed input, my sensor used to work much better than it does now. Seems as though other people have the same problem?
- What Fw version do you use? Can you send .Vemslog (possibly via VemsTune / Help / Vems Sharing Center)?
- Here you go, thanks! http://vems.hu/vemstune/sharingcenter/reports.php?cmd=view&key=wWgosL
- What Fw version do you use? Can you send .Vemslog (possibly via VemsTune / Help / Vems Sharing Center)?
- For speed 1 & 2, and there also be a selection for input? Such as clk & data from ps2 for those using the ps2 cable for inputs.
- Wheelspeed 1 is on ps2 clock, but wheelspeed2 is on processor SCL pin, check InputTrigger/WheelSpeed
- I see this, but was wondering if there could be an option to select other pins.
- Wheelspeed 1 is on ps2 clock, but wheelspeed2 is on processor SCL pin, check InputTrigger/WheelSpeed
- 100% scaleble analog input curve
- For example, instead of fixed voltage scales against configurable temperature scales as in Analog Input Calibration 'Custom Temperature Curve', what about configurable voltage scales also? 'Custom Sensor Curve' is not very versatile, as it only seems to be dedicated to temperature.
- Reason. I propose to use a freely available Bosch MAF sensor on the tubocharger compressor inlet. Adding MAF sensor on inlet tract of compressor is simple. MAF against MAP will then give compressor speed and efficiency when plotted on the compressor map. Some Bosch MAF sensors have good documentation giving good scaling data that will allow for a fairly acurate measurement. with this I would determine compressor efficiencies without the need to use expensive turbine tachometers or calculating BSFC then working back from dyno hp readings, which we all know can be optimistic. Sprocket
- I have just bought some extra large graph paper to plot out the MAF curve at 0.01v and kg/hr per milimeter graph. The MAF I have chosen is a 640kg/h unit so that'll be 0.5 x 0.64meter graph! I can then extrapolate the air flow values accurately against the fixed VEMS sensor curve volts, job done. Just seems a bit archaic.
- For example, instead of fixed voltage scales against configurable temperature scales as in Analog Input Calibration 'Custom Temperature Curve', what about configurable voltage scales also? 'Custom Sensor Curve' is not very versatile, as it only seems to be dedicated to temperature.
- Limp Home Mode A value substitution for CLT and MAT sensors when either is open circuit or dead short: It was exactly like that originally (many years ago) but in Russia when it was extremely cold, it happened to trigger the "open circuit" (5V) value ... bad ! ........Does anyone start or run an engine below -30c CLT? Does anyone run a warm engine with less than -30c MAT without pre heat? If so, must be a small minority in relation to the majority who could benifit from this feature. It could be disabled in a similar way as Baro correction?
- You can already fill this in the sensor calibration dialog, just fill min and max values with what you like //Emil
- CE light is now an integral part of all late firmware but lacks this worth while feature. Activating CE light at 0V or 5V would not hurt.............but does nothing to help get you home on its own.
- A simple fixed value in firmware should sufice, activating the warning light. OR, Suggested warning light configuration points for both CLT and MAT are Min/ Max values outside of which a configurable 'limp home' value will be substituted. Suggested substitution values as taken from Rover MEMS documentation (Rover LOS, Limited Operating strategy) http://www.gomog.com/allmorgan/RoverPlus4MEMS.pdf are 60c for CLT and 35c for MAT. Obviously this is never a perfect solution, never will be, but then neither is a dead sensor. It might be the difference between a ride home on the back of a recovery truck though (or if someone sees CLT value on LCD, android or VemsTune, than from VT with the 17 point curve a default value can be applied or a resistor inserted in the sensor connector)....... So i have to carry either a laptop around with the car or have a special plug or resistor that will get lost, just on the off chance i'll need it if a sensor just so happens to fail?
- How do OEM's fulfill this requirement?
- I'd expect some sort of simple proving logic. If CLT is similar to MAT, CLT and MAT are valid, even if CLT and MAT are similar at 'fault' value > use sensor values, if CLT is greater than MAT and neither are at fault value > use sensor value. If MAT is greteater than CLT and CLT is at 'fault' value > use substitute value. If CLT is greater than MAT and MAT is at 'fault' value > use substitute value. Obviously there needs to be some sort of hysteresis applied.
- MAP needs to be included, but with no substitute value, rather 'cut' engine since no substitute value will alow engine to run to any drivable degree. Dangerous for engine. How do we determine if MAP has failed?
Links - subpages
- GenBoard/UnderDevelopment/FirmwareChanges/TestingAndReleases
- GenBoard/UnderDevelopment/FirmWare/NextRelease specifies what tasks has to be done before we can create a new stable release
- GenBoard/UnderDevelopment/FirmWare/LcdRelated LCD Related
- GenBoard/UnderDevelopment/FirmWare/PowerRelated idle, ALS, launch and friends
- GenBoard/UnderDevelopment/StagedInjectors INJECTOR_STAGING
- GenBoard/UnderDevelopment/AccelerationEnrichment Advanced transient fueling method
- GenBoard/UnderDevelopment/AlphaNIAC Coping with IAC position changes with AlphaN
- GenBoard/UnderDevelopment/TemperatureCompensation Limiting the Knock Window based on IAT&CLT scaling
- GenBoard/UnderDevelopment/FirmWare/MiscOutputs
- GenBoard/UnderDevelopment/DigitalInputs
- GenBoard/UnderDevelopment/FirmWare/MenuRelated
- GenBoard/UnderDevelopment/FirmWare/SyntaxRelated?
- GenBoard/UnderDevelopment/FirmWare/ConfigRelated
- GenBoard/UnderDevelopment/FirmWare/AirConditioner
- GenBoard/UnderDevelopment/FirmWare/CoolantTemperatureRange
- GenBoard/UnderDevelopment/FirmWare/GPSrelated
- GenBoard/UnderDevelopment/FirmWare/TriggerRelated
- GenBoard/UnderDevelopment/FirmWare/KnockDetection
- OnlineCourse/Modeling/Scheduler
- GenBoard/LoggerIntegration
- GenBoard/UnderDevelopment/CommToRound
- GenBoard/UnderDevelopment/FirmWare/Settings discussion on how settings are retrieved and stored
Below is mostly implemented (OBSOLETE). Feel free to delete any item that is implemented and reasonably mentioned in VemsTune help.
'features could be mapped to product'' in ofbiz using product associations.
- feature name
- short description
- long description
- priority
- state (wishlist, designed, implemented, tested, well-tested)
- test documents
- responsible person(s)
- implementation file(s)
- other data
Priorities:
0: unknown (may be urgent too)
1. light-wish
2. wish
3. strong wish
4. planned far future
5. planned near future
6. planned very soon
7. urgent
8. urgent bugfix
9. critical bugfix
Strategical list
List of tasks that you can choose from if you want to join: Feel free to add new items, add your name if you feel like doing it (that does not mean others cannot participate), or start a discussion about them.
- IssueReports
- p=4 Add a time delay before engaging idle PID. Right now naturally falling RPMs will cause integral loading. Instead it should get time to land at the configured DC PWM and then use PID from there to adapt to changes in load. This is how other engine management does it and would work well. For bonus points we could remember the last PID value from when TPS changed (ie from when we left idle) and start there as a configurable option. It would be a very simple 'adaptive' idle, fooled only by things such as load change when not in idle. At least a good option for engines without A/C.
- pri=4 Anytrim for idle target so that A/C compressor switch or fan switch can bump idle without needing an entire second config.
- pri=5 independent tach output is done, but the divider will be changed to allow precise tuning and tricks like 6cyl tacho gauge on 4..5 cyl engines DONE
- any mcp3208 input configurable for ALS / Launch input
- addition that inputs using the mcp3208 channels need a digital filter, low voltage = signal, high voltage = no signal, with shiftcut switch pressed, the function keeps reenabling all the time, even though the noise isnt visible on a gauge in megatune. My proposition is that high voltage(5V) for 100mS duration will be needed before reenabling, start with testing on shift-cut, where the problem is. I suspect the current implementation reenables shiftcut with one mcp3208 sample indicating high. //Emil
- 2nd WBO2 channel
- DONE: (since 1.0.45 firmware) for idle solenoid, if PWM period=0 configured, than we should revert to original extremely-fast softpwm behavior (instead of the nicely controlled period as now)
- camsync and missing tooth-style multitooth (like 60-2) crankwheel for 4 cyl (working on 5 cyl, but not on 4 ;-)
- pri=5 LoggerIntegration? (MembersPage/RichardBarrington)
- pri=6 overlapping dwell for direct ign (MembersPage/MarcellGal).
- pri=7 ArmEfi? (HW)
- DROPPED: pri=7 ArmUfo? (HW) used as lambda meter
- pri=7 Lambda vout on OC3C, 10:1AFR=0% 30:1=100% (For Autronic Autotune)
- pri=7 Input from professional lambda meters (1v per lambda) or Autronic format (AFR10:1=0v AFR30:1=1v) (For verifying our WBo2 application.) LSM11 curve is needed in table format (not unprecise drawing)
- pri=5 DizzyBoard? IonSense (MembersPage/KeithHargrove MembersPage/JÃ?¶rgenKarlsson)
- pri=4 StreetDyno (using RPM, VSS, GPS), ChassisDyno (MembersPage/RedMist)
- pri=5 MegaTunix handling the MSAVR variables (mcd) (MembersPage/RichardBarrington)
- pri=6 OtherTuningsoftware (or compiling MegaTunix on win32)
- pri=3 histogram of tooth-times to catch bad (inverted) install of VR sensor (33+1.5+1.5 instead of 34+2) and possibly other problems
- pri=1 currently it's not supported to build a firmware with -D NOIGN. It doesn't make much sense, since ignition can be disabled in configuration. Only makes sense for special apps, that are short of flash. The pri=8 was a joke, I guess.
- pri=2 WBO2 only builds with -D BENCHMARK set. This is known.
- pri=6 Support for even tooth wheels (cam sync with multiple tooth wheels even) This will be needed for any Rotary with stock triggers and Hondas with stock triggers, probably more than that too.
- pri=1 CEL Reserve and define an ouput for driving a check engine light. But what conditions should activate it (besides the 2 seconds or "until RPM found" powerup light-up)?
- Eg. if WBO2 Ri target cannot be reached (or Ri confidence low) for a significant time, we know that WBO2 is not functional.
- if WBO2 is working, and it shows lambda target cannot be reached.
- serious knock detected
- For dual-trigger applications the loss of one trigger can activate it
- I suggest using the ODBII fault codes: http://www.nology.com/OBD2FaultCodes.htm And why not override whatever is in the LCD display. Often the "end user" does not know how to "ask VEMS" using the standard tools.
- pri=0 If using WBO2, NB02 output to fool vehicles own ecu. Maybe useful if original ecu still controls engine check lights, fuel consumption meter and so on?
- pri=3 Cool Down Enrichment MembersPage/GoranJurkovic/DaewooLaNOS/GoingVEMS/CoolDownEnrichment Thing that every stock ECU has and it's needed for turbo engines!
Misc. smaller TODO items
- generic logging functionality
- we might want to apply ign_balance + advance in the mda.. command, so mda28 really means 10 deg BTDC (even with non-0 ign_balance). Now the user must consider ign_balance (most often 0 anyway when checking the base timing)
- svn revision stored in flash. We update firmware_revision.h like "1.0.18" (without reusing numbers for release candidates) so this should not be badly needed. We have the compile date anyway.
- a small branch in bin/make-...pl for canonizing config.txt and tables.txt: this will allow us diffing the result read back via mcd and whatever is in the config.txt and tables.txt files: see what changed, and catch config.mtt made with bad global.h revisions.
- baro/dbaro should be done after table lookup
- make the battery voltage measurement configurable (compensate for wrong voltage divider)
- search_table(n) "on demand", no need to run it if say engine.coolant hasn't changed since last time. I say make it binary-search (log(n) steps) instead. (well, in case of coolant I guess a slow linterp without rx21 is still there...)
- cranking pw decrease with time to avoid flooding
- Injector flow bench: mxo (too fast?), mdp, duration
- airden = airden_table[MATFACTOR] instead of seperate table? (We already have the MATFACTOR)
- flash checksum
- "lock" eeprom after flash update (don't do anything before special command is executed that unlocks the eeprom). Some suggest to park the eeprom pointer to a dummy unused location, so it's not pointed to the last used active data - an overcautios step to prevent corruption. I'm still uncertain about RC-type or the MCP809-type reset circuit options, either is possible.
- lightweight sheduler so RS232 what_to_send() and rpmcalc,fuelcalc get higher priority than LCD and other inferior tasks
- runtime configurable iac (enabling of stepper / pwm)
- comm.c: VE_TABLE_FIX doesn't work as expected (?)
Some User request for the GenBoard 2.2-3.0
- N2O activate output DONE
- Shift Light - Indicates the engine runs over a configured RPM, and driver needs to shift (1 bit output channel). Look similar to N2O output (which also consider TPS, and is DONE).
- Spray intercooler - Power on/off the WaterInjection pump or the InterCoolers? cooling fan, controlled by MAT signal (1 or 2 bit output) Needs a configurable output pin, like the WOT. See GenBoard/UnderDevelopment/ConfigurableMiscOutputs.
- Two channels of working WBO2. For logging and LCD.
- it's not hard, just make sure the nernst samples are not repeated in SRAM. Now every WBO2_SAMPLING 's handler2k run, a nernst sampling is started. Every 10th msec. We want one every 5th msec, for the A and than for the B channel. The output variables need new SRAM space, but that's not much space. wbo2_sampling.nernst_sample_cnt MSB can show the actually used WBO2 channel. Basically jump from sampling one channel to the other very rapidly - from a resource standpoint of view
- Use of both knock channels simultaneously
- Use of BMW-type IAC valve as it's experimental at MembersPage/GergelyLezsak/IdleControl/Firmware
Michael's browsing through the firmware
TODO'S
Ignition channel configuration
How does bootloader handle inverted/noninverted igndriver?
The trick is in ioinit.c: the initialization block is inside
#if (defined __MEGASQUIRT_C__) || (! defined HARDWARE_PULLUP_OR_DOWN)
So in the bootloader, the pins are left as input if HARDWARE_PULLUP_OR_DOWN is defined (so the PWM-ing SIL5 10k does it's pullup job). This has somewhat changed, since we always use the FETDRIVER_INVERTING. BootLoader pulls outputs high so real outputs are inactivated.
For the ignition, we leave as the hardware reset leaves the ignition (off). Inverted ignition configured in software (ign_out=0x71) is not supported. Inverted ignition must be configured in HW.
The h[2] configuration could be made more general, there are 2 options:
- like the h[0], allow more than one ignition channel to be fired simultaneously (without IGN_DUALOUT)
- configure like other output channels in GenBoard/Manual/DigitalOut/Table (02 instead of 00, 32 instead of 03, 72 instead of 07, etc...)
Both has some overhead, the second has marginal. As an extreme case, it could be configurable, which approach is used :-)
verify calculated edgetime_corr coefficient
The visual gnuplot-linreg is OK, you can log WideBandO?2 data to RS232 and verify with linreg.pl
pri=6
MUST-do sg. like this for GenBoard v3.0:
configurable with tables (vs. compiletime).
- injector: DONE (see h-table: 8 bit mask limits to max 8 independent injector banks)
- ignition: simple for direct ign for non overlapping dwell
Each sequential output (like inj and ign) should be driven this way:
- engine cycle (normally 720 crankdegree) is splitted to N (N=7..0) channels. It is possible that primary injection has 8 channels, while ign has some other number (eg. 4 with wasted spark) and secondary injection (eg. water) has 2 channels.
- the channels (at least the 1st) are synchronized to InputTrigger
- the channel number points to the h[2] table, so the firmware knows where to look up the channels
- I checked the i259 initialization code when ign_out=71 (for the common ign_out=70 it's tested thoroughly). It looks good. It seems to me that the hardware RC reset on the i259 is applied for too long: the processor reset comes too early, so for inverted semantics the hardware reset takes precedence.
This stuff is DROPPED for now in favor of an even simpler, still powerful scheme
old port_act stuff for the curious:
that particular channel to
- switchoff/gopwm/switchon (for inj) or
- init/charge_coil/release_spark (for ign)
- alltogether 8 port_acts in a table for every channel: 2/3/3 for the above portactsets (this makes it possible to use very primitive atomic portacts)
- the looked-up 8-bit portacts can be executed simply. Eg. 00 and FF are nop. These should ideally be referred from configuration with symbolic names translated by perl - otherwise we'll run out of space in the future.
ignconf.c and injconf.c should be dropped (even more complex :-) :
- only port_act part remains (simple, as outlined above)
- following-action functionality will go to the tables (next channel -> next line)
- condition will go to the IC3 handler (simply step the channelnumber and reset after the number of configured channels is reached.)
- dispatcher only gets a 1 byte val_t, in which the action is coded:
bits 4:5 the off/gopwm/on (inj) or init/on/off (for ign)
bits 0:2 selects the channel 0..7 (bit 3 is future)
We can first write a generic handler that will use the lower 3 bits to determine the channel (tableline), later it can be unrolled for faster execution. Packing the bits in a better way could help gcc optimize well after unrolling. In each dispatcher() call up to 3 port_acts can be executed depending on the relevant port_acts read out from the table (00 bails out earlier, FF not!) as the 3 consequtive values in the relevant port-act config table.
(EEPROM) Storage related
As you know (storage.c) we have all tables and config (that live in EEPROM) mirrored in SRAM.
Config and h-table must stay in sram (or flash), so it is always available, even during EEPROM writing! (since it is used all over the place, including interrupts).
However, we'll have about 9 (!) 16*8 byte tables (it only took to change 2 constants - one VE_SIZE_RPM in firmware and $elements in make_tables.pl - to get 16 RPM bins, but it requires some more testing), which is not marginal.
- it would be nice to read from EEPROM
- only have dirty lines in SRAM
- the fuelcalc can wait max a few msec if the EEPROM is being written (for some ECM saving configuration data requires engine off). EEPROM write should only be allowed to start (it takes 8.5 msec) if the fuelcalc is not needed within 9 msec. Doing it right after fuelcalc is perfect at high RPM; simplest algorithm is to do a storage, than a fuelcalc and so on (needlessly too many fuelcalc at low RPM).
Later we will need sg. like a debug flag, that enables writing these tables. So in mtt mode they will not be accidentally overwritten (misconfiguration of h table would change the behaviour fundamentally, but why is that a problem? ).
Suggested names tables:
- h for hardware, currently 3*8 bytes GenBoard/Manual/Config/HwMap
large 16x8 tables (16 in the RPM, 8 in the kPa direction):
- l lambdacorr target (already there) for WideBandO?2 closedloop and learning (8x8 should be enough)
- j VE (reference) table (formerly dummy fake-VE of traditional megasquirt)
- v VE (reference) table for secondary table
- p precision learnt VE (should there be 2 tables, one for each banks?) this is currently 16 bit (but only 8*8)
- n ignition max ignadv map
- w ignition knock adjust window (8x8 should be enough)
- i ignition knock learned adjust
- g lo(g) of knock history (knockcounts per loadsite): 16 bits would be better
TPS auto-calibration
Allow engine.tps pull the (tps_low, tps_high) lower/higher. Trigger condition for reset (reset means let (tps_low, tps_high)=sensors[TPS],sensors[TPS]+1) could be:
- dedicated menucomman
- or special occasion (ignition on for 20 sec without starting?)
- special values: tps_low=FF and tps_high=00 or tps_low=00 and tps_high=FF
- my favorite: abs(tps_high-tps_low)==1
- Remember during implementation that tps_low >= tps_high is legal now, so direction must be preserved
ADC related
- we have 10, or 12 (MCP3208) or more (using filtering) bits available
- for most ADC channels the upper 8 bits are enough
- WBO2 Ri calculations use 10 bits samples of the nernst input.
- MAP calc uses 11 bits: in speed-density setup the VE value is multiplied with MAP. For a 2.5bar MAP sensor the readings (using only 8 bits) for 30 and 31 kpa would be appr. 30 and 31 (difference is 1 LSB) which is significant. With using 10 bits it becomes 120, 124 (4 LSBs), much nicer.
I'm thinking of killing the ifndef WBO2 ADC setup, and tweaking the WBO2 ADC to work with non-WBO2.
The sensor values must be accessed with getter functions get_sensor(x) (that can be inlined or macro-d), not like sensor[x]. (This will come very handy when the digital signal can come from other controllers later).
Do we need the prev_sensor_reading[] array ? We can just do
// exponential decay: uint16_t t = get_sensor(x) + new_reading) >> 1; cli(); // needed on AVR because 16 bits set_sensor_value(x, t); sei();
Note that the getter should work the same way no matter the signal comes from a local internal ADC, MCP3208 or a combination of 2 signals (like cold-junction compensation signal of a K-Thermo comes from a different channel), or from network. We might want different getter-wrappers for different bitwidths (an 8 and a 16 bit getter, the 8 is needed so the upgrade is simpler, and 8 bit is actually enough at most places).
Sampling freq:
We currently have 2 classes:
- low priority (sampling every 8 .. 9 msec is perfect)
- sampling a burst of one channel (for WBO2) once in a while (the other channels are not selected during this burst)
We should finally have:
- low priority (sampling every 10 .. 15 msec is perfect)
- medium-priority (sampling every 5 .. 8 msec is perfect). This can be achieved with a sequence (maybe flash-defined) that has these medium-priority events multiple times.
- sampling a burst of one (but it should be selectable!) channel (for WBO2) once in a while. Generic notify mechanism for observers (eg. the WBO2 calculations). Note that almost same would be used for uC-controlled hot-air-wire air-flow measurement.
can we kill the handler2k?
- benefits: the number of read ADC samples (the main job of handler2k currently ifdef WBO2) cannot be decreased, but it can be done at a time when it is cheaper: when there is no conflict with scheduled events.
- disadvantages
- work amount
any low priority maintenance task
- that we can do from userspace, should go to userspace
- that we cannot do from userspace (needs interrupt) should first check if there is an upcoming event scheduled. It would postpone its action for some time if there is, so not to delay the event execution at all.
do the timing from last possible tooth - AdvancedIgnition
- trig2spark needs to be updated to give back the proposed engine.trigger_tooth and the (time or rpm_period) multiplier that need to be scheduled after it.
- use engine.trigger_tooth that is coming from userspace instead of config.trigger_tooth
- note: engine.trigger_tooth needs to be updated in a syncronized way (from dispatcher igndeact), such as the igncount that we got wrong last time :-)
- possible to still schedule ignact (dwellstart) the very same way as now (from previous deact or some predetermined trigger). Optionally calculate another trigger tooth and delay from userspace (as trig2spark).
pri=2
- check if MegaTune can cause config corruption in the AVR
- review comm.c compatibility layer
I think megatunix is safe, anyone confirm this? yes.
We couldn't reproduce the problem with the same genboard with another computer (and megatune). It seems the USB-RS232 converter caused the problem by making rare errors in the AVR => PC direction (bootloader was fine, although the bootloader moves very little info from AVR => PC : checksum only)
Trigger scaledown
trigger should consist of only the following actions:
- capture time
- store time in buffer for userspace (=> flag userspace)
- update phase
- check a simple condition if it needs to schedule an action
- if needed, calculate when to schedule with a simple multiplication and addition
- schedule the required action
This depends on userspace preparing an execution plan, sg. like:
ignition should be fired n degrees after p-th tooth: in interrupt this means very simple condition (maybe it could also check if trigger frequency did not change drastically, or something...) and very simple calculation.
Flexible analog output ( OC3C )
An analog output (maybe external GND referenced) should be easy to configure. Could be configured as MAP,WBO2, NBO2, ignadv, injpw, RPM etc...
This would allow
- relatively fast, hackless diagnostics without LCD and notebook (only DVM and PS2 is needed).
- more importantly it would allow proper logging with inferior (read: most) dyno-s. With many dyno-s the only way to identify log-sections is via logging external analog signal (besides hard paperwork of course). Eg. if one is tuning ignadv (setting fueling is fast with GenBoard/VerThree lambdatarget feature) he wants to know which power-log belongs to which ignadv setting.
The WBO2 output is high priority at least
Someone please make sure the most used curves are linked near from GenBoard/Manual/WBSensor'''
See also
- A good collection of subroutines, eg. I2C: http://hubbard.engr.scu.edu/embedded/avr/avrlib/ We should probably contribute at least pid, softpwm and eventqueue.
User Suggestion
Firmware version 1.1.58 onwards suports Fuel trim in N2O settings.
Perhaps this could be further enhanced by introducing scaled fuel trim. Monitoring the cylinder pressure with a transducer or just a manual potentiometer mounted on the dash. Simple linear scaling of fuel against analogue input voltage.
This would be a far more useful function as Nitrous Oxide systems calibrate the Nitrous to fuel ratio by fixed oriface jets. Cylinder pressures change with temperature resulting in a change of the N2O/fuel ratio. While it is favourable to run Nitrous systems in the very rich areas of engine operation, any change that results in a richer still condition can introduce rich missfire, and like wise, any change that results in a leaner condition could end up potentialy damaging to the engine.
Suggested pressure transducer http://www.noswizard.com/product_desc.php?id=154
Suggested config settings
Input channel
No Fuel trim volts
Full Fuel trim volts
No fuel trim enrichment (biased at 100% for zero fuel trim)
Full fuel trim enrichment (biased at 100% for zero fuel trim)
This should be restricted to trim only. Base Nitrous tuning should be done with the Nitrous system Jets
I run a small 1275cc engine with 100bhp normaly aspirated. I now have a 50hp hit of nitrous ontop and suffer with rich missfire when the ambient temperatures are low. There is no suitable jet to remove only the required fuel to move out of rich missfire and I have to trim the fuel with Vems. This means connecting a PC.
* Instead of correcting fuel to changing environment, nitrous supply could be corrected to temp/press changes for a constant and predictable power (and mixture). If you are playing with a WON system PWM-ing it is a good alternative of stages and jetting. I'll do a review on such experiments soon (GergelyLezsak?)
- Yes I use a WON system with no heater. Kits are sold as such and its not the end of the world. I am currently looking into the PWM'ing of the solenoids as I had previously suggested in NitrousController near the bottom. I am aiming to ramp up to 100hp over rpm, making life easier on the gearbox which is already stressed as it is. However, after asking on the WON forum about the flyback voltage, I have decided to use a SSR between Genboard and the Pulsoids. WON reckon the flyback voltage to be 1kv at last testing. I have IGTBs fitted instead of FETs, but even those only have a transient voltage clamp of 420v. The SSR would isolate the transient voltages and also is more suited to the high current of the pulsoids.
ADC linear Scaling, and ADC=>nonlinear curve for logging
This can be done in VemsTune or MegaTune since ages (traditionally with 256 point curve stored on the PC).
Now there is a small permanent storage area inside the ECU that vemstune can use for whatever it wants (does not effect control in any way). This makes it possible that any config (or runtimelog saved with VemsTune, since that includes config and tables ) "remembers" these analog calibrations so they need not be stored separately (on web, or on PC, eg in. dedicated vemstune directory).
- ADC linear scaling
- VemsTune: add gauge, see ADC raw and ADC calibrated channels (8 extra ADC)
- values can be calibrated in dialog (one-by-one, or all at a time with "import" or drag config file to dialog also imports relevant settings)
- new (2010 Jan) VemsTune freezes these values when changed, so they do not get overwritten from the config found in the log during log playback. This is helpful when log was captured with uncalibrated or badly calibrated values (which happens in practice, eg. sensors calibrated or recalibrated later)
Similarly,
- the same storage area can be used for 1 or 2 channels, but nonlinear curve ( simple 8 or 10 point curve scaling table for one or two analogue input chanels, like extra temperature, position or pressure sensors).
- If it's not enough for a special fully instrumented engine, you can just store these curves on the PC (and patch any new vemstune).
- recommended dialog:
- ADC Channel Select
- X axis: ADC Volts
- Y axis: sensor Value ( temperature, pressure, position, whatever)
I can source linear pressure transducers with low enough scale for fuel pressure, and high enough for oil pressure. http://195.159.109.134/vemsuk/forum/index.php/topic,358.0.html
Flex Fuel Sensor input and firmware that will automatically compensate for the Ethanol content based on the sensor readings. - MembersPage/Sascha
This GM / Siemens Fuel Composition Sensor(FCS) current: GM12570260 EOL sensor: 12570250
Similar to MS?
http://www.megamanual.com/flexfuel.htm
Sensor reads in Hz.
Basic sensor testing:
- Freq stability check:
- Freq. vs input voltage changes:
- 5.5 VDC power supply, Freq. = 69.99 Hz raised up the power supply voltage in 1 volt steps to 16.0 VDC power supply, Freq. = 69.99 Hz
Note, sensor stops operating below 5.5 VDC. 16 VDC was the upper end of testing.
- Current draw at power supply voltages from 5.5 VDC to 16 VDC:
- 25.7 ma to 25.9 ma or .026 amps!
- Connections on sensor:
- Black is GROUND (Ohm to chassis to prove).
- Pink is 12VDC. (car battery)
- White is the output signal. (A pull up resistor is needed here because the output is an open collector transistor inside the sensor so any voltage interface will work)
| Ethanol/Hz | Hz. Freq. | % of gasoline | % of Ethanol | Wheel Speed Reading (km/h) |
| 50 | 100 | 0 | 8 | |
| 55 | 95 | 5 | 9 | |
| 60 - E10 | 90 | 10 | 11 | |
| 65 | 85 | 15 | 12 | |
| 70 | 80 | 20 | 13 | |
| 75 | 75 | 25 | 14 | |
| 80 | 70 | 30 | 15 | |
| 85 | 65 | 35 | 16 | |
| 90 | 60 | 40 | 17 | |
| 95 | 55 | 45 | 18 | |
| 100 | 50 | 50 | 19 | |
| 105 | 45 | 55 | 20 | |
| 110 | 40 | 60 | 21 | |
| 115 | 35 | 65 | 22 | |
| 120 | 30 | 70 | 23 | |
| 125 | 25 | 75 | 24 | |
| 130 | 20 | 80 | 25 | |
| 135 - E85 | 15 | 85 | 26 | |
| 140 | 10 | 90 | 27 | |
| 145 - E95 | 05 | 95 | 28 | |
| 150 | 00 | 100 | 29 |
170Hz is error output (self diagnostics built into sensor)
With anytrim function
- the wheelspeed2 (0-255) can be also used as input (since ~1.1.8x firmware). The wheelspeed2 (which is a freq input) can be used for the Ethanol-concentration sensor.
- wheelspeed1 also but the Ethanol-sensor should normally be connected to wheelspeed2:
- please write in the WebShop order comment "wheelspeed2 frequency input needed for Ethanol sensor".
- also analog input, MAP or fuel pressure (which is 700 kPa absolute pressure analog input - MAP) can be useful for anytrim compensations
LCD Page/layout change request - MembersPage/Sascha
I am proposing a more "efficient" use of LCD pages while at the same time offering the ability for the end user to configure the LCD output without the need of a FW/code rewrite.
I've noticed in the recent FW's that a few pages have a clean layout of approx 8 unit outputs w/ decent room for pretty much any variable.
But users are still restricted to the variables that the FW creators think the page should display @ the time of compile.
I suggest the reduction of the number of pages, maybe only having 2-3 pages but with user configurable variable slots very much like afreshtiny. That way the user can select the variables to be shown in the 8 slots of his liking via VEMStune, either predefined or from raw values or even values with applicable multipliers (ie. AFR instead of Lambda for example).
Icing on the cake would be the ability to use an analog input to connect a button to have the LCD switch between the 2-3 pages in a loop just like afreshtiny as well. Not sure if this is possible though as I know a power cycle is needed when changing pages currently.