Bonjour,
Je souhaite utiliser un ATtiny85 pour piloter des ventilateurs en PWM et par rapport à cela j' ai fait pleins de tests et lu tellement de choses sur internet que je suis complétement perdu pour comprendre comment le faire...
En finalité je me suis décidé à risquer d'écrire mon problème pour que je puisse avancer et ne plus me sentir comme le dernier des boulets...
l'inventaire à ma disposition!
-
Premièrement ma contrainte: j'ai des ventilateurs (Noctua en 5V PWM) et dans la datasheet de ceux-ci il est conseiller d'avoir un PWM à 25kHz pour les piloter (voir p.6 de Noctua White Paper ) et plus spécifiquement il est dit: "Target frequency: 25kHz, acceptable range 21kHz to 28kHz"
-
Ensuite j'ai un stock d'ATtiny85 que je souhaite utiliser. et en regardant le "Pinout" de ce composant j'ai constater qu'il à 4 pattes qui sont "taguées" comme étant capable de faire du PWM... super! c'est tip-top pour ce que je souhaite faire (me dis-je avant de désespérer faces aux obstacles...)
-
Et pour finir j'ai un arduino UNO que j'ai réussi a configurer pour programmer l'ATtiny85 (le Blink fonctionne très bien) et 1 Arduino nano qui doit me servir à piloter les ATtiny85.
-
Je me suis fait un petit programme pour faire mes tests de l'ATtiny85. voila à quoi il ressemble:
unsigned int uiTmpPause;
byte pinPWM[] = {0, 1, 3, 4}; //0=PB0=Pin5 //1=PB1=Pin6 //3=PB3=Pin2 //4=PB4=Pin3
byte pinLed = 2; //2=PB2=Pin7
void setup() {
//*********** test 1 ***********
//uiTmpPause = 130;
//*** Clignotement de la led = ~1s
//*** PWM du PB0 à 16ms = 62,5Hz
//*** PWM du PB1 à 16ms = 62,5Hz
//*** PWM du PB3 à 2s = 0,5Hz - pas de pwm - 50/50
//*** PWM du PB4 à 1ms = 1KHz
//*********** test 1 - FIN ***********
//*********** test 2 ***********
TCCR0A = TCCR0A & 0b11111000 | 0x01; // for PB0
TCCR0B = TCCR0B & 0b11111000 | 0x01; // for PB1
uiTmpPause = 10000;
//*** Clignotement de la led = ~1s
//*** PWM du PB0 à 500µs = 2kHz
//*** PWM du PB1 à 500µs = 2kHz
//*** PWM du PB3 à 2s = 0,5Hz - pas de pwm - 50/50
//*** PWM du PB4 à 1ms = 1KHz
//*********** test 2 - FIN ***********
pinMode(pinLed, OUTPUT); //Pin Led
//pinPWM[]
for (int i = 0; i < 4; i = i + 1) {
pinMode(pinPWM[i], OUTPUT); //pinPWM[]
}
}
void loop() {
static byte bFlag;
if (bFlag == 1) {
bFlag=0; funBoucle (1, 50);}
else {bFlag=1; funBoucle (0, 200);}
}
void funBoucle (byte bLed, byte bPwm) {
if (bLed ==1) digitalWrite(pinLed, HIGH); // Allume/eteind la LED
else digitalWrite(pinLed, LOW);
for (int i = 0; i < 4; i = i + 1) {
analogWrite(pinPWM[i],bPwm); // PWM bPwm/256
}
delay(uiTmpPause); // Tempo
}
Au niveau du branchement de l'ATtiny j'ai juste un combo resistance/ led sur sa patte PB2=Pin7
et j'ai placé un oscillo sur les pattes PB0=Pin5, PB1=Pin6, PB3=Pin2 et PB4=Pin3
Mes questions:
-
Est-il vrais que l'ATtiny85 à bien 4 port PWM comme l'indique la pinout? faut il paramétrer quelque chose pour les utiliser? ont elles des limites en fréquences? ou en période?
-
Comment faire pour que les pattes utilisable au point 1) aient une fréquence de 25kHz au mieux ou par défaut entre 21 et 28kHz?
A noter que j'ai vu plein d'exemple, que j'ai essayé de mettre en place, mais sans sucés. Je vous ai mis 2 tests avec les mesures à l'oscilloscope. Les résultats sont dans le code ci-dessus.
Auriez vous donc un lien ou une explication pour arriver enfin à la fréquence requise? pliiiiiizzzzzee -
Est il possible de communiquer en finalité avec l'Arduino nano avec les pattes non utilisé de l'ATtiny (PB5=Pin1, PB2=Pin7) et cela dans le but faire varier le PWM des pattes utilisables.
Si c'est possible auriez vous un exemple? quel bibliothèque utiliser?
Merci d'avance votre aide, même minime, et si au final on trouve une solution je promet de mettre tous le code ici pour qu'il puisse aider par la suite