Отговори на тема  [ 43 мнения ]  Отиди на страница Предишна  1, 2, 3  Следваща
Генериране на честоти 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
kasparov написа:
Жичка, ако може да дешифрираш "Генерирането на честота с контролер НИКОГА не може да е линейно"...

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

Имах предвид линейно изменяща се честота , например през 100Хц - 100,200,300 и т.н.
С контролера променяш периоди ,а честотата е реципрочна f=1/t . Това особено силно се усеща при по-високи честоти.
Това което ти трябва е CCP модула в PWM режим - мисля че точно с него трябва да го направиш.
Обаче не знам защо говориш за честоти - на графиката по ми прилича да променяш коеф.на запълване, което може да се постигне и с PWM, и е супер елементарно ,и с 1024 нива.


Чет Май 08, 2008 9:02 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Сря Апр 05, 2006 9:52 pm
Мнения: 877
Местоположение: Разград
Мнение 
ji4ka написа:
Заглавието на темата ме подведе и си помислих ,че ще правиш някакъв функционален генератор, вобел или нещо такова, та затова обърнах внимание ,че не може да получиш каквато си искаш честота, а точно определен набор, дискретни...

То май точно като фукционален генератор съм го мисил,
защото искам изходната честота да се определя по закона f=kt, където t е времето,
а k се явява първата производна и съответства на ускорението на устройството,
и целта ми е ускорението да е постоянно, или нула ( в платото на кривата).
Вече за стъпките си прав, че ще има, от дискретизацията.


Чет Май 08, 2008 9:59 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
Тоя двигател с честота ли се управлява или с напрежение? При 30кхц и честота на клока 4Мхц стъпката ще ти е 3% (1кхц). Затова трябва да избереш колкото се може по-висока честота - 20Мхц и тогава ще ти падне и грешката от дискретност. За ниските честоти може и постскалери да потрябват. Прочети даташита в частта за CCP модула и по-подробно за PWM режим. Някои пикове имат ECCP - с четири изхода за директно управление на мостове.


Чет Май 08, 2008 10:23 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Съб Окт 22, 2005 1:18 am
Мнения: 54
Мнение 
Виждам че чоплите интересни работи...та ако някой може да даде отговор на едно въпросче...Направих си (така де още не е завършен на 100%) цифров синтезатор на честота с Spartan3E...входната честота е 50MHz...изходната е от 1KHz до 20MHz стъпка 1KHz; от 21MHz до 50MHz стъпка 1MHz; от 52MHz до 72MHz стъпка 2MHz;от 76MHz до 106MHz стъпка 10Mhz....има и някои други щуротии но те нямат общо за момента...използвам вградените DCM модули в Spartan-a и с тях е леко...ама нали всичко трябва да е low cost...та има възможност да се мине на по нисък клас препрограмируем прибор - CPLD нещо си...и вероятно ще ми се наложи сам да си генерирам по висока честота от входната...ще е леко урязана версия на горното описано...първото което се сетих е да сложа външно VCO или някаква подобна специализирана ИС...но в един документ на XIlinx (ug331) пише, че "DCM is an all-digital design..." та някой знае ли в какво се състои умножението на две честоти изцяло по цифров път ? Изключвам 'ring oscillator ' понеже съм мн зависим от температурата и технологията и ще трябва някак си да компенсирам...Кварцов генератор на по висока честота вече отпадна...Захапал съм едни писания за DDS но оставам с впечатление, че се използва само за делене... Някакви идеи?


Чет Май 08, 2008 11:35 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
С таблица ама пък таблицата ще стане гигантска. (Уточнявам че аз се опитвам дейно да участвам в това изделие). Гоним много равномерно ускорение в зоните на рампите, тъй-като процеса е бърз, преместването сравнително малко а има натрупване на грешката (водещо до инфекции). До около 10 - 12 кХз я докарах програмата, ама за 150 не знам какво ще стане. Началото ще е примерно от 1-2 кХз. Аз пробвах по следния метод - единия таймер цъка на максималната честота и постоянно увеличава някакъв брояч, който от своя страна служи за задаване честота на друг таймер. Получава се че при първия импулс честотата се увеличава с да кажем 50 хз, следващия 45 и т.н. ама зависимостта е малко странна. и с PWM-a би станало ама разрядността му е малка и ще трябва да се ползват прескалери и става мазало.

Едит : честотата едно на ръка, ама лошото е, че и стъпките трябва да са точно.


Пет Май 09, 2008 1:19 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение 
Преди година две правих синтезиране на честоти.
Генералния извод след като приключих темата беше че ако ми се наложи пак да правя нещо подобно ще ползвм функционален генератор.
На финала все се заглеждах по разни ингерлани схеми и ме беше яд, че от самото начало не тръгнах в тази посока.
Вече нямаше време да сменям платформата.


Пет Май 09, 2008 3:10 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Честно казано и аз се замислям за нещо такова. Дай някакви насоки на къде да гледам.


Пет Май 09, 2008 4:12 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Окт 10, 2004 9:55 am
Мнения: 1718
Мнение MM
Cekins написа:
Честно казано и аз се замислям за нещо такова. Дай някакви насоки на къде да гледам.

Щом толкова ти се струва сложно да го направиш с PWM модула , замислил ли си се да управляваш генератор с напрежение , ама за целта е нужно DAC и чип например като LM331 :roll:
LM331 е чип който може да бъде генератор управляван с напрежение дръпни си документацията и помисли :
http://www.datasheetcatalog.com/datashe ... M331.shtml
Вече софта ти се улеснява до това да си правиш стъпката която да подава на едно DAC и от него във входа на този чип :)

_________________
Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !


Пет Май 09, 2008 4:51 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Не казвам че е трудно, ама не ми се връзват сметките по таймингите. Идеята е да се получи линейно увеличаване на честотата а не като това на картинката по-долу. Щото това на картинката всеки го може ...


Прикачени файлове:
kriva.jpg
kriva.jpg [ 11.56 KiB | Прегледано 1896 пъти ]
Пет Май 09, 2008 4:58 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
kasparov - не става да ползваш вградения хардуерен PWM в PIC18F1320 (а и не само в него), защото хардуерните PWM имат ограничения (аутпут компараторите също, ама при тях е по-гъвкаво). Например с въпросния PIC ако работи на 40MHz не можеш да генерираш по-ниска честота от 650Hz мисля беше. Така, че от 0.1Hz до 30kHz просто няма как да стане автоматизирано с контролер. Най-добре май да се ползва някакво CPLD/FPGA, което да се управлява от контролер :) .


Пет Май 09, 2008 5:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Окт 10, 2004 9:55 am
Мнения: 1718
Мнение Хубаво де!
Cekins написа:
Не казвам че е трудно, ама не ми се връзват сметките по таймингите. Идеята е да се получи линейно увеличаване на честотата а не като това на картинката по-долу. Щото това на картинката всеки го може ...

Погледни документацията на този чип той е прецизен V->F преобразувател със грешка 0.01% от 1-100Khz.
Защо да не стане с вградения PWM на контролера ?
Ако го зареждаш с готови стойности от таблица би трябвало да стане, но ще е доста големичка таблицата така :)

_________________
Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !


Пет Май 09, 2008 5:25 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Е те това ми е мисълта на мене, ама Димитър го каза по-точно. Между другото съм се замислял за варианта с LM331. Тогава пък броенето на импуслите ще стане асинхронно в контролера и при тия честоти, грешката е почти сигурно гарантирана.


Пет Май 09, 2008 5:45 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Сря Апр 05, 2006 9:52 pm
Мнения: 877
Местоположение: Разград
Мнение 
Направих по конкретни сметки, разделяйки периода на нарастване на 100 единици,
за да видя какви реални стойности се получават,
резултата е следния:

Код:

t   f, Hz   period uS
1   300   3333
2   600   1667
3   900   1111
4   1200   833
5   1500   667
6   1800   556
7   2100   476
8   2400   417
9   2700   370
10   3000   333
11   3300   303
12   3600   278
13   3900   256
14   4200   238
15   4500   222
16   4800   208
17   5100   196
18   5400   185
19   5700   175
20   6000   167
21   6300   159
22   6600   152
23   6900   145
24   7200   139
25   7500   133
26   7800   128
27   8100   123
...........
...........
...........
83   24900   40
84   25200   40
85   25500   39
86   25800   39
87   26100   38
88   26400   38
89   26700   37
90   27000   37
91   27300   37
92   27600   36
93   27900   36
94   28200   35
95   28500   35
96   28800   35
97   29100   34
98   29400   34
99   29700   34
100   30000   33

f, сред.   15150 Hz
общо uS  17291



Лошото е, че периодите между импулсите се
движат по хиперболична крива, от вида у = 1/х
Освен това диапазона на изменение на периодите е 16 битов, а таймера с output compare е 8 битов.
Има ли някакъв трик за по-бъро преобразуване честотата в период, или трябва да се използва деление?


Пет Май 09, 2008 10:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Cekins написа:
Е те това ми е мисълта на мене, ама Димитър го каза по-точно. Между другото съм се замислял за варианта с LM331. Тогава пък броенето на импуслите ще стане асинхронно в контролера и при тия честоти, грешката е почти сигурно гарантирана.


Сложи една обратна връзка от изхода на генератора в capture модула на професора, така ще си в синхрон.

Защо не поразгледате по обстойно Compare модула ECCP ? Има удобен режим на toggle output когато CCPR1 стане равно на TMR1 ( или TMR3 ). Задавате половината от периода в CCPR1, TMR1 расте, когато CCPR1 стане равно на TMR1 изхода се превключва автоматично, в прекъсване добавяте другата половина на периода в CCPR1, така при следващото изравняване на CCPR1 с TMR1 изхода ще се върне в първоначално състоние, пак се генерира прекъсване, пак добавяте половината период към CCPR1 и продължавате напред. Или пък можете да използвате TMR1 и TMR3, в единия задавате половината период, в другия втората половина, при прекъсването ще превключвате Compare модула от единия към другия таймер ( само не съм сигурен при това превключване дали не се нулира я CCPR1, я таймерите ). Със сигурност ще има грешка, но няма да е фатална. За грешката може и някаква корекция да се измисли.

С TMR0 пък задавате стъпката на промяна на честотите

kasparov написа:
Лошото е, че периодите между импулсите се
движат по хиперболична крива, от вида у = 1/х
Освен това диапазона на изменение на периодите е 16 битов, а таймера с output compare е 8 битов.
Има ли някакъв трик за по-бъро преобразуване честотата в период, или трябва да се използва деление?


Ако използваш Compare модула, таймера е 16-битов, плюс 2 битов prescaler.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пет Май 09, 2008 10:18 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юни 10, 2007 2:22 pm
Мнения: 6492
Местоположение: София
Мнение 
8 бита OC може да дойде и малко, инак не е проблем да го разшириш
с пълни цикли до колкото искаш. Но и 30 kHz, пък и на PIC, знам ли.
Не познавам в детайли PIC-овете, знам ги колкото ми е трябвало за да
реша, че не си струва да се губя с тях; не бих се учудил, ако не
стигне. Нещо не ми е ясно защо толкова много хора си губят времето
с тях, има конкурентни по цена опции, които ги превъзхождат многократно
технически.

Смятането на честота от период е лесно, но разбира се става с деление.

В случая нормалният подход е да смяташ няколко цикъла напред от
таблицата в прекъсваем код, прекъсването да си взима последното,
което му трябва и да показва на прекъсваемия код докъде е стигнало,
и толкова, всъщност е съвсем проста задача.
Инак казано, прекъсваемият код смята таблицата в цикъл и слага стойностите
на опашка (като напълни опашката стои и чака, отива да върши друго,
превключва към друг таск, както там дойде), а OC прекъсването си взима по една
стойност от опашката всеки път и я ползва по предназначение.

_________________
-------------------
www.tgi-sci.com
-------------------
http://www.flickr.com/photos/didi_tgi/


Пет Май 09, 2008 10:33 pm
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 43 мнения ]  Отиди на страница Предишна  1, 2, 3  Следваща

Кой е на линия

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


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

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