Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
 Welcome to our latest new user IcePic ! (Registered 2024-12-03) You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > Accurately Measuring Drive RPM
2020-08-03 16:07
chatGPZ

Registered: Dec 2001
Posts: 11379
Accurately Measuring Drive RPM

To bring the discussion from 1541 Speed Test into the forum....

first lets recapitulate:

The general idea is: have a "marker" on a track, then measure the time for one revolution using timers. Generally there are different ways to achieve this:

- wait for the marker and toggle a IEC line. the C64 measures the time using CIA timer. this is what eg the well known "Kwik Load" copy does, the problem is that it is PAL/NTSC specific, and it can never be 100% exact due to the timing drift between drive and C64.

- wait for the marker and measure the time using VIA timers on the drive. the problem with this is that VIA timers are only 16bit and can not be cascaded, so you either have to measure smaller portions at a time, or rely on the wraparound and the value being in certain bounds at the time you read it.

now, to make either way slightly more accurate, a special kind of reference track can be used. typically this track will contain nothing except one marker - which makes the code a bit simpler and straightforward. this is what 1541 Speed Test does. the DOS also does something similar when formatting, to calculate the gaps. This obviosly has the problem that we are overwriting said track.

Now - the question isn't how to do all this, that's a solved problem. The question is, given a specific implementation, how *accurate* is it actually, and why?

The basic math to calculate the RPM is this:

expected ideal:
300 rounds per minute
= 5 rounds per second
= 200 milliseconds per round
at 1MHz (0,001 milliseconds per clock)
= 200000 cycles per round

to calculate RPM from cycles per round:
RPM = (200000 * 300) / cycles

two little test programs are here: https://sourceforge.net/p/vice-emu/code/HEAD/tree/testprogs/dri.. ... the first reads timer values between each sector header and then the total time for a revolution is accumulated from the delta times. the second leaves the timer running for one revolution and then indirectly gets the time for a revolution from that. to my own surprise, both appear to be accurate down to 3 cycles (in theory the second one should be more accurate, at least thats what i thought. i also expected some more jitter than just 3 cycles)

1541 Speed Test writes a track that contains one long sync, and then 5 regular bytes which serve as the marker. it then reads 6 bytes and measures the time that takes, which equals one revolution. somehow this produces a stable value without any jitter, which was a bit surprising to me too (i expected at least one cycle jitter, due to the sync waiting loops) (i am waiting for the source release and will put a derived test into the vice repo too)

So, again, the question is... how accurate are those and why? (a stable value alone does not tell its accurate). Some details are not quite clear to me, eg if we are writing a reference track, how much will that affect the accuracy of the following measurement? how will the result change when the reference track was written at a different speed than when doing the measuring? Will using a certain speedzone make it more or less accurate?

Bonus question: can we use https://en.wikipedia.org/wiki/Chinese_remainder_theorem with two VIA timers to make this more accurate? or is it a pointless exercise?
 
... 263 posts hidden. Click here to view all posts....
 
2020-08-11 08:21
Oswald

Registered: Apr 2002
Posts: 5086
Ive seen on youtube a device that measures rpm by sound
2020-08-11 08:54
Krill

Registered: Apr 2002
Posts: 2971
Quoting ChristopherJam
Dividing the frequency by 16 doesn't change the percentage error. If it's 20-30ppm before you divide by 16, it's 20-30ppm after - in either case that's going to be bigger than the 10ppm error you get from 2 cycles jitter on a measurement of a ~200,000 cycle time period.
Indeed, but the errors add. So even getting rid of the smaller part is the pointless demoscene thing to do, just because! :D

That said, a simple way to get down from 2 cycles jitter to 1 cycle is using a chain of 18-ish "BVS readtimer" instead of "BVC *". (Or 11-ish NOPs plus 7-ish BVS in the red zone, you get the idea.)

Will give either 0-cycle delay (spot on) or be 1 cycle late.
2020-08-11 08:59
tlr

Registered: Sep 2003
Posts: 1787
Quoting Zibri
IMHO:

Whatever could be the error of a quartz is totally irrelevant to the RPM calculations.
Even the worst quarts loose or gain a few seconds per year. Not only we are talking about measuring 200milliseconds but the quarts real frequency is divided by 16 (iirc).

and
Quoting Zibri
Any accuracy below the 2 digits is not enough to assess the status of the belt or mechanics and disk.

Any accuracy over the 2 digits does not add any useful information and will just induce more latency.

I think the confusion may be a language issue?

In the field of measuring stuff (metrology), "accuracy" has a specific meaning. It means how close to the _absolute value_ you can measure. The term "precision" refers to how _repeatable_ a measure is.
See: Accuracy and precision (wikipedia)

For assessing the belt and the drive electronics, the repeatability (and thus the precision) is essential. The precision is indeed going to be very high using the crystal oscillator as reference as the frequency deviation on the short time scale is very low.

For setting the absolute speed the accuracy is essential. To measure an rpm value with .01 accuracy, then a typical crystal with, say +/- 100ppm, isn't sufficient.

For a drive rotating at exactly 300 rpm, given the same +/- 100 ppm assumption:
0.2 s * ( 1 MHz + 100ppm ) = 199980 cycles => 60/0.199980 = 300.03 rpm
0.2 s * ( 1 MHz - 100ppm ) = 200020 cycles => 60/0.200020 = 299.97 rpm

...thus to achieve the desired accuracy a better reference oscillator is required.

(with reservations for eventual miscalculations)
2020-08-11 11:40
chatGPZ

Registered: Dec 2001
Posts: 11379
And don't forget the temperature drift, of which Unseen provided a nice diagram

And yes, language barrier is/was kindof obvious :)
2020-08-11 11:58
tlr

Registered: Sep 2003
Posts: 1787
Quoting Groepaz
And don't forget the temperature drift, of which Unseen provided a nice diagram

Good point. It affects the accuracy as well. It probably won't affect the ability to assess the belt though as the curve doesn't seem to move very much per typical rotation, at least not after the first minute or so.

BTW I notice I've swapped the +100ppm and -100ppm in my calculation above, but fortunately it only results in the results swapped. My bad!
2020-08-11 12:26
ChristopherJam

Registered: Aug 2004
Posts: 1409
Quoting Krill
So even getting rid of the smaller part is the pointless demoscene thing to do, just because! :D

True enough. I mostly wanted to point out that the variation in crystal speed is an even bigger factor if "accuracy" is the issue.

As TLR has already come at from the opposite direction, Zibri's target error of <0.01RPM amounts to 30ppm, so stats on actual crystal variation will tell us whether his dream is even possible in practice.

Quote:
That said, a simple way to get down from 2 cycles jitter to 1 cycle is using a chain of 18-ish "BVS readtimer" instead of "BVC *". (Or 11-ish NOPs plus 7-ish BVS in the red zone, you get the idea.)

Will give either 0-cycle delay (spot on) or be 1 cycle late.

True! And damn, I'd been meaning to post that ;-)
2020-08-11 12:34
ChristopherJam

Registered: Aug 2004
Posts: 1409
Quoting Zibri
Any accuracy below the 2 digits is not enough to assess the status of the belt or mechanics and disk.


I'm curious about this claim. I've been assuming that loaders need to be tolerant of anything from 295 to 305 RPM, in which case even 1 digit is somewhat overkill.

Have I been wrong all this time, in which case surely it would be safe to relax the GCR restrictions to allow runs of three zeros instead of just two? :)
2020-08-11 14:02
tlr

Registered: Sep 2003
Posts: 1787
Quoting ChristopherJam
As TLR has already come at from the opposite direction, Zibri's target error of <0.01RPM amounts to 30ppm, so stats on actual crystal variation will tell us whether his dream is even possible in practice.

That would be +/- 15ppm in crystal-speak, but yeah.

And measuring that requires non-trivial equipment. Where should we send all our drives... ;)
2020-08-11 14:09
tlr

Registered: Sep 2003
Posts: 1787
Quoting ChristopherJam
Quoting Zibri
Any accuracy below the 2 digits is not enough to assess the status of the belt or mechanics and disk.


I'm curious about this claim. I've been assuming that loaders need to be tolerant of anything from 295 to 305 RPM, in which case even 1 digit is somewhat overkill.

I read that claim as, by watching how much the lower digits flicker around something can be said about belt slippage and things like that (this would be "precision"). Loader speed tolerance would normally be accounting for the "accuracy" of the rotational speed.

As for the presentation, I still think some kind of plot would be useful for quick adjustment. Think: Recorder-Justage [german] or HeadAlign 1.1.
2020-08-11 14:22
chatGPZ

Registered: Dec 2001
Posts: 11379
histogram would tell quite nicely how bad the "wobble" is... less than trivial to implement unfortunately :)
Previous - 1 | ... | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | ... | 28 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
Fungus/Nostalgia
HBH.ZTH/Abnormal
Guests online: 90
Top Demos
1 Next Level  (9.7)
2 What Is The Matrix 2  (9.7)
3 13:37  (9.7)
4 Coma Light 13  (9.7)
5 Edge of Disgrace  (9.7)
6 Mojo  (9.6)
7 The Demo Coder  (9.6)
8 Uncensored  (9.6)
9 Wonderland XIV  (9.6)
10 Comaland 100%  (9.6)
Top onefile Demos
1 Layers  (9.6)
2 Party Elk 2  (9.6)
3 Cubic Dream  (9.6)
4 Copper Booze  (9.6)
5 Libertongo  (9.5)
6 Rainbow Connection  (9.5)
7 Dawnfall V1.1  (9.5)
8 Onscreen 5k  (9.5)
9 Morph  (9.5)
10 It's More Fun to Com..  (9.5)
Top Groups
1 Performers  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Nostalgia  (9.3)
5 Triad  (9.3)
Top Coders
1 Axis  (9.8)
2 Graham  (9.8)
3 Lft  (9.8)
4 Crossbow  (9.8)
5 HCL  (9.8)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.073 sec.