Varvtalsräkning på digital ingång - Förslag?

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

Varvtalsräkning på digital ingång - Förslag?

Inlägg av DanielM »

En skiva pulserar med 24V och 0V och desto stabbare pulserna är desto högre hastighet betyder att det är på skivan.

Jag tänker kontrollera denna varvtalsräkning med något som heter MRAC - Model Reference Adaptive Control. Den är väldigt enkel och genial. Den är som en P-regulator med en referensförstärkning, med andra ord, adaptiv PI-regulator där P:et är också en integral. Matematiken kan hittas i Karl Johan Åströms bok "Adaptive Control" på sidan 208. ISBN: 9780486462783

Målet med MRAC är att det ska vara en enkel adaptiv regulator. Bort med allt avancerat.

Här är en MRAC av lyapunovversionen. Det finns en MIT-version också av MRAC, men den är känsligare för störningar och kan lätt "balla ur", men den är mer optimal då man håller på sätta dit lite filter och liknande. Jag föredrar lyapunovversionen då den är en förenklad version av MIT versionen och den som används mest inom adaptiv regerling.
Sélection_054.png
Resultatet blir att den svarta linjen skall följa den gröna linjen. Den gula och den röda är parametrarna somv varierar över tid.
Sélection_055.png
Notera att man behöver inte använda en referensmodell om man inte vill. Jag brukar sätta \(Gm(s) = \frac{1}{1} = 1\) för oftast vet man inte hur referensmodellen ska formas som om systemet är okänt. Tuning är precis som en integralparameter. Man bara sätter den till ett litet värde ungefär. Sedan får integralen växa till av sig själv. Notera att integralerna skall ha mättning så dom inte växer sig allt för stor.

Frågeställning:
Fungerar det att ha en räknare i CubeMX hos STM32 som räknar antalet pulser. Desto snabbare pulsningen är, desto högre...ADC? värde blir det?

Filen för att köra simuleringen bifogas. Ni använder Scilab 6.1.0 för att köra filen. Filen heter Untitled.zcos
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av Rick81 »

Inte riktigt med på hur du tänker med ADC värde.

Men ett sätt att lösa det är:
* Motstånd + zenere så 24 V blir 3.3V till STM32
* Använda en timer med ext trig, dvs den räknar uppåt på varje flank
* Använda en annan timer som ger interrupt ex varje sekund

Då man du lätt räkna ut antal pulser per sekund i interrupt: ändring i antal pulser på första timer/interupt tiden på andra timern
DanielM
Inlägg: 2189
Blev medlem: 5 september 2019, 14:19:58

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av DanielM »

http://www.emcu.eu/how-to-interface-the ... x-atollic/

Vad tror du om detta förslag. Det är likt ditt. Man använder två timers. Men här är en encoder.

Kanske man kan räkna ut hastigheten också på en encoder?

Eller varför inte sätta en liten 3V motor som "generator". Jag ska bara ha ett exempel för att avgöra rotation och rotationshstighet. Den kommer max gå några minuter. Sedan är jag nöjd.
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av Rick81 »

Men har din skiva ingen encoder kan du ju inte använda den koden???
DanielM
Inlägg: 2189
Blev medlem: 5 september 2019, 14:19:58

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av DanielM »

Min skiva har bara en pulsgivare. Tyvärr. Den givaren kan bara användas för räkning.

Men nu behöver man rotationshastighet, negativ som positiv.

Jag kan ju montera in en ny givare. Men vet ej om det kommer bli bra.
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av Rick81 »

Behöver din applikation rotationsriktning? Annars funkar ju pulser utmärkt.
DanielM
Inlägg: 2189
Blev medlem: 5 september 2019, 14:19:58

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av DanielM »

Det är en skiva som jag ska rotera åt olika håll och då behöver jag veta rotationshastigheten också. :)

Annars hade jag nöjt mig med en givare.

Man skulle säkert kunna ha en liten elmotor som har i uppgift att endast generera en ström åt det håll motorn roterar åt? Bara för att man ska kunna indikera.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4694
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av Swech »

Det normala är att man istället använder sig av timers inbyggda i processorn
och det finns då två sätt beroende på hur snabb insignalen är.
Upp till säg 100hz så kan man använda sig av en capture timer som går i flera MHz
Denna timer mäter då tiden mellan två pulser och du vet då hur fort skivan snurrar.
Går det fortare än så så använder man istället en referenstimer på t.ex 1 MHz som man låter gå en väldefinierad tid, säg 1.0 sek
Under denna sekund har man en annan räknare som räknar upp varje gång som det kommer in en puls.
Efter en sekund har man antal pulser som kommit in.

Men det går säkert att "krångla till det" med den reglerteknik.
Tveksam om du får ett bättre resultat än detta gamla beprövade.

Swech
DanielM
Inlägg: 2189
Blev medlem: 5 september 2019, 14:19:58

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av DanielM »

Alltså reglertekniken är en vanlig PI-regulator, fast adaptiv och den har inget med mätning av skivan att göra :)

Men jag förstår att jag måste använda två givare nu. En som man räknar och en som man kollar tidsskillnaden på.
DanielM
Inlägg: 2189
Blev medlem: 5 september 2019, 14:19:58

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av DanielM »

Finns det inget enklare sätt t.ex färdig givare som räknar ut rotationshastigheten i from av spänning?

Hög rotation = hög spänning
Låg rotation = låg spänning

Bakvänd rotation = negativ spänning
SeniorLemuren
Inlägg: 7809
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av SeniorLemuren »

En magnet på axeln och 2 t hallgivare i 90 graders förskjutning så kan du mäta både varvtal och riktning.
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av Rick81 »

Negativ spänning vill du nog inte ha, hur ska du kunna mäta det med en ADC...

Det normala är just pulser för mäta rotation. Du kan söka på tex hallgivare men då är det pulser man räknar.

Men vill du ha en spänning att mäta får du nog leta, kanske finns nåt sånt du vill ha nånstans.
DanielM
Inlägg: 2189
Blev medlem: 5 september 2019, 14:19:58

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av DanielM »

SeniorLemuren skrev: 22 juli 2020, 19:17:19 En magnet på axeln och 2 t hallgivare i 90 graders förskjutning så kan du mäta både varvtal och riktning.
Hur ska jag kunna göra detta i CubeMX?

Jag menar. Två räknare där ena måste känna utav tidsskillnaden?
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av Rick81 »

Sätt upp två GPIO med interupt på rising edge en för varje hallgivare och använd sen en timer för att tidstämpla när flankerna kommer och sen kan du ex. räkna ut hastighet/rikting i timer interuptet .

Du kan inte göra allt i CubeMX utan interupthantering får du göra själv.
DanielM
Inlägg: 2189
Blev medlem: 5 september 2019, 14:19:58

Re: Varvtalsräkning på digital ingång - Förslag?

Inlägg av DanielM »

Här är ett exempel på det du menar. Det finns en färdig encoder - funktion som går att använda. Jag gillar det.

https://m.blog.naver.com/PostView.nhn?b ... 4lg0Ps_Z1o



Nu har jag bara en kinaencoder. Men när jag implementerar detta på riktigt så kommer jag köpa en encoder som är gjord att snurra miljoner varv.
Skriv svar