|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 6:22 am
| Автор |
Съобщение |
|
kasparov
Ранг: Почетен член
Регистриран на: Сря Апр 05, 2006 9:52 pm Мнения: 877 Местоположение: Разград
|
 Генериране на честоти
Интересувам се, ако някой може да ми даде идея, на какъв принцип
да генерирам с микроконтролер плавно нарастваща честота, от 0 до към 30 kHz,
нарастването трябва да е линейно във времето, също така, добре е да може да се
контролира и скоростта на нарастване, например от 0 до 30 kHz за 1- 2 десети от секундата.
Контролера мисля да е pic18f1320.
|
| Сря Май 07, 2008 8:33 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
Само с контролер или може да има към него и PLL ? Друго за което се сещам - контролер,ЦАП,преобразувател напрежение/честота.
|
| Сря Май 07, 2008 8:55 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Контролера ще се занимава ли други задачи или ще работи само като генератор ? Каква е минималната стъпка на нарастване/намаляване ?
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Сря Май 07, 2008 9:08 pm |
|
 |
|
kasparov
Ранг: Почетен член
Регистриран на: Сря Апр 05, 2006 9:52 pm Мнения: 877 Местоположение: Разград
|
Сценарият е следния: за 0,1 сек. генерираме поредица от импулси чиято честота нараства от 0 до f, след това за 0,4 сек. поддържаме честотата f, и накрая следва спадане на честотата на импулсите от f до 0. Получава се трапецовиден профил на честотата във времето, или т. нар ramp generator. През това време не е необходимо процесора да прави друго, но може да се наложи да се поддържа някаква индикация, за което остава половин секунда между два цикъла. Добре е да се знае броя на генерираните импулси.
За минималната скорост на нарастване, ако съм разбрал правилно въпроса, е около 30 кHz/s, до към 120 kHz/s.
|
| Сря Май 07, 2008 9:30 pm |
|
 |
|
plameniv
Ранг: Форумен бог
Регистриран на: Нед Окт 10, 2004 9:55 am Мнения: 1718
|
 MM
 |  |  |  | kasparov написа: Сценарият е следния: за 0,1 сек. генерираме поредица от импулси чиято честота нараства от 0 до f, след това за 0,4 сек. поддържаме честотата f, и накрая следва спадане на честотата на импулсите от f до 0. Получава се трапецовиден профил на честотата във времето, или т. нар ramp generator. През това време не е необходимо процесора да прави друго, но може да се наложи да се поддържа някаква индикация, за което остава половин секунда между два цикъла. Добре е да се знае броя на генерираните импулси. За минималната скорост на нарастване, ако съм разбрал правилно въпроса, е около 30 кHz/s, до към 120 kHz/s. |  |  |  |  |
Няма ли да стане ако го реализираш с вградения PWM на някой контролер , така процесора може да си върши нещо друго през това време а изхода на PWM ще си изкарва честоата без да има нужда да зависи от софтуера , като смяната на честотата ще я направиш чрез свободния таймер когато прекъсва на определено време 0.1сек и след н прекъсвания сменяш времето на прекъсване на 0.4сек и т.н. А софтуера нека си обслужва дисплей и каквото искаш още там ?
_________________ Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !
|
| Чет Май 08, 2008 1:12 am |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
С 2 MHz MCU с "output compare" съм правил неща, които биха го докарали
до 5 kHz с лекота (май границата беше към 10, ама не помня, беше преди
14 години).
Та в днешно време едва ли е проблем да го направиш с 6 пъти по-бърз
контролер, който има output compare; просто трябва да обработваш
по едно прекъсване на всеки цикъл и там да задаваш дължината на следващия.
Какви дължини следват се върти някак в прекъсваната част от кода.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Чет Май 08, 2008 1:51 am |
|
 |
|
Desert Leo
Ранг: Форумен бог
Регистриран на: Чет Фев 10, 2005 3:25 pm Мнения: 5677 Местоположение: София
|
Това курсова работа ли е?
От 0 до f за 0,1 сек нещо не го виждам. При 0,1Hz периода е 10 сек, при 1Hz - 1сек, а при 10Hz - 0,1 сек.
С други думи, за 0,1сек на изхода ще получиш рамп генератор в килохерцовата област. При ниски честоти просто не достига време за установяване на генерациите.
|
| Чет Май 08, 2008 8:17 am |
|
 |
|
kasparov
Ранг: Почетен член
Регистриран на: Сря Апр 05, 2006 9:52 pm Мнения: 877 Местоположение: Разград
|
Desert Leo, нали това е целта, за определено време да се достигнат килохерци. Опитах се да го представя и графично. Задачата не е курсова, сам съм си направил такова задание. Реално ще се ползва за задвижване на тяло с променлива ъглова скорост, и искам да задам ускорение, после движение с постоянна скорост и плавно спиране до нула.
относно PWM -а, дали ще може да му се променя плавно честотата и в широки граници?
tgi, "output compare" какво е, CCP модула ли ли е или нещо друго?
|
| Чет Май 08, 2008 12:26 pm |
|
 |
|
Desert Leo
Ранг: Форумен бог
Регистриран на: Чет Фев 10, 2005 3:25 pm Мнения: 5677 Местоположение: София
|
Да де, ама не от нула Hz. Задай някаква минимална честота, защото просто няма да стане за 0,1сек.
А и дали има нужда да бъде от нула.
|
| Чет Май 08, 2008 1:23 pm |
|
 |
|
sthx
Ранг: Форумен бог
Регистриран на: Съб Юни 24, 2006 8:25 pm Мнения: 2292
|
"output compare" е част от таймера на моторолските процесори - сравнява текущото значение на брояча със зададеното и формира автоматично на изхода определено състояние - 1 или 0. След прекъсването се формира ново задание по вкус. 30 кHz трябва да могат да се догонят по този начин. За пик-овете не зная как е.
_________________ Две плюс две е приблизително равно на четири. Факт!
|
| Чет Май 08, 2008 1:26 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
това ми напомня на CNC контролер за у-е на степер.
ако държиш да е пик - можеш да намериш няколко опънсорс контролера с пик и да им ги разгледаш сорса - иначе принципа е елементарен - на всяка стъпка променяш ширината на импулса (периода на прекъсването от таймера) като я смяташ или ползваш таблица ... за да си реализираш рампата....
30кHz не са много за подобни цели !
_________________ путинофили: "иди н***й"
Последна промяна ps66 на Нед Май 11, 2008 12:46 pm, променена общо 1 път
|
| Чет Май 08, 2008 1:45 pm |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
PWM - това е решението щом си с пик!Генерирането на честота с контролер НИКОГА не може да е линейно. Виж формулите за PWM-a и може да си сметнеш валидните честоти в Ексел-а например и да си избереш тия които ти трябват. Самия PWM си има прекъсване и може да го ползваш като "часовник", но може и с ТМР0. Правиш си една табличка със стойностите на честотите(периодите им) и втора с времето м/у тях и ги зареждаш в прекъсването при повикване от PWM/TMR2. За времето между стъпките ползвай брояч. За да ти е по-лесен живота първо си преобразувай честотите в период или направо в тактове и работи с тях в контролера.
И гледай запълването на PWM да е под 99% за да не ти спрат импулсите. Хубавото на PWM е ,че е хардуерно буфериран ,така че може да го зареждаш и асинхронно - промяната се появява чак след изтичане на текущия му период.
В останалото от прекъсването време може да си движиш друг код стига да не е времево чувствителен.
|
| Чет Май 08, 2008 3:13 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
Може да си направи и софтуеерно - константно запълване на импуса,променлив период.Ако се подберат правилно стойностите на изменение на честотата то тогава може да се постигне добра линейност,още повече че е двигател,т.е имаш филтър усредняваш  Но трябва да работиш на максималната честота която пика позволява.Както каза @ps66 - с таблица.
|
| Чет Май 08, 2008 3:27 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Както sthx обясни, output compare (OC) го има в таймерите на разните
контролери от Motorola/Freescale; аз първо го видях в HC11.
По-гъвкав вариант от това е трудно да се измисли, човек може
всеки цикъл да зададе колко дълъг да е следващият и да контролира
какво да прави някакъв изход в края на цикъла (т.е. изходът реагира,
а обработката на прекъсването следва и латентността и не влияе).
И понеже човек може да програмира изхода да отиде горе, долу, да се
обърне, или да не прави нищо и т.н., могат да се генерират произволни
серии от щракания, стига да няма два последователни интервала, чиято
обща дължина да е по-малка от времето за обслужване на прекъсването*2.
Има едни малки нови Coldfire базирани контролери, MCF51QE и MCF51JM,
те се клочат до 50 MHz за ядрото (25 за останалото, май и таймерът е
там), със сигурност биха свършили работа - и не са скъпи, под $5 ги
гледам за 1000+. Та те имат OC в таймерите си, де.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Чет Май 08, 2008 6:18 pm |
|
 |
|
kasparov
Ранг: Почетен член
Регистриран на: Сря Апр 05, 2006 9:52 pm Мнения: 877 Местоположение: Разград
|
Не съм много сигурен, но мисля че го открих този "output compare" за който говорите,
в 18F1320 (и в други), има таймер2 модул, към който има асоциран регистър PR2 в който може да се пише,
таймера генерира прекъсване когато стойността му се изравни с тази на PR2.
Ако това е така, това ще е единия начин по който ще опитам.
Относно Coldfire, по-нататък, за сега още сме на "дървена" платформа.
Другото решение, PWM-а - оказва се че същия този регистър PR2 дава времева база за PWM периода,
и ще може да се променя плавно този период, така че и това може да се види като второ решение.
Явно ще остава и доста свободен ресурс.
Жичка, ако може да дешифрираш "Генерирането на честота с контролер НИКОГА не може да е линейно"
P.S благодарности на всички за ценните напътствия до момента
|
| Чет Май 08, 2008 6:58 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|