|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 3:38 am
| Автор |
Съобщение |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Заглавието на темата ме подведе и си помислих ,че ще правиш някакъв функционален генератор, вобел или нещо такова, та затова обърнах внимание ,че не може да получиш каквато си искаш честота, а точно определен набор, дискретни...
Имах предвид линейно изменяща се честота , например през 100Хц - 100,200,300 и т.н.
С контролера променяш периоди ,а честотата е реципрочна f=1/t . Това особено силно се усеща при по-високи честоти.
Това което ти трябва е CCP модула в PWM режим - мисля че точно с него трябва да го направиш.
Обаче не знам защо говориш за честоти - на графиката по ми прилича да променяш коеф.на запълване, което може да се постигне и с PWM, и е супер елементарно ,и с 1024 нива.
|
| Чет Май 08, 2008 9:02 pm |
|
 |
|
kasparov
Ранг: Почетен член
Регистриран на: Сря Апр 05, 2006 9:52 pm Мнения: 877 Местоположение: Разград
|
То май точно като фукционален генератор съм го мисил,
защото искам изходната честота да се определя по закона f=kt, където t е времето,
а k се явява първата производна и съответства на ускорението на устройството,
и целта ми е ускорението да е постоянно, или нула ( в платото на кривата).
Вече за стъпките си прав, че ще има, от дискретизацията.
|
| Чет Май 08, 2008 9:59 pm |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Тоя двигател с честота ли се управлява или с напрежение? При 30кхц и честота на клока 4Мхц стъпката ще ти е 3% (1кхц). Затова трябва да избереш колкото се може по-висока честота - 20Мхц и тогава ще ти падне и грешката от дискретност. За ниските честоти може и постскалери да потрябват. Прочети даташита в частта за CCP модула и по-подробно за PWM режим. Някои пикове имат ECCP - с четири изхода за директно управление на мостове.
|
| Чет Май 08, 2008 10:23 pm |
|
 |
|
Trigger
Ранг: Минаващ
Регистриран на: Съб Окт 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 |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
С таблица ама пък таблицата ще стане гигантска. (Уточнявам че аз се опитвам дейно да участвам в това изделие). Гоним много равномерно ускорение в зоните на рампите, тъй-като процеса е бърз, преместването сравнително малко а има натрупване на грешката (водещо до инфекции). До около 10 - 12 кХз я докарах програмата, ама за 150 не знам какво ще стане. Началото ще е примерно от 1-2 кХз. Аз пробвах по следния метод - единия таймер цъка на максималната честота и постоянно увеличава някакъв брояч, който от своя страна служи за задаване честота на друг таймер. Получава се че при първия импулс честотата се увеличава с да кажем 50 хз, следващия 45 и т.н. ама зависимостта е малко странна. и с PWM-a би станало ама разрядността му е малка и ще трябва да се ползват прескалери и става мазало.
Едит : честотата едно на ръка, ама лошото е, че и стъпките трябва да са точно.
|
| Пет Май 09, 2008 1:19 pm |
|
 |
|
rumen
Ранг: Почетен член
Регистриран на: Чет Ное 25, 2004 3:42 pm Мнения: 913
|
Преди година две правих синтезиране на честоти.
Генералния извод след като приключих темата беше че ако ми се наложи пак да правя нещо подобно ще ползвм функционален генератор.
На финала все се заглеждах по разни ингерлани схеми и ме беше яд, че от самото начало не тръгнах в тази посока.
Вече нямаше време да сменям платформата.
|
| Пет Май 09, 2008 3:10 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Честно казано и аз се замислям за нещо такова. Дай някакви насоки на къде да гледам.
|
| Пет Май 09, 2008 4:12 pm |
|
 |
|
plameniv
Ранг: Форумен бог
Регистриран на: Нед Окт 10, 2004 9:55 am Мнения: 1718
|
 MM
Щом толкова ти се струва сложно да го направиш с PWM модула , замислил ли си се да управляваш генератор с напрежение , ама за целта е нужно DAC и чип например като LM331
LM331 е чип който може да бъде генератор управляван с напрежение дръпни си документацията и помисли :
http://www.datasheetcatalog.com/datashe ... M331.shtml
Вече софта ти се улеснява до това да си правиш стъпката която да подава на едно DAC и от него във входа на този чип 
_________________ Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !
|
| Пет Май 09, 2008 4:51 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Не казвам че е трудно, ама не ми се връзват сметките по таймингите. Идеята е да се получи линейно увеличаване на честотата а не като това на картинката по-долу. Щото това на картинката всеки го може ...
|
| Пет Май 09, 2008 4:58 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 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 |
|
 |
|
plameniv
Ранг: Форумен бог
Регистриран на: Нед Окт 10, 2004 9:55 am Мнения: 1718
|
 Хубаво де!
Погледни документацията на този чип той е прецизен V->F преобразувател със грешка 0.01% от 1-100Khz.
Защо да не стане с вградения PWM на контролера ?
Ако го зареждаш с готови стойности от таблица би трябвало да стане, но ще е доста големичка таблицата така 
_________________ Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !
|
| Пет Май 09, 2008 5:25 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Е те това ми е мисълта на мене, ама Димитър го каза по-точно. Между другото съм се замислял за варианта с LM331. Тогава пък броенето на импуслите ще стане асинхронно в контролера и при тия честоти, грешката е почти сигурно гарантирана.
|
| Пет Май 09, 2008 5:45 pm |
|
 |
|
kasparov
Ранг: Почетен член
Регистриран на: Сря Апр 05, 2006 9:52 pm Мнения: 877 Местоположение: Разград
|
Направих по конкретни сметки, разделяйки периода на нарастване на 100 единици,
за да видя какви реални стойности се получават,
резултата е следния:
Лошото е, че периодите между импулсите се
движат по хиперболична крива, от вида у = 1/х
Освен това диапазона на изменение на периодите е 16 битов, а таймера с output compare е 8 битов.
Има ли някакъв трик за по-бъро преобразуване честотата в период, или трябва да се използва деление?
|
| Пет Май 09, 2008 10:04 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Сложи една обратна връзка от изхода на генератора в capture модула на професора, така ще си в синхрон. Защо не поразгледате по обстойно Compare модула ECCP ? Има удобен режим на toggle output когато CCPR1 стане равно на TMR1 ( или TMR3 ). Задавате половината от периода в CCPR1, TMR1 расте, когато CCPR1 стане равно на TMR1 изхода се превключва автоматично, в прекъсване добавяте другата половина на периода в CCPR1, така при следващото изравняване на CCPR1 с TMR1 изхода ще се върне в първоначално състоние, пак се генерира прекъсване, пак добавяте половината период към CCPR1 и продължавате напред. Или пък можете да използвате TMR1 и TMR3, в единия задавате половината период, в другия втората половина, при прекъсването ще превключвате Compare модула от единия към другия таймер ( само не съм сигурен при това превключване дали не се нулира я CCPR1, я таймерите ). Със сигурност ще има грешка, но няма да е фатална. За грешката може и някаква корекция да се измисли. С TMR0 пък задавате стъпката на промяна на честотите
Ако използваш Compare модула, таймера е 16-битов, плюс 2 битов prescaler.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пет Май 09, 2008 10:18 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 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 |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|