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

Jochem

Golden Member

De behulpzaamheid van mensen op CO is inderdaad ver te zoeken. Het lijkt soms zelfs of ze ook nog andere dingen te doen hebben.

Ik ben niet bekend met Proton BASIC, maar ik zie wel vrij duidelijke voorbeelden online. Kun je niks met dit artikel?

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

Morgen de ventilator en tacho uit de kachel koppelen aan de pic.

 

https://grootheerenveen.nl/wp-content/uploads/2016/09/brandweer1.jpg

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

Op 11 november 2019 20:40:27 schreef stortbak:
Morgen de ventilator en tacho uit de kachel koppelen aan de pic.

Oh, ja! Gratis advies.
Doe iets aan je brandverzekering.

Bezoek mijn neefjes' site: www.tinuselectronics.nl

Had zondag nochtans gezworen van niet meer te antwoorden. :(

Ik zag geen vragen bij de tekeningen dus dacht ik dat alles ok was :p

Nu ga ik nogmaals mijn vraag herhalen, hoe werkt de communicatie tussen de hoofdpic en die 16F88.
Je hebt daar een lijn getrokken (waarde triac-1) tussen die 2 pics, de ene is digitaal uit en de andere is analoog in, hoe werkt dat?

Ik zit ook met de vraag waarom je de zero detectie laat binnenkomen bij de hoofdpic of is dat een tekenfoutje?

Die motoren zijn heel inductief en ik zou de schakeling gebruiken van uit de datasheet van TI ..maar je kunt proberen zoals het nu getekend is..

Een BTA16-xxx is voor een 40W motor ook redelijk zwaar, dat is een 16A triac
en dat voor een 0.2A motor, hopelijk blijft hij geleiden na de ontsteekpuls.

edit: heb ook gezien dat de weerstanden naar de leds van de opto's te hoog zijn, een MOC3021 heeft min 8mA nodig om goed te werken en door die 1k te gebruiken heb je maar (5 - 1.2)/1000 = 3.8mA stuurstroom en dat is te weinig.

LDmicro user.

Op 12 november 2019 00:55:27 schreef MGP:

hoe werkt de communicatie tussen de hoofdpic en die 16F88.
Je hebt daar een lijn getrokken (waarde triac-1) tussen die 2 pics
zero detectie laat binnenkomen bij de hoofdpic
Die motoren zijn heel inductief
Een BTA16-xxx
MOC3021 heeft min 8mA nodig .

De communicatie tussen de twee pic's gaat via een koperdraad.
Al eerder is beschreven wat er door die draad gaat.
De nuldoorgangdetectie zit inderdaad nog getekend aan de hoofdpic, dat is niet meer zo, die pic doet er niets mee.
Als je doelt op de "bluskring" over de traic: daar zal ik het scoopbeeld eens voor gaan bekijken.
BTA16 is nog van het voorbeeld schema, ik gebruik de BT137, die was wel verkrijgbaar.
Die MOC gaat ook keurig open en dicht bij 3,8mA, ik heb echter toch maar een 560 ipv 1k geplaatst, dan loopt er 6,8mA.

Jochem

Golden Member

Kon je mbt interrupts nog iets met de door mij voorgestelde link?

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

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" - hard en software ontwikkeling: 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%)]

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" - hard en software ontwikkeling: 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.

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" - hard en software ontwikkeling: 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" - hard en software ontwikkeling: 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.

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.

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.