-
Постов
17 -
Зарегистрирован
-
Посещение
-
проблема с USB
haki опубликовал тема в ARM, 32bit
Прошу помочь в поиске проблемы работы USB. ИМС STM32F103; проблема довольно странная, при использовании второго таймера, отпадывает связь USB. ось на компе debian (stable+testing(местами)); библиотека libopencm3; dmesg выдаёт ошибку -71; но наверное я не умею гуглить потому как не нашёл подробностей. ошибка эта вроде как подразумевает отказ устройства принимать назначенный адрес. если отключаю строку в которой запускается таймер, юсб работает без проблем. всякими мелкими не серьёзными тестами убедился что юсб работает через picocom. https://github.com/hackerproff/rsm500 http://fotki.yandex.ru/next/users/hackerpr...225/view/857562 -
STM32F103; libopencm3; timer; compare registr
haki ответил haki тема в ARM, 32bit
я не придираюсь, а пытаюсь найти причину, и пишу больше инфы, которая на мой взгляд может иметь значение. я пробовал убирать timer_enable_oc_preload, я даже пробовал использовать timer_disable_oc_preload. но МК ведёт себя не так как я хочу. >> а потому что вы не читаете документацию я эту документацию уже вдоль и поперёк прочитал, и очень удивляюсь не работоспособности примера. а какую вы библиотеку используете ? про С++ я подумал из-за конструкции TIM3->CR1 = 0; не помню чтоб в Си было ->, это вроде только у С++. >> то новое значение в CCR1 запишется только при переполнении таймера или при вызове "события обновления" из проги. что в общем то тоже должно работать. -
STM32F103; libopencm3; timer; compare registr
haki ответил haki тема в ARM, 32bit
естественно, потому что пишу на форум, если бы заработало, я бы не тревожил форум. вот в чём разница: у вас С++ у меня Си; у вас похоже win у меня linux; у вас среда разработки и компилятор от производителя, у меня "почти самодельный" gcc arm none eabi; библиотека у меня libopencm3, которой похоже никто не пользуется. -
STM32F103; libopencm3; timer; compare registr
haki ответил haki тема в ARM, 32bit
И по событию, и сразу, я пробовал все возможные варианты, даже те которые по логике не должны работать. и естественно ничего не работает. -
STM32F103; libopencm3; timer; compare registr
haki ответил haki тема в ARM, 32bit
весёлый у вас код, в коде TIM_SR_CC3IF; в коментах clear cc1; если я правильно понял документацию, то прелоад надо разрешать, чтоб он в теневой регистр писал только по Update Event а не на середине пути, т.е. теневой регистр не должен влиять на то что из регистра предзагрузки данные скопируются в теневой при событии. -
STM32F103; libopencm3; timer; compare registr
haki опубликовал тема в ARM, 32bit
Получалось ли у кого либо менять значение Capture/compare 1 register в обработчике прерывания? предположим для второго таймера. Обязательно ли указывать значение в регистр авто перезаписи ? (counter counts from 0 to the auto-reload value (content of the TIMx_ARR register) Уже несколько месяцев танцы с бубном не приводят к изменению значения в Capture/compare 1 register в обработчике прерывания. Имеет ли смысл пробовать писать напрямую по адресам в стиле: *((uint32_t volatile *)0xE000ED04) = 0x10000000; ? прикладываю кусок кода если кому не лень подумать. 1 #include <libopencm3/stm32/rcc.h> 2 #include <libopencm3/stm32/gpio.h> 3 #include <libopencm3/stm32/flash.h> 4 #include <libopencm3/stm32/exti.h> 5 #include <libopencm3/stm32/timer.h> 6 7 #include <libopencm3/cm3/scb.h> 8 #include <libopencm3/cm3/nvic.h> 9 //#include <libopencm3/cm3/systick.h> 10 //#include <libopencm3/cm3/cortex.h> 11 23 #define PIN GPIO0 24 25 26 #define PORT GPIOB 27 #define RCC_RORT RCC_APB2ENR_IOPBEN 28 29 // для удобства изменения номера таймера , ключевые слова вытащены наверх. 30 #define TIMER TIM2 31 #define TIM_ISR tim2_isr 32 #define NVIC NVIC_TIM2_IRQ 33 #define RCC_TIMER RCC_APB1ENR_TIM2EN 34 #define NVIC_CLOCK_TIMER NVIC_TIM2_IRQ 35 36 37 #define TIMER_PRSC 7200 38 39 40 #define barrier() do { __asm__ __volatile__ (""); } while (0) 41 42 43 uint16_t G_COMPARE_TIME = 10000; 44 45 46 47 48 49 void TIM_ISR( void ) 50 { 51 if ( !( timer_get_flag( TIMER, TIM_SR_CC1IF ))) 52 return; 53 54 timer_clear_flag( TIMER, TIM_SR_CC1IF ); 55 56 57 G_COMPARE_TIME = timer_get_counter( TIMER ); 58 G_COMPARE_TIME += 1000; 59 60 timer_set_oc_value( TIMER, TIM_OC1, G_COMPARE_TIME ); 61 62 gpio_toggle( PORT, PIN ); 63 } 64 65 66 67 68 69 70 71 int main(void) 72 { 73 extern uint32_t vector_table __asm__( "vector_table" ); 74 SCB_VTOR = ( uint32_t ) &vector_table; 75 76 // - - - - - - - - - 77 78 rcc_clock_setup_in_hse_8mhz_out_72mhz(); 79 80 rcc_peripheral_enable_clock( &RCC_APB1ENR, RCC_TIMER ); 81 rcc_peripheral_enable_clock( &RCC_APB2ENR, RCC_RORT ); 82 83 84 // - - - - - - - - - 85 86 gpio_set( PORT, PIN ); 87 88 gpio_set_mode( PORT 89 , GPIO_MODE_OUTPUT_2_MHZ 90 , GPIO_CNF_OUTPUT_PUSHPULL 91 , PIN ); 92 93 // - - - - - - - - - 94 95 96 timer_reset( TIMER ); 97 98 timer_set_prescaler( TIMER, TIMER_PRSC ); 99 100 101 timer_set_mode( TIMER 102 , TIM_CR1_CKD_CK_INT 103 , TIM_CR1_CMS_EDGE 104 , TIM_CR1_DIR_UP ); 105 106 107 timer_continuous_mode( TIMER ); 108 109 timer_enable_update_event( TIMER ); 110 111 timer_set_dma_on_compare_event( TIMER ); // check TODO 112 timer_set_dma_on_update_event( TIMER ); // chech TODO 113 114 115 timer_set_oc_slow_mode( TIMER, TIM_OC1 ); 116 117 118 timer_set_period( TIMER, 65535 ); // auto-reload register. 119 120 121 timer_disable_oc_clear( TIMER, TIM_OC1 ); 122 timer_disable_oc_clear( TIMER, TIM_OC2 ); 123 timer_disable_oc_clear( TIMER, TIM_OC3 ); 124 timer_disable_oc_clear( TIMER, TIM_OC4 ); 125 126 timer_disable_oc_output( TIMER, TIM_OC1 ); 127 timer_disable_oc_output( TIMER, TIM_OC2 ); 128 timer_disable_oc_output( TIMER, TIM_OC3 ); 129 timer_disable_oc_output( TIMER, TIM_OC4 ); 130 131 timer_enable_oc_preload( TIMER, TIM_OC1 ); 132 133 134 timer_set_oc_value( TIMER, TIM_OC1, G_COMPARE_TIME ); 135 136 timer_set_oc_mode( TIMER 137 , TIM_OC1 138 , TIM_OCM_ACTIVE // the output assumes the active state 139 // on the first match. 140 ); 141 142 143 144 145 146 timer_enable_irq( TIMER, TIM_DIER_CC1IE ); 147 timer_enable_irq( TIMER, TIM_DIER_UIE ); 148 149 // - - - - - - - - - 150 151 152 nvic_set_priority( NVIC_CLOCK_TIMER, 2 ); 153 nvic_enable_irq( NVIC ); 154 155 timer_enable_counter( TIMER ); 156 157 // - - - - - - - - - 158 while( 1 ) 159 barrier(); 160 161 return 0; 162 } -
libopencm3 timers
haki опубликовал тема в ARM, 32bit
не получается запустить таймер на stm32f103 с библиотекой libopencm3. кому не сложно, помогите. пытался приложить исходники, а мне пишут "Неудачная загрузка. Вам запрещено загружать такой тип файлов" поэтому приложу внешний линк. http://yadi.sk/d/OxSJv3-IFRedf -
вычисление корня
haki ответил haki тема в MCS51, AVR, PIC, STM8, 8bit
Я не говорил про язык, тут речь про алгоритм. Таблицы не уместны. Посмотрите сколько памяти у МК, еле хватает на переменные. -
вычисление корня
haki опубликовал тема в MCS51, AVR, PIC, STM8, 8bit
ATMega8515. Не имеет FPU. ИМС во многом минималистична. Но если ей необходимо вычислять периоды шага для шагового двигателя, встаёт вопрос быстрого вычисления корня для формул разгона и торможения. Собственно сам вопрос заключается в том, как быстро вычислять корни используя лишь сложение, вычитание и умножение. При этом желательно оставаться в области целых чисел эмулирующих псевдо натуральные с фиксированной точкой для простоты. Примерная формуля выглядит следующим образом: N = x*sqrt(y). это сильно упрощённая формула для наглядности. -
где найт солнечные панельки (элементы питания)
haki ответил yell тема в Компоненты
ebay.com -
по углу ? мне понравилась идея озвученная выше, погонять систему туда обратно раз 100 и последить за соблюдением позиции, это покажет при каких разгонах и скоростях система уже не устойчива
-
для более полного понимания задачи
-
в проекте использую ATMEGA8515, считаю что обработки прерываний по таймеру вполне хватит для задачи, а ещё МК много выводной, что позволяет без всяких танце добавить пару кнопок и индикаторов, и напрямую управлять TB6560AHQ, эти драйверы выбраны просто потому что достались бесплатно и вполне пригодны, если опустить проблему последовательности подачи питания. В начале хотел заюзать AT90USB162, но не осилил LUFA, может кто и по этой теме подскажет.
-
шаговый двигатель вращает многоступенчатый редуктор или правильнее сказать мини коробку передач в качестве нагрузки довольно большое трение на резьбовом приводе двигается головка как в гибком дисководе и некоторых опт.приводах головка весом пару кило видимо придётся подбирать эксперементально но литература не помешала бы Вы не могли бы писать компактнее, а не в стихотворном виде? Исправил. И знаки препинания не помешали бы.
-
просмотрел темы форума в поисках ответа дабы не плодить повторно тему но так и не нашёл тему об оптимальном управлении+алгоритмы разгона и торможения шаговых двигателй может кто подскажет различные источники в том числе и книги на тему оптимальное управление и алгоритмы разгона и торможения я конечно понимаю что можно линейное ускорение использовать но почему то подозреваю что в данной теме есть нокости и график разгона и торможения может оказаться весьма не линейным в силу инерционности индукции в обмотках ШД потому как любой ШД в конечном итоге упрётся в максимальные обороты на которых заданное напряжение просто не будет успевать раскачивать индукционную нагрузку, а следствие ток упадёт и крутящий момент будет ничтожным