• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
PWM - piszczenie silnika
#1
Question 
Witam,
jestem początkujący w programowaniu ale jakoś PWM-em poprzez MOSFET-a ruszyłem silnikiem. Przy wolnych obrotach bardzo piszczySad 
Moje pytania:
1. Jaką częstotliwość generuje funkcja analogWrite(pin, warotść)?
2. Czy jest możliwość zmiany częstotliwości?

Czytam :
https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
i nie do końca rozumięSad
proszę o pomoc.
 
Odpowiedź
#2
A nie wystarczy dodać kondensator elektrolityczny?
 
Odpowiedź
#3
(20-02-2018, 00:29)OMK napisał(a): A nie wystarczy dodać kondensator elektrolityczny?

Nie próbowałem, nie wiem gdzie w układ go wpiąć? Undecided  Wolałbym załatwić to programem.
Program mam ściągnięty- zachwalają, że działa "dzięki super itp itd" więc może ja coś pomieszałem od wiersza 30 // zrób coś tutaj.


Kod:
volatile byte pulse = 0;

ISR(TIMER2_COMPB_vect){  // Przerwanie procedury serwisowej w celu impulsu modulowanego wtyku 3
    pulse++;
  if(pulse >= 8) { // zmienić liczbę cykli modulacji w impulsie
    pulse =0;
    TCCR2A ^= _BV(COM2B1); // włącz sworzeń 3, włączając i wyłączając pinezkę
  }
}

void setIrModOutput(){  // ustawia szpilkę 3 przechodząc na szybkość modulacji IR
  int A = A0;
  pinMode(3, OUTPUT);
  pinMode(A, INPUT);
  TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); // Po prostu włącz wyjście na Pin 3 i wyłącz je na Pin 11
  TCCR2B = _BV(WGM22) | _BV(CS22);
  OCR2A = 51; // definiuje częstotliwość 51 = 38,4 kHz, 54 = 36,2 kHz, 58 = 34 kHz, 62 = 32 kHz
  OCR2B = 25;  // zadaje cykl roboczy - Połowa wartości OCR2A dla 50%
  TCCR2B = TCCR2B & 0b00111000 | 0x2; // wybierz wartość prescale wynoszącą 8: 1 zegara systemowego
}

void setup(){
  setIrModOutput();
  TIMSK2 = _BV(OCIE2B); // Wyjście Porównaj Dopasuj B Przerwij Włącz

}

void loop(){
// zrób coś tutaj
 int pot = (analogRead(A0));
 int pot2 = (pot/4);
  
      pinMode(3, pot2);
  
    
}


Załączone pliki Miniatury
   
 
Odpowiedź
#4
Witam,
Przy wolnych obrotach raczej będzie Ci piszczał.
Pozdrawiam,
Tomek.
 
Odpowiedź
#5
ten program co jest wyżej:
- przy starcie silnika nie piszczy tylko gdy potencjometr lekko ruszę to już ma max obroty i nie ma możliwości go wyłączyć, nawet jak potencjometr ustawie na zero;/
 
Odpowiedź
#6
Witam,
Zastanawia mnie linijka: pinMode(3, pot2);
Zwłaszcza drugi argument.
Pozdrawiam,
Tomek.
 
Odpowiedź
#7
Na schemacie wygląda jakby zasilania były oddzielne. Jeżeli tak to nie powinno działać. Na początek połącz masy. Jak nie zadziała to dołącz rezystor z 10k między nogę 1, 3 tranzystora. Potem kondensator między nogę 2, 3 (+ do 2).
 
Odpowiedź
#8
rezystor ma, masy połączone (rysunek robiony z glowy- co pamietalem) a to elektrolita dac pomiedzy 2 i 3 od mosfeta? tj wg plytki 22 i 23?
 
Odpowiedź
#9
Tak 22, 23. + do 23 i jak nie pomoże to do zacisków silnika. Dobierz pojemność do mocy silniczka.
 
Odpowiedź
#10
Niestety ma tylko 220uF i jest troche ciszej ale bardzo niewiele. Nasuwa się kolejne pytanie: jak to wpłynie na moc i moment silniczka?
Silniczek to okolo 12000rpm i 100w 12V wg informacji jakie posiadam (prawdopodobnie) .
Więc programem raczej tego nie ogarniemy??? aktualnie testuje usunięcie piszczenia:
Kod:
int silnik = 11; // pin 11 jako wyjscie pwm na IRFZ44N
int potencjometr = A0; //pin a0 podpieta środkowa nóżka potencjometru
void setup() //
{
pinMode(silnik, OUTPUT); // konfiguracja pinu (pin, out/in)
pinMode(potencjometr, INPUT); // konfiguracja pinu (pin, out/in)
}

void loop() //
{
int pwm = map(analogRead(potencjometr),0,1023,0,255 ); //mapuje odczytaną wartość z analogowego pinu na liczbe int "pwm" ,0,1023,10,255
analogWrite(silnik, pwm);                              //liczba int na wyjsciu silnik tj Q-11
}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości