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

Регистриран на: Сря Апр 05, 2006 9:52 pm
Мнения: 877
Местоположение: Разград
Мнение Генериране на честоти
Интересувам се, ако някой може да ми даде идея, на какъв принцип
да генерирам с микроконтролер плавно нарастваща честота, от 0 до към 30 kHz,
нарастването трябва да е линейно във времето, също така, добре е да може да се
контролира и скоростта на нарастване, например от 0 до 30 kHz за 1- 2 десети от секундата.
Контролера мисля да е pic18f1320.


Сря Май 07, 2008 8:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
Само с контролер или може да има към него и PLL ? Друго за което се сещам - контролер,ЦАП,преобразувател напрежение/честота.


Сря Май 07, 2008 8:55 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Контролера ще се занимава ли други задачи или ще работи само като генератор ? Каква е минималната стъпка на нарастване/намаляване ?

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


Сря Май 07, 2008 9:08 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Сря Апр 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Окт 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юни 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
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 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
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Сря Апр 05, 2006 9:52 pm
Мнения: 877
Местоположение: Разград
Мнение 
Desert Leo написа:
Това курсова работа ли е?
..С други думи, за 0,1сек на изхода ще получиш рамп генератор в килохерцовата област. ..


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

относно PWM -а, дали ще може да му се променя плавно честотата и в широки граници?

tgi, "output compare" какво е, CCP модула ли ли е или нещо друго?


Прикачени файлове:
Gen.jpg
Gen.jpg [ 89.23 KiB | Прегледано 1742 пъти ]
Чет Май 08, 2008 12:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение 
Да де, ама не от нула Hz. Задай някаква минимална честота, защото просто няма да стане за 0,1сек.
А и дали има нужда да бъде от нула.


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

Регистриран на: Съб Юни 24, 2006 8:25 pm
Мнения: 2292
Мнение 
"output compare" е част от таймера на моторолските процесори - сравнява текущото значение на брояча със зададеното и формира автоматично на изхода определено състояние - 1 или 0. След прекъсването се формира ново задание по вкус. 30 кHz трябва да могат да се догонят по този начин. За пик-овете не зная как е.

_________________
Две плюс две е приблизително равно на четири. Факт!


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

Регистриран на: Пет Яну 19, 2007 9:16 am
Мнения: 1063
Местоположение: путинофили: "иди н***й"
Мнение 
kasparov написа:
...нали това е целта, за определено време да се достигнат килохерци. Опитах се да го представя и графично. Задачата не е курсова, сам съм си направил такова задание. Реално ще се ползва за задвижване на тяло с променлива ъглова скорост, и искам да задам ускорение, после движение с постоянна скорост и плавно спиране до нула.
...


това ми напомня на CNC контролер за у-е на степер.

ако държиш да е пик - можеш да намериш няколко опънсорс контролера с пик и да им ги разгледаш сорса - иначе принципа е елементарен - на всяка стъпка променяш ширината на импулса (периода на прекъсването от таймера) като я смяташ или ползваш таблица ... за да си реализираш рампата....
30кHz не са много за подобни цели !

_________________
путинофили: "иди н***й"


Последна промяна ps66 на Нед Май 11, 2008 12:46 pm, променена общо 1 път



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

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
PWM - това е решението щом си с пик!Генерирането на честота с контролер НИКОГА не може да е линейно. Виж формулите за PWM-a и може да си сметнеш валидните честоти в Ексел-а например и да си избереш тия които ти трябват. Самия PWM си има прекъсване и може да го ползваш като "часовник", но може и с ТМР0. Правиш си една табличка със стойностите на честотите(периодите им) и втора с времето м/у тях и ги зареждаш в прекъсването при повикване от PWM/TMR2. За времето между стъпките ползвай брояч. За да ти е по-лесен живота първо си преобразувай честотите в период или направо в тактове и работи с тях в контролера.
И гледай запълването на PWM да е под 99% за да не ти спрат импулсите. Хубавото на PWM е ,че е хардуерно буфериран ,така че може да го зареждаш и асинхронно - промяната се появява чак след изтичане на текущия му период.
В останалото от прекъсването време може да си движиш друг код стига да не е времево чувствителен.


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

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
Може да си направи и софтуеерно - константно запълване на импуса,променлив период.Ако се подберат правилно стойностите на изменение на честотата то тогава може да се постигне добра линейност,още повече че е двигател,т.е имаш филтър усредняваш ;) Но трябва да работиш на максималната честота която пика позволява.Както каза @ps66 - с таблица.


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

Регистриран на: Нед Юни 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
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Сря Апр 05, 2006 9:52 pm
Мнения: 877
Местоположение: Разград
Мнение 
Не съм много сигурен, но мисля че го открих този "output compare" за който говорите,
в 18F1320 (и в други), има таймер2 модул, към който има асоциран регистър PR2 в който може да се пише,
таймера генерира прекъсване когато стойността му се изравни с тази на PR2.
Ако това е така, това ще е единия начин по който ще опитам.
Относно Coldfire, по-нататък, за сега още сме на "дървена" платформа. :)

Другото решение, PWM-а - оказва се че същия този регистър PR2 дава времева база за PWM периода,
и ще може да се променя плавно този период, така че и това може да се види като второ решение.

Явно ще остава и доста свободен ресурс.

Жичка, ако може да дешифрираш "Генерирането на честота с контролер НИКОГА не може да е линейно"

P.S благодарности на всички за ценните напътствия до момента


Чет Май 08, 2008 6:58 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 43 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

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


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

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