Страница 102 из 446
Re: STM32 новичку в ARM что к чему
Добавлено: Чт фев 19, 2015 15:00:53
isx
Пока не понимаю

. Щас пойду дальше курить RM...
Ещё вот вопрос всплыл сам собой

.
Можно ли отключить Dead-time при переводе выходов в КОНКРЕТНОЕ состояние?
У меня таймер должен иметь три состояния: первое - на выходе первой ноги постоянный лог1, на выходе второй постоянный лог0. Второе - ШИМ с одинаковой длительностью импульсов на 1-ой и 2-ой ногах. Третье - на выходе первой ноги лог0, на выходе второй ноги лог1.
Когда я программно устанавливаю один из выводов (какой конкретно не помню) в ЛОГ1, то на нём прослеживается DT, впрочем так и должно быть, но мне этого не надо. У второго выхода такого не наблюдается...

Re: STM32 новичку в ARM что к чему
Добавлено: Чт фев 19, 2015 16:52:32
axillent
созрели у меня глупые вопросы
мне хорошо известно, что делать с AVR, но вот с STM я в ступоре
сделал два эксперимента и пока без успешно:
1. вот на такой китайской плате
Спойлер

поставил платку с STM32F103CBT6 на которой есть разъем для моего ULINK2
установил кейл 5, настроил пример с моргалкой
выбрал ULINK2 отладчик
при попытке прошить дает ошибку JTAG
хотя вроде сам ULINK работает, зеленый светодиод connect загорается, прошивка на самом ULINK успешно обновилась
2. взял stm32f4-discovery
скачал для него примеры
установил stlinkv2
без проблем скомпилировал пример ST в кейле
при попытке прошить дает ошибку с указанием на какую-то DLL без указания имени
что я забыл сделать?
Re: STM32 новичку в ARM что к чему
Добавлено: Чт фев 19, 2015 17:27:08
dosikus
isx писал(а):Пока не понимаю

. Щас пойду дальше курить RM...
Что-то мне подсказывает, что в этом случае для осознания не только чтение важно но и контроль тем же анализатором .
Не прикупил еще?
isx писал(а):
Ещё вот вопрос всплыл сам собой

.
Можно ли отключить Dead-time при переводе выходов в КОНКРЕТНОЕ состояние?
18.4.12 Using the break function стр. 398.
RM
А так же
4 Advanced features for motor control стр.
AN4013
Re: STM32 новичку в ARM что к чему
Добавлено: Чт фев 19, 2015 22:33:37
isx
If the timer clock is still present, then the dead-time generator is reactivated in
order to drive the outputs with the level programmed in the OISx and OISxN bits
after a dead-time.
Вот не могу понять, тут уровень устанавливается после однократного DT, либо DT постоянно учитывается?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пт фев 20, 2015 22:14:47
amd9800
Добрый вечер.
Сделал балансир для 4 аккумуляторов на базе атмега 8.
напряжение с первой ячейки считается через делитель 1 к 2 (2 сопротивления по 10кОМ)
со второй делитель 1 к 4
с третей 1 к 6
с четвертой 1 к 8.
максимальное напряжение на ячейки не более 4,2 вольта. То есть через делитель не более 2,1 вольта.
Опорное напряжение ровно 2,56 через TL431 - потому что родной в атмега 8 не правильный у одних 2,65 у других 2,60 и так далее разброс огромный.
Собрал балансир - сопротивления для делителей выбрал одинаковые потому что у них тоже был разброс.
Но в процессе эксплуатации заметил проблемы.
Например на первом делителе 1 к двум.
Напряжение на аккумуляторе 4,1 вольта , напряжение на делителе должно быть 2,05 в реальности 2,044 в пределах погрешности возможно резисторы не идеально одинаковые, хотя тестер не дешевый может быть и он немножко в низ напряжение подтягивает.
Но через некоторое время замечаю что балансир глючит начинает балансировать ячейку хотя напряжение еще не дошло до максимума.
И тут мерю напряжение на делителе и вижу 2,21 вместо 2,044, а ведь на самой ячейке также 4,1 как было. Почему вдруг на делителе напряжение больше половины что случилось. Если держать ресет МК то напряжение на делителе может стать 1,2 или 1,4.
Если долго держать ресет и потом отпустить и МК заработал тогда опять на делителе 2,044, а потом через время опять 2,21.
В чем дело что это такое?
Спойлер

Спойлер


Re: STM32 новичку в ARM что к чему
Добавлено: Пт фев 20, 2015 22:58:20
isx
А почему вам просто не сделать всё через АЦП? Зачем такой огород?

Re: STM32 новичку в ARM что к чему
Добавлено: Пт фев 20, 2015 23:03:55
amd9800
так все и есть через ацп
Но я же не могу подать на ацп например 12 вольт. Поэтому все через делители.
А чтоб цифры имели логику то и делители кратные двум и номеру ячейки
Проблема в том что на делителе который связан с АЦП меняется напряжение непонятным образом. Предполагаю что это глюк атмеги.
Таких проблем нет если подавать на ацп сигнал с ОУ. Но вот городить на схеме еще 4 ОУ уже проблематично.
Re: STM32 новичку в ARM что к чему
Добавлено: Пт фев 20, 2015 23:22:13
uk8amk
STM32F100
Пытаюсь заставить работать АЦП от внешнего запуска.
TIM1 по событию сравнения СС1 пинает АЦП, он по идее должен делать по 1 регулярному преобразованию и вызвать обработчик ADC1_IRQHandler для разбирательств.
Но что-то идёт не так, ноль реакции. Мой код настройки:
Код: Выделить всё
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; // adc clock
ADC1->CR1 = ADC_CR1_EOCIE; // end of conversion irq
ADC1->CR2 = ADC_CR2_ADON;
ADC1->CR2 |= ADC_CR2_EXTTRIG; // extsel=000= tim1 cc event
ADC1->SQR1 = 0; // sequence len=1
ADC1->SQR2 = 0;
ADC1->SQR3 = 1; // ADC_IN1
NVIC_EnableIRQ( ADC1_IRQn );
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // timer clock
TIM1->CR1 = TIM_CR1_URS;
TIM1->CCR1 = 0;
TIM1->CNT = 0;
TIM1->PSC = 0;
TIM1->ARR = SYS_CLK/1000; // interval = 1ms
TIM1->EGR = TIM_EGR_UG; // update registers
TIM1->SR = 0;
TIM1->CR1 |= TIM_CR1_CEN; // start
На всякий случай проверил через программный старт(ADON) преобразование пускается. Но аппаратно так не хочет.
Помню через выход TIM TRGO с инжектированными каналами такое работало, но здесь регулярные и вход пуска другой. Может я что недопонял и как-то по особому канал сравнения таймера настроить надо?
Re: STM32 новичку в ARM что к чему
Добавлено: Сб фев 21, 2015 08:43:28
uk8amk
Проверил на всякий случай. С инжектированной группой запуск преобразований по таймеру происходит без вопросов:
Код: Выделить всё
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
ADC1->CR1 = ADC_CR1_JEOCIE; // injected end of conversion IRQ
ADC1->CR2 |= ADC_CR2_JEXTTRIG;// JEXTSEL=000=TIM1_TRGO
ADC1->JSQR = ADC_JSQR_JSQ4_0;//JL=0(1conversion), ch ADC_IN1
NVIC_EnableIRQ( ADC1_IRQn );
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
TIM1->CR1 = TIM_CR1_URS;
TIM1->CR2 = TIM_CR2_MMS_1 | TIM_CR2_MMS_0; // TRGO compare CC1IF
TIM1->CCR1 = 0;
TIM1->CNT = 0; // timebase
TIM1->PSC = 0;
TIM1->ARR = SYS_CLK/1000; // interval = 1ms
TIM1->EGR = TIM_EGR_UG; // update registers
TIM1->SR = 0;
TIM1->CR1 |= TIM_CR1_CEN; // start
С регулярной группой не выходит.
Re: STM32 новичку в ARM что к чему
Добавлено: Сб фев 21, 2015 13:11:01
uldemir
Здравствуйте, пришел тут спросить. Думаю применить stm32F051. Хочется сделать пушпульный генератор. Но не могу врубиться, может ли TIM1 сделать две фазы PWM, которые будут качать ток по двум обмоткам трансформатора? Сначала показалось что выходы OC1 и OC1N для этого можно использовать, но не могу найти такого в описании. Если возможно, то про какие режимы читать?
И еще один политический вопрос: как лучше под эти кристаллы программировать: с использованием SPL или без?
Re: STM32 новичку в ARM что к чему
Добавлено: Сб фев 21, 2015 15:46:56
uk8amk
uldemir писал(а):Но не могу врубиться, может ли TIM1 сделать две фазы PWM, которые будут качать ток по двум обмоткам трансформатора?
Да, пушпулл делается через 1 канал.
uldemir писал(а):но не могу найти такого в описании.
16.3.10 PWM mode
16.3.11 Complementary outputs and dead-time insertion
TIM1 имеет 3 прямых и 3 комплементарных выхода с dead-time. А там уже ваше дело чем они управлять будут, моторами или трансформаторами.
uldemir писал(а):И еще один политический вопрос:
Лучше не провоцировать очередной срач на эту тему. Попробуйте и возьмите что больше понравится.
Re: STM32 новичку в ARM что к чему
Добавлено: Сб фев 21, 2015 16:17:12
uldemir
По поводу "политического", вопрос возник прочитав ссылку, которая была в начале этой темы и там был стартовый пример. И для него нужно было подключать SPL и CMSIS. Без SPL я бы обошелся, а второй, он очень нужен?
По поводу пушпула, получается так что мне надо заботиться, чтобы импульсы были симметричными? Т.е. OC1REF делать ровно половину от коэффициента пересчета таймера и ширину импульса можно регулировать только величиной дедтайма?
Re: STM32 новичку в ARM что к чему
Добавлено: Сб фев 21, 2015 17:07:02
oleg110592
есть пример с SPL:
TIM Complementary Signals example
http://stm32-spl-doc-online.esy.es/STM3 ... gnals.html
можно поизучать и сделать без SPL
Re: STM32 новичку в ARM что к чему
Добавлено: Сб фев 21, 2015 18:18:26
uk8amk
uldemir писал(а):Без SPL я бы обошелся, а второй, он очень нужен?
Без пакета CMSIS тоже можно обойтись. Только в него входят заголовки с описанием регистров процессора и периферии. В этом случае их придётся писать самому.
Если важен большой дедтайм между выходами с независимой регулировкой ширины импульсов, то возможно использовать 2 разных канала сравнения, один в прямой, другой в инверсной конфигурации.
Re: STM32 новичку в ARM что к чему
Добавлено: Сб фев 21, 2015 19:02:36
uldemir
Да нет, наоборот, дедтайм большой не нужен. Просто хотелось видеть и решение в общем виде тоже.
Что-то не удаётся скомпилировать этот пример из SPL. На каждую строчку исходника пишет:
Error[Pe020]: identifier "TIM_TimeBaseInitTypeDef" is undefined C:\Users\...\IAR\ComplSignal\stm32f0_stdperiph_lib\STM32F0xx_StdPeriph_Lib_V1.5.0\Projects\STM32F0xx_StdPeriph_Templates\main.c 81
Хотел скомпилить и на платке осциллографом посмотреть, годится мне иль нет. И принять решение - разбираться дальше или как?
Re: STM32 новичку в ARM что к чему
Добавлено: Сб фев 21, 2015 20:01:22
oleg110592
uldemir писал(а):Что-то не удаётся скомпилировать этот пример из SPL
В SPL где находятся примеры есть также готовые шаблоны проектов, в том числе и IAR. Есть инструкция как пользоваться примером:
In order to make the program work, you must do the following :
- Copy all source files from this example folder to the template folder under
Project\STM32F0xx_StdPeriph_Templates
- Open your preferred toolchain
- Select the appropriate workspace
- Rebuild all files and load your image into target memory
- Run the example
в Keil примеры нормально работают.
p.s. Keil для STM32 серий F0 и L0 сейчас официально бесплатен.
Re: STM32 новичку в ARM что к чему
Добавлено: Сб фев 21, 2015 21:03:25
uldemir
Код: Выделить всё
In order to make the program work, you must do the following :
- Copy all source files from this example folder to the template folder under Project\STM32F0xx_StdPeriph_Templates
- Open your preferred toolchain
- Select the appropriate workspace
На этом шаге выдаёт ошибку, что есть непонятые строчки в проекте и говорит смотреть в окошко Log, которое открывается совершенно пустым. Однако, вроде всё есть.
Код: Выделить всё
- Rebuild all files and load your image into target memory
Но тут уже ничего не идёт. Не может найти хедер stm32f0xx.h. Пытался прописать инклюды ручками, добился до того, что начала срабатывать ошибка уже из этого файла (stm32f0xx.h)
Код: Выделить всё
#error "Please select first the target STM32F0xx device used in your application (in stm32f0xx.h file)"
Хотя девайс выбран правильный и конфигурация тоже. Тогда в опциях проекта прописал дефайн "STM32F051". Пошло чуть дальше, но затык возник в ошибке из предыдущего сообщения. Так что до этого пункта:
Добраться не смог. Придётся, писать сразу самому без всяких SPL. Потому как этого монстра я зашевелить никак не могу.
Re: STM32 новичку в ARM что к чему
Добавлено: Сб фев 21, 2015 21:57:19
dosikus
uldemir писал(а):
Добраться не смог. Придётся, писать сразу самому без всяких SPL. Потому как этого монстра я зашевелить никак не могу.
Здесь выкладывал инит TIM1 и инверсные выходы ...
http://radiokot.ru/forum/viewtopic.php? ... start=1980
Re: STM32 новичку в ARM что к чему
Добавлено: Сб фев 21, 2015 23:06:35
uldemir
Отыскал более свежие (наверное) исходники - те скомпилировались без проблем.
Однако вопрос остаётся. Нужен ли CMSIS или нет. И на что влияет галочка в Library Configurations -> CMSIS ?
Достаточно ли iostm32f051 для несложной фирмвари на тему поморгать светодиодом по прерываниям?
Re: STM32 новичку в ARM что к чему
Добавлено: Вс фев 22, 2015 02:48:47
isx
Доброй ночи!
Ника не могу заставить шевелиться внешние прерывания.
Камень STM32F030K6T6
Настройки вроде верные, но при отладке при замыкании входа прерываний на землю перехода к обработчику прерывания не происходит...
Может с настройками что не так?
Код: Выделить всё
void EXTI0_IRQHandler(void)
{
//switch (doublestep) {
//case 0:
//switch (step) {
//case 0:
// case 1:
// TIM14->CR1 &= TIM_CR1_CEN;
// switch (dir) {
// case 0:
// TIM16->CCR1 = 0x0000; break;
// case 1:
// TIM16->CCR1 = 0xFFFF; break;
// default:
//doublestep = 1;
// }
// ;}
//TIM14->CR1 &= TIM_CR1_CEN;
switch (GPIOA->IDR & GPIO_IDR_1) {
case 0:
TIM16->CCR1 = 0x0000; break;
case 1:
TIM16->CCR1 = 0xFFFF; break;
default:
;}
EXTI->PR |= EXTI_PR_PR0;
}
void EXTI2_IRQHandler(void)
{
TIM16->CCR1 = 500;
EXTI->PR |= EXTI_PR_PR2;
}
int main()
{
NVIC_EnableIRQ(TIM14_IRQn);
NVIC_EnableIRQ(EXTI0_1_IRQn);
NVIC_EnableIRQ(EXTI2_3_IRQn);
NVIC_SetPriority(TIM14_IRQn, 3);
NVIC_SetPriority(EXTI0_1_IRQn, 2);
NVIC_SetPriority(EXTI2_3_IRQn, 1);
RCC->AHBENR |= (RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOAEN);
//RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
RCC->APB1ENR |= RCC_APB1ENR_TIM14EN;
RCC->APB2ENR |= RCC_APB2ENR_TIM16EN;
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGCOMPEN;
GPIOA->MODER |= GPIO_MODER_MODER14_1 | GPIO_MODER_MODER13_1 | GPIO_MODER_MODER6_1 | GPIO_MODER_MODER2_0;
GPIOB->MODER |= GPIO_MODER_MODER6_1;
GPIOA->AFR[0] |= 0x05000000;
GPIOB->AFR[0] |= 0x02000000;
//GPIOA->OTYPER = 0x00000000;
//GPIOB->OTYPER = 0x00000000;
GPIOA->OSPEEDR |= GPIO_OSPEEDR_OSPEEDR0 | GPIO_OSPEEDR_OSPEEDR1 | GPIO_OSPEEDR_OSPEEDR2 | GPIO_OSPEEDR_OSPEEDR3 | GPIO_OSPEEDR_OSPEEDR6;
GPIOB->OSPEEDR |= GPIO_OSPEEDR_OSPEEDR0 | GPIO_OSPEEDR_OSPEEDR1 | GPIO_OSPEEDR_OSPEEDR6;
GPIOA->PUPDR |= GPIO_PUPDR_PUPDR1_0 | GPIO_PUPDR_PUPDR2_0;
SYSCFG->EXTICR[1] |= SYSCFG_EXTICR1_EXTI0_PA | SYSCFG_EXTICR1_EXTI2_PA;
EXTI->IMR |= EXTI_IMR_MR0 | EXTI_IMR_MR2;
EXTI->RTSR |= EXTI_RTSR_TR2;
EXTI->FTSR |= EXTI_FTSR_TR0 | EXTI_FTSR_TR2;