Ciao a tutti,
da poco sono un utilizzatore di un Arduino Due. Sto facendo alcuni test sulla generazione di segnali PWM; quello che vorrei ottenere è un segnale con frequenza 400 Hz e risoluzione sul duty cycle di meno di 1 microsecondo (12 bit).
Sono riuscito ad ottenere la frequenza desiderata modificando la define "#define PWM_FREQUENCY 400" all'interno del file "variant.h".
Riguardo alla risoluzione del segnale PWM ho letto che con la funzione analogWriteResolution() è possibile modificare la risoluzione ed ottenere grazie alla funzione analogWrite() un segnale pwm con risoluzione fino a 12bit .
Ho utilizzato questa funzionalità ma non sono riuscito ad ottenere la risoluzione desiderata (la risoluzione reale rimane ad 8 bit);
Oscilloscopio alla mano, ho potuto verificare che l'utilizzo di analogWriteResolution() non ha effetto sulla generazione di segnali PWM sui pin digitali [2 ..13].
Questo è il codice usato:
void setup()
{
Serial.begin(115200);
pinMode(6,OUTPUT);
analogWriteResolution(12);
}
void loop()
{
// Test con 12 bit di risoluzione
analogWrite(6,2464);
delay(1000);
}
Sbaglio qualcosa? O semplicemente sto interpretando male la guida?
Grazie del supporto
Matteo
analogWriteResolution() sets the resolution of the analogWrite() function. It defaults to 8 bits (values between 0-255) for backward compatibility with AVR based boards.
The Due has the following hardare capabilities:
12 pins which default to 8-bit PWM, like the AVR-based boards. These can be changed to 12-bit resolution.
2 pins with 12-bit DAC (Digital-to-Analog Converter)
By setting the write resolution to 12, you can use analogWrite() with values between 0 and 4095 to exploit the full DAC resolution or to set the PWM signal without rolling over.
Allora sia il DAC che i PWM possono essere usati con una risoluzione di 12 bit.
Ciao Uwe,
innanzi tutto grazie per la pronta risposta.
Ero anch'io a conoscenza della possibilità per il DUE di incrementare la risoluzione degli ADC dei PWM fino a 12 bit e in effetti è proprio quello che faccio.
Nel setup() invoco la "analogWriteResolution(12)" e nella" analogWrite() " inserisco valori da 0..4095.
A prima vista sembra funzionare tutto, se non che andando a verificare con l'oscilloscopio quello che osservo è una risoluzione reale inferiore, ossia identica a quella che ottengo settando 8 bit di risoluzione.
Qualche idea?
EUREKA.
Ho ottenuto il risultato desiderato, ma per farlo ho dovuto modificare un header file dell'ide di arduino.
Credo che la function analogWriteResolution() presenti un bug.
Grazie a tutti
Matteo
Se vuoi segnalare un bug puoi contattare gli sviluppatori
Bug Reporting
If you’ve found a bug in the Arduino software, check if it's already known by looking at Issues · arduino/Arduino · GitHub, and if it's not known, add it to the list.