Sida 3 av 3

Re: Spridarprovare, Arduino eller PLC

Postat: 11 oktober 2018, 22:30:08
av Janson1
Jahopp, nu kompilerar den och den går att lägga in i Uno:n men funktionen tror jag inte nån blir speciellt nöjd med...
Nu vill/önskar jag att någon mer testar innan utdömning...
Men det jag kommer fram till är att potarna till pwm dels stör varandra och frekvenspoten skapar bara stora hopp och dålig reglering med lite fram och tillbaka i frekvens under vridning. (Jag använder A0,A1,A2 istället för A1, A2, A3 som i exemplet.
Då klockan närmar sig sovdags så funkar min hjärna sämre och sämre, har börjat läsa om timrar och register och dess settings… en mycket bra godnattläsning!

Re: Spridarprovare, Arduino eller PLC

Postat: 11 oktober 2018, 22:36:06
av mrfrenzy
Ja han har gjort justeringen i steg istället för steglöst, men det är ju lätt att ordna.

Efter lite letande i kommentarerna hittade jag följande:
https://www.rmcybernetics.com/science/d ... g-projects

En komplett kod som ger PWM-utgång med frekvens från 1Hz till 2MHz och duty cycle från 0%-100%
Färdigt med styrning av LCD. Enda som behöver läggas till för TS kravspec är timern för automatisk stopp.

Följande behövs för att använda det programmet:
Arduino UNO
128 x 64 Graphic LCD med I2C
Rotary encoder with push button

Re: Spridarprovare, Arduino eller PLC

Postat: 12 oktober 2018, 07:12:19
av Janson1
Nu ser jag ett generalfel/tankevurpa som jag själv gjort, jag utgick från TS pulstider och frekvens och fick det först inte att funka, efter lite justerande så funkade det men inte rätt... Nu ser jag att 22 mS är totalt sett mycket längre tid än vad en cykel är vid 150 hz, ja dom börjar närma sig vid lite över 40 hz redan. Så denna lösning blir likspänning ut vid antingen över 40 hz eller vid för långa ontiderS
Så 150 hz med 22 mS pulstid är omöjligt.
TS behöver nog speca om...

Re: Spridarprovare, Arduino eller PLC

Postat: 12 oktober 2018, 08:16:21
av Janson1
Men jag har nu gjort det bästa av TS kravspec: frekvens 10-150 hz. Pusbredd 1-22 mS där det är möjligt! On pulsen miskar i tid med ökad frekvens...

Re: Spridarprovare, Arduino eller PLC

Postat: 12 oktober 2018, 10:22:31
av sc3
Om du använder dig av exemplen givna i länkarna så ställer du pulsbredden i procent mha potentiometern men när du visar värdet i displayen så kan du räkna ut pulsbredden i tid med hjälp av pwm frekvensen. Då blir det ”självjusterande ” vilka pulslängder som fungerar till vilka pwm frekvenser.

Re: Spridarprovare, Arduino eller PLC

Postat: 12 oktober 2018, 10:27:33
av mrfrenzy
Då förstår jag vad du menar med att potarna stör varandra.
Eftersom pulstiden definieras i procent så ska den ju ändras när frekvensen ändras.
Vill man inte ha det så får man lägga in lite matematik.

Jag antar att du redan justerst prescalern för att få bättre upplösning vid dom låga frekvenserna?

Re: Spridarprovare, Arduino eller PLC

Postat: 12 oktober 2018, 11:48:14
av Janson1
Här är mitt alster med funktion enligt tidigare inlägg...

Kod: Markera allt

int pulsut1 = 8;                                // ben 10 skall användas som utgång
int pulsut2 = 11;                              // ben 11 reserv
                                                 // lite olika variabler.
unsigned long sekunder;
int state1 = LOW;
//int state2 = LOW;
unsigned long privMicroson = 0;
unsigned long privMicrosoff = 0;
unsigned long intervallon;
unsigned long intervalloff;
unsigned long intervall;
unsigned long intervalltot;
unsigned long privMicros = 0;                
unsigned long privMillis = 0;


void setup() 
{
  pinMode(pulsut1, OUTPUT);                             // satt pulsut1 som utgång
  pinMode(pulsut2, OUTPUT);                           // reserv

}

void loop() 
{
 intervalloff = analogRead(A0);                         // Satt analogingång A0 som intervall off ingång
 intervalloff = map(intervalloff,0,1023,1000,22000);    // mapar om värde 0-1023 till 1000-22000 mikrosekunder (1-22 mS)
 
 intervallon = analogRead(A1);                          // Satt analogingång A1 som intervall on ingång
 intervallon = map(intervallon,0,1023,100000,6666);     // mapar om värde 0-1023 till 100000-6666 mikrosekunder (10-150 hz)

 if (intervalloff >= intervallon)
 {
  intervalloff =  intervallon ;
 }

 
 intervalltot = intervallon - intervalloff;

 
 
 sekunder = analogRead(A2);                             // Satt analogingång A2 som sunkundinställning.
 sekunder = map(sekunder,0,1023,10000,600000);           // Mapar om värde 0-1023 till 1000-600000 millisek (10 - 600 sekunder)
 
 unsigned long currMillis = millis();                   // Här läggs ett millisek-tal in varje varv i loopen

 unsigned long currMicros = micros();                   // Här läggs ett microsek-tal in varje varv i loopen 
                                                        
  if(currMicros - privMicros >= intervall)              // OM nuvarande micros-tal - föregående micros-tal är större eller lika med intervall
  {
   privMicros = currMicros;                             // då skall: föregående bli nuvarnde micros-tal

     if(state1 == LOW)                                  // OM pulsut1 status är låg 
     {
      state1 = HIGH;                                    // så blir pulsut1 status hög 
     }

     else                                               // annars...
     {
      state1 = LOW;                                     // om pulsut1 status är hög  blir den låg 
     } 
     
     digitalWrite(pulsut1, state1);                    // här styrs hög/låg ut till utgången (pulsut1 i detta fall)
     //digitalWrite(pulsut2, state1);                    // här styrs hög/låg ut till utgången (pulsut2 i detta fall)

     if(currMillis -privMillis >= sekunder)            // när total tid är slut så stannar testen
     {
      state1 = HIGH;                                   // genom att state "fastnar" i hög
     }
  
     if(digitalRead(pulsut1) == LOW)                   // OM lpulsut1 ÄR låg 
     {
      intervall = intervalltot ;                         // så skall Aintervall-tot läggas in som intervall
     }

     if(digitalRead(pulsut1) == HIGH)                  // OM pulsut1 ÄR hög 
     {
     intervall = intervalloff;                         // så skall intervall-off 1 läggas in som  intervall
     }
                  
  }                                                    // Slut

}  

Re: Spridarprovare, Arduino eller PLC

Postat: 23 oktober 2018, 08:05:34
av Johnny Borg
Jäklar vad ni har trixat ;)

Kul.

De stämmer att 22ms är omöjligt på 150 hz.

Grejen är att de inställningsmöjligheten ska finnas då man ibland använder sig av 30hz 22ms och även 150hz vid 1ms.
Man kan ju göra att pulslängden som är omöjlig försvinner vid för högt valt hz.

Men de är överkurs tycker jag. Man hör väldigt tydligt när man har för lång pulslängd.

Vid 50hz är 20ms max.

MVH Johnny Borg

Re: Spridarprovare, Arduino eller PLC

Postat: 23 oktober 2018, 20:05:59
av Janson1
Johny Borg: Redan gjort!

Re: Spridarprovare, Arduino eller PLC

Postat: 24 oktober 2018, 07:57:58
av Johnny Borg
Såg de nu :)

För er som är nyfikna hur en sån här maskin ser ut så här är två bilder hur min ser ut.

Dock bara spridarhållaren där men resten är ju rätt logiskt.

Pumpar
Regulator
Filter
Återrinningssystem
Gramvåg modell tålig
Kalkylprogram
Styr just nu allt via PC och ljudkortet