Arduino Fancontroller (MAX6650)

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Kuintje
  • Registratie: Januari 2022
  • Laatst online: 08-11-2023
Mede-auteur:
  • rsnubje
  • Registratie: Mei 2008
  • Laatst online: 03-07 08:42

rsnubje

Hallo,

Op dit moment ben ik bezig met het maken van een fan controller voor mijn case fans. Echter heb ik niet heel veel kennis van arduinos programmeren. Nu wil ik graag de fans uitlezen en aansturen met behulp van de ingebouwde DAC van de fan controller IC (MAX6650) alleen heb ik nog geen resultaat behaald helaas. Kan iemand mij helpen?

Relevante software en hardware die ik gebruik:

MAX 6650
---
https://datasheets.maximi...en/ds/MAX6650-MAX6651.pdf

Arduino RP2040
---
https://docs.arduino.cc/hardware/nano-rp2040-connect

Dit is mijn code tot nu toe alleen veranderd de fan speed niet en de het uitlezen van de rpm klopt niet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <Wire.h>
const byte KtachCommand=0b00000000;
const byte ConfigCommand=0b00000010;
const byte ConfigData=0b00101000;
const byte GPIODEFCommand=0b00000100;
const byte DACCommand=0b00000110;
const byte AlarmEnableCommand=0b00001000;
const byte AlarmCommand=0b00001010;
const byte Tach0Command=0b00001100;
const byte Tach1Command=0b00001110;
const byte Tach2Command=0b00010000;
const byte Tach3Command=0b00010010;
const byte GPIOSTATCommand=0b00010100;
const byte COUNTCommand=0b00010110;
const byte COUNTData=0b00000011;
int RPM;
byte Ktach=100;
int FanControllerAddress=72; 
int Tach0RPM;
int Tach1RPM;
int Tach2RPM;
int Tach3RPM;
byte TachInput;
int counter;

void setup(){
  Wire.begin(); // join i2c bus (address optional for master)
  Serial.begin(9600);
  Wire.beginTransmission(FanControllerAddress); // transmit to device
  Wire.write(ConfigCommand);   // transmits command 
  Wire.write(ConfigData);     // transmits data
  Wire.write(COUNTCommand);    
  Wire.write(COUNTData);     
  Wire.endTransmission(); 
  delay(10);
}

void loop(){
  if (counter==0){
  UpdateFans();
  ScreenUpdate();}
  
 KtachUpdate();
  delay(50);
  counter++;
  if (counter==20){
    counter=0;}
}

void KtachUpdate(){
    if(Serial.available()>0){
      byte input=Serial.read();
      if (input=='u')
      Ktach=Ktach-1;
      else if (input=='d')
      Ktach=Ktach+1;
      if (Ktach<64)
      Ktach=64;
      if (Ktach>250)
      Ktach=250;
      
      RPM=59531.25/(Ktach+1);
      Wire.beginTransmission(FanControllerAddress); 
      Wire.write(KtachCommand);   
      Wire.write(Ktach);    
      Wire.endTransmission();   
      delay(10);}
      }
      
void UpdateFans(){
  Wire.beginTransmission(FanControllerAddress); 
  Wire.write(Tach0Command);    
  Wire.requestFrom(FanControllerAddress,1);
  
  if (Wire.available()>0){
  TachInput=Wire.read();}
  if (TachInput>0){
    Tach0RPM=TachInput*15;}
  Wire.endTransmission(); 
  delay(10);
  
}
void ScreenUpdate(){
  Serial.print("RPM= ");
  Serial.println(RPM);
  Serial.print("Ktach= " );
  Serial.println(Ktach,DEC);
  Serial.print("Tach0 RPM = ");
  Serial.println(Tach0RPM);
  Serial.println(" "); 
}

