Efterlikna logaritmisk pot

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Efterlikna logaritmisk pot

Inlägg av Wedge »

Karaktäristiken för en logaritmisk potentiometer verkar inte vara speciellt logaritmisk. Det verkar snarare som om det är mer vanligt med styckvis linjära segment.
Och det fungerar ju för de flesta antar jag, så jag gissar att den exakta kurvan inte är så extremt viktig. Ganska plan i början, och brant i slutet räcker?
Jag tänkte ta en linjär pot, A/D-omvandla, normera och transformera värdet till en skalfaktor för digital mixning av ljudsamples.
0-FSR -> 0.0-1.0 -> f(x)
Om transformeringsfunktionen är x^3 blir koden blixtsnabb (FPU), och x^3 är hyfsat likt många potentiometerkurvor man kan googla fram. 12.5% utsignal vid potentiometerns mittläge.

Rätt tänkt, eller knas?
guckrum
Inlägg: 1671
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Efterlikna logaritmisk pot

Inlägg av guckrum »

Vad är anledningen till att det måste gå snabbt att generera en skalfaktor, snurras det väldigt snabbt på potten? Att implementera en funktion som approximerar en viss kurva via kod eller tabell känns rättframt. Testa att plotta ditt förslag x^3 mot ett logaritmiskt för att se om det ser rimligt ut. Annars är det ju en fördel med mjukvara att du kan ändra funktionen närsomhelst om du inte är nöjd. Eller missar jag något?
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: Efterlikna logaritmisk pot

Inlägg av Wedge »

Det måste inte gå jättefort, men som alltid är det en fördel. Det var mera att transformeringstiden då skulle bli försumbar, till skillnad mot "riktiga" log- eller exp-funktioner. Det kommer nog att bli fler än en pot också.
Men helt rätt, man snurrar inte tokfort på potarna :) Blir nog en lågt prioriterad task i FreeRTOS som får omvandla potvärden när det finns tid över.

Jag har gjort en del plottar, och jag tycker det ser bra ut. Snyggare än styckvis linjärt. Frågan är bara vad man ska jämföra x^3 mot... svårt att hitta något bra facit för hur logaritmiska potentiometrar ska bete sig.
guckrum
Inlägg: 1671
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Efterlikna logaritmisk pot

Inlägg av guckrum »

Om du har en åttabitars AD och lite minne över kan du implementera funktionen med en 256-bytes tabell och få en snabb och flexibel lösning. Jag kan inte detta så bra, men någonstans såg jag att 20% vid mittinställning är vanligt, och då kanske (e^2.773x-1) / (e^2.773-1) är en bra kurva antaget att upplevd volym är perfekt logaritmisk vid de aktuella volymnivåerna :) Men x^3 är av "liknande" karaktär, och mixning handlar väl lite om fingertoppskänsla, så det är kanske inte så viktigt att hitta den bästa funktionsapproximationen här.
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: Efterlikna logaritmisk pot

Inlägg av Wedge »

Mellan 10% och 20% för mittläget har jag sett, spelar nog ingen större roll precis som du säger. Man vrider tills man blir nöjd.

Uppslagstabell är jag nog lite tveksam till. Det finns stor risk att det tar mer tid än att utföra ett par multiplikationer, eftersom man troligtvis får onödiga cachemissar.
Jag får testa lite och se :) Tack för din input!
Bjaellerud
Inlägg: 1432
Blev medlem: 28 februari 2016, 16:01:33

Re: Efterlikna logaritmisk pot

Inlägg av Bjaellerud »

Det vanliga och billigare sättet att skapa en log pot är att utgå från en linjär med c:a 10 ggr högre resistans.
Sen lägga ett fast motstånd från löparen till jord på c:a 1/10 del av resistansen.

Dvs behöver man en log pot på 10 k så använd en linjär på 47 - 100 k, och ett motstånd på 10 k

Men varför göra saker enkelt när det går att krångla till. Och visst, behöver man precision och ändå har strömförsörjning etc så är förstås elektronikversionen bäst.

Roy
BJ
Inlägg: 8185
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Efterlikna logaritmisk pot

Inlägg av BJ »

Jag vet inte vilken processor eller dator du använder,
men med pic-processorer kan man göra tabeller
i programminnet i assembler, som bara tar några
intruktioner att slå upp i.
Det jobbiga är att t.ex. skapa 256 tabell-rader.

http://ww1.microchip.com/downloads/en/A ... 00556e.pdf
http://www.piclist.com/techref/microchip/tables.htm
guckrum
Inlägg: 1671
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Efterlikna logaritmisk pot

Inlägg av guckrum »

En tabell

Kod: Markera allt

0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07,
0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b,
0x0c, 0x0c, 0x0c, 0x0d, 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x10, 0x10, 0x10, 0x11,
0x11, 0x12, 0x12, 0x12, 0x13, 0x13, 0x14, 0x14, 0x14, 0x15, 0x15, 0x16, 0x16, 0x16, 0x17, 0x17,
0x18, 0x18, 0x19, 0x19, 0x1a, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1c, 0x1d, 0x1d, 0x1e, 0x1e, 0x1f,
0x1f, 0x20, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23, 0x24, 0x24, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28,
0x29, 0x29, 0x2a, 0x2b, 0x2b, 0x2c, 0x2d, 0x2d, 0x2e, 0x2f, 0x2f, 0x30, 0x31, 0x31, 0x32, 0x33,
0x34, 0x34, 0x35, 0x36, 0x37, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
0x41, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5e, 0x5f, 0x60, 0x61,
0x62, 0x64, 0x65, 0x66, 0x68, 0x69, 0x6a, 0x6c, 0x6d, 0x6e, 0x70, 0x71, 0x73, 0x74, 0x75, 0x77,
0x78, 0x7a, 0x7b, 0x7d, 0x7e, 0x80, 0x82, 0x83, 0x85, 0x86, 0x88, 0x8a, 0x8b, 0x8d, 0x8f, 0x91,
0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9d, 0x9f, 0xa1, 0xa3, 0xa5, 0xa7, 0xa9, 0xab, 0xad, 0xaf,
0xb1, 0xb3, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, 0xc1, 0xc3, 0xc5, 0xc8, 0xca, 0xcc, 0xcf, 0xd1, 0xd4,
0xd6, 0xd9, 0xdb, 0xde, 0xe0, 0xe3, 0xe6, 0xe8, 0xeb, 0xee, 0xf1, 0xf3, 0xf6, 0xf9, 0xfc, 0xff,
gjord med följande "läsbara" Python-kod

Kod: Markera allt

from math import exp

N = 256

def f(x):
    return (N-1)*(exp(2.773*x/N)-1)/(exp(2.773*(N-1)/N)-1)

s=""
for x in range(0, N):
    s += "0x%02x," % (round(f(x)),)
    if x % 16 == 15:
        s += "\n"
    else:
        s += " "
print(s)
BJ
Inlägg: 8185
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Efterlikna logaritmisk pot

Inlägg av BJ »

Ja, då blir det ju lättare. :)
Användarvisningsbild
HUGGBÄVERN
Tidigare soundbrigade
Inlägg: 32628
Blev medlem: 23 augusti 2006, 22:44:11
Ort: Lilla Paris
Kontakt:

Re: Efterlikna logaritmisk pot

Inlägg av HUGGBÄVERN »

Användarvisningsbild
hawkan
Inlägg: 2585
Blev medlem: 14 augusti 2011, 10:27:40

Re: Efterlikna logaritmisk pot

Inlägg av hawkan »

Seriutveckla log(1+x) = x - x^2/2 + x^3/3 - x^4/4 + osv
Ta med så många termer du vill.
Användarvisningsbild
MadModder
Co Admin
Inlägg: 29905
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Re: Efterlikna logaritmisk pot

Inlägg av MadModder »

Bjaellerud skrev:Det vanliga och billigare sättet att skapa en log pot är att utgå från en linjär med c:a 10 ggr högre resistans.
Sen lägga ett fast motstånd från löparen till jord på c:a 1/10 del av resistansen.

Dvs behöver man en log pot på 10 k så använd en linjär på 47 - 100 k, och ett motstånd på 10 k
Jo det funkar väl som en nödlösning. Fast 10x blir en lite väl tvär kurva.
Men man kan aldrig få till det ordentligt nere mellan ungefär 0-5% av utslaget. Från noll börjar det precis lika brant som en linjär för att börja svänga av först lite efter.
persika
EF Sponsor
Inlägg: 1336
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: Efterlikna logaritmisk pot

Inlägg av persika »

Användarvisningsbild
HUGGBÄVERN
Tidigare soundbrigade
Inlägg: 32628
Blev medlem: 23 augusti 2006, 22:44:11
Ort: Lilla Paris
Kontakt:

Re: Efterlikna logaritmisk pot

Inlägg av HUGGBÄVERN »

MadModder skrev: Jo det funkar väl som en nödlösning. Fast 10x blir en lite väl tvär kurva.
Men man kan aldrig få till det ordentligt nere mellan ungefär 0-5% av utslaget. Från noll börjar det precis lika brant som en linjär för att börja svänga av först lite efter.
Från Elliot Sound Products:

Bild
Take a 100k linear pot (VOL), and connect a loading resistor (R = 10k - 15k, 12k used to produce Figure 2) as shown above to achieve the curve shown. It should be a straight line, but is actually still far more logarithmic than a standard log pot. For stereo, use a dual-gang pot and treat both sections the same way. Use of a 1% resistor for R is recommended. Different values can be used for the pot, but keep the ratio between 6:1 to 10:1 between the value of VOL and R respectively. While 8.33:1 (as shown) is close to a real log curve, it may still allow excessive sensitivity at low levels. Higher ratios than 10:1 can be used, but will cause excessive loading of the driving stage, or necessitate the use of a pot whose resistance is too high.
Bild
Skriv svar