Varvtalsräkning på digital ingång - Förslag?
Varvtalsräkning på digital ingång - Förslag?
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. 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. 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
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. 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. 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.
Re: Varvtalsräkning på digital ingång - Förslag?
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
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
Re: Varvtalsräkning på digital ingång - Förslag?
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.
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.
Re: Varvtalsräkning på digital ingång - Förslag?
Men har din skiva ingen encoder kan du ju inte använda den koden???
Re: Varvtalsräkning på digital ingång - Förslag?
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.
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.
Re: Varvtalsräkning på digital ingång - Förslag?
Behöver din applikation rotationsriktning? Annars funkar ju pulser utmärkt.
Re: Varvtalsräkning på digital ingång - Förslag?
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.
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.
- Swech
- EF Sponsor
- Inlägg: 4700
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: Varvtalsräkning på digital ingång - Förslag?
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
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
Re: Varvtalsräkning på digital ingång - Förslag?
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å.
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å.
Re: Varvtalsräkning på digital ingång - Förslag?
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
Hög rotation = hög spänning
Låg rotation = låg spänning
Bakvänd rotation = negativ spänning
-
- Inlägg: 7846
- Blev medlem: 26 maj 2009, 12:20:37
- Ort: Kristinehamn
Re: Varvtalsräkning på digital ingång - Förslag?
En magnet på axeln och 2 t hallgivare i 90 graders förskjutning så kan du mäta både varvtal och riktning.
Re: Varvtalsräkning på digital ingång - Förslag?
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.
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.
Re: Varvtalsräkning på digital ingång - Förslag?
Hur ska jag kunna göra detta i CubeMX?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.
Jag menar. Två räknare där ena måste känna utav tidsskillnaden?
Re: Varvtalsräkning på digital ingång - Förslag?
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.
Du kan inte göra allt i CubeMX utan interupthantering får du göra själv.
Re: Varvtalsräkning på digital ingång - Förslag?
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.
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.