[ Voor 0% gewijzigd door rsnubje op 23-06-2022 17:32 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 03-07 22:37
Heb je al kunnen verifieren of de i2c bus goed werkt en je communicatie hebt met de MAX6650? Je zou bijvoorbeeld eens kunnen testen of je de fan ueberhaupt kunt aan en utizetten door de config van on naar of te zetten.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • rsnubje
  • Registratie: Mei 2008
  • Laatst online: 03-07 08:42

rsnubje

Testlabcoördinator

BDO: SweatyRs

Topicstarter
farlane schreef op zondag 26 juni 2022 @ 21:40:
Heb je al kunnen verifieren of de i2c bus goed werkt en je communicatie hebt met de MAX6650? Je zou bijvoorbeeld eens kunnen testen of je de fan ueberhaupt kunt aan en utizetten door de config van on naar of te zetten.
Ja, i2c scanner ziet hem sowieso en je kan merken wanneer hij in full on mode gaat. Off hebben we nog niet geprobeerd.

Uplay: Red--Death


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 03-07 22:37
rsnubje schreef op zondag 26 juni 2022 @ 22:54:
[...]

Ja, i2c scanner ziet hem sowieso en je kan merken wanneer hij in full on mode gaat. Off hebben we nog niet geprobeerd.
Als ik het goed zie is full-on de default, dus dat is niet echt een goede maatstaf. Als je hem aan en uit kunt zetten ben je al verder.

Ik weet niet wat je met i2c scanner bedoelt, maar heb je een scope of logic analyzer waarmee je kunt bekijken wat er heen en weer gaat?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • +1 Henk 'm!

  • juulius
  • Registratie: Februari 2012
  • Laatst online: 26-06 16:57
toevallig bezig geweest met het broertje MAX3790 en nu bezig met de ADT7470
ik ben van de standaard I2C library afgegaan en naar de I2Cdev gegaan, kan ook te maken hebben dat ik het programmeer met een teensy.
grootste wijziging is dat je met wire.begin gelijk ook je clock voor verschillende I2C bussen vast kunt zetten
code:
1
Wire.begin(I2C_MASTER, 0x00, WIRE1_PINS, I2C_PULLUP_EXT, 400000);


als ik kijk in de datascheet staat de SCL clock op max 400khz.
https://www.arduino.cc/re...munication/wire/setclock/
standaard staat deze op 100khz, wat volgens de data scheet gewoon moet werken

het enigste wat me hierin nog te binnen kan schieten zijn de pull-up weerstanden van 4.7k ohm voor zowel de SDA en SCL.

als ik de forums lees https://forum.arduino.cc/...6651-fan-controller/18105
moet je voordat je uitleest eerst een Wire.endTransmission doen

code:
1
2
3
4
Wire.beginTransmission(FanControllerAddress); 
  Wire.write(Tach0Command);   
  //hier hoort dus Wire.endTransmission nog te staan
  Wire.requestFrom(FanControllerAddress,1);

Acties:
  • 0 Henk 'm!

  • rsnubje
  • Registratie: Mei 2008
  • Laatst online: 03-07 08:42

rsnubje

Testlabcoördinator

BDO: SweatyRs

Topicstarter
farlane schreef op maandag 27 juni 2022 @ 18:57:
[...]

Als ik het goed zie is full-on de default, dus dat is niet echt een goede maatstaf. Als je hem aan en uit kunt zetten ben je al verder.

Ik weet niet wat je met i2c scanner bedoelt, maar heb je een scope of logic analyzer waarmee je kunt bekijken wat er heen en weer gaat?
Een stukkie code die scant naar devices op de i2c poorten van de arduino.

We hebben dus tussen closed, open loop en full on modes geswitched en full on draait harder dan de eerste 2. Tot dusver zijn we niet echt verder gekomen dan wisselen tussen 1800 en 2000 rpm.
juulius schreef op dinsdag 28 juni 2022 @ 00:12:
toevallig bezig geweest met het broertje MAX3790 en nu bezig met de ADT7470
ik ben van de standaard I2C library afgegaan en naar de I2Cdev gegaan, kan ook te maken hebben dat ik het programmeer met een teensy.
grootste wijziging is dat je met wire.begin gelijk ook je clock voor verschillende I2C bussen vast kunt zetten
code:
1
Wire.begin(I2C_MASTER, 0x00, WIRE1_PINS, I2C_PULLUP_EXT, 400000);


als ik kijk in de datascheet staat de SCL clock op max 400khz.
https://www.arduino.cc/re...munication/wire/setclock/
standaard staat deze op 100khz, wat volgens de data scheet gewoon moet werken

het enigste wat me hierin nog te binnen kan schieten zijn de pull-up weerstanden van 4.7k ohm voor zowel de SDA en SCL.

als ik de forums lees https://forum.arduino.cc/...6651-fan-controller/18105
moet je voordat je uitleest eerst een Wire.endTransmission doen

code:
1
2
3
4
Wire.beginTransmission(FanControllerAddress); 
  Wire.write(Tach0Command);   
  //hier hoort dus Wire.endTransmission nog te staan
  Wire.requestFrom(FanControllerAddress,1);
Momenteel zitten er pull-ups op van 10k. Volgens mij moet dat ook wel prima werken, aangezien het geen high-speed device is.
De Teensy werkt inderdaad net wat anders en die vonden we niet echt prettig om mee te werken voor i2c iig. Kan dus ook te maken hebben met gebrek aan kennis daarin. Ik zal die clock eens vast zetten.

Ik weet niet tot in hoeverre je alle settings in 1x kunt programmeren? Ik heb nu de read even weg gelaten en enkel de controller geprogrammeerd op de onderstaande manier, maar dat geeft momenteel dus nog niet het gewenste resultaat. Volgens de datasheet kun je in open-loop config, waardes direct in de DAC invoeren om de snelheid aan te passen, maar veel verder dan 100% en 90% fanspeed gaat het ook niet echt (de eerder genoemde 2000 en 1800). Begin bijna te denken dat de N-channel mosfet die erop zit gewoon niet goed te regelen is. Deze is dat.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <Wire.h>
const byte KtachCommand=0b00000000;
const byte ConfigCommand=0b00000010;
const byte ConfigData=0b00111001;
const byte GPIODEFCommand=0b00000100;
const byte DACCommand=0b00000110;
const byte AlarmEnableCommand=0b00001000;
const byte AlarmCommand=0b00001010;
const byte Tach0Command=0b00001100;
const byte Tach1Command=0b00001110;
const byte Tach2Command=0b00010000;
const byte Tach3Command=0b00010010;
const byte GPIOSTATCommand=0b00010100;
const byte COUNTCommand=0b00010110;
const byte COUNTData=0b00000011;
int RPM;
byte Ktach=0b01000000;
int FanControllerAddress=72; 
int Tach0RPM;
byte TachInput;
int counter;

void setup(){
  Wire.begin(); // join i2c bus (address optional for master)
  Serial.begin(9600);
  Wire.beginTransmission(FanControllerAddress); // transmit to device
  Wire.write(ConfigCommand);   // transmits command 
  delay(100);
  Wire.write(ConfigData);     // transmits data
  delay(100);
  Wire.endTransmission(); 

  Wire.beginTransmission(FanControllerAddress); // transmit to device
  Wire.write(KtachCommand);
  delay(100);
  Wire.write(0b11111000);
  delay(100);
  Wire.endTransmission(); 

  Wire.beginTransmission(FanControllerAddress); // transmit to device 
  Wire.write(COUNTCommand);  
  delay(100);  
  Wire.write(COUNTData);
  delay(100);
  Wire.endTransmission(); 
  
  Wire.beginTransmission(FanControllerAddress); // transmit to device
  Wire.write(DACCommand);
  delay(100);
  Wire.write(Ktach);     
  delay(100);
  Wire.endTransmission(); 
  delay(10);

  Wire.beginTransmission(FanControllerAddress); // transmit to device
  Wire.write(KtachCommand);
  delay(100);
  Wire.write(0b01000000);     
  delay(100);
  Wire.endTransmission(); 
  delay(10);  
}

void loop(){
 
}

[ Voor 24% gewijzigd door rsnubje op 28-06-2022 10:41 ]

Uplay: Red--Death


Acties:
  • 0 Henk 'm!

  • rsnubje
  • Registratie: Mei 2008
  • Laatst online: 03-07 08:42

rsnubje

Testlabcoördinator

BDO: SweatyRs

Topicstarter
@farlane Zojuist de full-off mode geprobeerd en ik zie aan de current op de voeding dat er 'iets' gebeurd, maar hij blijft dus wel draaien (gaat van 0.146A naar 0.125A). Begin me daarom af te vragen of ik wel volledige controle heb over de mosfet, of dat die niet geschikt is.

Uplay: Red--Death


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 03-07 22:37
rsnubje schreef op dinsdag 28 juni 2022 @ 13:45:
@farlane Zojuist de full-off mode geprobeerd en ik zie aan de current op de voeding dat er 'iets' gebeurd, maar hij blijft dus wel draaien (gaat van 0.146A naar 0.125A). Begin me daarom af te vragen of ik wel volledige controle heb over de mosfet, of dat die niet geschikt is.
Ok, je zou eens kunnen meten op z'n OUT pin of de spanning daar wel overeenkomt met wat je zou verwachten bij full on en off...

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • rsnubje
  • Registratie: Mei 2008
  • Laatst online: 03-07 08:42

rsnubje

Testlabcoördinator

BDO: SweatyRs

Topicstarter
farlane schreef op dinsdag 28 juni 2022 @ 23:03:
[...]

Ok, je zou eens kunnen meten op z'n OUT pin of de spanning daar wel overeenkomt met wat je zou verwachten bij full on en off...
Dat had ik gemeten toevallig, alleen weet ik niet of het klopt, want ik weet niet wat het zou moeten zijn :+
Full-on:
5.35v

Full-off:
0.38v

Hoe dan ook zou je met dit verschil meer verwachten dan 12V->10.5V, wat het nu doet.

Videotje gemaakt met een loop tussen full-on en full-off. Het programmeren van de chip werkt in ieder geval, want dat ledje gaat aan/uit op basis van GPIO command.

[ Voor 31% gewijzigd door rsnubje op 29-06-2022 09:20 ]

Uplay: Red--Death


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 03-07 22:37
rsnubje schreef op woensdag 29 juni 2022 @ 08:38:
[...]
Dat had ik gemeten toevallig, alleen weet ik niet of het klopt, want ik weet niet wat het zou moeten zijn :+
Full-on:
5.35v

Full-off:
0.38v
Dat lijken waarden die redelijk kloppen als ik de specs van die pin zie (0.3V ~ Vcc-0.3V) bekijk, dat regelt van 0 tot 100% van de uitgang in ieder geval :) Die 5.35V is wel wat raar als Vcc 5V is ....

Toch nog maar eens naar je hardware kijken denk ik :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • rsnubje
  • Registratie: Mei 2008
  • Laatst online: 03-07 08:42

rsnubje

Testlabcoördinator

BDO: SweatyRs

Topicstarter
farlane schreef op woensdag 29 juni 2022 @ 12:06:
[...]

Dat lijken waarden die redelijk kloppen als ik de specs van die pin zie (0.3V ~ Vcc-0.3V) bekijk, dat regelt van 0 tot 100% van de uitgang in ieder geval :) Die 5.35V is wel wat raar als Vcc 5V is ....

Toch nog maar eens naar je hardware kijken denk ik :)
Ja, dat sowieso. Jij toevallig nog iets gezien aan de specs van de mosfet of deze het niet zou kunnen? Ben daar eerlijk gezegd ook geen expert in.

Uplay: Red--Death


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 03-07 22:37
rsnubje schreef op woensdag 29 juni 2022 @ 12:21:
[...]

Ja, dat sowieso. Jij toevallig nog iets gezien aan de specs van de mosfet of deze het niet zou kunnen? Ben daar eerlijk gezegd ook geen expert in.
Is ook niet mijn specialiteit (daar is een forum voor hier :) maar wat je kunt zien is dat de stuurspanning Vgs tussen 2V ~ 4V van overeenkomt van full-off naar full-on dus je regelbereik van de OUT pin ligt daar tussen.

Hoe ziet je schema er uit?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • rsnubje
  • Registratie: Mei 2008
  • Laatst online: 03-07 08:42

rsnubje

Testlabcoördinator

BDO: SweatyRs

Topicstarter
farlane schreef op woensdag 29 juni 2022 @ 12:31:
[...]

Is ook niet mijn specialiteit (daar is een forum voor hier :) maar wat je kunt zien is dat de stuurspanning Vgs tussen 2V ~ 4V van overeenkomt van full-off naar full-on dus je regelbereik van de OUT pin ligt daar tussen.

Hoe ziet je schema er uit?
Ik heb het schema aangehouden dat in de datasheet staat (figure 6 pag. 13) van de MAX6650, al hoop ik dat ik dat enigszins goed gevolgd heb. Ik heb geen schema getekend, maar alleen de PCB. Hopelijk is dat duidelijk genoeg.


Afbeeldingslocatie: https://tweakers.net/i/M1t-XS_D3fV7W3brzoRyMtmDR54=/800x/filters:strip_exif()/f/image/mmH7Q3xLlOyWyhpGq2Fhy4U5.png?f=fotoalbum_large
Afbeeldingslocatie: https://tweakers.net/i/bBC8y2OE0pEHvD4V4keoBTvMpWs=/x800/filters:strip_exif()/f/image/sl0r1HhSyAYrGcT3vQNqoD0J.png?f=fotoalbum_large

Uplay: Red--Death


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 03-07 22:37
Nou ja, das me ff teveel gepuzzel. Ik denk dat je FET wel *erg* ruim bemeten is met zn 80A maar goed, check even op het electronica forum zou ik zeggen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • rsnubje
  • Registratie: Mei 2008
  • Laatst online: 03-07 08:42

rsnubje

Testlabcoördinator

BDO: SweatyRs

Topicstarter
farlane schreef op vrijdag 1 juli 2022 @ 00:25:
Nou ja, das me ff teveel gepuzzel. Ik denk dat je FET wel *erg* ruim bemeten is met zn 80A maar goed, check even op het electronica forum zou ik zeggen.
Das waar :+ Ik zocht een leuke SMD mosfet, maar dan kom je al snel op overkill fets uit.

Uplay: Red--Death

Pagina: 1