| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Генериране на честоти http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=5769 |
Страница 1 от 3 |
| Автор: | kasparov [ Сря Май 07, 2008 8:33 pm ] |
| Заглавие: | Генериране на честоти |
Интересувам се, ако някой може да ми даде идея, на какъв принцип да генерирам с микроконтролер плавно нарастваща честота, от 0 до към 30 kHz, нарастването трябва да е линейно във времето, също така, добре е да може да се контролира и скоростта на нарастване, например от 0 до 30 kHz за 1- 2 десети от секундата. Контролера мисля да е pic18f1320. |
|
| Автор: | Ки4о [ Сря Май 07, 2008 8:55 pm ] |
| Заглавие: | |
Само с контролер или може да има към него и PLL ? Друго за което се сещам - контролер,ЦАП,преобразувател напрежение/честота. |
|
| Автор: | ¶ [ Сря Май 07, 2008 9:08 pm ] |
| Заглавие: | |
Контролера ще се занимава ли други задачи или ще работи само като генератор ? Каква е минималната стъпка на нарастване/намаляване ? |
|
| Автор: | kasparov [ Сря Май 07, 2008 9:30 pm ] |
| Заглавие: | |
Сценарият е следния: за 0,1 сек. генерираме поредица от импулси чиято честота нараства от 0 до f, след това за 0,4 сек. поддържаме честотата f, и накрая следва спадане на честотата на импулсите от f до 0. Получава се трапецовиден профил на честотата във времето, или т. нар ramp generator. През това време не е необходимо процесора да прави друго, но може да се наложи да се поддържа някаква индикация, за което остава половин секунда между два цикъла. Добре е да се знае броя на генерираните импулси. За минималната скорост на нарастване, ако съм разбрал правилно въпроса, е около 30 кHz/s, до към 120 kHz/s. |
|
| Автор: | plameniv [ Чет Май 08, 2008 1:12 am ] | |||||||||
| Заглавие: | MM | |||||||||
Няма ли да стане ако го реализираш с вградения PWM на някой контролер , така процесора може да си върши нещо друго през това време а изхода на PWM ще си изкарва честоата без да има нужда да зависи от софтуера , като смяната на честотата ще я направиш чрез свободния таймер когато прекъсва на определено време 0.1сек и след н прекъсвания сменяш времето на прекъсване на 0.4сек и т.н. А софтуера нека си обслужва дисплей и каквото искаш още там ? |
||||||||||
| Автор: | tgi [ Чет Май 08, 2008 1:51 am ] |
| Заглавие: | |
С 2 MHz MCU с "output compare" съм правил неща, които биха го докарали до 5 kHz с лекота (май границата беше към 10, ама не помня, беше преди 14 години). Та в днешно време едва ли е проблем да го направиш с 6 пъти по-бърз контролер, който има output compare; просто трябва да обработваш по едно прекъсване на всеки цикъл и там да задаваш дължината на следващия. Какви дължини следват се върти някак в прекъсваната част от кода. |
|
| Автор: | Desert Leo [ Чет Май 08, 2008 8:17 am ] |
| Заглавие: | |
Това курсова работа ли е? От 0 до f за 0,1 сек нещо не го виждам. При 0,1Hz периода е 10 сек, при 1Hz - 1сек, а при 10Hz - 0,1 сек. С други думи, за 0,1сек на изхода ще получиш рамп генератор в килохерцовата област. При ниски честоти просто не достига време за установяване на генерациите. |
|
| Автор: | Desert Leo [ Чет Май 08, 2008 1:23 pm ] |
| Заглавие: | |
Да де, ама не от нула Hz. Задай някаква минимална честота, защото просто няма да стане за 0,1сек. А и дали има нужда да бъде от нула. |
|
| Автор: | sthx [ Чет Май 08, 2008 1:26 pm ] |
| Заглавие: | |
"output compare" е част от таймера на моторолските процесори - сравнява текущото значение на брояча със зададеното и формира автоматично на изхода определено състояние - 1 или 0. След прекъсването се формира ново задание по вкус. 30 кHz трябва да могат да се догонят по този начин. За пик-овете не зная как е. |
|
| Автор: | ps66 [ Чет Май 08, 2008 1:45 pm ] | |||||||||
| Заглавие: | ||||||||||
това ми напомня на CNC контролер за у-е на степер. ако държиш да е пик - можеш да намериш няколко опънсорс контролера с пик и да им ги разгледаш сорса - иначе принципа е елементарен - на всяка стъпка променяш ширината на импулса (периода на прекъсването от таймера) като я смяташ или ползваш таблица ... за да си реализираш рампата.... 30кHz не са много за подобни цели ! |
||||||||||
| Автор: | ji4ka [ Чет Май 08, 2008 3:13 pm ] |
| Заглавие: | |
PWM - това е решението щом си с пик!Генерирането на честота с контролер НИКОГА не може да е линейно. Виж формулите за PWM-a и може да си сметнеш валидните честоти в Ексел-а например и да си избереш тия които ти трябват. Самия PWM си има прекъсване и може да го ползваш като "часовник", но може и с ТМР0. Правиш си една табличка със стойностите на честотите(периодите им) и втора с времето м/у тях и ги зареждаш в прекъсването при повикване от PWM/TMR2. За времето между стъпките ползвай брояч. За да ти е по-лесен живота първо си преобразувай честотите в период или направо в тактове и работи с тях в контролера. И гледай запълването на PWM да е под 99% за да не ти спрат импулсите. Хубавото на PWM е ,че е хардуерно буфериран ,така че може да го зареждаш и асинхронно - промяната се появява чак след изтичане на текущия му период. В останалото от прекъсването време може да си движиш друг код стига да не е времево чувствителен. |
|
| Автор: | Ки4о [ Чет Май 08, 2008 3:27 pm ] |
| Заглавие: | |
Може да си направи и софтуеерно - константно запълване на импуса,променлив период.Ако се подберат правилно стойностите на изменение на честотата то тогава може да се постигне добра линейност,още повече че е двигател,т.е имаш филтър усредняваш |
|
| Автор: | tgi [ Чет Май 08, 2008 6:18 pm ] |
| Заглавие: | |
Както sthx обясни, output compare (OC) го има в таймерите на разните контролери от Motorola/Freescale; аз първо го видях в HC11. По-гъвкав вариант от това е трудно да се измисли, човек може всеки цикъл да зададе колко дълъг да е следващият и да контролира какво да прави някакъв изход в края на цикъла (т.е. изходът реагира, а обработката на прекъсването следва и латентността и не влияе). И понеже човек може да програмира изхода да отиде горе, долу, да се обърне, или да не прави нищо и т.н., могат да се генерират произволни серии от щракания, стига да няма два последователни интервала, чиято обща дължина да е по-малка от времето за обслужване на прекъсването*2. Има едни малки нови Coldfire базирани контролери, MCF51QE и MCF51JM, те се клочат до 50 MHz за ядрото (25 за останалото, май и таймерът е там), със сигурност биха свършили работа - и не са скъпи, под $5 ги гледам за 1000+. Та те имат OC в таймерите си, де. |
|
| Автор: | kasparov [ Чет Май 08, 2008 6:58 pm ] |
| Заглавие: | |
Не съм много сигурен, но мисля че го открих този "output compare" за който говорите, в 18F1320 (и в други), има таймер2 модул, към който има асоциран регистър PR2 в който може да се пише, таймера генерира прекъсване когато стойността му се изравни с тази на PR2. Ако това е така, това ще е единия начин по който ще опитам. Относно Coldfire, по-нататък, за сега още сме на "дървена" платформа. Другото решение, PWM-а - оказва се че същия този регистър PR2 дава времева база за PWM периода, и ще може да се променя плавно този период, така че и това може да се види като второ решение. Явно ще остава и доста свободен ресурс. Жичка, ако може да дешифрираш "Генерирането на честота с контролер НИКОГА не може да е линейно" P.S благодарности на всички за ценните напътствия до момента |
|
| Страница 1 от 3 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|