Pulse naar Voltage

Beste allemaal,

ik ben op zoek naar het volgende;
- Ik wil een IC gebruiken voor het omzetten van pulsen naar een analoge waarde(voltage) om in te kunnen lezen met een Ardiono analoge input.

Eisen;
- Mogelijkheid om te resetten
en
-Bij elke binnenkomende pulse dient de output waarde (stapsgewijs) opgehoogd te worden (en dus detecteerbaar bij Ardiuno Analoge input).

Werking:
reset ingang: IC wordt gereset, output naar 0V
Pulse input: bij elke (opvolgende) pulse bijvoorbeeld: Output waarde = Output waarde + 0,5 V?

Wellicht in combinatie met een shift register, en deze vervolgens (middels ander IC/ schakeling) naar voltage omzetten?

Hoor graag of iemand een idee heeft, alvast bedankt!

Even een (te) makkelijke gedachte

Waarom sluit je die puls niet gewoon aan als DI, kun je softwarematig tellen, ophogen, resetten, wat je wil eigenlijk

Beste DK,

Bedankt voor je reactie!

Dat was ook inderdaad mijn eerste gedachte. Echter heb je dan, zover ik nu weet, te maken met de volgende aspecten: pulse lengte, cyclus tijd van ardiuno etc. Ik heb een testje gedaan en kwam er achter dat de pulse gemist kon worden, of dat de pulse meerder malen werd 'geteld'.

Misschien kan het software matig anders worden opgelost, maar omdat ik voor de analoge inputs nog geen toepassing had, leek het me mooi om het zo op telossen. De analoge waarde blijft gelijk totdat nieuwe pulse wordt gedeteceerd en zodoende hoeft Arduino alleen AI in te lezen.

Maar, wellcith kan de Arduino op event verwerken op DI input? Begin net mee, dus nog niet helemaal ingelezen! :-)

Sine

Moderator

Dat klinkt inderdaad als iets wat je beter in de microcontroller kunt oplossen, ontdenderen van de ingang kan ook prima in de uC, maar mocht dat te spannend worden kan het ook extern met een RC netwerkje.

Ik heb al zitten kijken naar een shift register (74HC595/SN54/74LS90), maar dan moet er nog geconverteerd worden naar analoge waarde.

Sine

Moderator

Ook een shiftregister moet je ontdenderen. Daar ga je je probleem niet mee oplossen.

Wat is ongeveer de pulsduur / frequentie ?
Gebruik van een interrupt of hardware counter in de Arduino (Atmega 328 ? ) is geen optie ?

Of je moet wel heel snelle/korte pulsen krijgen, maar ontdenderden van digitale ingangen is meestal niet meer dan kijken of een ingang hoog is, paar ms wachten, en nog een keer kijken.

Pulsen tellen klinkt nog niet eens als iets zo tijdskritisch dat je er interrupts voor nodig hebt, of je moet echt boekdelen aan code aan het runnen zijn? Of je pulsen zijn 1ms. Of werkt je processor maar 2% van zijn capaciteit omdat hij vol delays staat?

Ik denk dat de pulsduur tot een halve seconde zal zijn, wellicht wat minder, frequentie zal om de zoveel seconden zijn, kortom redelijk traag.

Ik had al wat geporbeerd om met een hoge cyclus tijd, waarbij in elk geval de pulse werd gedetecteerd en zodoende een vlag te zetten. In de loop werd deze softwarematig weer na x tijd laag gemaakt om een volgende pulse te kunnen detecteren/ tellen.

Hiermee kon ik voorkomen dat de gevonden puls 2 of meer keer (afhakelijk van de cyclys tijd, x geteld werd. Maar dat is niet echt een mooie oplossing, vandaar dat ik het deze hoek zoek.

Moet toch mogelijk zijn lijkt me! :-)

Enige oplossing tot nu toe, shift register en afhankelijk van output een transistor opstelling (waarbij elke output een ander voltage kan leveren door weerstand opstelling oid)

[Bericht gewijzigd door pbertens op zondag 6 november 2016 13:45:42 (13%)

Arco

Special Member

Gewoon softwarematig de pulsen tellen. Het is onzinnig om die eerst om te zetten naar analoog, en de controller ze dan weer digitaal maakt... :)
Als je met een puls iedere paar seconden er nog weet te missen, dan is de firmware wel heel erg brak...

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

Golden Member

Op 6 november 2016 10:24:13 schreef pbertens:
Ik wil een IC gebruiken voor het omzetten van pulsen naar een analoge waarde(voltage) om in te kunnen lezen met een Ardiono analoge input.

Die IC's zijn er, bijv. het Exar XR4151 IC, een ouwe bekende die dat doet. Ooit heb ik die gebruikt in een benzineverbruiksmeter en dat werkte heel mooi. Het IC kan ook andersom werken; van een spanning een proportionele frequentie maken!

Met de genoemde extreem lage frequenties gaat dat niet goed.

Ik ben het eens met Arco, het is moeilijk advies te geven zonder te weten hoe de firmware verder in elkaar zit en wat hij allemaal moet doen, maar het zou in alle gevallen eenvoudig mogelijk moeten zijn de relevante parameters van zo een puls binnen te halen.
Het advies is dan dus meer te leren over programmeren :)

High met Henk

Special Member

.1 gebruik flank detectie (interrupt)

.2 zit er dender op? Zo ja: bepaal welke pulsen binnen en buiten je verwachting vallen met een timer (frequentie meting)

.3 KLAAR.

E = MC^2, dus de magnetische compatibiliteit doet kwadratisch mee???
RAAF12

Golden Member

Op 6 november 2016 14:09:22 schreef Aart:
Met de genoemde extreem lage frequenties gaat dat niet goed.

Kunt u die stelling onderbouwen? Als de schakeling juist is opgebouwd zijn er geen problemen te verwachten. Pulsen uit een flowmeter in de benzineleiding van een auto die stationair draait zijn ook extreem laag (en het werkt!) Ik heb ergens het schema van de nagebouwde benzineverbruiksmeter uit een oude Elektuur liggen (zoek.. zoek...)

Uw correctie is terecht, dit ic is te configureren voor een full-scale van 1 Hz (pagina 9 van de ds), dus de genoemde "om de zoveel seconden" (tientallen tot honderden mHz ?) zouden moeten gaan.

Het blijft m.i. een wat gezochte oplossing als je al een microcontroller tot je beschikking hebt.

Zo'n lage frequentie is makkelijk dmv polling te detekteren. Wat jij (TS) doet met een periode aftellen en dan weer opnieuw gaan kijken is niet handig. Je moet de flank detekteren. Dus, zolang je '0' ziet blijf je pollen totdat je '1' gezien hebt. Als dat zo is, kijk je nog een paar keer of ie '1' blijft. Zo ja, dan is het een geldige puls. Daarna ga je alleen nog wachten totdat je input weer '0' geworden is. Voor dat moment doe je niets. Daarna begin je weer van voren af aan.

@TS hieronder: interrupt heb je helemaal niet nodig. Signaal is rete-traag immers.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

Bedankt voor jullie reacties!

Het klinkt ook inderdaad wel een beetje omslachtig, maar ik ben er zelf niet zo van om problemen, die ik bij de bron kan aanpakken, op te gaan lossen (in de software). Beetje houtje-touwtje.

Kortom, een 'steady' analoge waarde is veel betrouwbaarder dan het omgaan met pulsen, en hier allerlei randvoorwaarden en/of andere zaken omheen te moeten programmeren. Kortom, aanpakken bij de bron!

Ik zal nog even onderzoeken naar inderdaad interupt mogelijkheden etc, kijken wat er allemaal met de Ardiuno mogelijk is op dat vlak. Bedoel, moet toch ook gewoon knap ingelezen moeten worden.

Mocht iemand toch een oplossing hebben, hoor ik dat alsnog graag! :-) Misschien van BCD naar analoog, kan ik toch sn54 gebruiken bijv ? :-)

Arco

Special Member

Met een pic kun je met input capture en/of comparatorinterrupt extreem lange periodetijden meten. (ik neem aan dat een arduino dat ook wel kan)

Kortom, een 'steady' analoge waarde is veel betrouwbaarder dan het omgaan met pulsen
...
Kortom, aanpakken bij de bron!

Analoog betrouwbaarder is onzin. En aanpakken bij de bron doe je al helemaal niet... :)
(je maakt eerst van digitaal analoog, en de arduino maakt er dan weer digitaal van.)

Misschien van BCD naar analoog, kan ik toch sn54 gebruiken bijv

En hoe maak je die BCD uit een enkele puls?

[Bericht gewijzigd door Arco op zondag 6 november 2016 14:54:24 (61%)

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

double

[Bericht gewijzigd door flipflop op zondag 6 november 2016 14:54:39 (98%)

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

Klopt wel wat je zegt over mijn D-A-D conversie maar wat ik weet is dat De bron een pulse is (welke per x seconden op zal komen).

Deze zal lang genoeg (moeten) zijn om gedetecteerd te worden. Er even vanuit gaande dat ik de pulse niet echt kan beinvloeden, wil ik hier een enigszins betrouwbare 'bron' van maken.

Uiteindelijk zullen hier verschillende oplossingen mogelijk kunnen zijn.

Eenderzijds de puls/ bron betrouwbaarder te maken bij detectie, dus hier een echte pulse (met bepaalde lengte) van te maken zodat ik hier softwarematig mee om kan gaan. En ik dus softwarematig geen rare timer hoef bij te houden indien de pulse nog steeds actief is bij het cyclis doorlopen van de Ardiuno. Ik wil hem dan maar 1 keer tellen.

Anderzijds, deze puls op flank nivo om te zetten (dus via bovengenoemde conversie). Door deze, volgens mij, te gebruiken icm een SN54/74LS90 counter, kan je hier een BCD (4 pins) van maken. En misschien dan weer verder zodat het idd een vaste analoge waarde wordt (elke nieuwe/ andere waarde representeerd een puls).

Alla:
https://www.circuitsonline.net/schakelingen/21/meten-en-testen/digital…

Ik zou natuurlijk ook deze BCD kunnen inlezen, maar dan gebruik is dus 4 DI inputs, terwijl ik die anders wil gebruiken en de AI heb ik nog vrij!

Kortom, gewoon even kijken wat de mogelijkheden zijn. En idd gewoon om kunnen gaan met de eerste puls is natuurlijk het allerbest (ga zeker nog even kijken of hier voorbeelden voor zijn)

Misschien is het toch wel erg simpel achteraf, zal deze eens proberen:
https://www.arduino.cc/en/Reference/PulseIn

Neemt niet weg, ben nog steeds erg benieuwd of er niet 1 of andere simpele oplossing is!

Een puls missen kan gebeuren als die te kort is. Voor een AVR (de microprocessor van een arduino) gebeurt dat als de puls korter is dan 0.1 microseconde. Tot de helft daarvan heeft ie een 50% kans om hem toch te zien....

Als jij het over secondenwerk hebt met de lengte van plusen dan zit er iets mis met je programma. Als je iedere miliseconde een interrupt laat plaatsvinden, dan moet je prima alles kunnen vangen wat langer dan een miliseconde duurt. Dan hoef je geen moeilijke dingen te doen als pin change interrupts.

Kortom, dat jou arduino software dingen mist ligt aan je software. Of het makkelijker kan? Vast! In ieder geval zonder externe puls naar analoge waarde conversies....

(Ik wilde op je originele vraag gaan antwoorden: Gebruik een arduino om de pulsjes te lezen en gebruik aan de uitgang een PWM kanaal met RC filter.... :-) ).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Lambiek

Special Member

Als je haar maar goed zit, GROETEN LAMBIEK.

Beste is een µC die kun je aan uw wensen aanpassen.

Als je geinteresseerd bent wil ik u wel een programma maken, niet zoveel werk, for free.

Werkt met enkele weerstanden R2R dac 3bits 0.5V/step of meer steps als u dat wenst.

MAAR dan moet je wel zelf een 16F628a kunnen programmeren en dat zal weer de bottleneck zijn.

Zegt u het maar.

NB: ga je uw kWh teller monitoren? ;)

LDmicro user.
Lambiek

Special Member

ga je uw kWh teller monitoren? ;)

Daar heb je toch geen analoge waarde voor nodig.

Als je haar maar goed zit, GROETEN LAMBIEK.
High met Henk

Special Member

@flipflip: ik weet niet wat ts aan resolutie wil hebben, of er dender is en of hij welicht nog andere dingen tegelijk wil doen. Ik benniig erg fan van interrupts boven pollen: kansloos een procesor bezighouden.

E = MC^2, dus de magnetische compatibiliteit doet kwadratisch mee???