Arduino PWM ventilátor

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

risik12
Okoloidúci
Okoloidúci
Príspevky: 32
Dátum registrácie: 09 Máj 2016, 17:57

Arduino PWM ventilátor

Príspevok od používateľa risik12 » 15 Jan 2017, 00:47

Zdravím, mám problém s Arduino PWM ventilátorom pretože keď regulujem rýchlosť tak pri hodnote 0 mi ventilátor točí pri malých otáčkach ....ostatne hodnoty do 255 krásne fungujú. Neviem čím by to mohlo byť, keď tak mi pošlite schému, zdroják alebo poradte. Ďakujeem :) :) :) :) :) :) :)
0

Sender
Pokročilý člen
Pokročilý člen
Príspevky: 535
Dátum registrácie: 26 Máj 2008, 00:00

Re: Arduino PWM ventilátor

Príspevok od používateľa Sender » 15 Jan 2017, 08:57

Jen tak mě napadá - nejde při hodnotě 0 to PWM prostě vypnout ?
0

MiroH
Stály člen
Stály člen
Príspevky: 176
Dátum registrácie: 13 Dec 2009, 00:00
Bydlisko: Nitra
Vek: 60

Re: Arduino PWM ventilátor

Príspevok od používateľa MiroH » 15 Jan 2017, 09:39

risik12 napísal:Zdravím, mám problém s Arduino PWM ventilátorom pretože keď regulujem rýchlosť tak pri hodnote 0 mi ventilátor točí pri malých otáčkach ....ostatne hodnoty do 255 krásne fungujú. Neviem čím by to mohlo byť, keď tak mi pošlite schému, zdroják alebo poradte. Ďakujeem :) :) :) :) :) :) :)
A čo keby si nám Ty dal schému a tvoj zdroják, boli by sme múdrejší.
0

risik12
Okoloidúci
Okoloidúci
Príspevky: 32
Dátum registrácie: 09 Máj 2016, 17:57

Re: Arduino PWM ventilátor

Príspevok od používateľa risik12 » 15 Jan 2017, 11:06

Kód: Vybrať všetko

#include <SoftwareSerial.h>
SoftwareSerial mySerial(4,7);
int fanSpeed = 0;
String command;
char werd;
int currentFan = 0;
int rearSpeed = 0;
int front_a = 5;
int pin4 = 4; 
int pin2 = 7;
int frontSpeed = 0;
int commandCheck;
String rearMarker = "   ";
String frontMarker = "-> ";
String radiatorMarker = "   ";



void setup() {

  pinMode(2, OUTPUT);
  digitalWrite(5, LOW);

  // fans

  pinMode(5, OUTPUT);//front 140mm
  pinMode(4, OUTPUT);//front 140mm

  analogWrite(5,0);

  Serial.begin(9600);
  Serial.println();
  Serial.flush(); 
}

void loop(){
 
  // this is what reads your serial commands
  while ( Serial.available() > 0 ) {
    // small delay because it can only deliver the bytes so quickly
    delay(5);
   
    // you have to read one byte (one character) at a time
    werd = Serial.read();
    // append the character to our "command" string
    command += werd;
  }

  // clear serial so it's ready for your next command
  Serial.flush();
  if ( command.length() > 0 ) {
    commandCheck = 0;
    if ( command == "front" )  {
        currentFan = 0;
        frontMarker = "-> ";

    }
    else {
        // flag so we know it wasn't a change fan command
        commandCheck = 1;
    }
    if ( commandCheck == 1 ) {
      // the ".toInt()" appended to the command variable is to convert
      // the user entered "command" from a string into an integer so
      // that we can use it to set the pin's PWM pulse width
      // (it'll error if you send an integer in string format)
      if ( currentFan == 0 ) {
        //front
        analogWrite(front_a, command.toInt());
        frontSpeed = command.toInt();

      }
    }
    command = "";
    Serial.print(frontMarker);
    Serial.print("Aktualna hodnota: ");
    Serial.println(frontSpeed);
    Serial.print(rearMarker);
    // this function (below) is just to print a ton of empty lines so that the UI "appears" to be refreshing like a screen.
    // you'll have to set your serial monitor to a certain width to get that effect to work correctly, of course
    clear();

    }

}
void clear() {
  Serial.println();Serial.println();Serial.println();
   }

Je to zatial len taka upravena verzia len sa stým hrám - som začiatočník.

-- Spojený príspevok 15 Jan 2017, 12:20 --

Skúšal som aj tento program :/

Kód: Vybrať všetko

int pwmPin = 9;      // digital pin 9
int pwmVal = 0;

void setup()
{
  pinMode(pwmPin, OUTPUT);   // sets the pin as output
  Serial.begin(9600);
}

void loop()
{
  if (pwmVal != 255) {
         analogWrite(pwmPin, pwmVal);
         //pwmVal += 10;
         Serial.print(pwmVal);  // Print red value
         Serial.print("\n");    // Print a tab
  } else {
         Serial.print('at max high');  // Print red value
         Serial.print("\n");    // Print a tab
  }
  delay(1000);
}
Prílohy
Schéma
Schéma
0

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4345
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: Arduino PWM ventilátor

Príspevok od používateľa misocko » 15 Jan 2017, 11:48

1. myslim ze ventilator ocakava urcitu frekvenciu na vstupe PWM a arduino nieje schopne ju zabezpecit , nevie ist tak vysoko (datasheet ventilatora)
2. myslim ze vecsina ventilatorov ak nema zapojeny vstup PWM (alebo vystup z aurduina = 0% PWM) , tak ventilator pobezi naplno.
0

MiroH
Stály člen
Stály člen
Príspevky: 176
Dátum registrácie: 13 Dec 2009, 00:00
Bydlisko: Nitra
Vek: 60

Re: Arduino PWM ventilátor

Príspevok od používateľa MiroH » 15 Jan 2017, 13:12

analogWrite má nízku frekvenciu PWM
(The frequency of the PWM signal on most pins is approximately 490 Hz. )

ventilátor potrebuje vyššiu frekv. PWM
(Signál Control (Řízení PWM) je vstup pro impulzy pulsně šířkové modulace. Základní frekvence je 25kHz a je akceptovatelná v rozsahu 21kHz až 28kHz. Vstup má úroveň TTL a obsahuje pull-up na 5V, případně na 3.3V u nových konstrukcí. Signál není invertovaný a 100% PWM znamená maximální otáčky větráčku. Základní deska má výstup typu otevřený kolektor. Takováto konstrukce zajišťuje, že při odpojeném signálu PWM pojede větrák na maximální otáčky.)

takže to nebude fungovať celkom podľa Tvojich predstáv. Je možné, že to frekvenciu PWM arduina zožerie ale napríklad :
Arctic Cooling Fan F12 PWM
má:
Otáčky: 600 - 1350 RPM (ovládané PWM)
čiže nejde nikdy do nuly s otáčkami
0

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: Arduino PWM ventilátor

Príspevok od používateľa alidedko » 15 Jan 2017, 13:22

Ak chces ist od nuly, daj si tam tranzistor a otvaraj ho pwmkou, spinaj nim napajanie ventilatora.
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Arduino PWM ventilátor

Príspevok od používateľa peterple » 15 Jan 2017, 13:39

Ach, jaj. Opäť arduinisti. Som zvedavý či aj na toto niekdo vytiahne nejakú library. (určite existuje)

Principiálne nie je možné pri klasickom PWM móde dosiahnuť úplné vypnutie. Ak nastavíte komparačnú úroveň na 0 tak na výstupe budú vždy krátke peaky o šírke jedného pulzu. Odpoveď ako najjenoduchšie na to dal v prvom príspevku sender. Prípadné ďalšie (zložitejšie) riešenia tu
http://www.avrfreaks.net/forum/setting- ... ty-cycle-0

konkrétne:
You have basically three options:
1) Use inverting output mode and 255-duty as OCR value (not having a full on is much less annoying than not having a full off).
2) Use the Phase Correct PWM Mode.
3) Disconnect the OC pin for duty=0.
Ja vrelo doporučujem to čo sender teda možnosť č. 3.

To že je tá PWM frekvencia nízka tomu motoru očividne nevadí. Ak by to mal byť problém, nič nebráni frekvenciu zvýšiť. Ak použijete 8MHz hodiny pre procesor a vypnete preddelič na ten PWM timer tak frekvncia bude 8000000/256=31250.

Samozrejme treba vedieť že to má aj ďalšie dopady na aduíno kód. Ale všetko je to riešitelné. Len to treba vedieť.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4426
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: Arduino PWM ventilátor

Príspevok od používateľa romiadam » 15 Jan 2017, 15:22

Prečo arduinoisti majú väčšinou problém upraviť program? Lebo je to komplikovane, alebo to nevedia?
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

MiroH
Stály člen
Stály člen
Príspevky: 176
Dátum registrácie: 13 Dec 2009, 00:00
Bydlisko: Nitra
Vek: 60

Re: Arduino PWM ventilátor

Príspevok od používateľa MiroH » 15 Jan 2017, 15:47

pretože veľká časť z nich netuší ako procesor na Arduino doske pracuje. Pretože skoro na všetko už niekto vyrobil knižnicu. Jej použitím sa ale macher na procesory nestaneš. Na to treba hodne študovať datasheety a iné okolnosti.
0

Používateľov profilový obrázok
roboulbricht
Stály člen
Stály člen
Príspevky: 156
Dátum registrácie: 07 Jan 2015, 12:01
Bydlisko: Banská Bystrica
Vek: 54
Kontaktovať používateľa:

Re: Arduino PWM ventilátor

Príspevok od používateľa roboulbricht » 15 Jan 2017, 17:23

Peterple, ale on už možnosť č. 3 používa, aj keď o tom nevie. Pri volaní analogWrite s parametrom 0 sa odpojí PWM výstup a nastaví sa na logickú 0.

Kód: Vybrať všetko

void analogWrite(uint8_t pin, int val)
{
	// We need to make sure the PWM output is enabled for those pins
	// that support it, as we turn it off when digitally reading or
	// writing with them.  Also, make sure the pin is in output mode
	// for consistenty with Wiring, which doesn't require a pinMode
	// call for the analog output pins.
	pinMode(pin, OUTPUT);
	if (val == 0)
	{
		digitalWrite(pin, LOW);
	}
	else if (val == 255)
	{
		digitalWrite(pin, HIGH);
	}
	else
https://github.com/arduino/Arduino/blob ... g_analog.c
https://github.com/arduino/Arduino/blob ... _digital.c
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok