• 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
Sterownie prędkością obrotową silnika z ISOBUS
#1
Witajcie,

W związku z tym, że mój brat prowadzi gospodarstwo rolne, a moja dusza inżyniera sprawia, że staram się "ulepszać dobre" zrodziła się koncepcja na elektryczne sterowanie wydajnością siewnika.
Jako, że z wykształcenia jestem mechanikiem, nie elektronikiem pewne kwestie spędzają mi sen z powiek. Schemat mojego projektu wygląda następująco: 


[Obrazek: 4b2a13156e168bd39770d0f422029fff.png]

Stabilizator U2 zastosowano w celu dostosowania napięcia zasilania dla mikrokontrolera.
Stabilizator U3 zastosowano w celu dopasowania sygnału wejściowego do logiki mikrokontrolera (Sygnał wejściowy: Stan wysoki powyżej 6,3 V, Sygnał niski poniżej 1,3 V. Częstotliwość max: 1 kHz, sygnał "prostokątny")

Silnik elektryczny M1 12V DC 3000 obr/min o mocy maksymalnej 220W z przekładnią ślimakową i=60.

MOSFET - BUZ11
Masa wspólna.


Druga część to program:

Kod:
float rev = 0;
int rpm;
int oldtime = 0;
int time;

void isr() //interrupt service routine
{
rev++;
}

void setup()
{
Serial.begin(9600);            
attachInterrupt(0, isr, RISING);  
}

void loop()
{
delay(500);
detachInterrupt(0);          
time = millis()-oldtime;    
rpm = (rev / time) * 6000;  
oldtime = millis();          
rev = 0;

Serial.print("Witaj");
Serial.print("Prędkość obrotowa to:");
Serial.print(rpm);
attachInterrupt(0, isr, RISING);

}


Sygnał wejściowy określa prędkość pojazdu (130 Hz/m/s). Chciałbym, aby dla wartości około 4 m/s (520 Hz) PWM dla silnika był 100%, natomiast dla 0,5 m/s (ok 65Hz) 10%.

Chcę, aby odczyt i zmiana PWM realizowana był najlepiej co 13 Hz. Wiem, że program tej części jeszcze nie uwzględnia. Pokonało mnie samo wyświetlanie wartości prędkości na porcie szeregowym [Obrazek: icon_e_sad.gif]


Komunikacja z Serial jest. Wyświetla mi nawet wartość zmiennej rpm. 

Problem jest tylko taki, że wartość ta jest w granicach 560-580 bez podłączenia czujnika (w wersji testowej chciałbym symulować czujnik przyciskiem).
Czy zwykły filtr RC powinien to wytłumić ?
 
Odpowiedź
#2
Przypuszczam, że nie pierwszy wpadłeś na pomysł sterowania silnikiem DC z Arduino. Poszukaj jakiegoś sprawdzonego rozwiązania. Przyciskiem nie zasymulujesz czujnika prędkości obrotowej, właśnie przez drgania,  do tego mierząc obroty w jednostce czasu. No jakotako dla dużych prędkości.  Precyzyjniej mierzyć czas w microsekundach między pikami, przy tej prędkości to będzie co najmniej 300us na każdy obrót, jak to ma być sterowane od powiedzmy 20% to czas między pikami wzrośnie do 1-2ms. Jeśli to ma być magnes i czujnik pola to można sobie to zrobić na biurku - po co filtrować coś czego nie będzie w rzeczywistym układzie.  Mosfet sterowany wprost z pinu to głupi pomysł. Na pewno jakiś rezystor, najlepiej driver. Jak jakieś zmiennej używasz w programie i przerwaniu to musi być z deklaracją volatile, dla obrotów float? Serio?. Warto wiedzieć więcej niż mniej: https://forbot.pl/blog/kurs-arduino-srod...owac-id936 zaczynając od początku, a kończąc bez używania delay w rzeczywistych projektach - millis(), micros().  
Jeśli zrobisz jakiś eksperymentalny układ i od strony elektrycznej i od programowej to będziecie z bratem ciągle przy tym dłubać, wymieniać procki i mosfety. Może jakiś silnik od wycieraczek byłby dobry do testów. Chociaż przejrzyj kilka gotowców i przeanalizuj ich budowę.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
(21-06-2018, 22:56)rafisoltys napisał(a): Witajcie,

W związku z tym, że mój brat prowadzi gospodarstwo rolne, a moja dusza inżyniera sprawia, że staram się "ulepszać dobre" zrodziła się koncepcja na elektryczne sterowanie wydajnością siewnika.
Jako, że z wykształcenia jestem mechanikiem, nie elektronikiem pewne kwestie spędzają mi sen z powiek. Schemat mojego projektu wygląda następująco: 


[Obrazek: 4b2a13156e168bd39770d0f422029fff.png]

Stabilizator U2 zastosowano w celu dostosowania napięcia zasilania dla mikrokontrolera.
Stabilizator U3 zastosowano w celu dopasowania sygnału wejściowego do logiki mikrokontrolera (Sygnał wejściowy: Stan wysoki powyżej 6,3 V, Sygnał niski poniżej 1,3 V. Częstotliwość max: 1 kHz, sygnał "prostokątny")

Silnik elektryczny M1 12V DC 3000 obr/min o mocy maksymalnej 220W z przekładnią ślimakową i=60.

MOSFET - BUZ11
Masa wspólna.


Druga część to program:

Kod:
float rev = 0;
int rpm;
int oldtime = 0;
int time;

void isr() //interrupt service routine
{
rev++;
}

void setup()
{
Serial.begin(9600);            
attachInterrupt(0, isr, RISING);  
}

void loop()
{
delay(500);
detachInterrupt(0);          
time = millis()-oldtime;    
rpm = (rev / time) * 6000;  
oldtime = millis();          
rev = 0;

Serial.print("Witaj");
Serial.print("Prędkość obrotowa to:");
Serial.print(rpm);
attachInterrupt(0, isr, RISING);

}


Sygnał wejściowy określa prędkość pojazdu (130 Hz/m/s). Chciałbym, aby dla wartości około 4 m/s (520 Hz) PWM dla silnika był 100%, natomiast dla 0,5 m/s (ok 65Hz) 10%.

Chcę, aby odczyt i zmiana PWM realizowana był najlepiej co 13 Hz. Wiem, że program tej części jeszcze nie uwzględnia. Pokonało mnie samo wyświetlanie wartości prędkości na porcie szeregowym [Obrazek: icon_e_sad.gif]


Komunikacja z Serial jest. Wyświetla mi nawet wartość zmiennej rpm. 

Problem jest tylko taki, że wartość ta jest w granicach 560-580 bez podłączenia czujnika (w wersji testowej chciałbym symulować czujnik przyciskiem).
Czy zwykły filtr RC powinien to wytłumić ?
 
Odpowiedź
#4
Witam. Udało się rozwiązać problem?
 
Odpowiedź
#5
(21-06-2018, 22:56)rafisoltys napisał(a): Witajcie,

Stabilizator U2 zastosowano w celu dostosowania napięcia zasilania dla mikrokontrolera.
Stabilizator U3 zastosowano w celu dopasowania sygnału wejściowego do logiki mikrokontrolera (Sygnał wejściowy: Stan wysoki powyżej 6,3 V, Sygnał niski poniżej 1,3 V. Częstotliwość max: 1 kHz, sygnał "prostokątny")

Silnik elektryczny M1 12V DC 3000 obr/min o mocy maksymalnej 220W z przekładnią ślimakową i=60.

MOSFET - BUZ11
Masa wspólna.

Chcesz sygnał rzędu 1kHz puszczać przez stabilizator ZASILANIA? Tam potrzebny jest prosty układ konwersji napięć z tranzystorem, transoptorem lub diodą ograniczającą napięcie. Jaki jest maksymalny prąd, który można pobrać z tego sygnału? Jak wystarczająco duży można ten prostszy układ z ograniczeniem napięcia nawet na LED.
Jeśli chodzi o sterowanie prędkością to fajnie byłoby po prostu na każdy impuls wyjściowy generować jeden impuls na silnik, impuls o stałej długości 1msec.  Wtedy przy 1kHz na stałe wysterowanie i proporcjonalną zmiane. Do tego nie trzeba procka, wystarczy układ czasowy 74123 albo 555. Można by też zastosować silnik, który obraca się synchronicznie z częstotliwościa np. krokowy albo BLDC. Można też dodać sprzężenie zwrotne - jakiś czujnik obrotów np. optyczny, na transpoptorze szczelinowym.
 
Odpowiedź
#6
Skoro jesteś mechanikiem dlaczego tego nie rozwiążesz mechanicznie? przecież od kiedy powstały siewniki to jest rozwiązanie mechaniczne koło siewnika napędza wydajnością siania. Po co wywarzać otwarte dziw?


rafisoltys
Problem jest tylko taki, że wartość ta jest w granicach 560-580 bez podłączenia czujnika (w wersji testowej chciałbym symulować czujnik przyciskiem).
Czy zwykły filtr RC powinien to wytłumić ?


Bo pin wisi w powietrzu
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#7
(11-01-2024, 20:00)waldekS napisał(a): Witam. Udało się rozwiązać problem?
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości