STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

Пока не понимаю :) . Щас пойду дальше курить RM...

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

Re: STM32 новичку в ARM что к чему

Сообщение axillent »

созрели у меня глупые вопросы

мне хорошо известно, что делать с AVR, но вот с STM я в ступоре
сделал два эксперимента и пока без успешно:

1. вот на такой китайской плате
СпойлерИзображение
поставил платку с STM32F103CBT6 на которой есть разъем для моего ULINK2
установил кейл 5, настроил пример с моргалкой
выбрал ULINK2 отладчик
при попытке прошить дает ошибку JTAG
хотя вроде сам ULINK работает, зеленый светодиод connect загорается, прошивка на самом ULINK успешно обновилась

2. взял stm32f4-discovery
скачал для него примеры
установил stlinkv2
без проблем скомпилировал пример ST в кейле
при попытке прошить дает ошибку с указанием на какую-то DLL без указания имени
что я забыл сделать?
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

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

18.4.12 Using the break function стр. 398. RM
А так же 4 Advanced features for motor control стр. AN4013
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение 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 постоянно учитывается?
Реклама
Эиком - электронные компоненты и радиодетали
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение 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.

В чем дело что это такое?
СпойлерИзображение
Изображение
СпойлерИзображение
Изображение
Вложения
c2a.jpg
(217.32 КБ) 1544 скачивания
c1a.jpg
(142.41 КБ) 1687 скачиваний
plata.PNG
(67.03 КБ) 2439 скачиваний
schema.PNG
(69.18 КБ) 1808 скачиваний
Последний раз редактировалось amd9800 Пт фев 20, 2015 23:51:10, всего редактировалось 2 раза.
Реклама
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

А почему вам просто не сделать всё через АЦП? Зачем такой огород? :dont_know:
Реклама
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Re: STM32 новичку в ARM что к чему

Сообщение amd9800 »

так все и есть через ацп
Но я же не могу подать на ацп например 12 вольт. Поэтому все через делители.

А чтоб цифры имели логику то и делители кратные двум и номеру ячейки

Проблема в том что на делителе который связан с АЦП меняется напряжение непонятным образом. Предполагаю что это глюк атмеги.
Таких проблем нет если подавать на ацп сигнал с ОУ. Но вот городить на схеме еще 4 ОУ уже проблематично.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение 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 с инжектированными каналами такое работало, но здесь регулярные и вход пуска другой. Может я что недопонял и как-то по особому канал сравнения таймера настроить надо?
Вложения
ADC_EXTSEL_2.png
(23.51 КБ) 647 скачиваний
ADC_EXTSEL_1.png
(55.11 КБ) 474 скачивания
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение 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
С регулярной группой не выходит.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: STM32 новичку в ARM что к чему

Сообщение uldemir »

Здравствуйте, пришел тут спросить. Думаю применить stm32F051. Хочется сделать пушпульный генератор. Но не могу врубиться, может ли TIM1 сделать две фазы PWM, которые будут качать ток по двум обмоткам трансформатора? Сначала показалось что выходы OC1 и OC1N для этого можно использовать, но не могу найти такого в описании. Если возможно, то про какие режимы читать?
Изображение

И еще один политический вопрос: как лучше под эти кристаллы программировать: с использованием SPL или без?
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение 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 писал(а):И еще один политический вопрос:
Лучше не провоцировать очередной срач на эту тему. Попробуйте и возьмите что больше понравится.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: STM32 новичку в ARM что к чему

Сообщение uldemir »

По поводу "политического", вопрос возник прочитав ссылку, которая была в начале этой темы и там был стартовый пример. И для него нужно было подключать SPL и CMSIS. Без SPL я бы обошелся, а второй, он очень нужен?

По поводу пушпула, получается так что мне надо заботиться, чтобы импульсы были симметричными? Т.е. OC1REF делать ровно половину от коэффициента пересчета таймера и ширину импульса можно регулировать только величиной дедтайма?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 новичку в ARM что к чему

Сообщение oleg110592 »

есть пример с SPL:
TIM Complementary Signals example
http://stm32-spl-doc-online.esy.es/STM3 ... gnals.html
можно поизучать и сделать без SPL
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 новичку в ARM что к чему

Сообщение uk8amk »

uldemir писал(а):Без SPL я бы обошелся, а второй, он очень нужен?
Без пакета CMSIS тоже можно обойтись. Только в него входят заголовки с описанием регистров процессора и периферии. В этом случае их придётся писать самому.

Если важен большой дедтайм между выходами с независимой регулировкой ширины импульсов, то возможно использовать 2 разных канала сравнения, один в прямой, другой в инверсной конфигурации.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: STM32 новичку в ARM что к чему

Сообщение 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

Хотел скомпилить и на платке осциллографом посмотреть, годится мне иль нет. И принять решение - разбираться дальше или как?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 новичку в ARM что к чему

Сообщение 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 сейчас официально бесплатен.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: STM32 новичку в ARM что к чему

Сообщение 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". Пошло чуть дальше, но затык возник в ошибке из предыдущего сообщения. Так что до этого пункта:

Код: Выделить всё

- Run the example
Добраться не смог. Придётся, писать сразу самому без всяких SPL. Потому как этого монстра я зашевелить никак не могу.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

uldemir писал(а):

Код: Выделить всё

- Run the example
Добраться не смог. Придётся, писать сразу самому без всяких SPL. Потому как этого монстра я зашевелить никак не могу.
Здесь выкладывал инит TIM1 и инверсные выходы ... http://radiokot.ru/forum/viewtopic.php? ... start=1980
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: STM32 новичку в ARM что к чему

Сообщение uldemir »

Отыскал более свежие (наверное) исходники - те скомпилировались без проблем.

Однако вопрос остаётся. Нужен ли CMSIS или нет. И на что влияет галочка в Library Configurations -> CMSIS ?
Достаточно ли iostm32f051 для несложной фирмвари на тему поморгать светодиодом по прерываниям?
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение 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;
	
Ответить

Вернуться в «ARM»