Har jag stött på en av Arduinos begränsningar. PWM frekvens

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Har jag stött på en av Arduinos begränsningar. PWM frekvens

Inlägg av PopUnoNkoK »

Hej

Egentligen menar jag inte begränsning men i alla fall begränsning i den väldigt enkla delen av Arduino.

Jag försöker hitta information om att ändra PWM frekvensen på en Arduino Uno. Det jag hittar är lite olika versioner av denna tabell.

Kod: Markera allt

//---------------------------------------------- Set PWM frequency for D5 & D6 -------------------------------
  
//TCCR0B = TCCR0B & B11111000 | B00000001;    // set timer 0 divisor to     1 for PWM frequency of 62500.00 Hz
//TCCR0B = TCCR0B & B11111000 | B00000010;    // set timer 0 divisor to     8 for PWM frequency of  7812.50 Hz
  TCCR0B = TCCR0B & B11111000 | B00000011;    // set timer 0 divisor to    64 for PWM frequency of   976.56 Hz
//TCCR0B = TCCR0B & B11111000 | B00000100;    // set timer 0 divisor to   256 for PWM frequency of   244.14 Hz
//TCCR0B = TCCR0B & B11111000 | B00000101;    // set timer 0 divisor to  1024 for PWM frequency of    61.04 Hz


//---------------------------------------------- Set PWM frequency for D9 & D10 ------------------------------
  
//TCCR1B = TCCR1B & B11111000 | B00000001;    // set timer 1 divisor to     1 for PWM frequency of 31372.55 Hz
//TCCR1B = TCCR1B & B11111000 | B00000010;    // set timer 1 divisor to     8 for PWM frequency of  3921.16 Hz
  TCCR1B = TCCR1B & B11111000 | B00000011;    // set timer 1 divisor to    64 for PWM frequency of   490.20 Hz
//TCCR1B = TCCR1B & B11111000 | B00000100;    // set timer 1 divisor to   256 for PWM frequency of   122.55 Hz
//TCCR1B = TCCR1B & B11111000 | B00000101;    // set timer 1 divisor to  1024 for PWM frequency of    30.64 Hz

//---------------------------------------------- Set PWM frequency for D3 & D11 ------------------------------
  
//TCCR2B = TCCR2B & B11111000 | B00000001;    // set timer 2 divisor to     1 for PWM frequency of 31372.55 Hz
//TCCR2B = TCCR2B & B11111000 | B00000010;    // set timer 2 divisor to     8 for PWM frequency of  3921.16 Hz
//TCCR2B = TCCR2B & B11111000 | B00000011;    // set timer 2 divisor to    32 for PWM frequency of   980.39 Hz
  TCCR2B = TCCR2B & B11111000 | B00000100;    // set timer 2 divisor to    64 for PWM frequency of   490.20 Hz
//TCCR2B = TCCR2B & B11111000 | B00000101;    // set timer 2 divisor to   128 for PWM frequency of   245.10 Hz
//TCCR2B = TCCR2B & B11111000 | B00000110;    // set timer 2 divisor to   256 for PWM frequency of   122.55 Hz
//TCCR2B = TCCR2B & B11111000 | B00000111;    // set timer 2 divisor to  1024 for PWM frequency of    30.64 Hz
Från den tabellen hittar jag dessa frekvenser som ligger närmast det jag behöver:
31372.55 Hz ≈ 31.4 kHz
62500.00 Hz = 62.5 kHz

De IR moduler jag har tänkt jobba med ligger på:
30 kHz
36 kHz
38 kHz
40 kHz
56 kHz



När jag programmerade PIC med assembler så använde jag en ISR, denna ställdes in med hjälp av en lämplig prescaler, och sedan hade jag ofta också en egen variabel som räknades upp och som jag kunde välja hur långt den skulle räkna för varje cykel. Detta gjorde att jag fick väääldigt många olika möjligheter på Frekvenser.

Så, två frågor.

Går det på ett enkelt sätt att göra liknande på en Arduino?

Hur känsliga brukar IRmoduler var till sin frekvens, alltså skulle man kunna använda 31.4kHz på en modul som är tillverkad för 30kHz?

Ber om ursäkt om frågan är ställd slarvigt, kort om tid.

MVH Peter
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av sodjan »

> Hur känsliga brukar IRmoduler var till sin frekvens, alltså skulle man kunna
> använda 31.4kHz på en modul som är tillverkad för 30kHz?

Databladen brukar ha digram som visar hur bred/smalbanding mottagaren är.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av PopUnoNkoK »

Jag antar att du menar detta diagram.
diagram.PNG
Om jag tolkar diagrammet rätt så funkar den "halvbra" (0,5 bra) vid 33 kHz om den är byggd för 30 kHz. (30 kHz * 1.1)

Frågan är då vad "Halvbra" innebär. Jag får nog testa mig fram.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av Icecap »

Och det vore inte enklare, billigare och simplare att använda grejer som är anpassat till varandra?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av snigelen »

Med en 16 bitars timer klockad med 16MHz (prescaler 1:1) kan du komma ganska nära. Exempel på beräkning i octave:

Kod: Markera allt

>> f_cpu = 16e6;
>> f_pwm_desired = [30 36 38 40 56]' * 1e3;
>> t_cnt_desired = f_cpu ./ f_pwm_desired;
>> t_cnt_actual = round(t_cnt_desired);
>> f_pwm_actual = f_cpu ./ t_cnt_actual;
>> rel_error_in_percent = (f_pwm_actual - f_pwm_desired)*100 ./ f_pwm_desired;
>> 
>> % Result in kHz and relative error in percent
>> [f_pwm_desired/1e3 f_pwm_actual/1e3 rel_error_in_percent]
ans =

   30.00000   30.01876    0.06254
   36.00000   36.03604    0.10010
   38.00000   38.00475    0.01250
   40.00000   40.00000    0.00000
   56.00000   55.94406   -0.09990
Borre
Inlägg: 4609
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av Borre »

Kolla in dessa om du vill lösa det enkelt eller bara se hur det är gjort:
http://playground.arduino.cc/Code/Timer1
https://github.com/PaulStoffregen/TimerOne
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av PopUnoNkoK »

Icecap:
Självklart låter det vettigt. =) Det komponentregister som jag har koll på är väldigt begränsat så jag nöjde mig med ElectroKits sortiment. Jag håller mig helst borta från Elfa. Jag har förstått att Arduino inte är din kopp Te men har du något tips på komponent som skulle passa med de frekvenser som med hjälp av en prescaler kan få ut ur en Arduino Uno. (Alltså utan externa biblotek)

Kod: Markera allt

62500.00 Hz
31372.55 Hz
7812.50 Hz
3921.16 Hz
980.39 Hz
976.56 Hz
490.20 Hz
245.10 Hz
244.14 Hz
122.55 Hz
61.04 Hz
30.64 Hz
Snigelen:
Hmmm... Förstår nästan det du har postat. =)

Borre:
Jo jag har sett det där men jag hopppades slippa. =) Jag vill helst ha koden så enkel som möjligt där jag förstår varje liten rad, tyvärr är jag lite allergisk mot Arduino biblotek.
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av Icecap »

Det har inget med arduino att göra, det har med att du gör det så krångligt som det går.

Om ELFA är så farliga finna IS471 hos Conrad också (185094-62), till den behövs förvisso en IR-LED med rätt våglängd.
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av Lennart Aspenryd »

Jag förstår fortfarande inte varför du inte tar två Omron E3FZ när det finns "Packat och klart" så att säga.
Nu när jag har sett din Gate / Portal så ser det rätt ut.
Carrera har en liknande enhet, men den är ju för flera varv och två spår.
Underlaget för en snygg portal är ju annars Dunlop bron på LeMans!

Säg till om du vill ha bild!
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av PopUnoNkoK »

Icecap:
Jag vill verkligen inte göra det krångligare än vad det behöver vara. Om du får det intrycket så beror det bara på min okunskap.
Detta är ett projekt som jag bara vill ha klart så jag och sonen får tävla bilar mot varandra. Det får gärna se snyggt ut utåt men koden och elektroniken behöver bara fungera.

Trodde som sagt att det allra enklaste skulle vara en IrLed + fototransistor och att bakgrundsljuset skulle vvara något jag kunde leva med. Sedan tänkte jag modulera IrSignalen för att få en mer pålitlig signal, då ställde jag frågan i denna trådstart för att få så enkel kod som möjligt.

Nu har jag tittat på Databladet till IS471 och googlat en del men hittar helt enkelt inte vad den gör. Här ser du min okunskap. Jag hittar inget i databladet om någon frekvens. Det enda jag lyckades hitta i databladet som gav en hint var ett kopplingschema. Är det så att man kopplar IrLeden tillsammans med IS471 och på så sätt får en synkad puls? Är det så låter det juh klockrent. I sånna fall borde det betyda att koden blir helt utan "frekvensbiten" och att man i koden bara behöver hantera digital signal från "bil eller inte bil".
Ir Leds i rätt våglängd har jag.

Anledningen till att ELFA inte känns lockande är att om jag ska beställa nu blir det bara 2st av denna och då tror jag att frakten blir hög.



Lasp:
Jag hade faktiskt funderat på den gaten/bron. =) Men valde att göra det enkelt med kantiga sidor. Om sonen gillar detta så blir det eventuellt en fortsättning med tidtagning och mekanisk ivägsläppning av bilarna.
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av Icecap »

PopUnoNkoK: Gå in på 75-100-22 och öppna databladet.

Gå till sida 4. I botten på den finns det "Basic Circuit". Du vill observera att det finns ritat en LED i vänster sida av schemat, den får man köpa till. Sedan klarar IS471 resten! Den pulser själv sänder-IR-LED'n (har strömbegränsare inbyggd), den dekoder det inkommande ljus och du behöver bara avkoppla med en 330nF (eller större) kondensator.

Pinne 1: +4,5 till 16V in samt till anod på IR-LED. +5V vill nog fungera ypperligt med Arduinon.
Pinne 2: Utgång för stråle "hel" / "bruten". Alltså det viktigaste signal.
Pinne 3: Till katod på sändare LED.
Pinne 4: GND.

Mellan pinne 1 och 4 kopplar du en kondensator, jag skulle föreslå en elektrolyt på kanske 10µF.

Klart! Behöver det vara krångligare?

OBS: Den LED som ska sända är INTE med, den ska beställas sparat. Det behövs en st per IS471. Se till att den har rätt våglängd.
Senast redigerad av Icecap 11 november 2014, 18:17:55, redigerad totalt 1 gång.
j.po
Inlägg: 279
Blev medlem: 24 november 2008, 20:40:19
Ort: Halmstad
Kontakt:

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av j.po »

Man kan ju även driva LED'en med en NE555 eller liknade, justerbar till den frekvens man har på mottagaren. Så har man gått runt PWM problemet.
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av Lennart Aspenryd »

En annan gate som är tuff är denna http://rallytorget.net/superstage/ gå in på building the track tredje alternativet är Red Bull Bågen
Jag har byggt flera, de blir snygga!
Här kan man enkelt bygga in tidtagningsgrejorna.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av PopUnoNkoK »

Fasen, Elfa hade förstås slut på IS471FE, Conrad ville ha 99kr i frakt vilket kändes liiite onödigt. Känns alltid surt när frakten är dyrare än de köpta varorna. =)
Är det en vanlig komponent? Tror ni att det kan vara någon som sitter på två sånna i sitt personliga lager som vill sälja?

Fins det någon annan smidig leverantör.

MVH Peter
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Har jag stött på en av Arduinos begränsningar. PWM frekv

Inlägg av Icecap »

Jag vet att det finns andra likvärda produkter men jag har inte letat och jag har ingen typnummer. Men de finns!

Farnell har runt 30 000 st IS471 på lager.
Skriv svar