Old timey encoders - car radio

I dissected an automobile cassette/am-fm radio for the encoder and got a surprise. The encoder, for the tuner, is a little odd - it outputs a three phase (and I'm not talking about A,B,Z) signal instead of the expected two-phase quadrature. I wrote a short sketch for it
to increment/decrement a counter and it works.

Question: Why a 3-phase output? Was this state of the art circa 1980? Is there some design reason this would be preferred over a conventional 2-phase type?

No idea, maybe finer control.

Hi,
How are the 3 outputs arranged?

Can you post a timing diagram or the 3 outputs?
Are the outputs just internal switches?

Tom... :slight_smile:

TomGeorge:
Hi,
How are the 3 outputs arranged?

Can you post a timing diagram or the 3 outputs?
Tom... :slight_smile:

delco encoder 3 phase.png

TomGeorge:
Are the outputs just internal switches?

Looks that way.

Rummaging through old posts and just realized I'd neglected to post the pic of the encoder.

delco encoder 3 phase.png

Was the stereo similar to this one? GM has used that tune switch (knob) for years. Late 70s until the 2000s. I do like the rotary tuning control like these. Originally i believe they designed them this way for ease of operation and similar operation to the old manual analog tuners. When you turn the knob. Each click makes a connection momentarily. Basically each turn (click) is a quick button press… It was either that or it sat on each connection. I actually would like to interpret into the arduino to become (up/down) (buttons) on code… It may come in handy. Ive got a pile of busted 80s gm stereos plus someday i may make a project out of a broken one and make it have a smaller arduino program fm tuner and would like control with that same controller.

I do not believe i have found any other stereo that used a 3 pin like that. Im not sure about older Chrysler units. . some of those have the “click knob” tuner as well but i haven’t had one opened yet.

Possibly it was a way around a patent.

Possibly it was Viennese; 1-2-3, 1-2-3, ....

Possibly 3 channels per turn beats 2?

cserucsak:
Was the stereo similar to this one?

There are cosmetic differences but the layout of knobs, display, cassette are almost identical.

cserucsak:
I actually would like to interpret into the arduino to become (up/down) (buttons) on code.. It may come in handy. Ive got a pile of busted 80s gm stereos plus someday i may make a project out of a broken one and make it have a smaller arduino program fm tuner and would like control with that same controller.

My test sketch:

// Three phase rotary encoder - delco radio

// V2 attempts to refine the case logic for code reduction

// Program determines direction of rotation and inc/decrements a counter.

const byte phaseAIn = 4;
const byte phaseBIn = 5;
const byte phaseCIn = 6;
int counter;

void setup() {
  Serial.begin(115200);
  pinMode(phaseAIn, INPUT_PULLUP);
  pinMode(phaseBIn, INPUT_PULLUP);
  pinMode(phaseCIn, INPUT_PULLUP);
}

void loop() {

  static bool phaseALatch, phaseBLatch, phaseCLatch;
  static bool encoderTurned, CW;

  /*  If the input is low the switch position is made and the other two switches will be off
    and pulled high.  Setting the latch stores the input state against the time the knob is 
    turned to a new detent.  Initially, one of the other two phase latches will be made 
    ( except at startup ) and will determine the state of CW.  Either out of phase latch
    true will set signal 'encoderTurned' true to notify the calling code that a rotation
    has been registered and to take whatever action is required based on the state of CW.  
    Both out of phase latches are then reset so that on the next pass through this code 
    encoderTurned will be cleared to false.
  */

  // ----------------  PHASE A  ---------------------
  if (!digitalRead(phaseAIn)) {
    phaseALatch = true;
    if (phaseBLatch) {
      CW = false;
    }
    else if (phaseCLatch) {
      CW = true;
    }
    encoderTurned = phaseBLatch | phaseCLatch;
    phaseBLatch = false;
    phaseCLatch = false;
  }

  // ---------------  PHASE B  -------------------
  if (!digitalRead(phaseBIn)) {
    phaseBLatch = true;
    if (phaseCLatch) {
      CW = false;
    }
    else if (phaseALatch) {
      CW = true;
    }
    encoderTurned = phaseALatch | phaseCLatch;
    phaseALatch = false;
    phaseCLatch = false;
  }

  //---------------  PHASE C  -------------------
  if (!digitalRead(phaseCIn)) {
    phaseCLatch = true;
    if (phaseALatch) {
      CW = false;
    }
    else if (phaseBLatch) {
      CW = true;
    }
    encoderTurned = phaseALatch | phaseBLatch;
    phaseALatch = false;
    phaseBLatch = false;
  }

  if (encoderTurned) { // Take action upon encoder motion
    if (CW) counter++;
    else counter--;
    encoderTurned = false;
  }

  Serial.println(counter);
}

GoForSmoke:
Possibly it was a way around a patent.

I hadn't considered that - I just assumed a technical reason. Seems reasonable.

Cool. Between this sketch and another sketch i found about having multiple momentary buttons on 1 analog input able to control different functions. My idea was to utilize a tea5767 fm tuner and possibly have it programmed with a attiny85 . with the rotary hooked through the 3 contacts as a voltage divider with resistance inline through the 3 contacts. And a tm1637 4 digit display driver to display the tuned stations. A small circuit like that would open an entire space within the stereo for other modifications. I believe 2 whole circuit boards could be removed entirely. And repurpose the buttons on the front for other tasks. I'm sure the scan and seek and presets could also be programmed within that analog controller. I may start with a simpler sketch to run the tuner chip and see how i like its operation. . its kinda something to see how small circuits have become. Theoretically being able to remove those 2 large circuits from a delco and replacing it with a few chips running a program. Although losing the AM tuner the parts would take up probably 5-10% of the space the original boards take up