17.09.2011, 15:07
|
|
Прохожий
Регистрация: 14.11.2007
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от tanq
|
Пусть изобретатели векторных управлятелей без датчиков попробуют управлять, посмотрим что у них получится.
А вообще мощности DSP растут, спрос нет, поэтому придумана уже новая тема: field-oriented control. Круто звучит?! Там формулы еще сложнее, умных слов еще больше, но без датчиков ниче не работает
|
Вы батенька отстали от жизни! Например, Combivert/Combiset приводы управляют АД и СД без датчиков полдожения, используя таки векторное управление. И стоят очень и очень дешево.
|
|
|
|
17.09.2011, 15:33
|
|
Гражданин KAZUS.RU
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от el-ki
|
Вы батенька отстали от жизни! Например, Combivert/Combiset приводы управляют АД и СД без датчиков полдожения, используя таки векторное управление. И стоят очень и очень дешево.
|
Всё это очень интересно и занимательно. Но эта тема называется "Изучаем STM32 Cortex M3", а не о двигателях. Создайте новую и там обсудите эти вопросы. Мне кажется многим будет интересно.
|
|
|
|
17.09.2011, 17:05
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от el-ki
|
Например, Combivert/Combiset приводы управляют АД и СД без датчиков полдожения
|
А где я сказал про отсутствие датчиков именно положения? Я говорил про отсутствие ЛЮБЫХ датчиков, включая датчики тока, напряжения (back-emf) и все другие.
|
|
|
|
17.09.2011, 18:06
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от kittec
|
Всё это очень интересно и занимательно. Но эта тема называется "Изучаем STM32 Cortex M3", а не о двигателях. Создайте новую и там обсудите эти вопросы. Мне кажется многим будет интересно.
|
Да как бы да...
Хотя... если не изменяет память... в новом CMSIS DSP-либы замутили под М3 и М4...
|
|
|
|
19.09.2011, 00:14
|
|
Временная регистрация
Регистрация: 20.05.2010
Сообщений: 64
Сказал спасибо: 8
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Есть простенький РАБОЧИЙ код, где по прерыванию таймера моргает светик:
Код:
|
void InitAll(void)
{
GPIO_InitTypeDef GPIO_Config;
TIM_TimeBaseInitTypeDef TIM_BaseConfig;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOBEN, ENABLE);
GPIO_Config.GPIO_Pin = LD_GREEN | LD_BLUE;
GPIO_Config.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Config.GPIO_OType = GPIO_OType_PP;
GPIO_Config.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(LD_PORT, &GPIO_Config);
TIM_BaseConfig.TIM_Prescaler = 1000 - 1;
TIM_BaseConfig.TIM_Period = 8-1;
TIM_BaseConfig.TIM_ClockDivision = 0;
TIM_BaseConfig.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_BaseConfig);
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
TIM_ARRPreloadConfig(TIM4, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty = 2;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM4, ENABLE);
}
int main(void){
InitAll();
while(1)
{}
} |
Но стоит в любое место добавить инициализацию пары других ножек:
Код:
|
GPIO_InitTypeDef GPIO_Config_Enc;
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOAEN, ENABLE);
GPIO_Config_Enc.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_Config_Enc.GPIO_Mode = GPIO_Mode_IN;
GPIO_Config_Enc.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Config_Enc.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &GPIO_Config_Enc);
И не важно, каких ножек, какого порта и в каком режиме.
Можно структуру вообще не инициализировать, разницы нет. |
Как прерывание перестает работать!
Что это за ерунда такая?
З.Ы.: STM32L152RB, Keil 4.21
|
|
|
|
19.09.2011, 20:05
|
|
Прохожий
Регистрация: 23.09.2010
Сообщений: 5
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Изучаем STM32 Cortex M3
Может надо писать так ?
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOAEN, ENABLE);
|
|
|
|
19.09.2011, 20:45
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
DimanVIP,
Говорилось уже, переставайте использовать либы. Если регистры четко описаны в мануале, то что такое RCC_AHBPeriphClockCmd и как именно оно работает совершенно непонятно. Т.е. снижается читабельность + растет объем писанины.
|
|
|
|
19.09.2011, 21:37
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от DimanVIP
|
Что это за ерунда такая?
|
Что понаписали, то и получили...
Сообщение от DimanVIP
|
Есть простенький РАБОЧИЙ код, где по прерыванию таймера моргает светик:
Но стоит в любое место добавить инициализацию пары других ножек:
Как прерывание перестает работать!
|
Как прерывание перестает работать???
У вас не срабатывает само прерывание??? Или не получаете ожидаемых действий в самом прерывании (не моргает светодиод)???
И где сам текст процедуры прерывания???
|
|
|
|
20.09.2011, 09:25
|
|
Временная регистрация
Регистрация: 09.02.2007
Сообщений: 91
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Есть у кого нормальный код работы с SD-картами по SPI?
А то у китаез в примерах карты через раз определяются, Kingston и Apacer - нормально, остальные плохо. К тому же повесил на этот же SPI сенсорный контроллер ADS7843 - не хочет он одновременно работать с SD картой - при чтени хрень всякую выдает, видимо в процессе работы с SD-картой у SPI на ходу режимы меняются. Но на 128-й меге у меня же все работало и дружили на одном SPI и карты и сенсор !
|
|
|
|
20.09.2011, 10:53
|
|
Прописка
Регистрация: 15.11.2007
Адрес: СПБ
Сообщений: 214
Сказал спасибо: 37
Сказали Спасибо 42 раз(а) в 34 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от DimanVIP
|
Есть простенький РАБОЧИЙ код, где по прерыванию таймера моргает светик:
Код:
|
void InitAll(void)
{
GPIO_InitTypeDef GPIO_Config;
TIM_TimeBaseInitTypeDef TIM_BaseConfig;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOBEN, ENABLE);
GPIO_Config.GPIO_Pin = LD_GREEN | LD_BLUE;
GPIO_Config.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Config.GPIO_OType = GPIO_OType_PP;
GPIO_Config.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(LD_PORT, &GPIO_Config);
TIM_BaseConfig.TIM_Prescaler = 1000 - 1;
TIM_BaseConfig.TIM_Period = 8-1;
TIM_BaseConfig.TIM_ClockDivision = 0;
TIM_BaseConfig.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_BaseConfig);
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
TIM_ARRPreloadConfig(TIM4, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty = 2;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM4, ENABLE);
}
int main(void){
InitAll();
while(1)
{}
} |
Но стоит в любое место добавить инициализацию пары других ножек:
Код:
|
GPIO_InitTypeDef GPIO_Config_Enc;
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOAEN, ENABLE);
GPIO_Config_Enc.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_Config_Enc.GPIO_Mode = GPIO_Mode_IN;
GPIO_Config_Enc.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Config_Enc.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &GPIO_Config_Enc);
И не важно, каких ножек, какого порта и в каком режиме.
Можно структуру вообще не инициализировать, разницы нет. |
Как прерывание перестает работать!
Что это за ерунда такая?
З.Ы.: STM32L152RB, Keil 4.21
|
Ну дык Вы же делаете новую структуру конфигурации и иницилизируете ее - старая, где таймеры были настроены - заменяется новой, где таймера нет. делать инициализацию нужно ОДИН раз и в ОДНОМ месте. Просто добавте необходимые строки для GPIO_Config перед GPIO_Init и все. GPIO_Init в качестве параметра имеет структуру с описанием сразу всего и инициализирует сразу все, а не только то, что Вы указали явно. Вызываться должноа только 1 раз. Если Вы хотите что-то включить по ходу выполнения программы, то Вам нужно внести изменения в имеющуюся структуру, потом делать переиниализацию. Но, IMHO, это некорректно. Лучше уж "ручками" через регистры по даташиту.
Последний раз редактировалось a-fisher; 20.09.2011 в 11:00.
Причина: дополнение
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:16.
|
|