Frekvensdelare arduino
Frekvensdelare arduino
Hej
Jag har ett litet problem jag har en rattstång med elservo som vill ha 29 pulser/varv från hjulen nu har jag 48pulser/varv tänkte att man kan ta in pulserna i en Arduin och dela dessa med en konstant och pulsa en utgång.
Någon som har något förslag?
Jag har ett litet problem jag har en rattstång med elservo som vill ha 29 pulser/varv från hjulen nu har jag 48pulser/varv tänkte att man kan ta in pulserna i en Arduin och dela dessa med en konstant och pulsa en utgång.
Någon som har något förslag?
Re: Frekvensdelare arduino
Jag skulle vara mycket intresserat av hur du har tänkt dig att göra detta.
Att dela med 1,655 är inte så enkelt men det ska gå att skapa en räknare som adderar bråken och ger ut heltalsdelen.
Att dela med 1,655 är inte så enkelt men det ska gå att skapa en räknare som adderar bråken och ger ut heltalsdelen.
Re: Frekvensdelare arduino
Den gemensamma nämnare blir 1392, så den måste man nog använda sig av
Re: Frekvensdelare arduino
Eller multiplicera ingången med 1000 dela sedan med 1655 fast det blir ju 1,655 det med
Re: Frekvensdelare arduino
Mät infrekvensen och skapa en lägre utfrekvens med 1.655 ggr längre periodtid. Ganska enkelt, men kan kanske bli lite knepigt när man har snigelfart och behöver räkna med långa tider.
Hur exakt måste det vara? Om pulserna blir för få eller för många innebär väl det bara att servot över- eller underkompenserar lite. Prova att dela med två i låg fart. Varannan inpuls.
Hur exakt måste det vara? Om pulserna blir för få eller för många innebär väl det bara att servot över- eller underkompenserar lite. Prova att dela med två i låg fart. Varannan inpuls.
Re: Frekvensdelare arduino
Jag tror inte den är jättekänslig på pulserna det är ett Opel Corsa elservo (EPAS)
Det har 3 mappar som ger olika servo assistens
upp till ca 24km/h mest servo verkan omslags punkt 24km/h är ca 128 pulser/sekund
mellan ca 24km/h och ca 60km/h är servoverkan medel hög 60km/h är ca 320pulser/sekund
Över 60km/h låg servoverkan
Det har 3 mappar som ger olika servo assistens
upp till ca 24km/h mest servo verkan omslags punkt 24km/h är ca 128 pulser/sekund
mellan ca 24km/h och ca 60km/h är servoverkan medel hög 60km/h är ca 320pulser/sekund
Över 60km/h låg servoverkan
Re: Frekvensdelare arduino
lite psuedokod som jag tror borde fungera:
Kod: Markera allt
loopa {
läs hjulsensor
öka variabel med 1
om variabel - (heltalsdel (variabel * 48 /1392)) = 0 {
Skicka puls
variabel = 0
}
}
Re: Frekvensdelare arduino
Kan man inte bara mäta pulslängden och sedan dividera eller multiplicera med en faktor och sedan pulsa en utgång med detta?
Re: Frekvensdelare arduino
Jag skulle nog göra på samma sätt som ktm_micke skriver.
Rimligt enkelt, det enda som är svårt är att fixa en time-out när fordonet står still. Och den bit är ändå enkel.
EDIT: Alltså mäta från en flank till samma flank = 1/frekvensen.
Rimligt enkelt, det enda som är svårt är att fixa en time-out när fordonet står still. Och den bit är ändå enkel.
EDIT: Alltså mäta från en flank till samma flank = 1/frekvensen.
Senast redigerad av Icecap 30 december 2016, 09:57:34, redigerad totalt 1 gång.
Re: Frekvensdelare arduino
Om servot mäter pulser per tidsenhet lär det inte fungera så bra. Varför skulle pulsbredden vara avgörande? Då skulle man vara beroende av veta sensorkarakteristik och behöva kalibrera. Frekvens är frekvens, oavsett pulsbredd.
Re: Frekvensdelare arduino
Intressant problem!ktm_micke skrev:Hej
Jag har ett litet problem jag har en rattstång med elservo som vill ha 29 pulser/varv från hjulen nu har jag 48pulser/varv tänkte att man kan ta in pulserna i en Arduin och dela dessa med en konstant och pulsa en utgång.
Någon som har något förslag?
Jag skulle tänka så här:
- Vinkelförflyttning på inkommande (48/varv) är 360 grader / 48 per puls, alltså 7.5 grader per puls
- Vinkelförflyttning på utgående ska vara 360 / 29 (ungefär 12,41 grader per puls)
En enda variabel räcker, V, den motsvarar vinkelförändringen du ska leverera i form av pulser till utgående.
Pseduokod:
Kod: Markera allt
För varje inkommande puls (48/varv):
V = V + 360/48
Om V >= 360/29
V = V - 360/29
Skicka en utgående puls (29/varv)
Kod: Markera allt
För varje inkommande puls
X = X + 750
Om X >= 1241
X = X - 1241
skicka en utgående puls
Detta bygger på att servot klarar att pulserna inte kommer med konstant mellanrum, givet en viss konstant hjulhastighet. Om servot mäter tiden mellan pulserna så kan det ju bli tokigt om värdena inte filtreras i servot. Men det rimliga är väl att servot har en medelvärdesbildning?
Annars får man göra som Wedge säger.
En lyxlösning kan vara att kombinera frekvens och pulsräkning.
Räknaren C motsvarar att en puls borde levereras snart på utgående
Kod: Markera allt
För varje inkommande puls
X = X + 750
Om X >= 1241
X = X - 1241
C = C + 1
I huvudloopen kollar man hur lång tid i millisekunder det gått sedan föregående utlevererad puls. När tiden är >= T (eller större än ett lämpligt minvärde) skickar man ut en puls givet att C > 0. Man minskar därefter C med 1.
Detta borde innebära att man i snitt får en stabil utfrekvens som motsvarar den inkommande men att man ändå räknar pulser i grunden.
Kanske ingen som förstår denna algoritm mer än jag men det borde fungera. Det blir lite stabilare än att bara mäta frekvens och generera en omräknad utfrekvens. Guldpläterad lösning!