|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:27 am
|
Страница 1 от 1
|
[ 13 мнения ] |
|
| Автор |
Съобщение |
|
emilvtc
Ранг: Форумен бог
Регистриран на: Вто Фев 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 |
|
 |
|
emilvtc
Ранг: Форумен бог
Регистриран на: Вто Фев 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 |
|
 |
|
bongo_x2
Ранг: Форумен бог
Регистриран на: Вто Яну 20, 2009 11:54 pm Мнения: 11338 Местоположение: "Занзибар"
|
Ама че коледна тема измисли  Всички са зациклили (включително и ти) а кучето спи под дръвника без да си е навило будилника  Аз от време навреме се ровя из нета за изтрезняване...
Сигурен съм че може да се намери идеалният алгоритъм но не и от човек позабравил математиката. То тук кой ли я помни добре а аз си спомням само че лицето на кръга бе "пи по ро на квадрат" и заради последното колелата на влака тракат
Един PLL се състои от фазов(+ честотен?) компаратор, ПИД верига и VCO.
За компаратор ти препоръчвам тригерния на '4046 който май правеше: като постъпи фронт от Фаза1 изходът става "1" докато не постъпи фронт от Фаза2 и тогава минава в трето състояние. Ако обаче следващия фронт е на Фаза2 става "0" и минава в трето състояние само ако постъпи фронт на Фаза1 и т.н. Колкото по-бърз е компаратора - толкова по-добре.
ПИД: изходът на фазовият компаратор е свързан към НЧ филтър с поне 10 пъти по-ниска честота от работната. Усредняване де, ама подробностите са извън спомените ми. След това се подава на интегрираща верига с около 10 пъти по-голяма времеконстанта, т.е. предното усредняване но 10 пъти по-голямо и към изхода му се добавя входа но с 10-на пъти по-малка стойност.
VCO-то: колкото по-бързо - толкова по-добре.
В твоя случай имаш леснотията "предвидимост" ама аз там нямам думата.
|
| Нед Дек 26, 2010 3:34 pm |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Първо си смени името на темата на "честотен умножител" защото в случая PLL направо няма смисъл. PLL-a е само частен случай на честотен умножител. PLL идва от "фаз-локед-лооп" или преведено "ООВ по фаза", а при 0хц не знам как ще дефинираш "фаза".
От предсказване няма полза , просто нещата ще ти изостават с един период на входната честота/импулси. Та значи мериш последния завършил период (Т1-Т0) и пускаш N импулса с период (Т1-Т0)/N. По-добро от това едва ли ще постигнеш, не и без риск за грешки.
Всъщност добре е да уточниш кое ти е по-важно - броя на импулсите или периодите между тях?
|
| Нед Дек 26, 2010 4:03 pm |
|
 |
|
emilvtc
Ранг: Форумен бог
Регистриран на: Вто Фев 06, 2007 8:44 pm Мнения: 3175 Местоположение: Пловдив
|
Е, темата не е много коледна, но пък занимава съзнанието ми вече няколко дена
Не е просто честотен умножител, защото честотата не е единственото, което е важно в случая. Броя на импулсите също трябва да съответства.
Идеята е изходните импулси със съответните подпериоди съответстващи на предсказването за текущия период на входния импулс да се генерират докъто той се измерва.
Те се изчисляват на база на някакво предсказване за периода на текущо измервания импулс. Разбира се, че винаги ще има някаква грешка при "предсказването", която трябва да се "чисти" когато измерването на периода на входния импулс завърши.
Това чистене ще става с промяна на продължителността на последния подпериод. Допустимо е той да не е равен на изчисления при предсказването. Т.е. в края на измервания импулс правя "фазовото" сравнение на края на входния и края на изчисления и генериран в момента последен изходен импулс.
Т.е изчислява се прогнозна стойност на продължителността на импулса, който измерваме в момента, разделяме тази прогнозна продължителност на N подпериода и докъто генерираме съответните изходни импулси с изчислените подпериодни продължителности - измерваме продължителността на входния импулс.
А-бе изчанчени са ми изискванията. Класическия PLL с НЧ си филтри и ПИД-ове е недопостимо, заради внасяните закъснения в него.
Всичко трябва да става в "реално време"
Незнам дали въобще това което искам е възможно, но ми изглежда възможно ...
|
| Нед Дек 26, 2010 6:41 pm |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 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 |
|
 |
|
emilvtc
Ранг: Форумен бог
Регистриран на: Вто Фев 06, 2007 8:44 pm Мнения: 3175 Местоположение: Пловдив
|
FIFO-то не ми върши работа. Трябва да е в реално време с предсказване или нещо подобно.
Цялата щуротия ми трябва за едно управление на стъпков морор.
Каква е идеята: Управляващата електроника изработва сигнали СТЕП и ДИР, които движат мотора на цели стъпки. Идеята е да се направи междинно устройство, което да управлява мотора в микростъпков режим. т.е. от входните СТЕП импулси да изработи изходни МИкРОСТЕП импулси с 8 пъти по-висока честота, които да управляват стандартен микростъпков драйвер с 8 микростъпки за степ-мотор.
Представете си един плотер, писалката на който се задвижва от 2 степ-мотора - за X и Y осите. Сами разбирате, че забавяне на изходния сигнал би довел до неточно позициониране, когато има едновременно движение и по двете оси - примерно когато пллотера чертае окръжност. Ако има някакво закъснение - окръжността няма да е окръжност или контура и ще е зигзагообразен (вълнообразен).
Точността и забавянето при отработването на последната микростъпка предполагам няма да се отрази драстично на динамичното позициониране на механиката. Микростъпките са само за постигане на плавност на управлението, а не за повишаване на резолюцията.
|
| Нед Дек 26, 2010 9:23 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
"Бързината на реакцията" на едно ФАПЧ  (фазово автоматично поддържане на честотата) зависи от фазовата характеристика на НЧФ след фазовия детектор.
Дали филтъра ти ще е софуерен или хардуерен няма значение, винаги ще имаш закъснение и грешка.
_________________ Хайде де!
|
| Нед Дек 26, 2010 9:36 pm |
|
 |
|
bongo_x2
Ранг: Форумен бог
Регистриран на: Вто Яну 20, 2009 11:54 pm Мнения: 11338 Местоположение: "Занзибар"
|
Миии вместо да се правиш на баба Ванга що не изчакаш да свърши импулса и тогава да управляваш с точност? В обратната връзка правиш аналогично буфериране и пак е в реално време ама с един период задръжка.
Не знам дали можеш да си го позволиш но на мен ми звучи мъъдро.
|
| Нед Дек 26, 2010 10:28 pm |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Получава се забавяне най-много от една стъпка и то по всички оси. Освен това линиите на микрониво никога не са идеални, а са "начупени". Колко микрона ти е една стъпка? Понякога дори самия софтуер генерира "по-неточни" координати за да работи по-бързо, отделно несъвършенствата на механиката не позволяват точност над определено ниво.
За висока точност даже трябва по-голям ФИФО буфер за да може с голямо предварение да се анализират ситуациите и да се изработва съответната реакция. Цифровите обработки винаги водят до закъснение, неизбежно е. ЦНЦ софта не може ли направо да ти подаде микростъпки?
|
| Нед Дек 26, 2010 11:51 pm |
|
 |
|
emilvtc
Ранг: Форумен бог
Регистриран на: Вто Фев 06, 2007 8:44 pm Мнения: 3175 Местоположение: Пловдив
|
Не мога да си позволя да буферирам няколко импулса и след това със закъснение да генерирам изходните. Ако остта на движение беше само една - става, но ако има повече от една ос на движение - синхрона между тях в следствие на различното закъснение (зависещо от периода на импулсите за различните оси) ще доведе до неправилно "динамично" позициониране.
Искам да разгледаме задачата принционо и чисто математично без да се съобразяваме какви други начини за решаването на проблема има.
Може би не трябваше да споменавам механичното и приложение, за да не си отклоняваме мисленето в други начини за решаване на проблема.
От друга страна от механичното приложение трябва да се извлекат няколко извода и ограничения, които да облекчат математичното решение на задачата:
1. Ако вхидните сигнали придават някакво ускорение (повишаване на оборотите) на ротора на мотора, то и микростъпките трябва да предизвикват същото ускорение.
2. при спиране на входните импулси мотора винаги спира на цяла стъпка. Т.е. микростъпките само осигуряват плавно предвижване между целите стъпки.
3. от извод 2 следва, че ако входния импулс завърши по-рано - преди още микростъпките за предполагаемият му период да са изпълнени, то те се прекратяват и се генерира управление придвижващо мотора на съответната цяла стъпка.
Разбира се това би довело до някаква "неравномерност" на въртящия момент и би предизвикало "паразитно" ускорение на ротора, но тъй като винаги ще има грешка от предсказването на периода на входния импулс - тази грешка винаги ще я има.
При всички случаи обаче си мисля, че мотор управляван с такова управление ще се върти с много по-малко вибрации спрямо управлението му на цели стъпки.
От друга страна тъй като мотора въпреки микростъпките ВИНАГИ ще спира на цяла стъпка не очаквам никаква "статична" грешка при позиционирането в спряло положение.
Това, което се опитвам да направя с това управление е да намаля "динамичната" грешка при позиционирането по време на движение.
Нека се върнем към чисто математичното решаване на задачата и да се абстрахираме от механичния модел. Както казах - механичния модел ни трябваше само за да ни даде допълнителна информация за възможни компромиси, които можем да направим при математичното разглеждане и решаване.
|
| Пон Дек 27, 2010 11:35 am |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Математически погледнато, не може да се предскаже произволен входен сигнал. Точни прогнози ще се редуват с големи грешки (по-големи от "простата" обработка). По-добре да имаш постоянна но равномерна грешка , отколкото нулева грешка редуваща се с непредсказуема голяма. Асинхронното вкарване или невкарване на импулс от микростъпките ще даде като резултат бръмчене , което обезмисля задачата им да "изгладят" преходите.
Не си губи времето с абстракции, по-добре реши конкретния проблем първо по най-лесния и достъпен начин, а после мисли за екстрите. Така винаги ще имаш база за сравнение. Най-добрия извор на работещи идеи е практиката. По правило, точния математически модел се открива след като прототипа вече работи, а не преди това. 
|
| Пон Дек 27, 2010 2:04 pm |
|
 |
|
head_up
Ранг: Форумен бог
Регистриран на: Нед Юни 01, 2008 9:54 pm Мнения: 1503 Местоположение: Пловдив
|
 сега ако го обясниш това и на разни дървени глави, дето си мислят, че от пръдня боя става и то преди да си изял боба...
Извинявам се за лиричното отклонение дето не е по темата... 
|
| Пон Дек 27, 2010 8:08 pm |
|
|
|
Страница 1 от 1
|
[ 13 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|