|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 4:10 pm
|
Страница 1 от 1
|
[ 13 мнения ] |
|
STM32 таймери и DAC задачка...
| Автор |
Съобщение |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 STM32 таймери и DAC задачка...
Измъдрил съм някаква схема за управление на стъпков двигател, ама нещо не мога да измисля как да подкарам перифериите...
Значи чопъра съм го вързал към DAC-вете и съответно трябва да изкарам синусоидки. Скоростта постоянно варира, затова предварително си правя времената за всяка стъпка. Като при високите скорости времената падат до половин милисекунда/стъпка. За микростъпките не съм решил, но мисля да опитам с 32, т.е. при високи обороти DAC-те трябва да се пишат с DMA щото софта няма да се справи.
Нормално логиката трябва да е - един таймер прави времето на микростъпката, TRGO изхода на таймера прави евент на DAC-a и неговото DMA изкарва поредната точка.
Въпросът е как аджеба да накарам цялото това нещо да се повтори 32 пъти без намеса на проца. По-точно на 32-та микростъпка да спре "безопасно" и тогава проца да се намеси да смени фазите и да запусне следващата пореца от 32 точки.
На DMA-то на DAC-a мога да пусна само за 32 точки и то ще спре, обаче DAC-a няма да спре и ако таймера продължи да щрака ще имам много малко време да спра таймера иначе ще получа underflow на DAC и после трябва го ресетвам, кофти... По-скоро таймера трябва да спре, само дето не се сещам как да го накрам да щракне само 32 пъти. Има някакъв repetetion counter само че доколкото го разбирам той има ефект само на изходите на таймера. Като го пусна евентите няма да са на всяко превъртане ами веднъж на 32, което не ми върши работа. Освен някак си два таймера да навържа, един да клати DAC и втория таймер, втория като изброи до 32 да спре първия, ама как?
Тъй де, ако някой е правил нещо подобно, иначе ще продължа да си чета чаршафите...
|
| Вто Юли 14, 2015 7:48 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: STM32 таймери и DAC задачка...
А защо точно DAC-ове ще използваш ? Няма ли да ти е по-удобно да използваш PWM изходи ?
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Юли 14, 2015 11:02 pm |
|
 |
|
emilvtc
Ранг: Форумен бог
Регистриран на: Вто Фев 06, 2007 8:44 pm Мнения: 3175 Местоположение: Пловдив
|
 Re: STM32 таймери и DAC задачка...
