Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 22.10.2016, 00:10  
backlan
Частый гость
 
Аватар для backlan
 
Регистрация: 06.10.2008
Адрес: Ростов-на-Дону
Сообщений: 49
Сказал спасибо: 5
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
backlan на пути к лучшему
По умолчанию Аппаратный учет числа импульсов ШИМ

Пробую сделать аппаратную выдачу импульсов и учет их числа (надо для руления шаговиком), чтобы можно было запустить таймер и дальше задавать длительность импульсов каким-нибудь регистром, а число выданных импульсов вытаскивать из другого регистра. Длительность импульсов можно задать через PSC, здесь всё просто. Но несмотря на кучу счетчиков внутри одного таймера, ничего подходящего для учета импульсов не нашлось. Можно было бы использовать RCR, но он грузится в теневой регистр, к которому нет доступа. Пока осталась только одна идея, соединить два таймера в цепочку, но она может тоже не выгореть, к тому же не хочется загружать сразу два таймера.
Может есть подходящий режим таймера, чтобы он выдавал импульсы без сбрасывания счетчика?
Реклама:
backlan вне форума  
Непрочитано 22.10.2016, 03:04  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,416
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Аппаратный учет числа импульсов ШИМ

А схема какая? Обычно ж шим делают микросхемой типа tb там какойто а на нее только импульсы одинаковые подают - вперед назад столько то шагов. Их и считают хоть софтово это уже несложно
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 22.10.2016, 15:46  
backlan
Частый гость
 
Аватар для backlan
 
Регистрация: 06.10.2008
Адрес: Ростов-на-Дону
Сообщений: 49
Сказал спасибо: 5
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
backlan на пути к лучшему
По умолчанию Re: Аппаратный учет числа импульсов ШИМ

Вот как раз софтово посчитать сложно, я с этим и завис. Схема - микроконтроллер stm32f100, он выдает импульсы STEP/DIR на другую плату, а у неё уже без разницы какое устройство. Хочу сделать выдачу STEP аппаратно и использовать для этого режим ШИМ таймера, чтобы ядро не грузить ручным ногодрыгом.
backlan вне форума  
Непрочитано 22.10.2016, 16:26  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,509
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Аппаратный учет числа импульсов ШИМ

Ну, я так полагаю, надо не считать генерируемые импульсы, а наоборот, генерировать заданное число импульсов.
Это сделать аппаратно несложно. Достаточно объединить два таймера.
Например, вот так.
Первый таймер будет выдавать импульсы, а второй - разрешать работу первого в течение некоторого промежутка времени.
Первый таймер настраивается на запуск от внутреннего триггера ITR, в режиме Gated (регистр SMCR), а второй таймер будет выдавать сигнал TRGO, равный OC1REF второго таймера. Второй таймер должен работать в режиме однократного запуска.
Первый таймер работает в режиме PWM mode 2 со величиной шим 50%.
Есть конечно некоторые неудобства, но в целом, работает. Аппаратно генерируется заданное число импульсов.
NewWriter вне форума  
Непрочитано 22.10.2016, 16:52  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Аппаратный учет числа импульсов ШИМ

backlan, Как вариант, перебрасывать с таблицы данные в регистры таймера через DMA. Минус - расход флэша, плюс- все под контролем..
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 22.10.2016, 17:07  
Zoosman
Вид на жительство
 
Регистрация: 03.06.2006
Адрес: Израиль
Сообщений: 388
Сказал спасибо: 2,067
Сказали Спасибо 337 раз(а) в 156 сообщении(ях)
Zoosman на пути к лучшему
По умолчанию Re: Аппаратный учет числа импульсов ШИМ

Может я чего и недопонял, но я вот так делаю:


Код:
//Sends stepper pulses and sets the stepper direction
void stepper_generate_step(uint8_t dir, uint8_t steps)
{
	
	stepper_set_dir (dir);

	//Arm repetition counter
	TIM15-›RCR = steps;
	
	//Start the timer
	TIM15-›CR1 |= 0x01;
	
}

