[RISOLTO]PWM uguali ma diversi

ciao a tutto il forum :slight_smile:

vi propongo questo problema, del quale non ne vengo a capo.

void setup() {

  analogWrite(3,60);
  analogWrite(5,60);
}

void loop() {                        
}

come vedete il codice è molto semplice, io mi aspetto sul pin 3 e sul pin 5 due segnali PWM UGUALI, o con una minima differenza, ma analizzando con un'oscilloscopio il periodo alto di queste due curve risultano una la META' dell'altra...

come mai ?

MD

Stai usando Timers e frequenze diverse quindi ... ::slight_smile:
... il PWM sul pin 3 è un PWM a 976.5625 Hz, quello sul pin 5 è invece un PWM a 488.28125 Hz

Guglielmo

ed ecco svelato l'arcano,

questa cosa può avere conseguenze sulla libreria servo?

ovvero due servo a rotazione continua, con stesso angolo viaggiano a velocità diverse (non hanno trimmer di zero) ?

devo trovare tabellina dove vengono riportate le frequenze dei vari pin PWM

... premesso che i servo NON lavorano in PWM, ma in PPM, nel PWM quello che conta è il duty-cycle.

La tabella la ricavi studiandoti il "core" e come vengono programmati i Timers, comunque ...

Arduino UNO Timers (ATmega328P)

Timer0
Usato da millis() e delay() e per il PWM sui pin 5 e 6
fast hardware pwm
(default 976.5625 Hz)
Pin 5 è anche usato per il “pulse counting”
Pin 8 è usato per il “input capture”

Timer1
Usato dalla libreria Servo e per il PWM sui pin 9 e 10. Libreria e PWM mutuamente esclusivi.
8-bit phase correct pwm mode
(default 488.28125 Hz)

Timer2
Usato per il PWM sui pin 3 e 11
8-bit phase correct pwm mode
(default 488.28125 Hz)

Arduino Mega2560 Timers (ATmega2560)

Timer0
Usato per il PWM sui pin 4 e 13
fast hardware pwm

Timer1
Usato per il PWM sui pin 11 e 12
8-bit phase correct pwm mode

Timer2
Usato per il PWM sui pin 9 e 10
8-bit phase correct pwm mode

Timer3
Usato per il PWM sui pin 2, 3 e 5
8-bit phase correct pwm mode

Timer4
Usato per il PWM sui pin 6, 7 e 8
8-bit phase correct pwm mode

Timer5
usato per il PWM sui pin 45 e 46
8-bit phase correct pwm mode
Pin 47 è usato per il “pulse counting”
Pin 48 è usato per il “input capture”

Guglielmo

MatteoDerrico:
ed ecco svelato l'arcano,

questa cosa può avere conseguenze sulla libreria servo?

ovvero due servo a rotazione continua, con stesso angolo viaggiano a velocità diverse (non hanno trimmer di zero) ?

devo trovare tabellina dove vengono riportate le frequenze dei vari pin PWM

La libreria servo.h non usa i pin PWM, ma genera il segnale autonomamente su fino a 12 pin del Arduino UNO.
Il segnale per pilotare i Servo hanno una frequenza di 50 Hz e un tempo di HIGH da 1ms a 2ms che corrisponde a un angolo da 0 a 180°. A secondo del modello di servo possono acettare tempistiche un po estese di quelle citate.

Ciao Uwe

scusate l'intrusione
c'è sempre da imparare,
mi riferisco alla tabella postata da Guglielmo
e una tua personale o si trova da qualche parte?

perché ogni volta che cerco qualcosa al riguardo del ATMEGA 328P la trovo scritta in inglese,
io con questa lingua faccio a botte,
in italiano mi andrebbe bene,
e possibile avere una dritta dove trovare queste informazioni in Italiano?

toni

milefori:
e possibile avere una dritta dove trovare queste informazioni in Italiano?

NO, semplicemente perché NON ci sono e vanno ricavate dai sorgenti di Arduino (e dal datasheet). Se vuoi poco poco lavorare in questo settore farei bene ad imparare al più presto un po' di inglese o ... se fuori! :confused:

Guglielmo

Trovi le informazioni in inglese perché molto piú persone nel mondo parlano linglese e molte di meno italiano.
Ciao Uwe