Spridarprovare, Arduino eller PLC

Planering och tankar kring eventuella framtida projekt.
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Spridarprovare, Arduino eller PLC

Inlägg 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!
Användarvisningsbild
mrfrenzy
Co Admin
Inlägg: 14819
Blev medlem: 16 april 2006, 17:04:10

Re: Spridarprovare, Arduino eller PLC

Inlägg 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
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Spridarprovare, Arduino eller PLC

Inlägg 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...
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Spridarprovare, Arduino eller PLC

Inlägg 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...
sc3
Inlägg: 173
Blev medlem: 10 januari 2011, 11:05:40
Ort: Umeå

Re: Spridarprovare, Arduino eller PLC

Inlägg 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.
Användarvisningsbild
mrfrenzy
Co Admin
Inlägg: 14819
Blev medlem: 16 april 2006, 17:04:10

Re: Spridarprovare, Arduino eller PLC

Inlägg 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?
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Spridarprovare, Arduino eller PLC

Inlägg 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

}  
Johnny Borg
Inlägg: 10
Blev medlem: 4 december 2013, 09:23:16

Re: Spridarprovare, Arduino eller PLC

Inlägg 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
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Spridarprovare, Arduino eller PLC

Inlägg av Janson1 »

Johny Borg: Redan gjort!
Johnny Borg
Inlägg: 10
Blev medlem: 4 december 2013, 09:23:16

Re: Spridarprovare, Arduino eller PLC

Inlägg 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
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar