Sida 2 av 2
Re: Hur bygger man ett OneWire bibliotek?
Postat: 20 september 2019, 18:14:21
av DanielM
Icecap skrev:Även om mikroprocessorn (µC) i en Arduino inte är av nyaste modell är den ny-tillverkad och den fallerar inte efter t.ex. 11 år.
Men en µC med t.ex. BGA-montering är definitivt mer känslig för t.ex. termiska förändringar pga. den mindre flexibilitet i just BGA kontra måsvingor och liknande.
Rent elektronisk är de två system likvärdiga men mekanisk skulle jag anse att Arduinon kan ha fördel.
Jag har tänkt att välja mellan Arduino, ST eller Raspberry. Jag håller Arduino kärt men det är tyvärr en liten leksak som folk har lyckats göra stora projekt med. Finns något som heter
https://github.com/ChuckBell/MySQL_Connector_Arduino där det är rent C++ kod. Färdigt att implementeras i en Arduino. Polarna på jobbet har införskaffat en ST och det var det som fick mig också börja testa ST.
Tänk vad häftigt om detta skulle gå implementera i en ST, det vill säga en ARM istället för AVR?
Jag har kikat lite på C++ koden och den ser ut som att det skulle vara enkelt att byta ut några standard Arduino funktioner till ST funktioner så som
millis() och
delay(long milliseconds).
Nackdelen jag ser med en Raspberry är just SD-kortet samt att det är ett Linux OS där på. Inte direkt skottsäkra saker.

Byggde en PID med en Raspberry en gång i tiden. Skulle ha valt något annat. Lång uppstart samt att jag kunde inte lita på den trots att all fungerade. Då gick jag över till Arduino. Kändes mer robust.
Re: Hur bygger man ett OneWire bibliotek?
Postat: 20 september 2019, 19:50:30
av DanielM
Vi kan väll tillsammans dra en sammanfattning hur jag ska lösa detta problem?
Verktyg:
* Mikroprocessor
* OpAmp
Med OpAmpen så skapar jag en schmitt-trigger som ger en hög signal eller låg signal beroende på pulsen.
I mikroprocessorn så har jag en räknare som räknar för varje puls signal som förekommer.
I detta fall så kan jag anta att X = 0 då det spelar ingen roll vad X egentligen är.
När jag får min första 1 och 0 så anropar jag min ADC att jag vill ha ett värde efter 300 ms.
Är X = 1 till tills jag får en 0:a så vet jag att jag är Y position.
Är X = 0 till jag får en 1:a så vet jag att jag är Y position.
Jag tror inte timers behöver användas här förutom när jag ska mäta signalen. Mest bara räknare och if-satser.
Re: Hur bygger man ett OneWire bibliotek?
Postat: 21 september 2019, 08:34:59
av Icecap
Tänk alltid så att signalledningen kan klippas och återmonteras på ett senare tidpunkt (glappkontakt).
Är ditt sätt att känna av pulserna stabilt nog att göra detta i alla lägen?
Någon form av timing behövs, helt enkelt för att kunde avgöra när pulserna har tagit stopp.
Re: Hur bygger man ett OneWire bibliotek?
Postat: 21 september 2019, 09:06:48
av Palle500
Känns som om du tänker fel.
Du skall detektera antal positiva pulser som har en pulstid omkring 300mS sen har du stabilt mätvärde enligt industristandard under 3 sekunder (0-10V eller 4-20mA) finns 4 olika mätvärden sen börjar det om igen. Tar alltså 12 sekunder att gå ett varv.
Init körs första gången.
Vänta på att det funnits låg puls under minst 2,8sekunder
Trigga en mono timer på första pulsen
Räkna antal positiva pulser under max pulstid 4x600mS=2,4 sek
Vänta ca 500 mS läs den analoga signalen
Vänta på nästa pulssekvens
Kontrollera att pulstågen är i ökande sekvens typ 3,4,1,2 om inte sätt error och fasa in avkodningen på nytt. Via init sekvensen.
Finns nog bättre sätt men är min första tanke på lösning.
Sök även på 4-20ma signal avkodning. Detta kanske är en standard att skicka olika värden via två trådar för standard 4-20mA? Var så länge sedan jag höll på med 0-10V och 4-20mA.
Re: Hur bygger man ett OneWire bibliotek?
Postat: 21 september 2019, 14:48:08
av DanielM
Hej Palle500. Antar att du skriver till mig?
Jag tror också att om jag använder min ADC för att mäta. Nu säger vi att jag har en signal mellan 0-10 volt för att bara göra det enkelt för oss. Där 2 volt är minimum och 8 volt är maximum som våran mätsignal kan vara på. Allt över eller under indikerar på felsignal hos partikelräknaren.
Du menar alltså att om jag mäter använder timers för pulser, ADC för att mäta och en timer för tid så kommer detta fungera? Här behövs ingen schmitt-trigger?
Hur bygger man ett OneWire bibliotek?
Postat: 21 september 2019, 15:25:19
av Palle500
Jo en schmittrigger behövs nog för att få till signalnivåerna.
Sen är väl 0-10V att det kan vara 0-10V för signal 0-100%. Men det kanske denna givare inte kan signalera utan 20-80% är området?
Även en opamp eller spänningsdelare för att mäta rätt utsignal med din ad omvandlare.
Re: Hur bygger man ett OneWire bibliotek?
Postat: 21 september 2019, 15:34:53
av DanielM
Men behövs verkligen en shmitt-trigger? Går det inte lika bra med en if-sats, för det är var en schmitt-trigger är. Om signal < 50% så signal = 0. Om signal >= 50% så signal = 1.
Kombinera detta men en räknare så att vid 1 och sedan 0 så ska jag nypa ett värde efter 300 ms. När det har gått 3000 ms så ska jag ytterligare räkna 1 0 1 0 och sedan nypa ett värde efter 300 ms och börja räkna 3000 ms och sedan räkna 1 0 1 0 1 0 och sedan nypa ett värde efter 300 ms?
Re: Hur bygger man ett OneWire bibliotek?
Postat: 21 september 2019, 16:44:02
av DanielM
Har fått tag på Siemens S7 200-300 programblock för denna CS1000 givare på nätet. Någon som har Siemens S7?
Re: Hur bygger man ett OneWire bibliotek?
Postat: 21 september 2019, 19:39:44
av Palle500
DanielM skrev:Men behövs verkligen en shmitt-trigger? Går det inte lika bra med en if-sats, för det är var en schmitt-trigger är. Om signal < 50% så signal = 0. Om signal >= 50% så signal = 1.
Kombinera detta men en räknare så att vid 1 och sedan 0 så ska jag nypa ett värde efter 300 ms. När det har gått 3000 ms så ska jag ytterligare räkna 1 0 1 0 och sedan nypa ett värde efter 300 ms och börja räkna 3000 ms och sedan räkna 1 0 1 0 1 0 och sedan nypa ett värde efter 300 ms?
Du måste signal anpassa mot din dator och oftast är det typ max 3,3V sen tror jag inte att din ad omvandlare är tillräckligt snabb för att fånga det digitala pulståget.men självklart kan en digital ingång fixa detta, men se upp så du inte belastar givarutgången för mycket och då får fel värden, vad är inre resistansen på givaren?
Sen låter det som om du tror att det är en idealisk värld som din givarsignal finns i, det finns många störningar och du förutsätter att du fångar varje pulståg om och om igen...
Och varför läsa det analoga värdet efter 300 ms? Klart bättre med 500ms då vet du att det är slut på den digitala identitets signalen, ja du måste ju kolla att den inte pulsat under de sista 500 ms.
Re: Hur bygger man ett OneWire bibliotek?
Postat: 21 september 2019, 23:06:09
av AndLi
Har jag missat att det skulle användas en enormt långsam AD? Man måste ju komma långt med att sampla 100 samples/s, säkert räcker 50 ggr i sekunden..
Re: Hur bygger man ett OneWire bibliotek?
Postat: 21 september 2019, 23:23:23
av DanielM
Palle500 skrev:
Du måste signal anpassa mot din dator och oftast är det typ max 3,3V sen tror jag inte att din ad omvandlare är tillräckligt snabb för att fånga det digitala pulståget.men självklart kan en digital ingång fixa detta, men se upp så du inte belastar givarutgången för mycket och då får fel värden, vad är inre resistansen på givaren?
Jag har ingen aning vad det är för innre resistans. Jag hade mest bara tänk att skala om 0-10 volt till 0-3.3 volt via en voltdividerare och sedan koppla in den på en mikrokontroller.
Sen låter det som om du tror att det är en idealisk värld som din givarsignal finns i, det finns många störningar och du förutsätter att du fångar varje pulståg om och om igen...
Och varför läsa det analoga värdet efter 300 ms? Klart bättre med 500ms då vet du att det är slut på den digitala identitets signalen, ja du måste ju kolla att den inte pulsat under de sista 500 ms.
Jag är mycket medveten om att PWM signaler har ett karaktärsbeteende som likar första grads ode-ekvation.
Re: Hur bygger man ett OneWire bibliotek?
Postat: 21 september 2019, 23:24:05
av DanielM
AndLi skrev:Har jag missat att det skulle användas en enormt långsam AD? Man måste ju komma långt med att sampla 100 samples/s, säkert räcker 50 ggr i sekunden..
Jag undrar det också. Jag kör STM32 och dessa är mycket snabba. Värre än AVR och PIC.