Перейти к содержанию
    

Увеличение Длины Поступающих Импульсов

голову сломал но сделать не могу никак маленький опыт программирования очевидно.

 

есть задача:

 

поступают прямоугольные испульсы с частотой от 0 до 150 Гц и скважностью 1.

необходимо выдать подобные импульсы но с "плавной" регулировкой частоты (длительности) импульса/паузы и такой же скважностью в сторону увеличения длительности (уменьшения частоты).

 

т.е. допустим поступил импульс/пауза длительностью L, а выдать нужно L+L/K, где K - коэф-т удлиннения импульса/паузы.

 

 

пробовал таймером вызывать цикл счетчика и одновременно выдачи импульса в разных вариациях, но чтото никак

 

может есть какая идея простая?

 

буду благодарен за помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

поступают прямоугольные испульсы с частотой от 0 до 150 Гц и скважностью 1.

Вы не ошиблись со значением скважности? Может быть со скважностью 2?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

необходимо выдать подобные импульсы но с "плавной" регулировкой частоты (длительности) импульса/паузы и такой же скважностью в сторону увеличения длительности (уменьшения частоты).

 

т.е. допустим поступил импульс/пауза длительностью L, а выдать нужно L+L/K, где K - коэф-т удлиннения импульса/паузы.

 

Т.е. удлинять надо и импульс и паузу одновременно.

Пока вы удлиняете импульс, вы пропустите спадающий фронт и как же тогда вы удлините паузу ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

голову сломал но сделать не могу никак маленький опыт программирования очевидно.

 

может есть какая идея простая?

Есть идея простая.

Прежде чем кидаться программировать таймеры, стоит нарисовать на бумажке несколько импульсов на входе и на выходе и представить правила, как из одного сигнала получить другой.

Многое и прояснится.

А запрограммировать - поможем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скважность 1 это пауза равна импульсу по длительности (сорри если ошибся :)

 

K задается вручную путем подбора и всегда постоянно, т.е. это % от длины импулься получается

 

Т.е. удлинять надо и импульс и паузу одновременно.

Пока вы удлиняете импульс, вы пропустите спадающий фронт и как же тогда вы удлините паузу ?

 

верно, но в том то все и дело :smile3046: как то надо обойти эту проблему

 

стоит нарисовать на бумажке

 

малоли какие есть механизмы у контроллера, я же не спец.

может этот вопрос давно решен другим макаром.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скважность 1 это пауза равна импульсу по длительности (сорри если ошибся :)

 

Скважность это отношение длины импульса к периоду. Т.е. когда длительность импульса и паузы равны, то скважность равна двум.

 

 

может этот вопрос давно решен другим макаром.

 

Посмотрите микросхему К155ИЕ8

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поскольку входная и выходная частоты разные, то вопрос о фазе не стоит, поэтому делайте два независимых процесса - измерение длительности импульса или периода, что Вам важнее, и генерацию меандра с заданной частотой. Период меандра изменяйте хоть после каждого измерения, хоть усредняйте - в зависимости от задачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может этот вопрос давно решен другим макаром.
Вам достаточно ясно дают понять, что вопрос некорректно поставлен, а Вы опять про механизмы в контроллере.

Фазу соблюсти невозможно, т.е. речь может идти не об "удлинении импульса", а генерации другого сигнала, как выше пишут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поскольку входная и выходная частоты разные, то вопрос о фазе не стоит, поэтому делайте два независимых процесса - измерение длительности импульса или периода, что Вам важнее, и генерацию меандра с заданной частотой. Период меандра изменяйте хоть после каждого измерения, хоть усредняйте - в зависимости от задачи.

абсолютно согласен

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть задача: поступают прямоугольные испульсы с частотой от 0 до 150 Гц и скважностью 2.

необходимо выдать подобные импульсы но с "плавной" регулировкой частоты (длительности) импульса/паузы и такой же скважностью в сторону увеличения длительности (уменьшения частоты)

Ваша задача распадается на две простые подзадачи: 1) измерение периода входного сигнала и 2) формирование меандра заданной частоты.

 

Вариантов решения подзадач - море...Лаптевых, ниже приведен самый простой.

 

Формируете меандр с помощью прерывания таймера по переполнению, в нём вы должны инвертировать выходной пин и загрузить новое значение полупериода. В основной программе непрерывно измеряете период входного сигнала и соответствующим образом корректируете период таймера.

 