Miro, при високи обороти микростъпките можеш да ги изключваш или да намалиш броят им (от 32 например на 4 или 2). Това се прави за да не се губи толкова въртящият момент на мотора, а и няма как да усетиш ефекта от изключването им. Микростъпките я вършат някаква (успокояват "вибрациите" при ниски обороти), а и едва ли някой разчита да ги ползва за точно позициониране - дори и при ниски обороти. 2kHz честота на стъпка мисля, че не е толкова много. Ако микростъпките са ти 32 (според мен при високи обороти няма нужда от тях) се получава 64kHz честота на микростъпка. Не знам какво друго мислиш да правиш с проца, но мисля, че това не е толкова висока честота за високо приоритетно прекъсване ...
А ако е - можеш синхронно да запуснеш втори таймер, който да ти генерира прекъсване малко преди последната микростъпка. Т.е. ако имаш 32 микростъпки, втория таймер го запускаш на първата микростъпка и той ти изтича да кажем на 30-та. Генерира ти прекъсване и в това прекъсване задържаш за малко управлението, полираш ДМА-то на ДАК-а и изчакваш докато зареди 32-та стъпка. След това веднага го презареждаш ДМА-то и излизаш от прекъсването.
Чопърите как мислиш да ги правиш? С Fault входовете на ПВМ-а ли, или ще имаш външни DC/DC чипове?
|
| Сря Юли 15, 2015 8:23 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM32 таймери и DAC задачка...
Ми DAC-вете ми сбяха свободни и тях съм вързал... По принцип имам доста щракалки и затова си ги предпочитам. По принцип може да се изключват, но това трябва да става без много софт. Значи стъпковия е само част от пейзажа и имам достатъчно други сметки. Всъщност това е термопринтер и броя пиксели, смятам къде с каква скорост да движа, щото ако има много черно трябва да осигуря време на печката, да клатя стробове. Ако е бяло пък гледам да движа хартията колкото може по-бързо. Та от там получавам често променящи се скорости, съобразявам ги с възможните ускорения и де-ускорения и т.н. В крайна сметка скоростта варира много и често. Не ми се ще при промяна да се налага да препрограмирам каквото и да е било. Предпочитам просто да заредя следващите данни и толкоз. Иначе не е фатално и без микростъпки ще работи, даже не знам още дали изобщо ще има полза от микростъпките. Надявам се да стане по-тихичко, ама ще видим... Вариантът да ползвам полиране е изключен. В рамките на една стъпка може до 10-на пъти да включвам печката, а тя е много по-опасна от стъпковия  А с готов драйвер за стъпков (DRV88xx), той си има всичко, аз само му правя референс с DAC и така определям тоците.
|
| Сря Юли 15, 2015 9:31 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM32 таймери и DAC задачка...
Четох, четох и май х'алгоритъмът трябва да е: 1) Пускам DAC-a с DMA с кръгов буфер за две стъпки (цял период полу-синус) и тригер от таймер. И го забравям.... на всяка микростъпка таймера ще трябва да дава тригерче и DMA-то да зарежда следваща точка. И така до безкрайност, важното е да не изпусна таймера да направи повече или по-малко микростъпи. 2) На всяка стъпка пускам таймера с период една микростъпка (колкото съм я сметнал) и повторение 32 пъти и one-pulse mode. Доколкото го разбирам, тва трябва да извърти 32 пъти таймерчето и да спре. 3) Един от каналите на таймера го ползвам за компараторче, така че да ми изработва едно импулсче на всяка врътка на таймера. Това импулсче го изкарвам като изходно събитие на таймера и съответно отива към DAC-a. В цялата работа трябва да имам едно единствено прекъсване след като се извъртят микростъпките и в това прекъсване или ще спра или ще запусна следващата порция. Забавянето в прекъсването няма да е фатално, защото таймерът е спрял, надявам се... Просто забавянето ще вкарва малки паузички между стъпките, но те едва ли ще се усещат. Има вариант и тва да избегна, но трябва да си преработвам логиката и не си струва. Сега остана да го разпиша и дай Боже да хукне 
|
| Сря Юли 15, 2015 10:44 am |
|
 |
|
sparkybg
Ранг: Форумен бог
Регистриран на: Вто Авг 23, 2005 12:02 pm Мнения: 3070 Местоположение: София
|
 Re: STM32 таймери и DAC задачка...
Нещо не схващам за какво ти е цялата заигравка с DAC-овете. Гледам например DRV8825 - референсите за 2-та канала са за средния ток. Защо ти е да ги сменяш по амнайсе пъти в секунда? Чипа си има STEP/DIR интерфейс, тоест само трябва да му подаваш импулсите, а той си има вътрешен DAC за микростъпките. Сега правя нещо с DRV8711 - на него пък всичко му се задава през SPI и после само му клюцаш стъпките/микростъпките по STEP/DIR-а. Ако ще ползваш чъншен чип, не виждам смисъл да занимаваш проца с тоците, при положение че чипа си ги има в него тия неща. Ако пък без външен чип - масово къстъм решенията са с CPLD/FPGA+DAC-ове и външна аналоговщина, състояща се предимно от някой и друг операционник/компаратор покрай H-мостовете.
|
| Сря Юли 15, 2015 12:13 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM32 таймери и DAC задачка...
За това става въпрос... и за драйвери от типа 12/13/28/... дето нямат DAC и микростъпки. Имат вход за референс и чопър. Нормално се ползват със статичен референс и без микростъпки... Ако се клатят референсите се получават микростъпките 
|
| Сря Юли 15, 2015 1:14 pm |
|
 |
|
sparkybg
Ранг: Форумен бог
Регистриран на: Вто Авг 23, 2005 12:02 pm Мнения: 3070 Местоположение: София
|
 Re: STM32 таймери и DAC задачка...
Мда, и аз междувременно видях че има и такива. Просто не са ми попадали в полезрението.
|
| Сря Юли 15, 2015 1:20 pm |
|
 |
|
emilvtc
Ранг: Форумен бог
Регистриран на: Вто Фев 06, 2007 8:44 pm Мнения: 3175 Местоположение: Пловдив
|
 Re: STM32 таймери и DAC задачка...
Miro, май не разбра идеята ми с полирането. Това което те притеснява (ако аз правилно съм разбрал), е че ако не обслужиш прекъсването от ДМА-то в края на трансфера от 32 стойности веднага или с време по-малко от тика с който клочиш ДМА-то (а той е 0.5mS/32=15.6uS), то ще получиш ундерфлоу грешка. Та ако не можеш да гарантираш обслужването на това прекъсване в рамките на тези 15uS, а примерно можеш в рамките на не-повече от 40uS, идеята е да запуснеш синхронно с таймера клочещ ДМА-то още един таймер, който да ти изтича 40uS преди зареждането на последната стойност от 32-те стойности на ДМА-то. Така ще влезеш в прекъсването по втория таймер 40uS преди да заредиш последната стойност от 32-те и ще задържиш управлението в рамките само на 40uS, като през това време ще полираш кога ще се приключи последния ДМА трансфер. Т.е когато това стане - веднага ще заредиш новите 32 стойности и ще презапуснеш втория таймер ... Тези 40uS са условни и може да са по-малко - в зависимост от системата ти.
Ако можеш да имаш респонс на прекъсване в края на ДМА трансфера в рамките на 15uS, няма нужда от втори таймер. До колкото разбирам обаче - точно това не можеш да гарантираш...
|
| Сря Юли 15, 2015 5:02 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM32 таймери и DAC задачка...
Аз те разбрах, ама си е най-добре да тръгне и да работи самичко без да мъча проца... Както казах, всичко това е на фона на доста обработки, прекъсвания и нишки... Поради тая причина не искам да имам underflow и да се натоварва с препрограмирания и т.н. А за полирания изобщо не искам да си помислям. В случая може и да тръгне, но е твърде лоша практика и просто трябва да се избягва.
|
| Сря Юли 15, 2015 10:09 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
 Re: STM32 таймери и DAC задачка...
Само идея ... Ако имаш 2 DMA канала и те и двата записват в една и съща периферия, но имат различни сорс буфери в паметта, и достъпите са интерлейснати, може да се реши така: При предпоследния запис ( последен за DMA канала, който е тръгнал пръв ), получаваш прекъсване. Така имаш 2 пъти повече време да реагираш и да препрограмираш и двата канала. Лека заигравка е да уцелиш дали вторият канал е направил / започнал трансфера или не, та да знаеш как да го сетнеш за новата серия. Естествено ще ти трябват и 2 таймера. Май с 2 канала на един таймер няма да стане, ама зависи от конкретния силикон.
|
| Чет Юли 16, 2015 9:42 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM32 таймери и DAC задачка...
два таймера, две DMA, всичко по две и пак нацелване  Силикона уж поддържа всякакви комбинации, днес надявам се да го пробвам с един таймер, едно DMA и без налучкване... да видим дали ще тръгне 
|
| Чет Юли 16, 2015 10:42 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM32 таймери и DAC задачка...
За протокола - тръгна... Обикновено мърморя че STM-те са кофти и бъгливи, но в случая бачка добре.. Единствената забележка е, че не е документирано и трябва сам да се сетиш. А пък си мисля че има много приложения в които трябва да се генерира периодичен аналогов сигнал с променлива честота. Всъщност това за много приложения е идеален заместител на DDS генератор, само че бачка без проца...
|
| Съб Юли 18, 2015 10:53 am |
|
|
|
Страница 1 от 1
|
[ 13 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 8 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|