void TIM15_IRQHandler(void)
{
	//Clear timer interrupt flags
	TIM15-›SR &= ~TIM15-›SR;
	
	//Stop the timer
	TIM15-›CR1 &=  ~0x01;

}
Инициализация:
Код:
	//Automatic Reload Register	
	TIM15-›ARR  = 2000;
		
	TIM15-›CCR1  = TIM15-›ARR  / 2;
	
	//ARPE ENABLE
	TIM15-›CR1	 |= 0x80;
	
	//TRG0 on update enable
	TIM15-›CR2	 |= 0x20;

	//Interrupt enable
	TIM15-›DIER |= 0x01;
		
	//Repetion counter
	TIM15-›RCR = 0x00;
		
	//Set prescaler
	TIM15-›PSC |= 0x10;
	
	
	
	 /* (4) Select PWM mode 1 on OC1  (OC1M = 110),
         enable preload register on OC1 (OC1PE = 1) */
  /* (5) Select active high polarity on OC1 (CC1P = 0, reset value),
         enable the output on OC1 (CC1E = 1)*/
  /* (6) Enable output (MOE = 1)*/
  /* (7) Enable counter (CEN = 1)
         select edge aligned mode (CMS = 00, reset value)
         select direction as upcounter (DIR = 0, reset value) */  
  /* (8) Force update generation (UG = 1) */
  
	TIM15-›CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE; /* (4) */
  TIM15-›CCER  |= TIM_CCER_CC1E; /* (5) */
  TIM15-›BDTR  |= TIM_BDTR_MOE; /* (6) */
  TIM15-›CR1   |= TIM_CR1_CEN; /* (7) */
  TIM15-›EGR   |= TIM_EGR_UG; /* (8) */
Zoosman вне форума  
Непрочитано 22.10.2016, 17:14  
backlan
Частый гость
 
Аватар для backlan
 
Регистрация: 06.10.2008
Адрес: Ростов-на-Дону
Сообщений: 49
Сказал спасибо: 5
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
backlan на пути к лучшему
По умолчанию Re: Аппаратный учет числа импульсов ШИМ

Так, уже ближе . Да, если надо выдать определённое число импульсов и не менять при этом их длительность, тогда это решение подходит. Но мне нужно именно считать импульсы, чтобы можно было рулить скоростью в процессе перемещения. Когда мотор разгоняется, включаю таймер, задаю большое время между шагами, потом в процессе разгона его уменьшаю. Когда подъезжает к концу, уменьшаю скорость. Была идея сделать это с использованием DWT, чтобы считать число шагов на основании прошедших тактов процессора. То есть просто поделить число тактов на длительность шага и получить число шагов. Но здесь та же проблема с изменением интервала между шагами, поскольку это делается не аппаратно, то пока из DWT будет браться значение, таймер может успеть выдать ещё один импульс.
backlan вне форума  
Непрочитано 22.10.2016, 17:16  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,416
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Аппаратный учет числа импульсов ШИМ

Сообщение от backlan Посмотреть сообщение
Вот как раз софтово посчитать сложно, я с этим и завис. Схема - микроконтроллер stm32f100, он выдает импульсы STEP/DIR на другую плату, а у неё уже без разницы какое устройство. Хочу сделать выдачу STEP аппаратно и использовать для этого режим ШИМ таймера, чтобы ядро не грузить ручным ногодрыгом.
зачем там шим я никак не пойму
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 22.10.2016, 17:33  
backlan
Частый гость
 
Аватар для backlan
 
Регистрация: 06.10.2008
Адрес: Ростов-на-Дону
Сообщений: 49
Сказал спасибо: 5
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
backlan на пути к лучшему
По умолчанию Re: Аппаратный учет числа импульсов ШИМ

Сообщение от индюк Посмотреть сообщение
зачем там шим я никак не пойму
Канал ШИМ, чтобы шаги выдавать. Вот как раз написали пример с 50% заполнения.
backlan вне форума  
Непрочитано 22.10.2016, 17:37  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,861
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Аппаратный учет числа импульсов ШИМ

Сообщение от backlan Посмотреть сообщение
а число выданных импульсов вытаскивать из другого регистра.
Не пойму - чем не нравится счетчик в обработчике прерывания? "Загрузка ядра?" Мои тапочки смеются при такой мысли.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor на форуме  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
stm32 как шим контроллер Reystlin Микроконтроллеры, АЦП, память и т.д 35 22.03.2016 11:34
Режимы сна Атмега-8 putmannn AVR 123 08.03.2013 15:30
Управление Сервой Mg995 Через Аппаратный Шим Vyazikov Микроконтроллеры, АЦП, память и т.д 16 06.04.2012 21:06
Проблема с аппаратным ШИМ в мега169 Archer07 Микроконтроллеры, АЦП, память и т.д 3 09.07.2010 15:40
Заменить ШИМ на генератор импульсов ? Zemlyanov Микроконтроллеры, АЦП, память и т.д 1 15.05.2007 21:31


Часовой пояс GMT +4, время: 23:37.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot