09/23/2018 at 03:09 •
So, hard disks now use ADCs and DSPs to detect ones and zeros...
This looks like a job for ANAQUAD!
Is it too much to ask that two heads on opposite sides of the platter (or maybe two on the same?) stay perfectly-aligned over time and temperatures? 'Cause a rough estimate using anaQuad would easily double, plausibly even quadruple, the capacity despite using twice the physical space...
Thanks @Starhawk for sending me down that path, looking up ZIP drives' encoding-schemes!
09/14/2018 at 03:41 •
Use a BLDC motor as an encoder. Almost *Exactly* as I'd imagined. Combine this with anaQuad, and yer all set!
Note that anaQuad *also* works with two sources that are 120 degrees out of phase, so only two windings of the three in a typical BLDC should be necessary. Also, his technique could probably also be applied to stepper motors.
I dunno how i never seem to come up with this simple concept, myself...
"how can I measure capacitance? Drive with an AC signal, measure phase/magnitude..."
Had to learn this one by example... Simple capacitive touch switches charge the cap, then measure the time it takes to discharge...
Friggin' simple method to apply multiple pushbuttons on a single pin is exactly the same, tie them to different resistor values, charge a cap, measure the discharge time, simple ADC. Bam. I even have a well-developed project based on that (anaButtons, as I recall).
No phase/mag necessary. So, why, then, couldn't I come up with the same for inductors? Duh.
Nice goin' @besenyeim!
I'mma linking this one here so's I can come back to it when the time is right-er.
11/21/2017 at 21:13 •
stumbled upon QPSK (quadrature phase-shift keying) which apparently is the/a method used to transmit data in WiFi...
This looks, actually, quite similar to my earlier rambling thoughts on using anaQuad as a data-transmission method.
Some key (hah) points:
QPSK, since it's tied to RF signals, relies on a phase-shift that's maintained for *numerous* cycles (the carrier wave), whereas anaQuad uses two separate wires, and no carrier frequency, so phase-shifts can be easily detected several times *within* a cycle.
While this may make the two seem quite different, I think both techniques are quite similar in concept, owing most of their differences to their medium.
Also QPSK allows for *two* bits to be transmitted simultaneously... one for each phase in the quadrature signal. Whereas my earlier thoughts for anaQuad only transmits one.
There's good reason. QPSK can allow for signal changes with discrete jumps, each bit-encoding is independent of the previous. The same could be done with anaQuad, plausibly allowing up to 16 or more values (4 bits) to be encoded in each ... thing. (Phase-shift, maybe. Or key?)
My earlier ramblings on anaQuad used as data-transmission explicitly removed the ability for sudden jumps in the signal. Thus, one bit is encoded into each "key" dependent on whether there's a positive phase-change or negative. (Plausibly trinary, considering no-change). Thus, each bit-value's representation (as viewed as a waveform) is entirely dependent on the previous.
Now, I'm not certain I read this correctly, but I think I saw mention that QPSK, or some derivation, is sometimes used similarly.
My reasoning: transmission-lines and slew rates. Sudden changes have slew rates to take into account... transmission lines can *smooth* a sharp edge by the time it reaches a receiver. Also, the receiver itself has slew-rates, the transistors don't switch *immediately*... and... anaQuad pushes those switching-speeds by working with smaller/slower changes (and linear regions).
But... if that somewhat arbitrary limitation was removed, and if the technique was transmitted over a carrier-wave, instead of two wires (and a separate clock? Probably only necessary in the trinary case)... and if it were cut down to only four phases (actually, it seems there are QPSK-derivatives that have more), it would seem the ramblings on using anaQuad for data transmission are... darn-near exactly the same as QPSK, of which I had no prior knowledge.
A particularly interesting-to-me learning from QPSK is how the quadrature signals are combined into one... at any instant, except during a phase-change, the signal appears to be nothing but the carrier frequency. So detecting the phase change must require the receiver to have a duplicate of the unshifted carrier-wave running somewhere to compare to... Not dissimilar to how an LVDS receiver uses a PLL to recreate the bit-clock, or how a floppy drive synchronizes an internal clock to clock-pulses on the diskette which are *not* alongside *every* bit.
Not sure how/if to use that with anaQuad... in the two-wire, single-bit, method, clocking is inherent with the bit-phase-transitions. OTOH, it requires two wires.
Mathematically, knowing the two "wire" phases are always quadrature, is it possible to use superposition to combine them on a single wire, still extract the two signals to gain the benefits of "crossover-detection" (noise/source-calibration immunity, mainly) and have inherent-clocking? Sounds like a tall order. But... hmmm....
04/14/2017 at 10:36 •
UPDATE: Ramblings on LVMDS feasibility/usefulness... why do I do this? See the bottom.
A little more on LVMDS (anaQuad serial-transmission)
Thought I'd experiment with different graphing-methods... my old go-to online-grapher seems to be down, so here's another:
The idea was to show only the crossovers, for a half-period of the quadrature-signal... one half sine-wave, which is the passing of one "slot" in the encoder-disk over the photo-sensor (the other half-sine-wave would be passing of the light-blocking material, which I can't figure out the name for, at the moment... maybe "tooth"?). The other half-sine-wave would be basically the same.
So we have two piecewise-equations:
y1(t) = sin(t) * (t<pi/8) * (t>-1) + sin(t) * (t>pi/8) * (t<3*pi/8) + sin(t+pi/2) * (t>3*pi/8) * (t<5*pi/8) + sin(t) * (t>5*pi/8) * (t<7*pi/8) y2(t) = -sin(t) * (t<pi/8) * (t>-1) + sin(t+pi/2) * (t>pi/8) * (t<3*pi/8) + -sin(t+pi/2) * (t>3*pi/8) * (t<5*pi/8) + -sin(t+pi/2) * (t>5*pi/8) * (t<7*pi/8)
As it stands, I think it's a bit too funky to visualize, the other graphs were more intuitive for me.
But the ultimate goal, here, (which I'd forgotten until I started writing this, having developed these graphs before the ordeal at home weeks ago) is to make it easier to visualize an encoder (or LVMDS) where the speed/direction changes...
E.G. For an encoder-disk, we'd be talking about say a motor slowing to a stop at a specific position. With a poorly-tuned algorithm, it might oscillate around that point due to overshoot. Then, graphing that using the method shown here would allow for a more ideal simulation where speed/position isn't affected by other factors such as the motor's windings or friction. That'd help for explanation-purposes.
E.G.2. For LVMDS, we'd be talking about transmission of data-bits, wherein a "1" would be represented by a clockwise-rotation of one "step" and a "0" would be represented by a counter-clockwise-rotation of a "step."
The latter-case would be much easier to visualize with this sort of graphing technique... E.G. show the transmission of a data-byte in this anaQuad method. So, maybe I'll get there.
As it stands, this graphing program only allows for two plots... so the color-coordination doesn't really make sense... it doesn't correspond to anything in particular, you have to look at the piecewise functions to see what's happening.
Also, this only demonstrates the simplest implementation of anaQuad, which only doubles the resolution of a typical digital-output optical-encoder.
(If this were compared to two LVDS signals, this method doubles the number of bits that can be transferred within one "eye" or one bit-clock, which would be the blue line crossing over the horizontal axis at 0 and PI).
So, maybe I need to write a program to do the graphing... or at least generate the necessary equations.
#Iterative Motion also could benefit from a GUI, so maybe it makes sense to try to refresh myself on OpenGL...
Oh, I have a relatively simple idea for LVMDS... brb.
So, here we can see the binary pattern 11011000 transmitted via anaQuad aka LVMDS... not quite as visually-intuitive as I'd prefer, but a start, anyhow.
Also, doesn't show the hysteresis method explained in a previous log, wherein a switch in direction/bit-value would maybe take *two* crossovers to detect, rather than one, just to assure stability, should the electrical-values end-up *near* a crossover, rather than halfway-between.
So, you might be able to see, if there were *two* parallel LVDS signals, their "eyes" would align on the half-sine-wave roughly-outlined in blue. Two data-bits could be transferred simultaneously between 0 and 3.14, one bit on each "signal."
With LVMDS, using two electrically-similar signals as those in LVDS, when those two signals are in quadrature, *four* data-bits can be transferred in the same time, without increasing slew-rates, etc. Something to ponder, anyhow...
So, some pondering, maybe... between the differences of LVDS and LVMDS, at the physics-level... More like rambling...
The frequency-content would be increased... Is that a concern? E.G. the pattern 01010101 sent across LVDS would appear a bit like a sine-wave at a single frequency (half the bit-rate). Whereas, I think, that same pattern over LVMDS would be twice the frequency (but half, or less, amplitude). (right?) (also harder to compare, because it's sent over *two* signals, rather than one).
So, then, there's the question as to whether the frequency-content is a concern... And... we're reaching the limit of my high-speed signal-analysis abilities (especially at this hour and this mind-set). My intuition says that it's less about the frequency-content and more about the slew-rate... that frequency-content analysis of things like the propagation of a signal down a transmission-line is more about a convenient way to look at what's happening... If one were to look at the instantaneous states of things, then consider an instantaneous change, that's more what it's about... (that's how it seems to me).
In which case, especially for this system, maybe we've got to consider not the slew-rate but the slew-rate of the slew-rate? The acceleration-slew?
Another thing to note is that LVDS is designed with proper termination and matched signal-pairs in mind... so, ideally, signal-bounce (reflection) shouldn't be any more a concern for LVMDS than for LVDS. But, we're not in an ideal world... so what effect would reflection have on this system...? On a single differential-pair, probably very little, right? Whatever bounces from one side would bounce in the opposite polarity on the other, and cancel-out at the receiver... right? Hmmm...
Then there's the fact that in this system *two* pairs must work in unison... Reflection on one pair would *not* be coupled into the second, and thus *not* cancelled out... Hmmm...
Then there's jitter and skew... Whereas two LVDS (or even two *parallel*) data-signals could arrive at their destinations, say, 4 picoseconds apart, and still be considered valid, with this system we might need increased precision in that regard... 4ps skew tolerance for LVDS, 2ps for LVMDS. Oy.
What's the effect...? Well, jitter's a bit more difficult, so let's look at skew... That's pretty easy, just imagine that one wire-pair is 2ps longer than the other. I think the rule-of-thumb is 6inches per nanosecond, so 1ps would be 6/1000inches = 0.006in? 6 mils? Kinda tight tolerances for a couple wire-pairs! (And, thus, the reason why we've moved from Parallel ATA and Parallel PCI, and so-forth, to Serial-ATA and PCI-Express, etc.)
That's a pretty big one, right there. Hmmm...
OTOH, maybe, instead of thinking of this as a way to send twice the information at current speeds, instead think of it as a way to send the same amount of information at half the speed?
Here's a ponderance... does LVMDS need to have two differential-pairs? Could the same be accomplished by a single pair, where one wire carries the A signal and the other carries B? Since *crossover* is the concern, rather than *value*, maybe coupling these two 90-degree out-of-phase signals *as though* they're differential (and 180deg out of phase) would still gain some of the benefits of a normal differential pair. External electrical-noise coupled into one wire would *also* be coupled into the other wire... So, a common-mode voltage is introduced... and may not matter. (or may...), because, again, we're concerned about *crossovers*.
(Then again, one of the important crossovers to be detected is that of a signal and its inverse, which is part of the reason two differential pairs made sense).
And coupling *between* the signals...? hmmm...
And signal-bounce...? oy...
Anyways, the concept of LVMDS was just a groovy idea I had a while back... based on anaQuad which is nothing to do with anything other than quadrature encoders with analog outputs. No idea whether there's any use for LVMDS in an era where even LVDS is likely somewhat outdated. (Surely your SerialATA cable isn't made with wire-length tolerances of 6mils, right?!)
04/01/2017 at 14:01 •
It's been some time... I don't recall what LVMDS stands for anymore...
LVDS = Low-Voltage Differential-Signalling...
And the M...? Multi?
Some theorizing was presented in previous logs (long ago), here's my attempt at trying to remind myself what I was thinking.
Anyways, here's anaQuad revisited:
There are two sine-waves, with a 90-degree phase-shift between 'em. (the two blue lines). These are, e.g. the outputs of the two Quadrature signals of an optical-encoder.
anaQuad, again, increases the resolution of the encoders by looking at crossovers between various multiples of the two input signals. By *inverting* the two input-signals (red), we can detect 8 positions (8 cross-overs) per full-cycle (the blue dots). (This resolution is twice as high as could be detected with digital quadrature signals).
By multiplying the input-signals by ~2, we can double the resolution to 16 positions (the green dots). The resolution can be further-increased by adding more [and more complicated] multiples of the two input-signals, but let's ignore all these for a second and just look at the red and blue waves.
The red and blue waveforms give 8 positions per full cycle. That's 4 positions per half-cycle, using two quadrature signals.
That's for increasing the resolution of a quadrature [optical] encoder with analog output.
Imagine, now, if these crossovers represented data-bits in a serial-data-stream...
First some background...
Here's an "eye diagram" for a regular ol' serial-data-stream (e.g. RS-232)
The waveforms forming the "eye" are numerous bits of a data-stream overlayed atop each other.
When the bit in the center is high, and the two surrounding it are low (#7, above), you'll see a full-sine-wave, starting low on the left, rising to the top of the "eye," and ending low on the right. (If the baud-rate is *really slow* compared to the rise/fall times, it'll look more like a square-wave... as one might expect of a digital signal. For a high-speed serial data-stream, the rise-times and fall-times are almost as long as the high-level and low-level bits, making the waveform more of a sine-wave.)
Similarly, when the bit in the center is low, and the two surrounding it are high (#5), you'll see the same half-sine-wave flipped upside-down.
When three bits are high (#4), you get the top line straight across. Three low, straight across the bottom (#2)... And several other combinations (two bits high, one bit low (#8), and so-forth).
So the eye-diagram shows many bit-patterns overlapping. One might say the center of the "eye" is sampled by the input of the receiving shift-register.
Now, for a *differential* serial data signal, we'd see a similar diagram; for every high-bit on one wire, the other wire sends a simultaneous low bit, and vice-versa. It's symmetrical across the horizontal line bisecting the eye (wee!).
Generally, the receiver might be e.g. a comparator connected to those two opposite-valued signals. When one signal is higher than the other, the output of the comparator is 1, when the other signal is higher, the output is 0.
The bit-value is, essentially, determined at the *time of crossover* between the two input-signals. (Though, technically, most LVDS receivers *sample* the bit-value in the middle of the "eye").
Now let's go back to anaQuad...
anaQuad works by looking at the *crossover* of two signals, much like differential-signals (LVDS). But, does-so between not only the input-signal (blue) and its inverse (red), but also a second input-signal and its inverse (the second blue and red pair, respectively)... (as well as multiples thereof (green), which I'm ignoring for now).
By transmitting two signals, in quadrature (the two blue waveforms), at the same frequency as, say, an LVDS signal, we can determine *four* different crossover values (the blue dots) in a single "eye" (half-sine-wave) (ignoring, again, the green 2x signal).
Thus, by paying attention to the *crossovers* (the blue dots), two parallel anaQuad-serial signals could transmit *twice* as much information in the same amount of time as two parallel LVDS signals at the same frequency and same electrical characteristics (which could only transmit one "eye," or one *bit*, per channel, in that time. Two bits, for two two-wire LVDS channels, 4 bits for one four-wire differential-anaQuad-serial channel).
AND, that's only if you look at the original signal and its inverse. Including a 2x multiple would allow for 4x the data-rate. The 2x signals needn't be sent on another wire, or pair thereof, it can in fact be handled by the receiving-end.
This is different than sending an analog value down a wire and reading back the voltage at the receiver. That method would be highly susceptible to external electrical noise, characteristics of the transmitter, the wire, and more.
To measure an analog *voltage*, like that, one typically uses an ADC, and detects whether the voltage is higher than some threshold and lower than another. In the case of LVDS, signals are specified at +/- 0.1V, so to measure 4 analog values in that range would require precision/accuracy of 0.05V. At these levels, any number of factors could cause misread values; from external noise, to resistance in long wires, a 0.05V ripple in the transmitter's supply-voltage, a 0.05V difference between the receiver's ground and the transmitter's.
Instead, since we're looking for *crossovers*, many of those sources of "noise" are removed. When the transmitter's supply-voltage varies dramatically, so may its output-voltages. But both the transmitted signals' voltages change together, so no crossover occurs, and the received signal is otherwise unimpeded. Likewise with variance in the ground-signal. And, since we're talking about transmitting each of the two quadrature signals as separate *differential* pairs, external noise coupled-into one of the wires in a pair is equally coupled into the other wire. Since the two are opposite polarities, the noise is canceled out; no unexpected crossovers are detected.
This has the benefit of differential-signals (similar to "balanced" microphone cables), being highly immune to external electrical interference, as well as significantly lower emissions.
So, the idea, then, is to transmit data-bits with quadrature-encoding. E.G. thinking about an optical-encoder, a "1" bit could be transmitted by rotating the encoder clockwise one "tick", a "0" bit could be transmitted by rotating the encoder counter-clockwise one "tick".
Using the method of detecting crossovers of multiples of the input-values in anaQuad, a single "tick" could be a fraction of a full cycle, requiring less signal-swing (and therefore less time) for each transmitted bit.
There are a couple ways I see this working. One is described above... clock-wise = 1, ccw=0. Another possibility is to keep the value unchanged, in which case ternary is a possibility.
Another consideration is the potential use of crossovers as clock-data. Using the CW=1, CCW=0 method, there will always be a change in the input signal for every bit. This change, then, could be used to transmit a clock-signal simultaneously down the same wire-pair.
A third consideration is the system's ability to retain a "crossover" value, without bouncing *around* it. This is also a consideration in anaQuad, when used with optical-encoders.
Depending on the implementation, the system could be prone to fast-toggling due to values right *near,* and thus oscillating around, a crossover. This can be easily taken care of by embedding a bit of hysteresis in the system. (and has been described in previous log-entries for encoder-handling).
Imagine, again, the CW=1,CCW=0 scenario... say in the previous bit we've travelled "left" by one blue dot (in the diagram), it travelled CCW, so the last bit was 0. Then for the next bit to be read as "1" it would have to travel *two* blue-dots to the right. (Otherwise, it might be sitting *at* the previous blue-dot, and be mistaken). Now we've reduced our bit-rate by ~1/3rd(?)-1/2, but, again, our bit-rate is already twice the equivalent LVDS signals (with, again, the inherent clocking, which usually requires a separate pair), and we can do 2x scaling of the input to double the bit-rate, again... plausibly more.
03/30/2017 at 08:48 •
The idea of anaQuad is to use an analog-quadrature source (such as the encoder disks used in an old "ball-mouse") to achieve significantly higher resolution than could be achieved by treating that quadrature-signal digitally. While being relatively immune to analog noise, calibration-error, etc.
It does-so, reliably, by *not* looking at analog *thresholds*, but instead looking at analog *crossovers*. This is well-explained in these pages.
There are several potential sources... Some quadrature-encoders output an analog signal rather than digital (again, e.g. looking at the output of the photo-transistors in a computer's ball-mouse). Some other sources include the hall-effect sensors used in BLDC motors (these are usually 120 degrees out of phase, rather than 90, as in quadrature, but anaQuad120 can handle that).
To *use* this system... Currently it's a software-only approach:
Two analog-to-digital converters are necessary for each encoder.
(Though, theoretically this could be implemented in hardware with a few comparators and op-amps, or maybe even voltage-dividers!)
anaQuad (the software) implements a non-blocking function-call to test the current state of your ADCs and determine the current state (and therefore update the "position")...
In all, it executes only a handful of instructions to detect a change in position, or lack thereof. So as long as it's called often-enough (faster than changes can occur), it puts little strain on your system. The same could be accomplished with a non-blocking digital quadrature-encoder routine in only a few fewer instruction-cycles. This could be called in a timer interrupt or from your main loop (if everything therein is non-blocking, and it loops fast enough).
Interestingly, anaQuad appears capable of "resynchronizing" if a few "steps" go undetected. So, e.g. if your main loop is slowed for some reason during one cycle, and a few anaQuad "steps" are missed, as long as the next few main-loops are faster, the system won't lose any steps! (Again, probably smarter to use a timer interrupt if you're not certain).
04/30/2016 at 09:29 •
@Logan linked an interesting and easy-to-build encoder-disk method in a comment over at @Norbert Heinz's #Self replicating CNC for 194 (or more) countries project (which has a bunch of ideas for various positioning systems)...
Check out this guy: https://botscene.net/2012/10/18/make-a-low-cost-absolute-encoder/
I'll let the image speak for itself:
So, the current implementation of anaQuad(4x) would give 16 positions with that disk, per revolution. But, that could easily be bumped to 32 via software, and there's no reason the disk has to have only two "poles".
04/09/2016 at 05:42 •
anaQuad120 was mentioned in a previous log entry, here: https://hackaday.io/project/9984/log/33419-anaquad120 wherein a couple hall-effect transistors from a BLDC-motor can be used as an encoder. In the previous log, I used those from a 5.25in floppy drive. But there's a better source, and these could be easily used as a dial for most purposes...
OK, so this is the spindle-motor from a DVD-drive. You can clearly see the hall-effecttransistors. Awesome. This guy wants to rest in something like 36 positions per revolution, but isn't nearly as "snappy" as the floppy-drive's spindle-motor. I haven't rigged it up yet,it just occurred to me, and it's a bit difficult to follow the traces under the motor. But, definitely doable, and its size/shape is highly-conducive to being used as a dial such as a volume-control or something.
So, again, anaQuad120 allows for treating a system like this much like a quadrature-encoder. Most quadrature-encoders meant as dials are only 16 "detents" per revolution and cost around $3 apiece, so here's a source for 36-position encoders :)
There exist hall-effect sensors that output a digital signal... so it's possible that's the case, here, in which case anaQuad isn't necessary... regular quadrature-decoding would probably work (despite they're most-likely 120deg out of phase, rather'n 90deg). But, judging by the fact these sensors are 4-pin rather'n 3-pin, they're probably analog-output... and anaQuad would work happily with that, and likely increase the resolution from 36 positions per revolution to (was it 12x?) a few hundred (if somehow that's useful...).
Another thought, especially on the higher-resolution, this shaft could be attached to a motor's... And then you've got a few hundred positions per revolution.
03/11/2016 at 15:21 •
NOTE: 3-27-17... ~ 1yr later. Did I write this? It's gonna take a week+ to recall this mindset!
So... first, I want to mention that quadrature signalling is used for communication... I don't fully understand the details, but I think it's used for FM radio transmissions in order to send the Stereo audio-data over a single transmission carrier-wave. So, in a sense, it achieves communication of *two* different data-streams over a single wire, at the same bit-clock...
This is a little bit different than that, I think, because its intent is to send *digital* data, and... two separate data-streams? Nah, too complex for me to figure out right now...
Back to the wired-realm, where there's a "clock" signal separate from the "data" signal(s)...
So, is this maybe better/faster than, say LVDS?
Well, one interesting discovery of this system is the fact that its "lock-step" design--based on a state-machine looking for comparisons--apparently allows it to determine the "position" regardless of its actually running in a lock-step fashion... What do I mean by this...? Using nothing but simple comparisons (e.g. from a comparator, or several?) between the four signals received at the receiving-side (+clock, -clock, +data, -data), a handful of comparators could emulate anaQuad2x... Looking at the outputs of those comparators a digital value is achieved representing the "phase" or "position" of the quadrature-signal.
Low-and-behold... LVDS inputs *are comparators*... so, maybe, one LVMDS signal combined with several LVDS receivers could actually give a somewhat digital output... in this case, I don't mean digital as in a single digital *bit*, but more like an entire *nibble* received within one clock-cycle. Take it a step further, the "lock-step" design requires a bit of processing (I think) to iterate through those comparisons in order to find the new "position"... so...? We have generally accepted that long-distance communication at high-data-rates is usually quite a bit slower than the processors/FPGAs/Logic receiving them... The receiver has a state-machine running at 8x the transmitted signal... Bam.
So, is this a good idea...? What benefit is there, really...? If LVDS is slowed to some maximum rate due to its ability to swing levels to reliably-readable values fast enough... then wouldn't this system (LVMDS) run into that same problem...? Wouldn't it limit the "nibble-rate" to that same limit...?
This is where I'm not yet certain... On the one hand, maybe the "nibble-rate" is limited to a full-swing signal... which, for anaQuad, would be the equivalent of a 90-degree positional-change... (Actually, this limitation is probably a good one for several reasons... first of all, it means that the signal "transition" will never exceed that of an LVDS signal "transition", so should work in the same electrical/physical conditions, and second, the "auto-positioning" of the system works to -135 to 180deg, but is a bit iffy around the 180 and -180 marks).
Anyways, plausibly, instead of using direct multi-level digital transmission, wherein each "position" represents a binary value, instead, maybe, use multi-level digital *change*... wherein each "position" represents a *change* in binary-value...
I haven't thought this whole thing through, completely...
As far as physical implementation in the experimental-realm:
I think reception of anaQuad2x could be handled by four LVDS receivers, or even just four (fast) comparators... I need to think this one through a bit, still... And, transmission...? We'll come back to that.
03/11/2016 at 14:52 •
Low Voltage Multi-Digital Signalling...?
Imagine LVDS... I'll go with FPD-Link, as I've used it before...
First: You have a clock... typically a "bit" clock...
Then you have a data line (or several)... It's not so much unlike, say, SPI... (Clock/Data on separate signals).
Electrically, it's a bit different than SPI, in that, in part, LVDS uses *differential* signal-pairs...
Now here's where it gets interesting for anaQuad...
One of the more-difficult aspects of anaQuad is the fact that you need to "invert" the inputs... If you have a signal that's *not* centered at *ground*, then inversion is a bit difficult, requiring knowledge of the magnitude and offset of the signal. Even more complicated is *scaling*... I'll come back to that.
In my experiments, it was found to be surprisingly reliable *despite* this, but if you *didn't* have to do this--if the inverted signal was *part* of the signal--then it would be even more reliable.
So, back to LVDS... We have *two* wires for each signal... They are *differential*, meaning that one is essentially the inverse of the other. This is for several reasons, including increased noise-immunity *and* decreased noise-emission.
When this data's fed into a receiver, the receiver *typically* looks for... duh duhn dunnnnn... *crossover* of the two signals.
So now... that's *exactly* what makes anaQuad so much more reliable than I even expected when designing it with that goal in mind... it's looking for *crossover* of (various multiples of) the signals...
So, I mentioned *scaling* of the input signals... In order to achieve anaQuad4x, we have to use not only the *non-inverted* and *inverted* signals (used also by anaQuad2x), but we *also* need the two signals *scaled*... (I use signal*2, but that isn't *exact*, it's just *easy math* for the processor). But: Scaling (properly) *absolutely* requires knowledge of the DC-offset (and magnitude?) of the original signal... which, again, I just threw in a random value that was close, and it seems to work surprisingly well despite having-done. But, it would be *great* if the DC-offset was not in the picture... and, low-and-behold that's exactly what using differential signaling does for yah... removes the DC-offset. BooYah!
So, now... Could it be used as a *communication* method... similar to LVDS...? e.g. anaQuad4x can detect 16 different positions in a single cycle... Comparing that to LVDS, that would mean for every singular bit transmitted in LVDS (alongside the clock signal), 8 different levels could be detected.
Is this helpful...? I'm not certain... I'll come back to that in the next project-log...