Hur bygger man ett OneWire bibliotek?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur bygger man ett OneWire bibliotek?

Inlägg 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). :tumupp:

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.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur bygger man ett OneWire bibliotek?

Inlägg 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.

Bild

I detta fall så kan jag anta att X = 0 då det spelar ingen roll vad X egentligen är.

Kod: Markera allt

10X1010X101010X10101010X
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.

Kod: Markera allt

10 X 1Y10 X 101010 X 10101010 X
Är X = 0 till jag får en 1:a så vet jag att jag är Y position.

Kod: Markera allt

10 X Y010 X 101010 X 10101010 X
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.
Användarvisningsbild
Icecap
Inlägg: 26147
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Hur bygger man ett OneWire bibliotek?

Inlägg 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.
Palle500
Inlägg: 4494
Blev medlem: 6 juni 2015, 14:53:06

Re: Hur bygger man ett OneWire bibliotek?

Inlägg 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.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur bygger man ett OneWire bibliotek?

Inlägg 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?
Palle500
Inlägg: 4494
Blev medlem: 6 juni 2015, 14:53:06

Hur bygger man ett OneWire bibliotek?

Inlägg 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.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur bygger man ett OneWire bibliotek?

Inlägg 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?
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur bygger man ett OneWire bibliotek?

Inlägg 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?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Palle500
Inlägg: 4494
Blev medlem: 6 juni 2015, 14:53:06

Re: Hur bygger man ett OneWire bibliotek?

Inlägg 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.
Användarvisningsbild
AndLi
Inlägg: 17134
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Hur bygger man ett OneWire bibliotek?

Inlägg 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..
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur bygger man ett OneWire bibliotek?

Inlägg 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.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur bygger man ett OneWire bibliotek?

Inlägg 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.
Skriv svar