Atmega16 generovani analogove hodnoty pwm signalem na vystup

kondenzator je nejako nabity

napriklad na 2,5V. to je lautr jedno.

U na kondiku sa po zmene U na konci R, napr. U = 0V meni podla vztahu

u(t) = U * (e(-t/RC));

Co tomu nerozumies? (sorry vole error :slight_smile: ) U na C sa zacne menit. Ak je nove U = 5V, potom sa zacne C nabijat. Nechces, aby sa C nabil o viac ako o 1LSB. To znamena, ze e(-t/RC) sa nesmie zmenit o viac ako o 1LSB a to je presne to 1 - 1 / ( 2^8 )), alebo inak napisane
255/256 = 1 - 1/256 = (256/256 - 1/256) = 1 - 1/( 2^8 )) pre 8bitovy prevod.

To cele sa da samozrejme spocitat z frekvecie toho PWM. Akurat krok bude nie 1/f vstupu do cnt, ale 1/256 vystupu do pwm (pri 8b CNT). Ciselne to vyjde presne tak isto.

Ale ak to nepisem zrozumitelne, kludne sa znovu spytaj. Ak chces nieco vediet, tak sa pytaj do nemoty a kludne sa vykasli sa na mozno trochu pejorativne komentare. Ide predsa o tvoje vedenie. :slight_smile:

JAsne, nechceme tam to zvlneni kvulůi toho to tak prepocitavas…ale to napeti me ted stve. ty hodnoty jsou stejne trosku kolisave takze vetsi kondik se hodi pro dalsi filtraci…aspon to tak funguje, vetsi ma vetsi spozdeni a plynulejsi signal…ale proc taky usekava to napeti, chapu ze se mu nesmi nabit vic aby nevzniklo zvlneni a pochopil jsem ten vzorec cos minule psal, ale kdyz se poiuzije slabsi kondik tak rozsah je jak ma byt. jenze u toho slabsiho podle tveho vzorce bych musel dat 20k odpor…to je trochu moc ne?:smiley: jsem z toho nejaky zmateny…

Co rozumies pod pojmom “usekava napatie” ?

No jakoze snizi…tak jak si to popisoval tim vzorcem jak se snizuje napeti…jenze ja nevim:D

Co vymyslas :slight_smile:

skratka

e(-t/RC) < (1-1/256)
e(-t/RC) < 0.996

t = 1281/(11059000/64); // alebo si to vydel 128 ako len chces :slight_smile:
t = 128
5.787us;

C != 10uF; // to neznamena nerovnost ale volbu. C si zvolim, lebo lahsie sa hlada vhodny R ako vhodny C :slight_smile:

e(-t/RC) <= 0.996;
ln(e(-t/RC)) <= ln(0.996); // klasicka uprava rovnice, co napravo to nalavo
-t/RC = - 0.004008; // *-1
t/RC = 0.004008; // zas klasicka uprava rovnice

t/(C* 0.004008) = R; // a zas klasicka uprava rovnice

1285.787us/(1uF0.004008) = R;
18481 = R;

R != 22k;

Skuska spravnosti:

e(-1285.787us/(10uF * 22k) = e(-0.0033669);
e(-128
5.787us/(10uF * 22k) = 0.99663868;

1- e(-128*5.787us/(10uF * 22k) = 0.00336132;

1- e(-128*5.787us/(10uF * 22k) = 1/297.5;

1- e(-128*5.787us/(1uF * 1k5) < 1/2 ^8 ;

Osad tam 22k a 10uF, nespekuluj, zmeraj, kukni na osiloskop a daj vediet ci tam nieco skace alebo nie. Je lepsie nieco raz vidiet ako o tom 100x pocut. :slight_smile:

P.S. OPRAVENA HODNOTA CASU f

H: Někde výše jsi psal cosi o 10V. To na výstupu procesoru rozhodně nedostaneš.
Mohl bys martinovi dodat PŘESNÉ schéma toho, co máš pripojenýho k pinu procesoru včetně měřících prostředků a případných zátěží? Někdy se hodí i fotka, né všechny součástky jsou takové, jaké se tazateli zdají, i to už tu bylo :wink:.

Nene, to je az za zesilovacem, z procaku 0-5…jo sak toto vypada dobre ja tam jen neco spocital hure…

Este preco je to zratane na 1LSB. Na osciloskope uvidis pilovitv signal a rozkmitom s-s cca 1LSB. No a to je prave pripustna odchylka +/-1/2LSB.

Pre zamedzenie zmeny Uvyst vplyvom kolisania Ucc MCU (5V sa kludne moze menit aj o 2-3 % v zavislosti od nevhodne navrhnuteho plosaku napr. pri spinani 5V rele) osobne na vacsie vzdialenosti (5-15cm) pouzivam pre spinanie analogovy multiplexer, ktory ten odpor prepina medzi GND a Uref, napriklad 4V alebo 2.5V z TL431. Napatie si zosilnim pomocou OZ napajaneho z 15V, casto cez DC/DC galvanicky oddeleny menic. PWM potom prenasam cez vhodny optoclen a mam galvanicky oddeleny zdroj napatia napr. 0-10V. Kalibraciu robim na strane MCU. To znamena si vypocitam, aku striedu mam generovat na PWM aby som mal na vystupe 10V. Moze to byt 252, alebo 248, alebo 237. Ale v zasade sa s kumulaciou vsetkych chyb trafim do +/2% tolerancie. Suciastky teda navrhujem tak, aby pri PWM 248 (z 255) som mal na vystupe 10V. Konkretnu hodnotu “doladim” podla toho co nameriam na napatovom vystupe. Skratka ziadne trimre. Pre pouzitie optoclena treba volit nizsie frekvencie. Optocleny, hlavne tie lacne maju roznu dobu oneskorenia pre ON/OFF.

Zdravim, mam jeden problemek…rikal si toto:

e(-t/RC) < (1-1/(2^ 8 ))

t = 128us;
C zvolis 10uF
R sa rovna cca 3k3

v pripade pro vstupni frekvenci citace 1Mhz s periodou 1us. Ale kdyz me tam jde 11,059Mhz deleny 64, tak mam periodu 5,78us, takze kriticky cas je 740,7us. a za to t, si tam minule dosadil kriticky cas a kdyz si to delal potom jako vypocet pro me, dosadils jen tu periodu…(ja to predtim pocital pro ten kriticky cas a vysledny efekt byl spatny, mene nez polovicni napeti na vystupu, ted jsem pouzil to tvoje pro t s dosazenim periody a jede to v rozsahu…tak ja nevim…mates me:-), urcite to s tim 740,7 nebylo dobre, ale k cemu pak pocitas kriticky cas a predtim si ho tam i dosadil? )

podle me dosazovat ten kriticky cas, tak jak si napsal ((1/11059200/64)*128) je blbost, asi ses prepsal (mozna ne, mozna ja vymyslim:D). my potrebujeme prave tu periodu toho PWM, protoze z ni se dela strida ktera prochazi RC clankem, ale kdyz rikas ze nejdele s enabiji pro polovinu napeti, tak bychom meli pocitat jako kriticky cas polovinu periody, ne? protoze prave ve stride 50% dostavame polovicni napeti. a pri te se C nesmi nabit vic nez o jeden LSB, jestli to dobre chapu. jenze je tu jeste druha vec frekvence PWM se vypocte jako frekvence podelena delickou a osmi bitovou hodnotou citace -> 11059200/64/256, takze ta je 675Mhz. a perioda je 1/675 …jsem z toho ted zmaten, je fakt, ze ale perioda PWM asi neni to same co kmitocet…protoze napriklad servomotor taky pracuje na 50Hz ale periodu ma 20ms. jsem z toho radne zmateny…

Aspon vidno ze rozmyslas :wink: , bola tam chyba. Uz som opravil to nasobenie 128x. Frekvencia nie je to iste ako perioda.

perioda = 1/frekvencia

Tych 128x (polovica) z 256 ta zaujima preto, lebo v polovoci periody PWM je najvacsie zvlenie vystupneho signalu. Viac ku kraju (hore alebo dole) je to uz len lepsie. Takze vysetrujeme najhorsi pripad.

ja vim ze perioda neni to same jako frekvence, ze je to jeji inverzni hodnota…ja to myslim takhle, kdyz mas servomotor tak ten funguje na frekvenci 50Hz, ale ma periodu 20ms. ale v datasheetu AVR mas frekvenci pwm vypoctenou jako 11059200/64/256 a to je 675 a z toho inverzni hodnota neni ta jeho perioda z ktere se pocitaji signaly o urcite stride, chapes?

tak jsem z toho zmateny…nooo…jenze toho jsem se bal ze reknes…ja totiz to poprve presne takhle spocital, mel jsem tam 10uF a 20k odpor, jenze mi to delalo velky ubytek na napeti a jelo pomaleji a psal jsem ti to co mi dela a tys rikal ze to nechapu…tak jsem tam dal 1,5k a 1uF í kdyz se mi to nezdalo) a stejne jak jsem popisoval predtim, kdyz tam das mensi, jede to rychle a bez ubytku v celem roszsahu tak jak by melo…

tak ja nevim, kde je chyba?

btw stejne se mi nezda ani co ted rikas. kdyz neco pracuje s vetsi frekvenci tak to udela za kratsi cas ne? takze kdyz mas frekvenci 1Mhz a kriticky cas 128 tak by mel bzt ten kriticky cas byt s vetsi frekvenci mensi, ne?

a pak druha vec…rikas ze by ten kondik nebo odpor mel byt radove hned ten dalsi vyssi podle toho co se prodava…jenze znamenko rika ze to ma byt mensi a ne vyssi…

druha vec cim si nejsem jisty je ten 1 LSB…no kazdopadne rikas ze 0,5 se dava normalne? takze to bude

e(-t/RC) < 255,5/256

??zkusim to dat zitra jeste podle toho znamenka, ne hned dalsi vetsi ale mensi, tak jak by melo asi byt…

ajo, vidim ze kdyz pocitam pro 0,5LSB, tak je odpor jeste vetsi…ale tak co potom to znamenko, ktere rika ze by mel byt mensi nez vypoctena hodnota??? jsem z toho vseho uplne zmateny…

Ktore znamienko? Nejako sa nechytam :slight_smile:

Cim bude vyssi R alebo C, tym pomalsia bude zmena napatia na C. Opacne, cim dlhzi cas budes cakat, tym sa napatie vyraznejsie zmeni.

Nerozumiem ake normalne. Ak imitujem 8b prevodnik, nema zmysel dosahovat stabilitu vyysiu ako +/-1/2LSB. Aj dosahuje +/-1/4LSB, uz aspirujem na prevodnik o jeden bit vacsi. Lenze je mi zbytocne mat hodnotu stabilnu na 1/16LSB ak je moj krok aj tak 1LSB. Zbytocne by som si robil prevodnik cez PWM pomalsi a tu presnost nastavenia aj tak neviem nijako ocenit. Pozri si napriklad v datasheete k AVR popis linearnej a diferencialnej nelinearity AD. Rovnake predpoklady platia aj pre DA.

Ak sa U na kondiku zmeni za 1/2 casu periody PWM o 1LSB a potom za dalsiu polovicu periody o 1LSB stupne, vysledna hodonta bude oscilovat okolo premerneho napatia +/-0.5LSB.

tymto by si dosahoval kolisanie +/-0.25LSB, co je vzhladom na 8b DA zbytocne. Jasne, ze napatie bude rovnomernejsie, ale aj tak z toho nevies vytrieskat ziadnu vyhodu, lebo najblizsi dalsi krok skoci az o 1/256-tinu .

Preco by to tak malo byt? Cim vacsia hodnota C, tym sa C pomalsie nabija/vybija. Cim vacsia hodnota R, tym sa C pomalsie nabija a vybyja. Podla tvojej logiky by sa C nabijal teoreticky nekonecne dlho, ak by si pripojil priamo na baterku, co je jasny nezmysel. Ak pripojis C cez 1Tohm odpor na baterku, tak sa bude nabijat velmi, ale naozaj velmi pomaly a ak to bude nejaky nie najlepsi elyt, ani sa moc nenabije, lebo jeho vnutorny odpor moze s tym 1Tphmom robit taky napatovy delic, ze sa samotna kapacita ani moc neprejavi.

Kde vidis ake znamienko?

To co pises v redchadzajucom prispevku znie hrozivo. Cim vacsi odpor tym mensie priemerne napatie na vystupe je dosledok nepouzitia operacneho zosilnovaca na vystupe RC v neinverujucom zapojeni. Uz sme ti tu o tom pisali. Kukni do starsich prispevkov.

Ak chces ovladat modelarske servo riadene pomocou pwm, tak na RC clen zabudni.

kukni napr. na:

serva.webnode.cz/rizeni-serva-teorie/

Do serva musis davat obdlznikovy signal s periodou 20ms a nie jednosmerne napatie 0-10V. To znamena, ze ak mas Xtal 11059000Hz, nemozes ho delit 64, lebo vysledna perioda PWM je 256/(110559000/64) a to nie je 20ms. Casy si musis nastavita tak aby ti perioda vysla 20ms. Potom jej plnenim (zmenou striedy) dosiahnes zmenu polohy serva.

jo to vim… ja tam mam zesilovac…ale melo z toho lezt napeti 0-5V a a pres zesilovac ktery to zvetsi 2x melo lezt 0-10V.

Ale rikam, kdyz jsem tam mel to nastaveni, 10uF a 20K nebo 33uF a 6K2 odpor…ale bylo to pomale a ubytek napeti…kdyz tam mam male tak ja nevim…tak jako proc tam tak moc to napeti klesne…jako tak moc…kdyz tam strcim mensi tak to jede pekne, jak rozsah tak rychlost…ale zas si nejsem jist jestli spravne…

znamenko jsem myslel takto

e(-t/RC) < 1-1/256
C < - t/(R*ln(0,996)) tak tam je znamenko <, ktere rika ze ten koncik by mel byt mensi nez co vyslo:-)

jenze pak kdyz se snizuje to LSB tak naopak vychazeji vetsi hodnoty pro vetsi presnost… tak to by davalo smysl kdyz si rikal at dam o rad vetsi, jenze proc to “<” potom:D

a jak bys pocital na to 0,5LSB?

Co ti tam klesa? Kde? Kedy? Preco? Kedy sem uzkonecne das schemu ako ti radi Piityy?

hmmmm…

e(-t/RC) < 1-1/256
-t/RC < ln(0.996)
-t/R < Cln(0.996)
-t/(R
ln(0.996) < C
-t/(R*(-0.004008)) < C
C > -t/(R*(-0.004008))

alebo

-t/(Cln(0.996) < R
-t/(C
(-0.004008)) < R
R > -t/(C*(-0.004008))

C (alebo R) musi byt vacsie ako vztah na druhej strane. Vsetko vychaza ako ma. Inak symbol < nie je znamienko, to ma dost plietlo co mas na mysli :slight_smile:

Pocital co? Aby to bolo +/-0.25LSB? No predsa na (1-1/512) pre 8b prevod.

praveze ne 0,25, tys predtim rikal ze se to pocita na 0,5…no muzu ti neco poslat az zitra…ale rikam ti co to dela…

kdyz tam dam podle toho nastaveni, jak jsem rikal treba tech 33uF a 6k2 nebo 10uF a 20k tak to ma pomalejsi odezvu a rozsah neni 0-10V za zesilovacem ale treba 0-3 nebo tak nejak byl…

kdyz tam dam nejake hovna tak to lita v plnem rozsahu 0-10 tak jak ma a jede to rychle…

ja nevim jsem uz z toho docela mimo…

Aky zosilovac pouzivas?
Ake je napajacie napatie toho OZ?
Urcite ho mas v neinvertujucom zapojeni?
Pri akej striede mas na vystupe zosilovaca 3V?
Ake zosilnenie mas nastavene?
Ako si ho nastavil?
Akym merakom merias to napatie?

Ak merak meria nieco ako kvazi vrcholovu hodnotu, potom samozrejme ze Ti ukaze vysoke napatie ak to stihne na RC s malymi hodnotami vystupat. neviem cim to vobec merias.

Samozrejme,ze s malymi hodnotami to rychle nadobudne zelanu hodnotu ale to napatie na C kolise o viac ako +/-0.5LSB. Preto som aj pisal, ze je zbytocne davat vyssie hodnoty, lebo sa akurat este viac spomali nabeh, co je uplne zbytocne.

Skonsoliduj si odpovede na tu polozene otazky a potom sa ozvi.

oz:

cs.wikipedia.org/wiki/Soubor:Opampnoninverting.svg

zesileni 2x, takze R1 10K, R2 10K.

do nej jde pouze z mikroprocesoru Vin 0-5V a tudiz pak ma byt 0-10V.

a to s tim jak jsem psal 3V tak to byl snizen cely rozsah, takze pri maximalnim napeti mel misto 10 jen 3, je to jen cca, nevim kolik presne, odmeroval jsem jen grafem v control webu. Ale multimetrem by to rikalo neco takoveho, klidne ti zitra reknu presnou hodnotu, proste se snizil rozsah o docela dost a zpomalilo se to…

takze myslis ze fakt bych tam mel mit tech 10uF a 20k nebo 33uF a 6k2, jo? ja to odzkousim zitra jeste znovu…

:arrow_right: administrator: přiloženy externí soubory
Opampnoninverting.svg

Polozil som ti 7 otazok. Ak chces postupit do dalsieho levelu, musis spravne odpovedat na vsetky. :slight_smile: