93 lines
3.8 KiB
Plaintext
93 lines
3.8 KiB
Plaintext
|
|
FLASH SPACE LIMITATIONS:
|
|
Static tables for bitbanging are space expensive, flash reads are 1/2 ram speed
|
|
as well, though that hasn't been too much of a problem yet...
|
|
|
|
Need new ways to define patterns:
|
|
|
|
ISSUE: We want to have up to N patterns at once (lets say 4?) for complex
|
|
setups that use multiple rings on cam wheels or multiple cam sensors (VVT?)
|
|
|
|
ISSUE: Wheels style classifications:
|
|
1. N even tooth wheels (no missing teeth) (i.e. distributor)
|
|
- Need to the know number of teeth and dutycycle
|
|
2. N-M Even tooth spacing wiht one or more missing teeth (don't need to be
|
|
sequentiually missing)
|
|
3. Angular defined wheels, Nissan 360 CAS, LT1, LS1, others
|
|
|
|
Shortcuts? Should we allow chars to define repeats? i.e "*N" where N is
|
|
an integer?
|
|
|
|
|
|
Each wheel (set) is defined by a PATTERN GROUP which contains one or more
|
|
patterns that are "linked together", meaning they run in lock-step for a
|
|
full engine cycle then repeat.
|
|
|
|
Sets are defined with the following syntax: all fields are comma separated
|
|
PARAM 1: an integer defining the output pin used (1-4)
|
|
PARAM 2: C or c (crank or cam, meaning does the pattern repeat every
|
|
360 or 720 deg)
|
|
PARAM 3: A, S or M, ("A"ngular, "S"ymmetric, or "M"issing tooth)
|
|
PARAM 4: for "S" and "M" types ONLY: NN/MM where NN and MM are integers
|
|
defining the tooth duty cycle. i.e. "1/2" (50%) or "5/13" (38.4%)
|
|
For "A" (angular) type wheels the remaining sequence is the HIGH and LOW
|
|
times in degrees separated by commas, The total needs to add up to "360" for
|
|
"C" (crank) wheels and "720" for "c" (cam) wheels.
|
|
|
|
For "S" (symmetric) the final parameter is the number of teeth per cycle
|
|
for the wheel type (i.e. number of teeth in 360 deg for "C" (crank) wheels
|
|
and then number of teeth in 720 degrees for "c" (cam) wheels.)
|
|
|
|
For "M" (missing teeth) the remaining sequence consists of the wheels total
|
|
of missing and present teeth, followed by the number of present teeth with a
|
|
"t" suffix and the number of missing teeth with an "m" suffix repeating until
|
|
all teeth are accounted for., i.e. 36,35t,1m (36-1)
|
|
NOTE: in theory we could get rid of the "t"/"m" suffixes to save flash
|
|
space, but they add an addition layer of checking/verification.
|
|
|
|
Multiple wheels definitions for a PATTERN GROUP are separated by a colon
|
|
(from crank+cam patterns)
|
|
|
|
The patterns can be defined from any starting position in the wheel's rotation
|
|
and it is up to the user to pick a suitable location, it doesn't matter since
|
|
the pattern is cyclic and repetitive with each "virtual rotation" of the
|
|
crank/cam.
|
|
|
|
|
|
Parsing:
|
|
Thoughts:
|
|
Walk the string pointer utilizing a state machine
|
|
Need to know the FULL DETAILS of the patterns to determine the amount of
|
|
memory to allocate to fill out the array.
|
|
|
|
For simple (single wheel) pattern groups.
|
|
RAM needed:
|
|
Assume 1 byte per edge (not optimal but easiest, and simpler ISR)
|
|
For Missing and symmetric wheels:
|
|
RAM requirement is number_teeth * duty cycle denominator,
|
|
50% 36*2 = 72 bytes, 33% 36*3 108 bytes, 25%, 36*4 = 144 bytes
|
|
How many bytes is each tooth is high is equal to the tooth dutycycle
|
|
numerator.
|
|
For a really odd 5/13 dutycycle, for a 36 tooth wheel the ram requirement
|
|
would be: 468 bytes, and each full tooth would have 5 bytes high, and
|
|
8 bytes low, each full missing tooth would be 13 bytes wide...
|
|
|
|
For ANGULAR wheels
|
|
Options:
|
|
1. make it simple and make it 360 bytes for crank and 720 for cam
|
|
2. Find the smallest factor between all the angles of the wheel and divide
|
|
down. (may not work in every case, may be impossible to reconcile with
|
|
another pattern)
|
|
|
|
RECOMMEND option 1 even though it uses more RAM and limits max virtual wheel
|
|
RPM.
|
|
|
|
RAM requirements for PATTERN GROUPS
|
|
Needto find least common factor for all of them.
|
|
First, If AT LEAST ONE pattern is cam, take crank pattern mem requirement and
|
|
double it., find least common factor among all patterns and multiply through
|
|
as needed.
|
|
|
|
|
|
|