Philip Pemberton wrote:
On 10/06/10 23:13, Keith wrote:
My original microcontroller implementation was
3.2-4.2, 5.2-6.2, and
7.2-8.2.
You're using fixed-position analysis? That is, "if the pulse was between
X and Y us after the last pulse, it was a 01" and so on?
Phil,
I don't know what's it's technically called, but yes.
As I mentioned, it actually works pretty well. I open up the intervals
and make it pretty liberal on what it accepts. As far as I know, I
don't think I've opened them up enough that I incorrectly categorize a
pulse incorrectly. But I am starting to be close to that, and there's
likely a reason why everyone here (and most commercial FDCs) implement
some type of PLL.
I'm definitely up for increasing the robustness of my project.
The problem with that is you'll have issues with
Instantaneous Speed
Variation (and possibly Continuous Speed Variation). Basically:
* A floppy drive motor does not rotate at a constant speed.
* Some drives are faster than others (this is CSV)
* The friction between the disc and the head (and/or the disc liner)
can, will and *does* make the motor slow down. The variations in this
are called "ISV".
I've read about these before. When you say the drive motor doesn't
rotate at a constant speed, you mean that despite it having an average
of 300 rpm, that there is some speed up and slow down throughout a
single revolution? I've measured time between index pulses, and so far
they appear to be 200.x ms.
I've seen this called MSV, motor speed variation, too. (In the AN-505
PDF) AN-505 also says MSV is 1-2% and 1-2% for ISV.
This is why a PLL is required -- to keep track of the
ISV and eliminate
it (or get close to eliminating it) from the measurements.
My original plan was that these variations could be accounted for with
simply expanding my tolerances. And there's no doubt that my method
does handle _some_ of this. I can handle 5-10% differences pretty
easily. The worst cases though definitely reveal the lack of more
intelligent handling.
DFA (DiscFerret Analyser) gets a similar success rate.
I'm having issues
setting the coefficients for the "soft-PLL" -- make the PLL too slow and
it misses ISV, make it too fast and it'll track the data not the ISV.
Do you have your code up someplace? Verilog or VHDL?
Thanks for all the links, they should be valuable. I'm still working on
the basic concepts of a PLL. Once I get a better handle, I think
writing the code for a basic one should be within my reach.
Thanks
Keith