come generere un segnale di clock a 711.1111 Hz?

Ciao, dovrei pilotare uno stepper di 200 step/giro. La precisione della velocità di rotazione è importante.
Il motore è dotato di un motoriduttore planetario 16:1. L'albero del riduttore dovrà avere un periodo di rotazione di 144 secondi. Considerando la riduzione planetaria, il motore dovrà effettuare una rotazione in 9 secondi esatti. Poichè il motore sarà pilotato a micropassi (1/32) il periodo del segnale di clock deve essere di 0.0140625 secondi, ovvero dovrà avere un frequenza di 711.1111Hz.
Avete idea come potrei ottenerla con Arduino utilizzando anche qualche hardware esterno (ad esempio un rtc)?
Grazie, Ezio

L' unica cosa che vedo io é con un ottimo oscillatore a quarzo termostatato e un circuito PLL che sincronizza i 711,1111Hz al clock del oscillatore.
In alternativa potresti usare come frequenza di riferimento i 50Hz della rete o i 77500 Hz della portante del segnale del DCF77. Quelli sono generati dal clock del orologo atomico.

Un Arduino non ha un oscillatore a quarzi e percui é troppo inpreciso.

Tu vuoi una precision di 0,14 ppm. I quarzi normali hanno una precisione tra 100 e 20 ppm. Un risonatore usato sul Arduino UNO ha una preciaione intorno al 1000 ppm.

Ciao Uwe

Con un NE555 --> 555 (NE555) Astable Circuit Calculator
Impostando:
C = 1 microfarad
R1 = 30 ohm
R2 = 1000 ohm
Hai un tempo ciclo di 0.001407 corrispondente a 710.83Hz.

Il problema potrebbe essere quello di trovare resistenze di precisione con quei valori.

PaoloP:
Con un NE555 --> 555 (NE555) Astable Circuit Calculator
Impostando:
C = 1 microfarad
R1 = 30 ohm
R2 = 1000 ohm
Hai un tempo ciclo di 0.001407 corrispondente a 710.83Hz.

Il problema potrebbe essere quello di trovare resistenze di precisione con quei valori.

Il problema non é la precissione delle resistenze ma la precisione richiesta dalla frequenza che dipendono dalle variazioi dei valori delle resistenze e condensatore e del circuito 555.

Ciao Uwe

Ciao a tutti,
Si tratta di una frequenza particolare, e cmq si dovrebbe sostituire il quarzo da 16Mhz.
Con quarzo da 14.7456 la condifurazione del timer1 dovrebbe essere:
Timer prescaler = 64
TCNT1H= 0xFE
TCNT1L= 0xBC
eventualmente se occorre
OCR1H= 0x01
OCR1L= 0x43

con queste impostazioni dovresti ottenere 711,111111 Hz, devi cmq considerare un errore in percentuale di -0.016 %

ciao

Senza sostituire quarzi, se ti accontenti di una frequenza di 710,98 Hz puoi usare il timer 1 del microcontrollore impostando la modalità Fast PWM con top fissato da OCRA e toggle sul pin OC1A, ottenendo appunto quella frequenza senza rimaneggiare nulla. Basta impostare il prescaler a 1 e OCR1A a 11251. Il calcolo è:

Fout = Fsys / Pre / OCRA + 1 / 2 => 16000000/1/11252/2 = 710,985.

Grazie a tutti per le risposte. Affascinanti le proposte di uwefed, meriterebbero di essere realizzate anche per puro scopo didattico.
La soluzione di leo72 probabilmente è la più pratica, trovo interessante comunque anche l'idea di sostituire il quarzo (ne ho qualcuno in casa).
Ho fatto alcuni calcoli e devo affermare che avevo chiesto effettivamente troppa precisione. La frequenza di 710.985Hz potrebbe andar bene, l'errore è piuttosto contenuto.
Non ho mai usato e non conosco la funzione timer1 di arduino, devo ancora cercare on-line. Chiedo se è possibile con timer1 impostare anche frequenze diverse nello stesso sketch. Mi spiego meglio, l'oscillatore mi serve per pilotare il motore di un telescopio a lunga focale. Per le osservazioni solari mi serve la frequenza di 711.11Hz, mentre per il moto siderale mi servirebbe una da 713.06Hz, per le osservazioni lunari sto facendo ancora qualche conticino... ad ogni modo, complessivamente dovrò gestire tre diverse frequenze, non molto distanti tra loro, a seconda del'oggetto osservato.
È fattibile?
Grazie, Ezio

Il timer1 non è una funziona ma una periferica integrata nel microcontrollore.
E' un contatore hardware con un registro che viene incrementato continuamente, l'incremento è legato alla frequenza del clock di sistema (sull'Arduino 16 MHz) ed al prescaler (il fattore di divisione del segnale di clock in ingresso) usato nonché alla dimensione in bit del registro del timer ed alla modalità operativa usata.
Il timer 1 è a 16 bit, poi esistono sull'Atmega328 altri 2 timer ad 8 bit, il timer 0 ed il timer 2: il timer 0 è "occupato" dalle funzioni temporali di Arduino, se lo tocchi ti saltano millis e delay. Il timer 2 è libero.

Non puoi usare un timer in 2 modalità diverse. Puoi però usare il timer 2.
Se vuoi approfondire, leggi qui:

leo72:
è legato alla frequenza del clock di sistema (sull'Arduino 160 MHz)

Lo voglio!! :grin:

Appena lo faccio te lo vendo $)

A parte gli scherzi, ora correggo: era un errore, ovviamente. stamani il cervello era più fritto del solito... =(