Analoge PWM aansturing met ATMega (Arduino)
-
Onderwerp starter - Berichten: 23
- Lid geworden op: 12 dec 2021 13:50
- Locatie: Alphen aan den Rijn
Analoge PWM aansturing met ATMega (Arduino)
Hoi,
ik ben dan deze kerst weer begonnen met mijn oude hobby. Als eerste wilde ik de aansturing aanpakken. Ik heb verschillende analoge locs en wilde kijken of ik daar zelf een aansturing coor kon bouwen. Voor de kerst spulletjes besteld en dan lekker aan de slag. Ik had een website gevonden met een voorbeeld en ben daar mee aan de slag gegaan. Zie http://www.1-zu-220.de/universal.php.
Na het opbouwen en een iets aangepaste versie van de code (ik gebruik geen LCD scherm en geen LEDs) heb ik inderdaad een eerste versie van mijn aansturing aan de praat. Eerst met een scope de boel gemonitord, daarna een oude loc erop (veiligheid voor alles!). Het PWM signaal ziet er best goed uit en de loc rijdt ook goed.
Ik had nu het idee dat ik ook twee sporen zou kunnen aansturen met een ATMega/L298 combinatie. Wel twee keer zoveel draaiknoppen nodig maar dat is logisch. Ik ben nu dus nog bezig om het programma aan te passen hiervoor. Daarna ga ik de nieuwe schakeling opbouwen en weer testen.
Ik heb ook al met andere locs gereden met deze schakeling. Het lijkt goed te werken. Ik moet als alles werkt nog wel iets van een behuizing of iets dergelijks moeten bouwen.
Nog even een foto van mijn huidige opstelling.
ik ben dan deze kerst weer begonnen met mijn oude hobby. Als eerste wilde ik de aansturing aanpakken. Ik heb verschillende analoge locs en wilde kijken of ik daar zelf een aansturing coor kon bouwen. Voor de kerst spulletjes besteld en dan lekker aan de slag. Ik had een website gevonden met een voorbeeld en ben daar mee aan de slag gegaan. Zie http://www.1-zu-220.de/universal.php.
Na het opbouwen en een iets aangepaste versie van de code (ik gebruik geen LCD scherm en geen LEDs) heb ik inderdaad een eerste versie van mijn aansturing aan de praat. Eerst met een scope de boel gemonitord, daarna een oude loc erop (veiligheid voor alles!). Het PWM signaal ziet er best goed uit en de loc rijdt ook goed.
Ik had nu het idee dat ik ook twee sporen zou kunnen aansturen met een ATMega/L298 combinatie. Wel twee keer zoveel draaiknoppen nodig maar dat is logisch. Ik ben nu dus nog bezig om het programma aan te passen hiervoor. Daarna ga ik de nieuwe schakeling opbouwen en weer testen.
Ik heb ook al met andere locs gereden met deze schakeling. Het lijkt goed te werken. Ik moet als alles werkt nog wel iets van een behuizing of iets dergelijks moeten bouwen.
Nog even een foto van mijn huidige opstelling.
Groet, Jurriaan
-
- Berichten: 410
- Lid geworden op: 05 jan 2021 20:06
- Locatie: Omgeving Rotterdam mijn geboorte stad
Re: Analoge PWM aansturing met ATMega (Arduino)
Leuk project ga ik zeker volgen maar waar is de Arduino in dit beeld of gebruik je alleen het betreffende IC.
Groeten Marcel V
-
Onderwerp starter - Berichten: 23
- Lid geworden op: 12 dec 2021 13:50
- Locatie: Alphen aan den Rijn
Re: Analoge PWM aansturing met ATMega (Arduino)
Ik gebruik een ATMega328 IC (te zien op het breadboard). Dit is een zelfde IC die op een Arduino Uno wordt gebruikt.Onmogelijkhier schreef: ↑03 jan 2022 09:33 Leuk project ga ik zeker volgen maar waar is de Arduino in dit beeld of gebruik je alleen het betreffende IC.
Groet, Jurriaan
-
- Berichten: 410
- Lid geworden op: 05 jan 2021 20:06
- Locatie: Omgeving Rotterdam mijn geboorte stad
Re: Analoge PWM aansturing met ATMega (Arduino)
Had ik het goed gezien. Wel moeilijker om een en ander te volgen kwa aansluitingen.
Groeten Marcel V
-
Onderwerp starter - Berichten: 23
- Lid geworden op: 12 dec 2021 13:50
- Locatie: Alphen aan den Rijn
Re: Analoge PWM aansturing met ATMega (Arduino)
Het is ook inderdaad wel een dradenboel. Ik ben ook nog aan het bedenken hoe het moet worden met de uiteindelijke schakeling. Ik heb een aparte H-brug (rode printplaat) en straks ook een printplaat voor de ATMega. De potmeters komen uiteraard in een plaat als controlepaneel. Dus ik moet ook nog pinheaders of zo hebben op de printplaat voor de kabels. Dus nog even knutselen om de boel netjes aan te sluiten en te installeren.
Groet, Jurriaan
-
- Berichten: 410
- Lid geworden op: 05 jan 2021 20:06
- Locatie: Omgeving Rotterdam mijn geboorte stad
Re: Analoge PWM aansturing met ATMega (Arduino)
Ik neem aan dat de H-brug de motor sturing print is.
Ik volg het wel maar mijn kennis van Arduino is niet heel erg groot.
Ik volg het wel maar mijn kennis van Arduino is niet heel erg groot.
Groeten Marcel V
-
Onderwerp starter - Berichten: 23
- Lid geworden op: 12 dec 2021 13:50
- Locatie: Alphen aan den Rijn
Re: Analoge PWM aansturing met ATMega (Arduino)
Klopt inderdaad. De H-brug (L298) zorgt voor de stroomvoorziening. De ATMega is geprogrammeerd om een PWM- ofwel pulsbreedtesignaal te genereren die dus de stroomvoorziening aanstuurt.Onmogelijkhier schreef: ↑03 jan 2022 11:47 Ik neem aan dat de H-brug de motor sturing print is.
Ik volg het wel maar mijn kennis van Arduino is niet heel erg groot.
Groet, Jurriaan
-
- Berichten: 410
- Lid geworden op: 05 jan 2021 20:06
- Locatie: Omgeving Rotterdam mijn geboorte stad
Re: Analoge PWM aansturing met ATMega (Arduino)
Ik ben ook met iets dergelijks bezig met behulp van fenna. Moet nog even wachten op wat onderdeeltjes en dan gaan we kijken of er iets wil werken.
Zie Analoog minitrix wissel aansturen met Arduino.
Zie Analoog minitrix wissel aansturen met Arduino.
Groeten Marcel V
-
Onderwerp starter - Berichten: 23
- Lid geworden op: 12 dec 2021 13:50
- Locatie: Alphen aan den Rijn
Re: Analoge PWM aansturing met ATMega (Arduino)
Ik zie het! Grappig. Dit is trouwens ook mijn eerste project met een Arduino (of eigenlijk de processor die er in zit).Onmogelijkhier schreef: ↑03 jan 2022 18:30 Ik ben ook met iets dergelijks bezig met behulp van fenna. Moet nog even wachten op wat onderdeeltjes en dan gaan we kijken of er iets wil werken.
Zie Analoog minitrix wissel aansturen met Arduino.
Groet, Jurriaan
Re: Analoge PWM aansturing met ATMega (Arduino)
Het wordt nog wat met atmega/arduino PWM en analoge locjes
welke timer gebruik je en heb je een prescaler toegepast / aangepast?
Fenna
welke timer gebruik je en heb je een prescaler toegepast / aangepast?
Fenna
-
Onderwerp starter - Berichten: 23
- Lid geworden op: 12 dec 2021 13:50
- Locatie: Alphen aan den Rijn
Re: Analoge PWM aansturing met ATMega (Arduino)
Tsja, oude elektrotechneut hier. De schakeling waar ik mijn opzet op heb gebaseerd heeft meerdere opties met nehulp van een BCD schakelaar te selecteren. Ik kan dus schakelen tussen een aantal frequenties. De schakeling gebruikt timer0 en timer1. Deze zijn parallel aangesloten maar slechts één is actief. Dit zijn zijn de frequenties die in de code gedefinieerd zijn.
Code: Selecteer alles
//---------------------------------------------- Set PWM frequency for D9 & D10 -------------------------------
// TCCR1B = TCCR1B & B11111000 | B00000001; // set timer 1 divisor to 1 for PWM frequency of 31372.55 Hz
// TCCR1B = TCCR1B & B11111000 | B00000010; // set timer 1 divisor to 8 for PWM frequency of 3921.16 Hz
// TCCR1B = TCCR1B & B11111000 | B00000011; // set timer 1 divisor to 64 for PWM frequency of 490.20 Hz
// TCCR1B = TCCR1B & B11111000 | B00000100; // set timer 1 divisor to 256 for PWM frequency of 122.55 Hz
//---------------------------------------------- Set PWM frequency for D5 & D6 --------------------------------
// TCCR0B = TCCR0B & B11111000 | B00000001; // set timer 0 divisor to 1 for PWM frequency of 62500.00 Hz
// TCCR0B = TCCR0B & B11111000 | B00000010; // set timer 0 divisor to 8 for PWM frequency of 7812.50 Hz
// TCCR0B = TCCR0B & B11111000 | B00000011; // set timer 0 divisor to 64 for PWM frequency of 976.56 Hz
// TCCR0B = TCCR0B & B11111000 | B00000100; // set timer 0 divisor to 256 for PWM frequency of 244.14 Hz
// TCCR0B = TCCR0B & B11111000 | B00000101; // set timer 0 divisor to 1024 for PWM frequency of 61.04 Hz
Ik ben nu bezig om de code te verbouwen zodat ik met één ATMega/L298 combinatie twee sporen aan te kunnen sturen. Vraagje dan aan jou, Fenna: kan ik een analogWrite naar de andere PWM pinnen sturen (OC0B of OC1B) of is mijn gedachtengang verkeerd? Op dit moment stuurt mijn code een analogWrite naar OC0A of OC1A, afhankelijk van de frquentie.
Misschien dat ik de frequentie selectie ook wel eruit haal. Ik merk dat de meeste locs beter rijden bij hogere frequenties wat ook logisch is.
Jurriaan
Groet, Jurriaan
Re: Analoge PWM aansturing met ATMega (Arduino)
Hallo Juriaan,
Uit je beschrijving maak ik op dat jouw code wat geavanceerder is/wordt dan de mijne. Maakt me nieuwsgierig
In de arduino uno/nano/atmega328 wordt timer 0 gebruikt voor interne timing. Als je daarop een prescaler toepast, verstoor je onmiddelijk alle interne timing van de atmega. millis() en delay() bv werken niet meer correct.
De PWM pinnen zijn per 2 of 3 (afhankelijk van de mcu) aan een timer gekoppeld. Deze link is daarbij voor mij erg handig gebleken. Ik heb niet met een scoop ernaast gezeten, maar met experimenteren kwam ik op phase correct PWM op timer 2 met 1024 prescaler (arduino nano/uno /atmega328 pinnen D3 en D11). In mijn ervaring werkt deze het beste zonder verder de interne timing te verstoren en geen onhandig gefluit als de loc wel al pulsjes krijgt, maar nog niet rijdt, of nog erg traag rijdt Op mijn nanootje (5v, 16Mhz) komt dat op een netto frequentie van 30.64Hz fase correcte PWM.
Als je voor een timer de prescaler en/of de soort PWM hebt ingesteld, geldt deze voor alle output pinnen die bij die timer horen. Zie voor een overzicht het linkje dat ik eerder deelde, ofwel een analogWrite naar OC0B geeft hetzelfde output beeld als een analogWrite naar OC0A (als je de analogWrite met dezelfde waarde doet uiteraard). Een beetje een omweg naar een antwoord op je vraag, maar elke PWM pin kan een afzonderlijk signaal geven. OC0A en OC0B zijn afzonderlijke pinnen, maar beide gekoppeld aan timer 0. Ze kunnen elk hun eigen signaal geven, maar hoe dat signaal op deze beide pinnen wordt opgebouwd hangt af van de instellingen voor timer 0. Dat werkt zo voor alle timers en de daaraan gekoppelde OCxx pinnen.
Fenna
Uit je beschrijving maak ik op dat jouw code wat geavanceerder is/wordt dan de mijne. Maakt me nieuwsgierig
In de arduino uno/nano/atmega328 wordt timer 0 gebruikt voor interne timing. Als je daarop een prescaler toepast, verstoor je onmiddelijk alle interne timing van de atmega. millis() en delay() bv werken niet meer correct.
De PWM pinnen zijn per 2 of 3 (afhankelijk van de mcu) aan een timer gekoppeld. Deze link is daarbij voor mij erg handig gebleken. Ik heb niet met een scoop ernaast gezeten, maar met experimenteren kwam ik op phase correct PWM op timer 2 met 1024 prescaler (arduino nano/uno /atmega328 pinnen D3 en D11). In mijn ervaring werkt deze het beste zonder verder de interne timing te verstoren en geen onhandig gefluit als de loc wel al pulsjes krijgt, maar nog niet rijdt, of nog erg traag rijdt Op mijn nanootje (5v, 16Mhz) komt dat op een netto frequentie van 30.64Hz fase correcte PWM.
Als je voor een timer de prescaler en/of de soort PWM hebt ingesteld, geldt deze voor alle output pinnen die bij die timer horen. Zie voor een overzicht het linkje dat ik eerder deelde, ofwel een analogWrite naar OC0B geeft hetzelfde output beeld als een analogWrite naar OC0A (als je de analogWrite met dezelfde waarde doet uiteraard). Een beetje een omweg naar een antwoord op je vraag, maar elke PWM pin kan een afzonderlijk signaal geven. OC0A en OC0B zijn afzonderlijke pinnen, maar beide gekoppeld aan timer 0. Ze kunnen elk hun eigen signaal geven, maar hoe dat signaal op deze beide pinnen wordt opgebouwd hangt af van de instellingen voor timer 0. Dat werkt zo voor alle timers en de daaraan gekoppelde OCxx pinnen.
Fenna
-
Onderwerp starter - Berichten: 23
- Lid geworden op: 12 dec 2021 13:50
- Locatie: Alphen aan den Rijn
Re: Analoge PWM aansturing met ATMega (Arduino)
Bedankt voor je antwoord, Fenna! En bedankt voor de link. Deze had ik nog niet gevonden. Ik heb al veel gelezen en had ook al een vermoeden dat het wel mogelijk zou zijn. Dat ze op dezelfde frequentie draaien is geen probleem. Ik heb er ook voor gekozen een "inbouw" BCD schakelaar te kopen in plaats van een soort potmeter. De mogelijkheid hebben om de frequentie aan te passen ten opzichte van meteen kunnen draaien aan de knoppen. Ik denk dat het voornamelijk één keer instellen is.
Ik had ook al gelezen over de timer en met name timer0 maar ik gebruik (op dit moment) geen delay(). Ik ben nog bezig om de code op te schonen en de namen van de variabelen om te zetten in de voor mij gebruikelijke engelse taal (originele code is duits). Zoals ik al aangaf is dit mijn eerste project met een ATMega en ben dus nog lerende.
Ik ga ook nog eens kijken naar de fase correcte PWM. Al piepen de locs ook niet bij de hogere frequenties (sommige nog wel op ~4kHz en enkele op ~8kHz maar hoger zeker niet meer).
Ik ben nu al blij op dit forum!
Ik had ook al gelezen over de timer en met name timer0 maar ik gebruik (op dit moment) geen delay(). Ik ben nog bezig om de code op te schonen en de namen van de variabelen om te zetten in de voor mij gebruikelijke engelse taal (originele code is duits). Zoals ik al aangaf is dit mijn eerste project met een ATMega en ben dus nog lerende.
Ik ga ook nog eens kijken naar de fase correcte PWM. Al piepen de locs ook niet bij de hogere frequenties (sommige nog wel op ~4kHz en enkele op ~8kHz maar hoger zeker niet meer).
Ik ben nu al blij op dit forum!
Groet, Jurriaan
Re: Analoge PWM aansturing met ATMega (Arduino)
Als je de prescaler van timer 0 op de default waarde laat, hoef je voor interne timing problemen niet bang te zijn. Ik gebruik voor mijn rijregelaar wel een prescaler en ben daarom uitgeweken van timer 0 naar timer 2. Op verschillende plaatsen in mijn code gebruik ik millis() en in de void setup() komen een paar delay() regels voor.
Ook het interrupt systeem is afhankelijk van timer 0 en ik gebruik regelmatig interrupts in mijn code, mijn standaard 'lege' sketch is een 'multitask' sketch op timer interrupt basis.
Op eenzelfde manier wordt timer1 gebruikt door de servo library. Omdat ik ook wel eens een servo gebruik, laat ik timer1 ook met rust.
Arduino / atmega328 is een leuk platform met laagdrempelige instap, maar stiekem best geinig en verrassend krachtig (7 servo's met afzonderlijk instelbare slag en draaisnelheid bv die bij opstarten doorgaat waar de servo's gebleven zijn bij afsluiten. Ofwel de arduino die zelf zijn eigen voedingspanning nog even in leven laat als de schakelaar al op 'uit' staat )
Fenna
Ook het interrupt systeem is afhankelijk van timer 0 en ik gebruik regelmatig interrupts in mijn code, mijn standaard 'lege' sketch is een 'multitask' sketch op timer interrupt basis.
Op eenzelfde manier wordt timer1 gebruikt door de servo library. Omdat ik ook wel eens een servo gebruik, laat ik timer1 ook met rust.
Arduino / atmega328 is een leuk platform met laagdrempelige instap, maar stiekem best geinig en verrassend krachtig (7 servo's met afzonderlijk instelbare slag en draaisnelheid bv die bij opstarten doorgaat waar de servo's gebleven zijn bij afsluiten. Ofwel de arduino die zelf zijn eigen voedingspanning nog even in leven laat als de schakelaar al op 'uit' staat )
Fenna
-
Onderwerp starter - Berichten: 23
- Lid geworden op: 12 dec 2021 13:50
- Locatie: Alphen aan den Rijn
Re: Analoge PWM aansturing met ATMega (Arduino)
Ik heb vandaag mijn nieuwe code in de MCU ge-upload en de schakeling uitgebreid met extra potmeters. Ik kan nu inderdaad twee sporen aansturen met één MCU en H-brug. Precies wat ik wilde.
Ik heb zitten nadenken over hoe ik de boel een beetje netjes aan kan sluiten en heb besloten dat ik eigen PCBs ga maken. Ik heb hier een ontwerp (eigenlijk is dit al het tweede ontwerp) gemaakt met behulp van KiCad. Ik ben er ook achter gekomen dat een schakeling er mooi uit kan zien maar dat dat voor de PCB niet het geval kan zijn. Ik moet dus not wat poorten in de code verwisselen. Dit was om de routing op het PCB gemakkelijker en korter te maken. Dit is een render uit KiCad van de PCB.
Naast de PCBs bestellen moet ik nog wat andere spulletjes hebben. Daarna kan ik verder met de aansturing.
Ik heb zitten nadenken over hoe ik de boel een beetje netjes aan kan sluiten en heb besloten dat ik eigen PCBs ga maken. Ik heb hier een ontwerp (eigenlijk is dit al het tweede ontwerp) gemaakt met behulp van KiCad. Ik ben er ook achter gekomen dat een schakeling er mooi uit kan zien maar dat dat voor de PCB niet het geval kan zijn. Ik moet dus not wat poorten in de code verwisselen. Dit was om de routing op het PCB gemakkelijker en korter te maken. Dit is een render uit KiCad van de PCB.
Naast de PCBs bestellen moet ik nog wat andere spulletjes hebben. Daarna kan ik verder met de aansturing.
Groet, Jurriaan
-
- Berichten: 410
- Lid geworden op: 05 jan 2021 20:06
- Locatie: Omgeving Rotterdam mijn geboorte stad
Re: Analoge PWM aansturing met ATMega (Arduino)
Loont dat om zelf een print te laten maken, lijkt me niet echt goedkoop.
Groeten Marcel V
-
Onderwerp starter - Berichten: 23
- Lid geworden op: 12 dec 2021 13:50
- Locatie: Alphen aan den Rijn
Re: Analoge PWM aansturing met ATMega (Arduino)
Ik merk dat de elektrotechneut in mij naar boven komt en ben er lekker mee bezig. De tweede versie is ook kleiner dan de eerste versie. Kleiner is goedkoper namelijk. En omdat ik maar twee sporen (of secties) kan aansturen heb ik er wel een paar nodig denk ik. Ik zit nu te kijken naar zo'n € 6 à € 7 euro per PCB (bij ongeveer 15 stuks, prijs per stuk wordt lager bij grotere aantallen. Voor 3 tientjes meer krijg je het dubbele aantal).Onmogelijkhier schreef: ↑09 jan 2022 18:29 Loont dat om zelf een print te laten maken, lijkt me niet echt goedkoop.
Het is natuutlijk wel zo dat ik niet meer verbindingen hoef te maken. Alles heeft zijn eigen plaats. Vastsolderen en klaar. Ik vind de prijs nog wel meevallen maar dat is natuurlijk persoonlijk.
-edit- Ik zie dat het minimum aantal 2 is. Dan kost de PCB € 33 per stuk. Dus inderdaad een enkele (of twee) maken loont dus niet.
Groet, Jurriaan
-
- Berichten: 410
- Lid geworden op: 05 jan 2021 20:06
- Locatie: Omgeving Rotterdam mijn geboorte stad
Re: Analoge PWM aansturing met ATMega (Arduino)
Daar was ik al bang voor. Is de fabricage in China of Europa.
China kan voordelig zijn maar dan zit je met lange levertijden.
China kan voordelig zijn maar dan zit je met lange levertijden.
Groeten Marcel V
-
Onderwerp starter - Berichten: 23
- Lid geworden op: 12 dec 2021 13:50
- Locatie: Alphen aan den Rijn
Re: Analoge PWM aansturing met ATMega (Arduino)
Ik neem aan Europa, het is een Nederlands bedrijf. Levertijd is ongeveer 15 werkdagen volgens de website (budget). Het kan ook sneller (5-7 werkdagen, maar dan is het uiteraard duurder).
Groet, Jurriaan
-
- Berichten: 410
- Lid geworden op: 05 jan 2021 20:06
- Locatie: Omgeving Rotterdam mijn geboorte stad
Re: Analoge PWM aansturing met ATMega (Arduino)
Zou maar eens verder zoeken binnen Europa.
Groeten Marcel V
-
Onderwerp starter - Berichten: 23
- Lid geworden op: 12 dec 2021 13:50
- Locatie: Alphen aan den Rijn
Re: Analoge PWM aansturing met ATMega (Arduino)
Ik heb gekeken in Europa maar de prijzen zijn hoger dan dat ik had gezien. Ik heb nu toch een bestelling gedaan in China (JLCPCB) voor (veel) minder. Ik zie wel wanneer de PCBs binnen zijn. Ze zijn nu in ieder geval al in productie heb ik gezien op hun website.
Groet, Jurriaan
Re: Analoge PWM aansturing met ATMega (Arduino)
AllPCB (China) op maandag order plaatsen vrijdag in huis.
Groetjes.
Groetjes.
Re: Analoge PWM aansturing met ATMega (Arduino)
Wat een leuk project.
Ik heb zelf ook de hobby weer opgepakt en wil eigenlijk proberen om analoog automatisch meerdere loc's tegelijk te laten rijden.
Het is best wel even zoeken om een leuk project met analoog en arduino te vinden.
Ik ben nu hier naar aan het kijken: https://arduinorailwaycontrol.com/ nadeel is dat de bouwer hiervan uit Rusland komt en dat de bijbehorende Android app niet beschikbaar is.
Het lijkt me wel een mooie bron voor het bedenken van de juiste sketch voor de aansturing van de Arduino chip.
Kees
p.s.
Ik wil hier eigenlijk een los draadje van maken, waar kan ik dat het beste plaatsen?
Ik heb zelf ook de hobby weer opgepakt en wil eigenlijk proberen om analoog automatisch meerdere loc's tegelijk te laten rijden.
Het is best wel even zoeken om een leuk project met analoog en arduino te vinden.
Ik ben nu hier naar aan het kijken: https://arduinorailwaycontrol.com/ nadeel is dat de bouwer hiervan uit Rusland komt en dat de bijbehorende Android app niet beschikbaar is.
Het lijkt me wel een mooie bron voor het bedenken van de juiste sketch voor de aansturing van de Arduino chip.
Kees
p.s.
Ik wil hier eigenlijk een los draadje van maken, waar kan ik dat het beste plaatsen?