Jump to content

Recommended Posts

  • Premium Member
Posted

I’ve been interested in understanding how crystal sync works a bit more clearly lately, and I happened upon this crystal control unit for Bolex cameras for a mere 5 dollars.
 

I don’t own a Bolex so I really just got it so I could take a look inside. I figured I could share the photos here. The part I was interested in myself was the oscillator- which appears to be a 24khz oscillator - is this related to the 24fps this unit is intended to lock the motor to?

 

I’m not sure if this unit actually governs the motor or if it just provides the signal needed for the camera to do that work.

IMG_1204.jpeg

IMG_1205.jpeg

IMG_1206.jpeg

IMG_1207.jpeg

  • Premium Member
Posted

normally older crystal sync devices use binary and decade counters to divide the crystal frequency to a frequency which is the same than the amount of pulses per second coming from the motor's encoder. So if for example encoder generates 10 pulses per one frame of film shot, one would use dividers to divide the crystal frequency to 240Hz square wave for 24fps (24 * 10) and then make circuits which match the motor speed to that 240Hz signal.

using binary and decade counter dividers necessitates that the needed end frequency is directly dividable using this simple counter technology. so only certain encoder slot counts and certain crystal frequencies could be used to get the needed end result. For example if using 10slot encoder (10 pulses per frame) it is possible to divide the needed 250Hz for 25fps from 2.048MHz crystal and 240Hz for 24fps from 2.4576MHz crystal. But both 250 and 240Hz cannot be divided from the same crystal frequency. So if you want to have multiple speeds which cannot be divided from the same crystal by simple old technology you would need to make two separate crystal oscillators with separate dividers (for example one generating 12.5fps, 25fps, 50fps, etc. and another generating 12fps, 24fps, 48fps, etc.) .

with microcontrollers one can do the division with software which opens tons of better possibilities including creating both 24fps and 25fps references from same crystal etc.

you can see the old technology limiting factors when looking the crystal frequencies the old crystal motors can run at. if starting to calculate the frequency dependencies you will notice that they are all divided from the same source and that is why there is some oddball frequencies too which may not be used for anything useful, they were mainly added just to get more presets because more is better 🙂 

on newer systems where programmable dividers or microcontrollers used the selector may have every preset carefully though through and selected rather than taken what you got. big difference when you can actually decide what fps each preset is rather than selecting a set of random framerates easiest to divide from single source just because there is one fps you want and the rest "come with it free of charge)

  • Like 1
  • Premium Member
Posted

for example if you have 24kHz crystal you could use for example 74hc390 dual decade counter to divide the crystal frequency with 5, then divide with two, then divide with 5, then divide with 2 to get a total division of 100 and end result of 240Hz square wave with 50% duty cycle.

It is entirely possible they made it this way, you can look what the ic:s on the boards are and how they are connected. It would be very easy to divide the 240Hz with a single counter IC so there is pretty good chance there is 390 ic on board as it would be the easiest and most compact way to get the reference for 24fps if the encoder was 10slot

  • Like 1
  • Premium Member
Posted (edited)

btw still have tons of my old test boards which use simple counters to make reference frequencies. making new ones too but the old ones are possible to get cheaply and quickly so can be very useful if you for example need 240Hz crystal frequency for something or if that Bolex motor controller is actually 240Hz / 10slot system , in that case I have like 5 or more board options as I used to make lots of stuff for 10slot encoders so you could cheaply add more crystal speeds to that bolex controller by feeding the extra speeds from my board.

I used to do old school dividers before getting lazy and starting to do everything with software 😄  the old school stuff is not compact but they are easy to understand and have advantages if wanting to use simple rotary switches for speed selection. and are cooler looking too 😄  50990520902_a2892dc57c_b.jpg

Edited by Aapo Lettinen
  • Upvote 1
  • Premium Member
Posted (edited)

ever wondered why watch/clock crystals are always 32.768kHz?

That is because that frequency can be divided with one binary counter IC to exactly 1Hz frequency when the 32768 is divided half 15 times in a row. that 1Hz signal the advances the clock once each second.

same logic applies to other crystal oscillators using simple dividers. you know what end frequency you want and what dividing tools you have, then calculate what the needed crystal frequency is and check if that exact frequency is available from the suppliers

Edited by Aapo Lettinen
  • Premium Member
Posted

Thanks for all the great info Aapo! I peeled up the top circuit to get a look underneath - wasn’t able to find much when searching these part numbers, but I bet at least some of these are the binary counters you mentioned.

IMG_1208.jpeg

Posted (edited)

The date code on these chips indicates that they are probably from 1973/74. Manufacturer is National Semiconductor — the reason that you didn't find datasheets easily is that these were "military grade". NS names the 74xx series chip as 84xx if they e.g. allowed higher temperature grades.

So, basically they are 7490 and 7493. Both are monolithic counters. They contain four master-slave flip-flops and additional gating to provide a divide-by-two counter (total counts up tp 10) and a three-stage binary counter (counts up to 16). 

As far as the PCB traces suggest, the 7490 were configured as counting to 10, so resulting in dividing the 24 kHz down to 240 Hz — as Aapo suggested. The motor probably didn't provide 10 pulses per rotation though but a power of 2 (so 2, 4, 8 or 16) — hance the xx93.

What Aapo didn't mention though is that just having two frequencies is not controlling the motor speed yet. comparing the pulse count and turning it into a (non-oscillating) control voltage for the motor is the other half of the challenge. They have achieved this without any OpAmp!

I am rather amused by that ancient type of crystal coming in a glass tube — especially since it seems to be bedded on some foam and mounted with a... rubberband? 🙂

14 hours ago, Aapo Lettinen said:

it is possible to divide the needed 250Hz for 25fps from 2.048MHz crystal and 240Hz for 24fps from 2.4576MHz crystal. But both 250 and 240Hz cannot be divided from the same crystal frequency.

This isn't quite right. You cannot only divide by powers of 2 (like 8192 or 1024) with discrete counters. With e.g. a 4017 you can also divide by 3, 4, 5, 6, 7, 8, 9 or 10 — just the duty cycle changes unless you fix it with further flip-flops. So, a 6 MHz crystal (common for USB interfaces) can provide 24 and 25 fps references, a 18 MHz crystal (typical SD-TV pixel clock) can provide 18, 24 or 25 fps references with such "old school dividers". 

I am glad that you finally switched to software, Aapo — are you using the 328p timer configs I shared with you back in the day? 🙂

Edited by Friedemann Wachsmuth
  • Like 1
Posted

For anybody interested, below is my C code (free) that configures the "Timer 1" on a AtMega328p (aka Arduino) running on at 16 MHz crystal to rather precise 9, 16 2/3, 18, 24 or 25 Hz pulse machines. The results (e.g. 24.000024 Hz) are higher precision than a normal crystal itself — if required (and you are using a temperature compensated crystal or whatever) , the small diff from actual 24 Hz can rather easily be corrected in software.

bool setupTimer1forFps(byte sollFpsState) {
  // start with a new sync point, no need to catch up differences from before.
  timerFrames = 0;
  projectorFrames = 0;
  timerDivider = 0;

  if (sollFpsState >= 1 && sollFpsState <= 5) {
    Serial.print(F("New Timer FPS State: "));
    Serial.println(sollFpsState);
    
    noInterrupts();
    // Clear registers
    TCCR1A = 0;
    TCCR1B = 0;
    TCNT1 = 0;
    // CTC
    TCCR1B |= (1 << WGM12);

    switch (sollFpsState) {
      case FPS_9:
        OCR1A = 10100;    // 198.000198000198 Hz (16000000/((10100+1)*8)),
        //              divided by 22 is 9,000009.. Hz
        //
        TCCR1B |= (1 << CS11);  // Prescaler 8
        timerFactor = 22;
        
        break;
      case FPS_16_2_3:
        OCR1A = 14999;    // 16 2/3 Hz (16000000/((14999+1)*64))
        TCCR1B |= (1 << CS11) | (1 << CS10); // Prescaler 64
        timerFactor = 1;

        break;
      case FPS_18:
        OCR1A = 10100;    // 198.000198000198 Hz (16000000/((10100+1)*8)),
        //              divided by 11 is 18.000018.. Hz
        //              or 18 2/111,111
        //              or 2,000,000/111,111
        //
        TCCR1B |= (1 << CS11);  // Prescaler 8
        timerFactor = 11;

        break;
      case FPS_24:
        OCR1A = 60605;    // 264.000264000264 Hz (16000000/((60605+1)*1)),
        //               divided by 11 is 24.000024.. Hz
        //               or 24 8/333,333
        //               or 8,000,000 / 333,333
        //
        TCCR1B |= (1 << CS10);  // Prescaler 1
        timerFactor = 11;

        break;
      case FPS_25:
        OCR1A = 624;      // 25 Hz (16000000/((624+1)*1024))
        TCCR1B |= (1 << CS12) | (1 << CS10); // Prescaler 1024
        timerFactor = 1;

        break;
      default:
        break;
    }
    // Output Compare Match A Interrupt Enable
    TIMSK1 |= (1 << OCIE1A);
    interrupts();
  } else {
    // invalid fps requested
    Serial.println(F("Invalid FPS request"));
    return false;
  }
}

 

  • Like 2
  • Premium Member
Posted
6 hours ago, Friedemann Wachsmuth said:

I am glad that you finally switched to software, Aapo — are you using the 328p timer configs I shared with you back in the day? 🙂

I have used mcu dividers for many years and almost all the finished stuff uses them, I'm just not using the 328 as have found more practical mcu's for my projects. Even my first Konvas 15epss motor partially used software dividers, it was just a hybrid system which generated some frequencies with "old-school" binary dividers too because it was fun to design and made the dual rotary switch selector system a bit more effiently working.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...