Summer 2010 update
Running 1.1.78 with staged injectors
- 550cc (stock) LowZ with resistors primary injectors
- 1680cc secondary injectors (Bosch mid-Z)
Problem with the wideband controller though:
- Using GenBoard/Manual/WideBandHardwareTest
- Pump- is fine, 4.09V
- Pump+ is good. +1mV
- Heater works
- Nernst DC Target is bouncing from 240mV to 330mV. :(
- This was caused by a solder bridge from R146 to R137. This was completely my fault when I removed R140 and added the airwire to EC18/8 for the wheelspeed sensor. Thanks to Jorgen for helping me narrow it down and find the problem.
- Next problem is EGT stability. The values jump around a bit, even using calibrator. On the log it looks a little like a sawtooth pattern.
My config is here: [RX7 Config 2010-08-17]
Spring 2007 issues
Can someone give me a hint at what to look at to solve these problems bench testing (firmware 1.0.69):
- MAP doesn't move with pressure changes
- Pin 3 has 4.97V, pin 1 is ~1.8V -- seems right, just not represented through the AVR
- Calibration in basic settings (kpafac), depending on map sensor range, fine tune with offset
- I screwed up the map sensor range and the kpa fuelcut settings somewhere along the line, fixing that solved the MAP problem and the injection problem too.
- Fuel injectors don't fire
- There's +5V at the input of the injector driver, 0V on the output of the injector driver (no pulses from the AVR).
- caused by the bad map sensor calibration in combination with low kpa fuelcut
- Setting up IGN_DUAL_OUT for channel 0+1, and 5+6 only 1 and 6 flash with signalgen trigger applied
- Broken in firmware 1.0.69, run 1.0.71 instead
- Going to 1.0.71 worked wonders. Thanks! I added a note to the 1.0.69 section of the firmware page too. It was there, but I added it in a more logical place for me at least.
- Broken in firmware 1.0.69, run 1.0.71 instead
Upgrade to firmware 1.0.39
I found some surprises (documented, but I missed them) when upgrading. Could someone take a quick look at these config files and see if there seems to be anything out of place? If it matters, this is running on a v3.1 board w/ 1 EGT channel. Other than that nothing special. ALS, Launch Control, Tach Output, etc. should all be disabled.
Of notable interest: The MAP sensor doesn't seem to register at all now. Blowing in the tube or using a syringe for pressure/vaccum it stays at "100 kPa" in both megatune and LCD.
Datalog from early afternoon of June 04, 2005. http://www.vems-groups.org/files/MembersPage/JasonRussell/jrussell_rx7_june04.zip
The WBO2 value in the log is questionable at this point.
Here's my current (31/05/2005) config and tables:
Sanity check: Do these sound reasonable?
TDC After the trigger = 62.5 deg
Number of teeth on wheel = 11
Trigger tooth = 1
Another trigger tooth = 6
Crank Min. Period = 1280 uS
Angular width of tooth = 30.0 deg (not used without secondary trigger)
Angular width of missing tooth = 60.0 deg (not used without secondary trigger)
- trig for h coil is at tooth1 (after missing tooth)
- trig for h coil is at tooth7
- ign_tdcdelay=FA is helluvalot (almost 125 crankdegrees). it's in 1/2 degree resolution, unlike crank_advance and n table (that is 1/4 degree).
- No applicable any longer. It's 62.5 now.
- We must check rpmk and other variables related to ncyl, eg. config.config11 upper nibble (+1). These effect the rpm_period calculation.
The VR sensor on the scope looks really nice. I think it's my trigger setup that is causing me problems. I don't get any ignition advance at all and I have little insight to what the problem might be. I've tried changing settings for IAC and completely disabling it. It has nearly no affect on the idle and no affect at all on the ignition advance.
We agreed that VR sounds like good (not inverted)
- since LM1815 triggers on negative falling edge (scope says "OK")
- Also, W..says 00 (benchstats.wheel_err) on mlp01 after 90-120 seconds of idling
- Also, InputTrigger/TriggerLog results are OK: http://www.vems.hu/files/MembersPage/JasonRussell/mde40.txt
CAD picture of the trigger setup as Jason envisions it.
MAP: 90 kPa
Calculated advance (crank advance): 3 deg
Wheel specific: slightly after tooth 3
In practice: starts easily
MAP: 90 kPa
Calculated Advance: 15 deg (3C on table)
Wheel specific: roughly halfway between tooth 3 and tooth 4
In practice: advance = 0 deg
The below is really old information. Please consider that if reading and looking for information.
I am in the process of installing a Genboard v3.1 in my 1988 Mazda RX7.
- primary trigger: I had a 24 tooth trigger (no missing teeth). modified to be 12-1,12-1 (two missing teeth from the 24 180 degrees apart)
- I guess the teeth are gone now, but just wondering: why not removed just 1 tooth for 24-1 ?
- When I first setup the engine the camsync code wasn't working yet, I had to do this to get 2 cylinders to act like 4. In essence the engine is a 2 cylinder 2 stroke with a 4 cyl crank position sensor. I also have an untouched CAS to get everything working as stock eventually so we can start marketing the RX7 community.
- I guess the teeth are gone now, but just wondering: why not removed just 1 tooth for 24-1 ?
- secondary trigger: I had a 2 tooth trigger (equally spaced) for trigg2 (home signal): I used a grinder to make this a 1 tooth trigger so cam_sync would work (hopefully). In hindsight, I didn't need to do this at all. I should have kept both teeth for camsync.
I get this from Haltech tuners. Haltech is by far the most popular ECU for RX7's.
# Haltech setup from Hitman (modify to work with VEMS) # Factory CAS alignment # Use tooth offset (trigger_tooth) = 11 # Trigger angle = 65 degrees # Multitooth trigger # 24 teeth # 4.5mS dwell # falling output edge (coil fire) # trigger1, bit0 0:falling/1:rising, bit1 0:toothwheel/1:coil, bit2 0:no filtering/1:filtering # rising trigger for RX7 CAS - 24 tooth (binary: 111) primary_trigger=07 # trigger2, bit0 0:falling/1:rising, bit1 0:enable/1:disable, bit2 0:no filtering/1:filtering, bit3 0:toothwheel/1:coil, bit4 0:alien advance/1:cam sync, bit5 0:single edge/1:both edges when cranking # rising trigger for RX7 CAS - 1 tooth # Binary: 011101 (rising, enabled, filtering, coil, camsync, single edge) secondary_trigger=1D # tooth wheel, active trigger tooth (00:missing tooth), # # after the missing tooth, ign_tdcdelay = 62 now # so that trigger tooth is ~60 degrees BTDC # This doesn't matter with coil type trigger (no missing teeth on wheel) trigger_tooth=0B tooth_wheel=18 # 24 teeth crank_minper=50 # for std. coil tach signal ** Question about below... what do I do for a non-"missing tooth" setup? # measured 115 degrees from first tooth after missing tooth to cyl#1 tdc #ign_tdcdelay=7C # 62 degrees = 110 (from missing tooth) - 48 (trigger tooth * 6) # good range for rx7 coils: 4.5-5.0mS. # 0x46(70 dec) * 64 usec = 4480 usec when VBatt >= 14V ign_dwell14=46 # dwell6 = (dwell14 * 1.2 * 64) / 27 # add 199 * 27 usec = 5373 usec to dwell14 when VBatt = 6V ign_dwell6=C7 # crank advance = 20 degrees ign_crank_advance=50 ign_out=70 # EDIS:0x0? dummy: 0x7? disable:0xff bit0: invertout ignchmax=01 # CAMSYNC ##################################################################### # the idea here is to use a phase variable internally, that goes from 0 .. reset_engphase_after (practically 240 decimal in your case), all variables are related to that. cam_sync_f_edge_phase=00 cam_sync_r_edge_phase=78 # (cam_sync_f_edge_phase + reset_engphase_after/2) % reset_engphase_after if it's 360 crankdegrees after from falling edge. reset_engphase_after=F0 tooth_wheel_twidth1=05 # reset_engphase_after / 48 tooth_wheel_twidth2=0A
Please make a list of events associted with your trigger:
it will probably have
- 48 crankteeth (-missing ones), only falling edge counts
- 1 camtooth rising, 1 camtooth falling edge (with VR only falling counts)
- TDC (or whatever it's called for rotary)
You can use some abbreviations, but the relation of TDC vs. the syncs are important.
You can look at timing.c update_engphase() and write the engine.engphase in your list of events.
Ok, I see a few problems here: cam sync doesn't do anything when using coil type trigger (comment in timing.c says "the argument is 0 when not using a tooth wheel trigger"). I can't use toothwheel type because I have no missing teeth.
The trigger events for 720 degrees of crank rotation (normal 4 cyl engine cycle) are:
- TDC (camsync)
- 15 crank degrees delay (15 crankdegrees looks suitably large, so the order of campulse and crankpulse can never change here), then starts:
- skip 1 crankwheel signal, fire coil 1 on following tooth (2nd after TDC - total of 45 deg ATDC) to ignite cylA
- skip 5 crankwheel signals, fire coil 1 on 8th tooth, to ignite cylB
- skip 5 crankwheel signals, fire coil 1 on 14th tooth, to ignite cylA
- skip 5 crankwheel signals, fire coil 1 on 20th tooth, to ignite cylB
24 crankwheel signals (30 crank degrees apart: 720 crankdegrees altogether). As you see, in _my_ setup there's only one coil. It fires 4 times per 720 crank degrees.
So this looks like an 8 cyl engine with a multitooth trigger, except the 24 cranktrigger doesn't miss a tooth. Starts to make sense (I really didn't want to make code changes before laying these out clearly). A few more issues:
- it's quite unlikely that you want constant ignition advace as you wrote above. Please find the latest reasonable point of ignition (this we call TDC and configure with ign_tdcdelay normally, although there is nothing to prevent someone to set this later than tdc). Identify the earliest possible time of ignition (this is easy after having the latest, simply tell max ignadv ever applied).
- I will decipher the Haltech base maps to find what others are running with my setup and post the table.
- provide ballpark info on your coil's dwell
- I specified this at the top of the page. 4.5mS
- target RPM-range (I guess 100...15000 RPM should do)
- I've never seen a rotary run over 13000, so 14-15k should be enough. Mine will be 10,500 max.
- we'll want to see the leading sparks as well to see what overlap conditions are there
- I'm not clear on your meaning here, but I'll take a guess.
- I'm specifying leading sparks. The trailing (second plug) is easy... 15 crank degrees after leading. All the time, AFAIK. I'm not running trailing though, 99% of it's purpose is emissions.
- can you make a diagram with all 3 output coilsignals and both 2 inputtrigger (or at least the cam, as crank from it is very clear) signals in it? (the input can be just vertical lines, as we only care about the falling edge of the VR)
- Yes, I will work on that.
In a normal RX7, there's two of the TDC signals (second one is just before the 12th tooth). We need to make this work at some point. I now have a 24&1 tooth and a 24&2 tooth trigger-sets, so I can test both setups. There's also 3 coils in a standard setup. We'll need to support this at some time. I don't mind taking on the code changes needed for the 3 coil setup.
Standard (idle) timing is 5 degrees ATDC (ATDC?? not BTDC?) for coil 1 (wastespark), 20 degrees ATDC for coil 2 & 3 (one for each rotor)
the 2 VR sensors output good waves, the lm1815 get good inputs, the lm1815 output looks good, but the RPM doesn't show up. In MegaTunix the status changes to "RUNNING" when I spin the VR sensor, so it's working in some capacity. Please help. I am on short deadline to get the car running (24 hours left!)
primary_trigger is setup for toothwheel but the wheel doesn't miss a tooth. When no missing tooth then RPM calc will NOT be triggered: it explains everything. I guess you need the teeth for mechanical reasons. The secondary trigger should probably fire RPM-calc and sync the teeth.
No matter what the divider is set to, I get an RPM of ~1400-1500 at cranking. RX7's have high speed (versus high torque) starters, but I know they aren't THAT high. ;-) Should be 350-500 RPM cranking. 24 tooth divided by 06 should be 4 triggers on the primary, exactly what I need for wasted spark. Please provide full commented config, not just extracts. Very easy to miss a constant, eg. rpm_k or config11..13 would be interesting here.
The cam_sync setup isn't documented at all (that I could find) here in the wiki and global.h either isn't clear to me or has no useful information about cam_sync. I would love to put a new page under the Manual, but the manual is disappearing from the wiki. *shrug* Yep, that's a problem, it's impossible to maintain that way. (or even to read it, very often).
2004-09-15 Trigger confusion
I got a little bit frustrated today at the trigger confusion I have with the coil type trigger not producing the correct output and camsync not working. I ground a tooth off the 24 tooth wheel (now it's 23-1). Set my trigger1=05 and tooth_wheel=17 (23). It's a reasonable RPM now! The injectors are firing. The injector lightbulb glows when I spin the sensor with the drill (~200 engine RPM). I used scope channel 2 connected to the IGBT and injector FETs, but I see only one pulse per CAM rotation. That's probably normal for injectors (alternate=03) however the engine won't run very happily with only one spark per 720 crank degrees. Any ideas here that I can try to fix this? I only have one coil (dual post wastespark) so it should fire 4 times per 720 crank degree cycle.
If i understand correctly you have created a multitooth setup now (23-1) and you want to fire a single coil 4 times per cam revolution (720 crank degrees). Lets start out with the firmware, you wil have to compile the code with this added to my_make
# enable the coil to fire twice per crank revolation (on trigger # tooth and on trigger tooth + 12) MY_CONF += -D ANOTHER_TRIGGER_TOOTH=12
# trigger1, bit0 0:falling/1:rising, bit1 0:toothwheel/1:coil, bit2 0:no filtering/1:filtering # trigger signal after the lm1815, we trigger on the falling edge primary_trigger=01 # trigger2, bit0 0:falling/1:rising, bit1 0:enable/1:disable, bit2 0:no filtering/1:filtering, bit3 0:toothwheel/1:coil, bit4 0:alien advance/1:cam sync, bit5 0:single edge/1:both edges when cranking # disable camsync for now, with your multitooth crank wheel i dont see why its needed secondary_trigger=FF # tooth wheel, active trigger tooth (00:missing tooth), # trigger tooth can be moved with this variable, but setting it # to >= (24 / 2 = 12 = 0B) does not makes sense lets keep that at # missing tooth for now you can change it later when you have # ign_tdc_delay set up properly trigger_tooth=00 # this number should represent the actual number of teeth on the # wheel in your case 24 - 1 = 23 tooth_wheel=17 crank_minper=50 # for std. coil tach signal # you should work this out for yourself, easy to change with # timing light so that actual advance matches seen advance. ign_tdcdelay=7C # good range for rx7 coils: 4.5-5.0mS. # 0x46(70 dec) * 64 usec = 4480 usec when VBatt >= 14V ign_dwell14=46 # dwell6 = (dwell14 * 1.2 * 64) / 27 # add 199 * 27 usec = 5373 usec to dwell14 when VBatt = 6V ign_dwell6=C7 # crank advance = 20 degrees ign_crank_advance=50 ign_out=70 # EDIS:0x0? dummy: 0x7? disable:0xff bit0: invertout # for a 4 cylinder set it to the number of cylinders - 1 ignchmax=03
if you set everything up like above you should be able to produce 4 sparks per cam rotation, and 4 injections too (you can adjust config.divider to fire less often) - DB
Since ignition advance can be configured to be adjusted to help maintain idle RPM, this worths some attention.
// since bit4 is used for 2 purpose, in the meantime // set odd msec stepper speed if you want advance_control on, // and even msec stepper speed if you want advance_control off
If you want to disable ignition advance based iac, but want odd msec for stepper, ignition advance adjust can be limited in other ways: