met PIC via triac en met Hall sensor AC motortoeren regelen.


Op 20 november 2019 09:03:16 schreef MGP:
De radeloosheid druipt van dit topic af.

O echt?

Mijn besturing werkt.
Alleen wordt er hier gezegd dat het met interrupts moet!

Ik heb nu een berekening die een wachttijd (="zoveel") maakt die gestart wordt na de nuldoorgangdetectiepuls.
iets als:
als ingang nuldetectie = 1 then
uitgang = 0
delayus "zoveel"
uitgang = 1

vreselijk simpel toch?

Het probleem:
Ik moet met die pic na twee verschillende vetragingstijden 2 uitgangen hoogmaken, want twee motoren.
En dat gaat niet, want de pic staat vast als hij bezig is met 1 delay.

Oplossing: twee pics; voor iedere motor een zelfstandig wachtende pic.

Maar dat is volgens de deskundigen een geheel foute oplossing, het moet met interrupts.

Vraag die nog steeds niet beantwoord is:
hoe dan?

Heeft niets met radeloosheid te maken.

edit
het zou ook met timers kunnen:

als ingang nuldetectie = 1 then
uitgang1 = 0
timer1 = 0
uitgang2 = 0
timer2 = 0
start timer1
start timer2

if timer1 = zoveel1 then uitgang1 = 1
if timer2 = zoveel2 then uitgang2 = 1

[Bericht gewijzigd door stortbak op 20 november 2019 13:53:58 (12%)]

Lambiek

Special Member

Op 20 november 2019 13:48:06 schreef stortbak:
Alleen wordt er hier gezegd dat het met interrupts moet!

Hoeft helemaal niet, het kan ook zoals je nu gedaan hebt. :)

vreselijk simpel toch?

Ja.

Maar dat is volgens de deskundigen een geheel foute oplossing, het moet met interrupts.

Dat hoeft niet fout te zijn, maar een interrupt zou ook een oplossing kunnen zijn.

Vraag die nog steeds niet beantwoord is:
hoe dan?

als ingang nuldetectie = 1 then
uitgang1 = 0
timer1 = 0
uitgang2 = 0
timer2 = 0
start timer1
start timer2

if timer1 = zoveel1 then uitgang1 = 1
if timer2 = zoveel2 then uitgang2 = 1

Dat is toch een vorm van een interrupt, heb je daar al een voorbeeld van gegeven.

Maar als het nu werkt, is het toch ook goed.

Als je haar maar goed zit, GROETEN LAMBIEK.

Dat is toch een vorm van een interrupt, heb je daar al een voorbeeld van gegeven.

Nee, da's pollen/state machine... ;)
Dat werkt ook, is alleen omslachtig met 3 pic's voor één simpel klusje. (daar komt ook nog de pic->pic communicatie bij)
Hoe meer (onnodige) onderdelen, hoe eerder iets mis gaat.

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Op 20 november 2019 14:36:35 schreef Arco:
[...]
(daar komt ook nog de pic->pic communicatie bij)

En dat is me toch vreselijk ontiegelijk moeilijk............ veel moeilijker dan de interrupts.
Maar wat doe jij hier nog?
Toch je berichtenteller weer ophogen met een als altijd zinloos commentaar?
Het enige dat ik van je lees is dat het allemaal niet klopt en dat het kapot kan en dat het omslachtig is, dat het allemaal veeel eenvoudiger kan, maar werkelijk geen letter die tot een oplossing zou kunnen gaan leiden.

Lambiek

Special Member

Op 20 november 2019 14:36:35 schreef Arco:
Nee, da's pollen/state machine... ;)

Pollen? Met een on interrupt een teller/timer aanmaken?

Dat werkt ook, is alleen omslachtig met 3 pic's voor één simpel klusje.

Je zal de fabrikanten de kost moeten geven die het zo doen, ben al zoveel controller borden tegen gekomen waar meerdere processoren op zitten en die babbelen gewoon met elkaar.

Dus als er in een machine meerdere PLC's zitten "die ook met elkaar kletsen" is dat ook een slecht idee?

Hoe meer (onnodige) onderdelen, hoe eerder iets mis gaat.

Dat is een beetje onzin natuurlijk, ligt er helemaal aan hoe het ontworpen is en hoe het software matig in elkaar zit. Als je het over de prijs hebt, dan wordt het een ander verhaal, zeker bij grote aantallen.

Op 20 november 2019 14:54:06 schreef stortbak:
Maar wat doe jij hier nog?
Toch je berichtenteller weer ophogen met een als altijd zinloos commentaar?

Dat is nu weer zo'n loze opmerking, beetje jammer weer.

Als je haar maar goed zit, GROETEN LAMBIEK.

@TS: Ga jij nou maar verder met je 'creatief met kurk' cursus... ;)

@lambiek:
TS gebruikt geen interrupts maar polt de timerflag in de main routine.

Dus als er in een machine meerdere PLC's zitten "die ook met elkaar kletsen" is dat ook een slecht idee?

Nee, dat wordt al heel lang gedaan. Maar iedere plc of processor moet wel iets zinvols te doen hebben. (alleen 1 teller bijhouden vind ik niet zinvol)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Op 20 november 2019 15:08:16 schreef Lambiek:
Dat is nu weer zo'n loze opmerking, beetje jammer weer.

Met alleen maar commentaar als:

Op 20 november 2019 15:24:46 schreef Arco:
polt de timerflag in de main routine.

terwijl hij zelf nog geen regeltje als voorbeeld wil typen om mij uit te leggen hoe ik een interrupt kan gebruiken,
.
.
.
.
Lees al zijn bijdrages eens na, je zal zien dat er geen enkele naar een oplossing leidt.
Het is alleen maar commentaar, dit deugt niet, dat is niet goed en uiteraard wel heel veel stoer Engels.

Als je echt iemand wilt (en vooral KAN) helpen, kan je ook wat bijvoegen als: "verander die en die regel eens in dit of dat en vul aan met zus en zo".
Maar nee, weer strooien met "polt de timerflag."

Tja,

Als je niets afweet van de basiswerking van microcontrollers zul je eerst dat onder de knie moeten krijgen. (of een andere hobby zoeken)
(een timerflag hoort toch wel bij de basisbeginselen)
En Engels: als je wilt programmeren zul je dat moeten leren. Je kunt niet verwachten dat datasheets en handleidingen in het Nederlands worden gemaakt.

Wat betreft voorbeelden: ik heb er een gegeven. Dat je dat (simpele) voorbeeld niet begrijpt kan ik niet helpen...
(ik zou nog wel verder willen uitleggen en helpen, maar niet als je jezelf zo als een zwartgallige droplul opstelt...)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Op 20 november 2019 13:48:06 schreef stortbak:
[...]
Mijn besturing werkt.

Dat programma van Lambiek werkt, maar dat jij dat programma aangepast hebt aan met tacho daar geloof ik niks van >:)

Hier heb je mijn programma.

Ben toch maar voor een analoge instelling gegaan.

- De integratietijd bedraagt 1sec, dat wil zeggen dat de snelheid 1stap op- of afloopt per sec, dit om de AC-motor de tijd te geven zich aan te passen. Dit kan later aangepast worden als de regeling sneller moet werken, maar eerst proberen.

- Bij de 1ste start begint de motor op volle snelheid om daarna af te bouwen tot de ingestelde snelheid.

- Bij een stopcommando stopt de motor maar omdat er geen tachopulsen meer komen gaat de regeling naar maximum RPM in stappen van 1sec en start terug op max.

- De regeling regelt zich zoals je zelf hebt opgegeven, de minimum instelling werd op 6Hz gezet, lager kun je de motor niet laten draaien zonder programma aanpassingen.
Ook de analoge instelling werd hierop aangepast min 6Hz(360tr/min) en max 45Hz (2700tr/min).

Eén belanrijk gegeven, ik heb geen opstelling gemaakt, enkel de signalen met de scoop bekeken maar dat wil niet zeggen dat ik geen fout over het hoofd heb gezien, daarvoor moet ik feedback krijgen als je het programma gebruikt tenminste, daar ben je volledig vrij in.

Als je het test wees geduldig, een AC motor is niet zo manipuleerbaar als een dc motor, vooral die 1sec integratietijd kan langer uitvallen dan verwacht, heb daar geen ervaring mee.

LDmicro user.
Lambiek

Special Member

Op 20 november 2019 15:24:46 schreef Arco:
Nee, dat wordt al heel lang gedaan. Maar iedere plc of processor moet wel iets zinvols te doen hebben. (alleen 1 teller bijhouden vind ik niet zinvol)

Het moet inderdaad wel zinvol zijn ja. :)

Op 20 november 2019 17:49:32 schreef MGP:
Hier heb je mijn programma...........

Je hebt je middag weer zinvol besteed. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 20 november 2019 18:13:55 schreef Lambiek:
Je hebt je middag weer zinvol besteed. :)

Deze namiddag ben ik gaan petanquen bij de 55+ ;)
Veel te mooi weer om binnen te blijven.

Een stuk ervan had ik al eens gemaakt, de rest gisterenavond deze voormiddag en aan de scoop gelegd.
Vanavond de tekening gemaakt.

LDmicro user.

Op 20 november 2019 17:49:32 schreef MGP:
[...]
Dat programma van Lambiek werkt, maar dat jij dat programma aangepast hebt aan met tacho daar geloof ik niks van >:)

Hier heb je mijn programma.

Dank voor de moeite.
Ik heb alleen niets aan HEX code.
Die kan ik namelijk niet vertalen in normaal leesbare dingen waarbij ik kan zien wat er gebeurt.
Kan ik dus ook niet uitbreiden met wat ik nog meer nodig heb.

Ik heb gisteren een nietwerkend thermokoppel retour Duitsland gestuurd en hoop daar een wel werkend voor terug te krijgen.
Want mijn pic kijkt ook nog naar rookgastemperatuur en cv watertemperatuur.

Vanmorgen heb ik de woonkamer weer eens "toonbaar" gemaakt en het experimenteerbord even in de kast gezet.
Als de kachelprint het begeeft, is het snel genoeg overgezet, maar voorlopig wilde ik even wachten op warmere dagen voor de grote ombouw en test.
Daarna kan ik een print ontwerpen en maken en dan kan alles over.
Omdat het in de kast staat kan ik je ook niet zeggen met welke stappen mijn toerental regelbaar is.
Dat vind ik wel jammer.
En over die tacho........tja waarom zou ik zeggen dat het wel werkt terwijl het er niet in zit?
Ik hoef me hier niet beter voor te doen dan ik ben.

Later meer dus en dan zal ik bewijs aanleveren in de vorm van video.

Mocht er nog iemand kunnen uitleggen over die unterrupts, lees ik dat nog graag.

Je hebt niks aan de hex code, ok dan... want aan de programmacode heb je ook niks want daar kun jij toch niks aan veranderen zonder gedegen kennis van LDmicro.
Maar omdat je aandringt hieronder de LD code.

En over die tacho........tja waarom zou ik zeggen dat het wel werkt terwijl het er niet in zit?

Dan had ik het toch bij het rechte eind, niet uw programma maar Lambieks programma werkt.

Het heeft eigenlijk ook geen zin van interrupts uit te leggen op een forum dat wordt ook niks gezien de hoeveel literatuur die daar al over bestaat.
Maar hier een voorbeeld dat je in GCBasic kunt vinden.

De timer gebruikt een klok van 20 000 000/4 wat standaard is en de PS (prescaler) deelt de klok (5 000 000) nog eens door 8
Deze deelcijfers kun je binnen de perken aanpassen.

Telkens de timer in overflow gaat wordt een signaal gegeven (intern hardware) om eerst de subroutine "sub IncCounter" uit te voeren en daarna verder te gaan waarmee hij bezig was, hier is dat printen.
Een interrupt onderbreekt alles waarmee de controller bezig was en gaat na de afwikkeling verder met zijn gewone doen.

Eens echt goed deze routine eens bekijken, bij Picbasic heb je ook zoiets.

pic basic code:

'This program increments a counter every time Timer1 overflows
    #chip 16F876A, 20

    'LCD connection settings
    #define LCD_IO 4
    #define LCD_DB4 PORTC.4
    #define LCD_DB5 PORTC.5
    #define LCD_DB6 PORTC.6
    #define LCD_DB7 PORTC.7
    #define LCD_RS PORTC.0
    #define LCD_RW PORTC.1
    #define LCD_Enable PORTC.2

    InitTimer1 Osc, PS1_1/8 ' Prescaler is deler door 8
    StartTimer 1
    CounterValue = 0

    Wait 100 ms
    Print "Int Test"

    On Interrupt Timer1Overflow Call IncCounter

    Do
        CLS
        Print CounterValue
        Wait 100 ms
    Loop

    Sub IncCounter
        CounterValue ++
    End Sub
LDmicro user.
Lambiek

Special Member

Op 20 november 2019 19:22:11 schreef MGP:
Maar hier een voorbeeld dat je in GCBasic kunt vinden.

De timer gebruikt een klok van 20 000 000/4 wat standaard is en de PS (prescaler) deelt de klok (5 000 000) nog eens door 8
Deze deelcijfers kun je binnen de perken aanpassen.

Telkens de timer in overflow gaat wordt een signaal gegeven (intern hardware) om eerst de subroutine "sub IncCounter" uit te voeren en daarna verder te gaan waarmee hij bezig was, hier is dat printen.
Een interrupt onderbreekt alles waarmee de controller bezig was en gaat na de afwikkeling verder met zijn gewone doen.

Precies.

Eens echt goed deze routine eens bekijken, bij Picbasic heb je ook zoiets.

Die heb ik ook al geplaatst "ergens hier in het topic" maar als daar niets mee gedaan wordt....

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 20 november 2019 19:36:09 schreef Lambiek:

Die heb ik ook al geplaatst "ergens hier in het topic" maar als daar niets mee gedaan wordt....

ik meen dat in jouw prog staat
LIMITE_TIMER = 38
daar kreeg ik in 50 seconden 100 tellen.
Ik heb nu LIMITE_TIMER = 80
dan heb ik wel dat 100 secondes 100 tellen geeft.
DUS is er wel wat mee gedaan.

Ik heb toen ook ontdekt dat een afteltimer die door die commentaargever zo de hemel in geprezen wordt (boven de opteltimer), na nul gewoon doortelt en dus weer groter wordt dan 0.
Zeg je dus <0 then..........komt hij daar nooit. Lekker dom advies dus.
Maar dat is ook opgelost, ik heb nu een TMR0 die 2 optel en 2 afteltimers laat "meelopen" op zijn pulsen.

Maar ja, nog steeds zonder interrupts.

Op 20 november 2019 19:22:11 schreef MGP:
1,Maar omdat je aandringt hieronder de LD code.

2,Dan had ik het toch bij het rechte eind, niet uw programma maar Lambieks programma werkt.

1. Ik kijk er niet eens naar. Zonde van je werk, waarom post je het dan, je wist al van te voren dat ik er niets aan heb.
2. Toch krijg je mijn code niet als bewijs.
Na eerdere vragen naar code en schema werd na plaatsen ook niets gedaan.

Heren fijne avond.

@MGP: Waarom besteedt je nog tijd en moeite aan die trol?... ;)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Sorry maar ik hoef uw code niet, de mijne is veel beter ..geef mij 3 dagen en uw pelletkachel zal beter werken dan de originele versie :p

Btw: dat is geen zonde van mijn werk, integendeel en ben zelfs niet verrast, want ik weet heel goed hoe een forum werkt en kan mij ook heel goed voorstellen wie er aan de overkant zit.
Dat laatste was trouwens ook een onderdeel van mijn job vroeger.

edit: @Arco ben in een goede bui ;) maar dat was het laatste technisch antwoord.

LDmicro user.

Ik geef stortbak hierin gelijk. Zijn code werkt. Jouw code implementeren is voor hem riskant en moeilijk met daarbij het risico dat hij eindigt met een nietwerkend systeem. Zijn code werkt zonder interrupts en het spul kan ook zonder interrupts (op applicatieniveau) gebouwd worden. Er is ook niks mis met het gebruik van drie pic-jes. Ze kosten niks en het bespaart stortbak een hoop werk. Ik geef toe, het systeem van stortbak kan (hoogst waarschijnlijk) efficiënter gebouwd worden.

Bezoek mijn neefjes' site: www.tinuselectronics.nl

Weer een volslagen zinloos bericht, maar:

Op 20 november 2019 20:46:18 schreef Arco:
Aantal geposte berichten 35044

Knap hoor.

.
.
.

Op 20 november 2019 21:20:45 schreef ohm pi:
Ik geef stortbak hierin gelijk. Zijn code werkt zonder interrupts en het spul kan ook zonder interrupts (op applicatieniveau) gebouwd worden. Er is ook niks mis met het gebruik van drie pic-jes.

Dank voor dit waardevolle bericht. _/-\o_

@ohm pi, ik geef hem ook gelijk, het is zijn project, maar gaat dit ellenlange topic daarover?

EDIT Startpost:

Op 5 oktober 2019 08:50:51 schreef stortbak:
Geachte forummers,
is er al iemand die met een pic een 230 AC motor heeft aangestuurd en dan ook nog het gekozen toerental laat vasthouden door gebruik te maken van een hall sensor op de motoras?

Zijn daar al schema's en programmaregels van bekend, die je zou willen delen?

Motoren zijn 40W en minder.
Triac zal iets zijn als de 2N6073
de koppeling gaat via een optocoupler MOC3011
een zero crossing detector zal ook gebruikt moeten worden.
En ik las iets over een snubber (rimpelbluskring schat ik zo in)

Toepassing wordt voor een pelletkachel waarbij de ene motor de vijzel en de andere motor de rookgasventilator gaat aandrijven.

Ben voorlopig de enige die daar een bruikbaar antwoord op gegeven heeft. :p
....en mijn buikgevoel zegt dat hij daar toch gebruik van zal maken :)

LDmicro user.
Lambiek

Special Member

Op 20 november 2019 20:40:06 schreef stortbak:
ik meen dat in jouw prog staat
LIMITE_TIMER = 38
daar kreeg ik in 50 seconden 100 tellen.
Ik heb nu LIMITE_TIMER = 80
dan heb ik wel dat 100 secondes 100 tellen geeft.

Het ligt er helemaal aan wat je nodig hebt en welk kristal je gebruikt. Maar dat kun je inderdaad aanpassen met, "LIMITE_TIMER" dus gewoon een waarde ingeven die voor jou van toepassing is.

DUS is er wel wat mee gedaan.

Als je dat niet meld dat je daar mee aan de gang geweest bent, dat kunnen wij niet ruiken natuurlijk. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 6 oktober 2019 10:41:00 schreef MGP:
Je kunt ook eerst een Freq/Volt (LM331, LM2904 ..) maken en dit inlezen in een pic en vanaf daar verder doen, waarschijnlijk de eenvoudigste oplossing.

Opmerkelijk dat je dat niet in je eigen schema hebt gebruikt.

Dat was voor u de eenvoudigste oplossing, niet voor mij :p

Edit:

Op 20 november 2019 21:23:35 schreef stortbak:
Knap hoor...

Idd heel knap wat die hier doet, ook iemand met heel veel kennis en die het nog wil delen ook en zo kan ik er nog een enkele opnoemen.
Mag ook eens gezegd worden.

LDmicro user.

Op 6 oktober 2019 14:26:30 schreef Lambiek:

Je zou naar een ander pic kunnen kijken, bijv een 18F4520. Heeft de zelfde pinning, maar heeft meer geheugen en andere voordelen.

Bedankt dat je dit toen schreef.
Gisteren de stoute schoenen aangehad en met zonder hulp, de pic werkend gekregen, op de plaats waar de 16f887 zat.
En inderdaad het RTFM was echt nodig.
Het hele programma draaide helaas 2.5 maal trager op hetzelfde 20MHz kristal.
Gek genoeg op een 10MHz kristal dezelfde tijd, maar zonder kristal geen werking.
De pic voelde dus dat er op een kristal moest worden geklokt, maar gebruikte zijn inwendige 8MHz snelheid.
1 bitje extra op 0 en het werkte wel.
Nu is er slechts 35% gebruikt, tegen de 96 die in gebruik was bij de 887.
Ik kan dus nog even vooruit.
Naar de andere voordelen ga ik niet opzoek.