При определенной сноровке можно даже на си залудить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да.

А что мешает это сделать без _особой_ сноровки, просто на Си?

Или тут имелось ввиду знание Си в принципе? Ну тогда без вопросов ))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваша задача распадается на две простые подзадачи: 1) измерение периода входного сигнала и 2) формирование меандра заданной частоты.

 

Вариантов решения подзадач - море...Лаптевых, ниже приведен самый простой.

 

Формируете меандр с помощью прерывания таймера по переполнению, в нём вы должны инвертировать выходной пин и загрузить новое значение полупериода. В основной программе непрерывно измеряете период входного сигнала и соответствующим образом корректируете период таймера.

 

При определенной сноровке можно даже на си залудить.

 

В основной программе непрерывно измеряете период входного сигнала и соответствующим образом корректируете период таймера

а как его измерить? частота 16МГц, а таймер занят. а ведь считать то его нужно в единицах таймера получается

 

я по таймеру 16МГц/256=62500 считал длину импулься и тут же параллельно выдавал, и как бы получается так что все сдвигается и накладывается на входной, вобщем запутало меня все это.

 

вопрос о фазе не стоит. вот мой код - скажите где трабл :wassat:

 

//==========START TIMER PROCESS=====================
Timer:
		CLI

		//заносим и выделяем бит скорости из порта С
		IN		PortCVal, PINC				; 
		ANDI	PortCVal, 1<<InPortSyg

		//выделяем предыдущее состояние бита из порта С
		MOV		temp1, Flags			; 
		ANDI	temp1, 1<<InSygFlag

		//копируем бит из порта С для проверки изменился ли он
		MOV		temp3, PortCVal
		EOR		temp3, temp1		; проверяем изменился ли бит			
		//если изменился то пытаемся его продлить
		BRNE	DecDelay			;1x1=0(Z) 0x0=0(Z) 1x0=1 0x1=1
		//после задержки инвертируем флаг сигнала
		LDI		temp3,1<<InSygFlag		;
		EOR		Flags, temp3

		//вычисляем длительность нового импульса DelL_Next DelH_Next

CalNewDel:

		MOV		dd16uL, CtrL
		MOV		dd16uH, CtrH

//для упрощения задаем фиксированную задержку 
		LDI		DelL_Next, $10
		LDI		DelH_Next, $00 
//прибавляем к длительности импульса
		ADD		DelL_Next, CtrL
		ADC		DelH_Next, CtrH
		//начнем подсчет заново
		CLR		CtrL
		CLR		CtrH

//ПРОДОЛЖИМ ВЫДАЧУ ИМПУЛЬСА
DecDelay:
		DEC		DelL_Cur
		BRNE	FollowCount
		TST		DelH_Cur
		BRNE	DecDelayH
//Задержка ЗАКОНЧИЛАСЬ, загружаем НОВУЮ	
		MOV		DelL_Cur, DelL_Next
		MOV		DelH_Cur, DelH_Next
		RJMP	ActuateSyg
DecDelayH:
		DEC		DelH_Cur
		RJMP	FollowCount
//АКТУАЛИЗАЦИЯ ТОЛЬКО ПОСЛЕ ЗАДЕРЖКИ!!!!!
ActuateSyg:
		//выделяем предыдущее состояние OutSyg из флага

		MOV		PortCVal, Flags		
		LDI		temp3,1<<OutSygFlag				; 
		AND		PortCVal, temp3
		EOR		PortCVal, temp3	;
		EOR		Flags, temp3

		//актуализация сигнала (изменение на обратный) 
		OUT		PORTC, PortCVal		//выдача импульса

FollowCount:
		INC		CtrL		; и увеличиваем общий счетчик импульсов
		BRNE	SetTimer
		INC		CtrH
		BRNE	SetTimer
//ограничиваем длину входного импульса
		SER		CtrL
		SER		CtrH		;Counter=$FFFF

SetTimer:

//предустановка периода таймера на 1 тик
		LDI	temp1, $FF	 ;загружаем старший байт
		OUT	TCNT1H, temp1		; Старший байт пошел!
		LDI	temp1, $FE 	;загружаем младший байт
		OUT	TCNT1L, temp1		; Младший байт пошел!

		RETI

Изменено пользователем IC7K

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...