Buggfix Plus
Aktuellt datum och tid: 10.28 2018-12-15

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 40 inlägg ]  Gå till sida Föregående  1, 2, 3
Författare Meddelande
InläggPostat: 21.30 2018-10-11 

Blev medlem: 09.06 2016-12-01
Inlägg: 582
Ort: Marks Kommun
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!


Upp
 Profil  
 
InläggPostat: 21.36 2018-10-11 
Co Admin
Användarvisningsbild

Blev medlem: 16.04 2006-04-16
Inlägg: 9145
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


Upp
 Profil  
 
InläggPostat: 06.12 2018-10-12 

Blev medlem: 09.06 2016-12-01
Inlägg: 582
Ort: Marks Kommun
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...


Upp
 Profil  
 
InläggPostat: 07.16 2018-10-12 

Blev medlem: 09.06 2016-12-01
Inlägg: 582
Ort: Marks Kommun
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...


Upp
 Profil  
 
InläggPostat: 09.22 2018-10-12 

Blev medlem: 11.05 2011-01-10
Inlägg: 157
Ort: Umeå
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.


Upp
 Profil  
 
InläggPostat: 09.27 2018-10-12 
Co Admin
Användarvisningsbild

Blev medlem: 16.04 2006-04-16
Inlägg: 9145
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?


Upp
 Profil  
 
InläggPostat: 10.48 2018-10-12 

Blev medlem: 09.06 2016-12-01
Inlägg: 582
Ort: Marks Kommun
Här är mitt alster med funktion enligt tidigare inlägg...

Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
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



Upp
 Profil  
 
InläggPostat: 07.05 2018-10-23 

Blev medlem: 09.23 2013-12-04
Inlägg: 10
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


Upp
 Profil  
 
InläggPostat: 19.05 2018-10-23 

Blev medlem: 09.06 2016-12-01
Inlägg: 582
Ort: Marks Kommun
Johny Borg: Redan gjort!


Upp
 Profil  
 
InläggPostat: 06.57 2018-10-24 

Blev medlem: 09.23 2013-12-04
Inlägg: 10
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


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 40 inlägg ]  Gå till sida Föregående  1, 2, 3

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 4 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010