Отговори на тема  [ 13 мнения ] 
"Софтуерен PLL" 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 06, 2007 8:44 pm
Мнения: 3175
Местоположение: Пловдив
Мнение "Софтуерен PLL"
От няколко дена се опитвам да измисля такова "чудо", което да се изпълнява на "въшкав" 16 битов микроконтролер, който си има хадруерен умножител и делител.

Целта е на изхода да се получи "N" пъти по-висока честота спрямо входната.
Т.е. вхотдната честота се подава на кепчър вход (ССР) на микроконтролера, с който се измерва периода и.
Изходната честота се генерира от кампеър (ССР) на микроконтролера.
Идеята е когато "N"= 10, изходната честота да е 10 пъти по-голяма от входната. (т.е. периода на изходната да е 10 пъти по-малък от периода на входната).

Входната честота е в интервала 0-2kHz, а коефициента на умножение "N" е 1,2,3,4,5, ... 16.

До тук нищо сложно, стига входната честота да е постоянна - мери и се периода, дели се на "N" и така се получава периода на изходната честота, който се зарежда в изходния кампеър. Зареждането на новия период в изходния кампеър става след изтичането на предишно заредения в него период (в прекъсване). Т.е. периодите се зареждат период след период.

Това, което не мога все още да съобразя и измисля е как да направя алгоритъма за изчисляване на периодите на изходната честота, когато има промяна на входната честота ??? Т.е. периодите на изхода да се променят плавно, а не стъпаловидно след всяко измерване на периода на входния сигнал...

Примерно при намаляване на периода на входния сигнал, периодите на изходния сигнал също трябва да започнат да намаляват, Като пример при N=10, сумата от десетте периода на изх. сигнал трябва да е = периода на входния сигнал, като промяната в периодите на десетте изх. периода трябва да е със същата скорост, каквато е скоростта на промяна на периода на входния сигнал. ... (дано съм го обяснил читаво)

Като допълнително условие което опростява задачата може да се въведе ограничението, че входната честота се променя по линеен закон (увеличаването/намаляването и става по линеен закон).

Някой с по-прясни спомени от математиката може ли да ми помогне с идеи при извеждането на формулата?


Съб Дек 25, 2010 1:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 06, 2007 8:44 pm
Мнения: 3175
Местоположение: Пловдив
Мнение 
Нещо подобно на аритметична прогресия е, но не съвсем ...

Нека разгледаме 4 последователни входни импулса с периоди Т1,Т2,Т3 и Т4.
Нека периодите им да намаляват един спрямо друг - Т1>Т2>Т3>Т4 (т.е входната честота да нараства)

Като знаем предишните 2 последователни периода на импулсите на входния сигнал Т1 и Т2, можем горе/долу да предскажем периода на следващия импулс Т3=2*Т2-Т1. и на по-следващия
Т4=2*Т3-Т2

След като измерим периодите на първите два входни импулса Т1 и Т2, докъто очакваме третия входен импулс и измерването на Т3 , то разделяме предполагаемия период Т3 на N подинтервала.
След като третия импулс постъпи на входа и сме измерили периода му Т3 - можем докъто очакваме четвъртия импулс да предскажем периода му Т4 и да го разделим на N подинтервала.

Подинтервалите в рамките на периода на входния импулс не искам да са равни (примерно Т3/N или Т4/N) , а да са намаляващи един спрямо друг по същия закон, както и периодите на входните импулси.

От друга страна първия подинтервал на предполагаемия Т4 период на входния сигнал трябва да е по-малък от последния подинтервал в периода Т3 на входния импулс.

За аритметичната прогресия знаем
t(n):t0+n*d ,
а сумата и е :
S(n)=(2*t0 + (n-1)*d)*n/2

Та ако приемем, че всеки период на подинтервала е последващ елемент на аретметичната прогресия, то трябва последния подинтервал на периода Т3 да е по-голям от първия елемент на подинтервала Т4...


Нед Дек 26, 2010 1:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Яну 20, 2009 11:54 pm
Мнения: 11338
Местоположение: "Занзибар"
Мнение 
Ама че коледна тема измисли :) Всички са зациклили (включително и ти) а кучето спи под дръвника без да си е навило будилника :lol: Аз от време навреме се ровя из нета за изтрезняване...
Сигурен съм че може да се намери идеалният алгоритъм но не и от човек позабравил математиката. То тук кой ли я помни добре а аз си спомням само че лицето на кръга бе "пи по ро на квадрат" и заради последното колелата на влака тракат :)

Един PLL се състои от фазов(+ честотен?) компаратор, ПИД верига и VCO.
За компаратор ти препоръчвам тригерния на '4046 който май правеше: като постъпи фронт от Фаза1 изходът става "1" докато не постъпи фронт от Фаза2 и тогава минава в трето състояние. Ако обаче следващия фронт е на Фаза2 става "0" и минава в трето състояние само ако постъпи фронт на Фаза1 и т.н. Колкото по-бърз е компаратора - толкова по-добре.

ПИД: изходът на фазовият компаратор е свързан към НЧ филтър с поне 10 пъти по-ниска честота от работната. Усредняване де, ама подробностите са извън спомените ми. След това се подава на интегрираща верига с около 10 пъти по-голяма времеконстанта, т.е. предното усредняване но 10 пъти по-голямо и към изхода му се добавя входа но с 10-на пъти по-малка стойност.

VCO-то: колкото по-бързо - толкова по-добре.



В твоя случай имаш леснотията "предвидимост" ама аз там нямам думата.


Нед Дек 26, 2010 3:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
Първо си смени името на темата на "честотен умножител" защото в случая PLL направо няма смисъл. PLL-a е само частен случай на честотен умножител. PLL идва от "фаз-локед-лооп" или преведено "ООВ по фаза", а при 0хц не знам как ще дефинираш "фаза".
От предсказване няма полза , просто нещата ще ти изостават с един период на входната честота/импулси. Та значи мериш последния завършил период (Т1-Т0) и пускаш N импулса с период (Т1-Т0)/N. По-добро от това едва ли ще постигнеш, не и без риск за грешки.
Всъщност добре е да уточниш кое ти е по-важно - броя на импулсите или периодите между тях?


Нед Дек 26, 2010 4:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 06, 2007 8:44 pm
Мнения: 3175
Местоположение: Пловдив
Мнение 
Е, темата не е много коледна, но пък занимава съзнанието ми вече няколко дена :-)

Не е просто честотен умножител, защото честотата не е единственото, което е важно в случая. Броя на импулсите също трябва да съответства.

Идеята е изходните импулси със съответните подпериоди съответстващи на предсказването за текущия период на входния импулс да се генерират докъто той се измерва.
Те се изчисляват на база на някакво предсказване за периода на текущо измервания импулс. Разбира се, че винаги ще има някаква грешка при "предсказването", която трябва да се "чисти" когато измерването на периода на входния импулс завърши.

Това чистене ще става с промяна на продължителността на последния подпериод. Допустимо е той да не е равен на изчисления при предсказването. Т.е. в края на измервания импулс правя "фазовото" сравнение на края на входния и края на изчисления и генериран в момента последен изходен импулс.

Т.е изчислява се прогнозна стойност на продължителността на импулса, който измерваме в момента, разделяме тази прогнозна продължителност на N подпериода и докъто генерираме съответните изходни импулси с изчислените подпериодни продължителности - измерваме продължителността на входния импулс.

А-бе изчанчени са ми изискванията. Класическия PLL с НЧ си филтри и ПИД-ове е недопостимо, заради внасяните закъснения в него.
Всичко трябва да става в "реално време" :-)

Незнам дали въобще това което искам е възможно, но ми изглежда възможно ...


Нед Дек 26, 2010 6:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
Явно искаш апроксимация (приближение) , но според мен е по-добре да правиш интерполация - там си е точно. Оформяш нещо като ФИФО буфер и смяташ на негова база. Естествено ще се получи закъснение на "тръгването" и ще трябва да се измисля и критерий за последния импулс (няма да го чакаш вечно).
За линейни сметки може да ползваш аритметичната прогресия:
S=(Cn+Cm)/2*N -сума на аритметична прогресия (за теб входящия период)
Cn - първи член (междинните периоди)
Cm - последен член
N=m-n+1 - брой членове в сметката (ти си ги избираш)
От формулката извеждаш "теглото" на най-малкия член (или коеф.на нарастване.)
Например за 10 импулса и период 1000мкс имаш S=55 ; C1=1000/55=18.18; C2=2*18.18 и т.н. Сигурно и някаква "делта база" ще трябва да имаш, а бе нещо в тоя дух въртиш и смяташ.
Търси повече информация при "числените методи" в математиката и ТОЕ-то, при интегралите, при цифровите филтри.


Нед Дек 26, 2010 8:56 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 06, 2007 8:44 pm
Мнения: 3175
Местоположение: Пловдив
Мнение 
FIFO-то не ми върши работа. Трябва да е в реално време с предсказване или нещо подобно.

Цялата щуротия ми трябва за едно управление на стъпков морор.

Каква е идеята: Управляващата електроника изработва сигнали СТЕП и ДИР, които движат мотора на цели стъпки. Идеята е да се направи междинно устройство, което да управлява мотора в микростъпков режим. т.е. от входните СТЕП импулси да изработи изходни МИкРОСТЕП импулси с 8 пъти по-висока честота, които да управляват стандартен микростъпков драйвер с 8 микростъпки за степ-мотор.

Представете си един плотер, писалката на който се задвижва от 2 степ-мотора - за X и Y осите. Сами разбирате, че забавяне на изходния сигнал би довел до неточно позициониране, когато има едновременно движение и по двете оси - примерно когато пллотера чертае окръжност. Ако има някакво закъснение - окръжността няма да е окръжност или контура и ще е зигзагообразен (вълнообразен).

Точността и забавянето при отработването на последната микростъпка предполагам няма да се отрази драстично на динамичното позициониране на механиката. Микростъпките са само за постигане на плавност на управлението, а не за повишаване на резолюцията.


Нед Дек 26, 2010 9:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
"Бързината на реакцията" на едно ФАПЧ :) (фазово автоматично поддържане на честотата) зависи от фазовата характеристика на НЧФ след фазовия детектор.
Дали филтъра ти ще е софуерен или хардуерен няма значение, винаги ще имаш закъснение и грешка.

_________________
Хайде де!


Нед Дек 26, 2010 9:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Яну 20, 2009 11:54 pm
Мнения: 11338
Местоположение: "Занзибар"
Мнение 
Миии вместо да се правиш на баба Ванга що не изчакаш да свърши импулса и тогава да управляваш с точност? В обратната връзка правиш аналогично буфериране и пак е в реално време ама с един период задръжка.
Не знам дали можеш да си го позволиш но на мен ми звучи мъъдро.


Нед Дек 26, 2010 10:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
emilvtc написа:
... Сами разбирате, че забавяне на изходния сигнал би довел до неточно позициониране, когато има едновременно движение и по двете оси - примерно когато пллотера чертае окръжност. Ако има някакво закъснение - окръжността няма да е окръжност или контура и ще е зигзагообразен (вълнообразен). ..

Получава се забавяне най-много от една стъпка и то по всички оси. Освен това линиите на микрониво никога не са идеални, а са "начупени". Колко микрона ти е една стъпка? Понякога дори самия софтуер генерира "по-неточни" координати за да работи по-бързо, отделно несъвършенствата на механиката не позволяват точност над определено ниво.
За висока точност даже трябва по-голям ФИФО буфер за да може с голямо предварение да се анализират ситуациите и да се изработва съответната реакция. Цифровите обработки винаги водят до закъснение, неизбежно е. ЦНЦ софта не може ли направо да ти подаде микростъпки?


Нед Дек 26, 2010 11:51 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 06, 2007 8:44 pm
Мнения: 3175
Местоположение: Пловдив
Мнение 
Не мога да си позволя да буферирам няколко импулса и след това със закъснение да генерирам изходните. Ако остта на движение беше само една - става, но ако има повече от една ос на движение - синхрона между тях в следствие на различното закъснение (зависещо от периода на импулсите за различните оси) ще доведе до неправилно "динамично" позициониране.

Искам да разгледаме задачата принционо и чисто математично без да се съобразяваме какви други начини за решаването на проблема има.
Може би не трябваше да споменавам механичното и приложение, за да не си отклоняваме мисленето в други начини за решаване на проблема.
От друга страна от механичното приложение трябва да се извлекат няколко извода и ограничения, които да облекчат математичното решение на задачата:
1. Ако вхидните сигнали придават някакво ускорение (повишаване на оборотите) на ротора на мотора, то и микростъпките трябва да предизвикват същото ускорение.
2. при спиране на входните импулси мотора винаги спира на цяла стъпка. Т.е. микростъпките само осигуряват плавно предвижване между целите стъпки.
3. от извод 2 следва, че ако входния импулс завърши по-рано - преди още микростъпките за предполагаемият му период да са изпълнени, то те се прекратяват и се генерира управление придвижващо мотора на съответната цяла стъпка.
Разбира се това би довело до някаква "неравномерност" на въртящия момент и би предизвикало "паразитно" ускорение на ротора, но тъй като винаги ще има грешка от предсказването на периода на входния импулс - тази грешка винаги ще я има.
При всички случаи обаче си мисля, че мотор управляван с такова управление ще се върти с много по-малко вибрации спрямо управлението му на цели стъпки.
От друга страна тъй като мотора въпреки микростъпките ВИНАГИ ще спира на цяла стъпка не очаквам никаква "статична" грешка при позиционирането в спряло положение.

Това, което се опитвам да направя с това управление е да намаля "динамичната" грешка при позиционирането по време на движение.

Нека се върнем към чисто математичното решаване на задачата и да се абстрахираме от механичния модел. Както казах - механичния модел ни трябваше само за да ни даде допълнителна информация за възможни компромиси, които можем да направим при математичното разглеждане и решаване.


Пон Дек 27, 2010 11:35 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
Математически погледнато, не може да се предскаже произволен входен сигнал. Точни прогнози ще се редуват с големи грешки (по-големи от "простата" обработка). По-добре да имаш постоянна но равномерна грешка , отколкото нулева грешка редуваща се с непредсказуема голяма. Асинхронното вкарване или невкарване на импулс от микростъпките ще даде като резултат бръмчене , което обезмисля задачата им да "изгладят" преходите.
Не си губи времето с абстракции, по-добре реши конкретния проблем първо по най-лесния и достъпен начин, а после мисли за екстрите. Така винаги ще имаш база за сравнение. Най-добрия извор на работещи идеи е практиката. По правило, точния математически модел се открива след като прототипа вече работи, а не преди това. :)


Пон Дек 27, 2010 2:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Юни 01, 2008 9:54 pm
Мнения: 1503
Местоположение: Пловдив
Мнение 
ji4ka написа:
По правило, точния математически модел се открива след като прототипа вече работи, а не преди това. :)

:prayer: сега ако го обясниш това и на разни дървени глави, дето си мислят, че от пръдня боя става и то преди да си изял боба...
Извинявам се за лиричното отклонение дето не е по темата... :oops:


Пон Дек 27, 2010 8:08 pm
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 13 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни