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


Een BT137 is beter.

Dat een MOC open en dicht gaat bij 3.8mA is een heel slecht uitgangspunt.
Je moet dat zien als een deur die half open of volledig open staat, waar kunnen er meest personen (stroom) door in een zo kort mogelijke tijd (µS)?.

In dit geval speelt dat niet zo'n rol omdat uw motoren heel licht zijn, van triac opwarming zal hier geen sprake zijn.
Bij zwaardere belastingen moet je zorgen voor een zo hard mogelijke ontsteking.

[Edit: velen denken omdat je weinig stroom door de led stuurt dat het beter is voor de MOC of triac, niets is minder waar.
De MOC en/of triac warmen op en gaan op den duur kapot want die schakelen 100x/s ]

De bluskring 100nF/100Ω 1/2W is voldoende en dient enkel ter bescherming van de triac, je moet dat niet meten want dat daar ga je niks van zien.

Ik vraag mij al de ganse tijd af of het wel nodig is om het toerental te controleren.

Wat ik daarmee bedoel is:
Moest je nu de snelheidsaansturing vanuit de hoofdpic 4 bits maken dan zou dat 16 snelheden opleveren, voor een ventilator is dat volgens mij meer dan voldoen.
Dan geef je een 4bits getal door aan de 16F88 en dat getal is de ontsteekvertraging.
Die 16 ontsteekvertragingen kun je zelf bepalen naargelang het gedrag van de ventilator.

Dat is veel makkelijker te programmeren ...maar dat is uw beslissing.

Ik dacht weer eens luidop ;)

LDmicro user.

Op 15 november 2019 11:11:27 schreef Jochem:
Kon je mbt interrupts nog iets met de door mij voorgestelde link?

Dank voor de genomen moeite, het was voor mij alleen nog steeds Russisch, dus: nee.

Jochem

Golden Member

Het is Engels.

Kun je aangeven waarom het voor jou "Russisch" is? Ben je de Engelse taal niet machtig? Of gaat de uitleg je nog boven de pet?

Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.

Die link legt het netjes en uitgebreid uit. Gewoon doorzetten...

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

De radeloosheid druipt van dit topic af.

Ik ga mij eens riskeren om u van een eenvoudig programma te voorzien maar dan in LDmicro geschreven.
Ik heb dus geen gegevens van uw motor zoals de minimumsnelheid/ontsteekhoek enz.. dat kan achteraf aangepast worden.

Omdat ik nog altijd niet inzie hoe je die snelheid gaat doorgeven via de hoofdpic zal ik met up/down/stop pulsen werken.

Het zal een soort standalone toepassing worden waar je zelf niets moet aan veranderen, je zult enkel uw hoofdpic moeten programmeren waar ontsteektijden/zerodetectie niet meer in zitten

Misschien tegen vanavond maar dat is niet zeker, heb ook nog ander werk.

LDmicro user.

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.