Una delle cose che ho dovuto fare per capire il funzionamento del Compustar è stato ricavarne lo schema elettrico.
In questo articolo pubblico lo schema elettrico e un rendering 3D della scheda, sia per spiegare alla buona come funziona sia per aiutare chiunque dovesse ripararla. Questo articolo è il primo di una serie in due parti: la prossima parte (che pubblicherò nei prossimi mesi) sarà relativa alla scheda display.
Aggiornamento 5 Ottobre 2017: La seconda parte è qui https://www.aemfoto.it/wp/2017/10/05/lo-schema-del-compustar-parte-2-la-scheda-display/
Per evitare di fare un foglio gigante, ho suddiviso lo schema elettrico in più pagine, che verranno descritte ora una ad una.
Dal momento che non c’è una serigrafia sulla scheda, i “nomi” dei componenti (IC1, R1, eccetera…) sono inventati, e possono anche sembrare abbastanza casuali. Inoltre non ho messo nello schema elettrico tutti i condensatori da 100nF di filtro (gli altri condensatori dovrebbero invece esserci). Ho anche omesso una resistenza da 220 Ohm montata vicino al buzzer perché non sono riuscito a capire dove fosse collegata.
Generazione dei Clock
Questa parte del Compustar genera tutti i segnali di clock utilizzati, ad eccezione di quelli generati internamente dalla CPU.
Vengono utilizzati due circuiti similari.
Il primo usa un oscillatore a 7MHz realizzato con un quarzo, qualche componente passivo e una coppia di inverter. Un terzo inverter (IC11B) bufferizza l’uscita dell’oscillatore per fornirla ad un divisore, realizzato con un singolo 74HC4020 (IC3). Vengono generate tre diverse frequenze: 3.5MHz (usato dal chip timer 8254), 27.34kHz (7MHz / 256, usato come clock per il timer 0 della CPU) e 13.67kHz (7MHz / 512, usato per il PWM del microstepping).
Il secondo oscillatore è simile al primo, tranne che per il quarzo (che è da 4.9152Mhz) e per i valori di alcuni componenti. Le frequenze generate sono: 2.4576MHz (XTAL / 2, usato dal timer 8254 per la generazione dei suoni), 307.2kHz (XTAL / 16, usato dal convertitore analogico/digitale), 153.6kHz (XTAL / 32, usato come clock per il timer 1 della CPU) e 38.4kHz (XTAL / 128, usato dal timer 2 della CPU come generatore di baud rate per la porta seriale):
Connettori
Ci sono due connettori a 9 poli per i due joystick, collegati in modo simile, con due ingressi analogici per le posizioni X e Y, due ingressi digitali per i due pulsanti e un ingresso ausiliario che permette al Compustar di rilevare quando il joystick è stato collegato. L’unica differenza hardware tra i due joystick è per l’appunto l’ingresso ausiliario: nel joystick laterale (CN4) è realizzato usando un ingresso digitale (P1.7), mentre in quello centrale (CN5) la rilevazione viene fatta usando un canale analogico (AN5), probabilmente perché non c’erano più ingressi digitali disponibili.
CN6 è il connettore per la porta RS-232. Il pin out di questo connettore non è quello standard di una porta seriale dal momento che il Compustar è stato costruito prima che si diffondesse l’utilizzo di connettori a 9 poli per questo scopo (si utilizzavano ancora i connettori a 25 poli). Di conseguenza è necessario un cavo speciale per collegare la porta RS-232 del Compustar a quella di un PC (o, oggigiorno, ad un adattatore seriale/USB). IC31 e IC32 sono sono convertitori di livello piuttosto comuni negli anni 80/90 e sono usati per convertire i livelli RS-232 (+12V / -12V nominali) ai livelli TTL usati dal Compustar.
CN1 è il connettore per il cavo verso la parte di potenza del Compustar (la “Power Box”). Ci sono le linee di alimentazione (massa, +12V per la porta seriale e la misura della tensione di alimentazione, +5V per la scheda stessa e un -5V, probabilmente inutilizzato), i segnali per i motori e tre pin di output che non vengono usati (e che potrei utilizzare in futuro).
CN3 è il connettore interno (tramite un cavo flat a 40 pin) per la scheda display/tastiera che vedremo nella parte 2 di questa serie di articoli.
Infine, CN2 è un connettore a 26 poli interno, inutilizzato. Non so quale fosse lo scopo di questo connettore, ma penso che possa essere stato pensato per qualche espansione futura (che sfortunatamente non è mai stata realizzata) o semplicemente è un connettore per il collaudo (in fabbrica) della scheda.
CPU
IC22 è la CPU principale, un microcontroller Intel della serie 8052, senza memoria programma interna e con 256 byte (si, byte!) di RAM interna, tre timer, una porta seriale e qualche pin di I/O (8, in questa configurazione). Questa CPU, comunque, ha due bus separati e qui vengono utilizzati entrambi. Uno dei due è per la memoria programma (da 64 kByte, anche se il Compustar ne utilizza solo 32) mentre l’altro (sempre da 64 kByte) è per la memoria dati (in aggiunta ai 256 byte interni, che sono su di un terzo bus). I due bus sono multiplexati utilizzando solo 16 pin più qualche altro segnale (RD/WR/PSEN/ALE). IC23 separa le linee dati dalle linee indirizzo dal momento che anche loro sono multiplexate.
Se pensate che multiplexare i bus rallenta l’accesso alla memoria avete ragione. Ma questo non ha nessuna importanza dal momento che i 12MHz di clock vengono divisi internamente e le istruzioni impiegano da 12 a 48 cicli di clock ad essere eseguite. Senza fretta.
I rimanenti circuiti integrati in questa pagina sono usati per la decodifica degli indirizzi e per la generazione dei segnali di selezione delle periferiche (chip selects).
DEC Motor, RA Motor
I due motori (quello di Ascensione Retta e quello di Declinazione) sono pilotati in modo simile. Utilizzando una porta di output (realizzata con IC15 per il motore di declinazione e con IC14 per il motore di RA), il processore seleziona quale segnale viene mandato agli avvolgimenti dei motori (attraverso IC7/IC8 per la declinazione e IC5/IC6 per l’RA). Questo segnale può essere un ON, un OFF, il PWM generato dal timer 8254 (il timer 0 per il motore di RA o il timer 1 per il motore di declinazione) o una versione invertita dello stesso PWM. Questi segnali sono utilizzati per pilotare gli avvolgimenti dei motori sia in microstepping che in full stepping, ad eccezione del segnale del PWM che viene usato soltanto in modalità microstepping).
Memorie
Sui due bus che ho descritto nella parte della CPU ci sono tre EPROM programmate con il vero e proprio programma e con il database degli oggetti.
IC24 è la EPROM da 32 kByte del firmware, connesso al bus della memoria programma. Anche se la EPROM stessa è da 32 kByte, solo 24 kByte solo usati per il vero e proprio firmware. I rimanenti 8 kByte contengono una parte del database degli oggetti. C’è anche un jumper (J1) che permettere di installare una EPROM più capiente (da 64 kByte) ma, aggiornamento 5 Ott 2017, bisogna anche tagliare anche una pista.
IC25 e IC26 sono due EPROM differenti (IC25 è da 32 kByte mentre IC26 è solo da 16 kByte) che contengono i rimanenti 48 kByte del database oggetti.
Infine, IC27 è uno zoccolo per una RAM opzionale da 8 kByte che probabilmente non è stata ritenuta necessaria più avanti nello sviluppo e quindi prevista ma non installata. Ho utilizzato questo zoccolo per poter installare il chip DS1643 di orologio/memoria non volatile.
Vari (Miscellaneous)
Ci sono un po’ di cose diverse su questa pagina.
R10/R11 e C11 sono il partitore di tensione usato dall’ADC per misurare la tensione di alimentazione e che serve (con il firmware originale) a visualizzare l’indicatore di “LOW BATT”. Nel mio firmware ho utilizzato questo partitore per visualizzare anche la tensione di alimentazione in Volt (nel menù di DISP/SCOPE/REV)
IC1 è un invertitore di tensione usato per generare un -5V dall’alimentazione a +5V per il pilotaggio della porta seriale.
IC16C è il circuito che “resetta” il Compustar all’accensione
IC17E è il circuito che pilota il buzzer.
Periferiche (Peripherals)
IC21 è un ADC0809, il convertitore analogico/digitale usato per leggere gli ingressi analogici dei joystick, la tensione di batteria e il fotodiodo per la funzione “DAYLIGHT”. Il firmware usa uno schema round-robin per leggere gli 8 canali: ogni giro legge il risultato del canale precedente, cambia canale ed inizia la conversione sul canale nuovo, grazie anche al supporto di alcune porte di “glue logic”.
IC20 è il chip dei timer, un Intel 8254. Il chip ha 3 timer. Il Timer 2 viene usato per generare i suoni sul buzzer. Viene programmato con il valore del tono desiderato ed attivato. Viene successivamente fermato per interrompere la nota.
Il Timer 0 (ascensione retta) e il timer 1 (declinazione) sono utilizzati per i motori in due modi differenti. Quando il motore si sta muovendo utilizzando passi interi (durante i puntamenti o quando si muove il telescopio manualmente con la velocità di SLEW), il timer genera le temporizzazioni per i passi che poi la CPU usa per cambiare le fasi al motore (tramite IC4 e gli interrupt INT0 e INT1) . Quando invece il motore sta andando in microstepping, le temporizzazioni sono generate internamente dalla CPU utilizzando il timer 0 (ad una frequenza fissa) mentre questi timer sono usati per generare il PWM utilizzato per il microstepping: il clock a 13.67 kHz dal generatore di clock avvia il PWM (tramite il pin di GATE) mentre la durata dell’impulso (e quindi la posizione dell’avvolgimento) viene controllata programmando il registro di duty-cycle del timer stesso.
IC19 è una porta di uscita ausiliaria utilizzata per disabilitare il segnale di GATE quando non serve (P0.0 e P0.1), per pilotare un segnale di controllo della porta seriale (P0.4) e per pilotare alcuni segnali (al momento inutilizzati) collegati al connettore verso la “Power Box”.
Lo schema completo in PDF con la disposizione componenti
Lo schema completo in PDF può essere scaricato qui, mentre qui c’è il PDF con la disposizione dei componenti.
Ho anche realizzato un rendering 3D della scheda che è disponibile qui in formato PDF 3D (attenzione che è un file grossino, 13 MByte!)
Nota: questi PDF (in particolare quello 3D) potrebbero venire visualizzati in modo non corretto con il visualizzatore interno sia di Firefox che di Chrome.
Aggiornamento 5 Ottobre 2017. Corretto un piccolo errore sul pin 1 di IC24: è collegato direttamente a VCC tramite una minuscola pista che mi era sfuggita.