Преобразователь Шим в Шим

Обсуждаем контроллеры компании Atmel.
Ответить
karaseg
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вс окт 01, 2017 08:40:23

Преобразователь Шим в Шим

Сообщение karaseg »

Подскажите как преобразовать сигнал шим генерируемый источником, частотой 100 Гц в шим ~30 кГц, с инвертирующим пропорциональным изменением % заполнения т.е. на входе 10% заполнения - на выходе 90%, на вход 40% на выходе 60%, на входе 70% на выходе 30% и т.д.
Хочу попробовать реализовать это на базе attiny13, но в инете есть куча примеров по генерации шима, но не могу найти как обрабатывается шим на входе в МК
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18547
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Преобразователь Шим в Шим

Сообщение ARV »

На входной шим RC-фильтр, с него на АЦП контроллера, ну а потом по результату АЦП уже ШИМить на выход.
Собственно, 100 Гц ШИМ, как мне кажется, с приемлемой точностью можно измерить и по прерываниям Pin Change Interrupt...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Преобразователь Шим в Шим

Сообщение YS »

но не могу найти как обрабатывается шим на входе в МК
Поищите примеры использования возможности аппаратного захвата значения таймера (timer input capture) для измерения коэффициента заполнения входного сигнала.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18547
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Преобразователь Шим в Шим

Сообщение ARV »

YS писал(а): возможности аппаратного захвата значения таймера
отсутствуют как класс
karaseg писал(а):на базе attiny13
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Преобразователь Шим в Шим

Сообщение Аlex »

И опять ни слова о требованиях. Одно только поверхностное объяснение хотелки, в двух словах.
Где максимальное отклонение входной частоты от 100 Гц ? Где необходимая точность и разрешение измерения скважности ? Где максимальное время реакции на изменение этой скважности ? Где всё, Карл ???
Реклама
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Преобразователь Шим в Шим

Сообщение YS »

отсутствуют как класс
Обалдеть, а ведь в ATtiny13 и правда нет input capture... :shock:
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Реклама
karaseg
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вс окт 01, 2017 08:40:23

Re: Преобразователь Шим в Шим

Сообщение karaseg »

Меня интересовало направление копания, без конкретизации схемных решений. Частота подразумевается стабильная, получаемая с другого МК, время реакции изменения выходного сигнала относительно входного не имеет принципиального значения, пусть будет +5 секунд край, разрешение так же не сильно важно, пусть будет нарастать % заполнения десятками от 0 до 100 на частоте 30 кГц
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Преобразователь Шим в Шим

Сообщение Аlex »

Ну значит подойдёт вариант, предложенный ARV'ом - RC-цепь и подаём на АЦП.
karaseg
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вс окт 01, 2017 08:40:23

Re: Преобразователь Шим в Шим

Сообщение karaseg »

либо ATTINY2313 использовать, вроде бы у этого МК есть, необходимый для этого вывод ICP
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Преобразователь Шим в Шим

Сообщение akl »

Можно так. Частота работы 4,8 МГц. Настроить Т0 на Fast PWM 7, OCR0A=160-1, разрешить прерывание от OCR0A, по которому наращивать счетчик длительности ШИМ частоты 100Гц. Дискрет отсчета 33,(3)мкс, т.е. каждые 3 отсчета будут давать длительность 100мкс или 1% PWM 100Гц. По таблице значение счетчика преобразовать в значения PWM 30кГц и загнать его в OCR0B.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18547
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Преобразователь Шим в Шим

Сообщение ARV »

[uquote="karaseg",url="/forum/viewtopic.php?p=3213694#p3213694"]либо ATTINY2313 использовать, вроде бы у этого МК есть, необходимый для этого вывод ICP[/uquote]
с достаточной для ваших нужд (судя по описанию) точностью измерять ШИМ можно и 13-й тинькой просто обрабатывая прерывание PCINT и считая таймером время
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
philosoraptor
Прорезались зубы
Сообщения: 225
Зарегистрирован: Сб янв 14, 2012 22:53:50

Re: Преобразователь Шим в Шим

Сообщение philosoraptor »

Делал эмулятор егр на Тиньке-13. Для измерения скважности использовал счетчик между двумя прерываниями (верх — низ, или наоборот), фронт определял по логическому состоянию пина сразу после прерывания. Дальше считаем % и по нему генерим наш ШИМ. Ничего особо сложного, еще 30% свободного флеша в Тиньке осталось.
karaseg
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вс окт 01, 2017 08:40:23

Re: Преобразователь Шим в Шим

Сообщение karaseg »

Хоть и спустя долгий период опишу что получилось... :) может кому пригодится
В итоге всё сделал через вывод ICP на МК ATTINY2313

В этом режиме, по изменению логического уровня на ножке ICP (по фронту или по спаду), делается копия данных из регистра счетчика TCNT в регистр ICR1.
А затем вызывается прерывание (TIMER1_CAPT_vect), если произошел "захват", по установленному условию (фронт/спад), в прерывании подпрограммой обрабатываются значения счетчика. Зная значения счетчика между двумя фронтами, можно высчитать частоту сигнала, и затем зная значение счетчика между двумя фронтами и между фронтом и спадом можно высчитать % заполнения. В подпрограмме прерывания, можно перенастраивать "режим захвата", с фронта на спад, тем самым манипулировать значением того что пытаемся получить, частоту или заполнение (два фронта или фронт и спад соответственно).

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

// Настройка режима счетчика TCCR1B
/*
Bit 7 – ICNC1: Input Capture Noise Canceler. Установка этого бита в лог. 1 активирует входной подавитель шума,
при этом будет фильтроваться входной сигнал Input Capture Pin (ICP1). Функция фильтрации требует 4 последовательных
одинаковых значений, поступивших на вывод ICP1, чтобы было зарегистрировано изменение уровня сигнала. Таким образом,
захват входных импульсов (Input Capture) будет задержан на 4 такта генератора микроконтроллера, когда возможность фильтрации разрешена.
---
Bit 6 – ICES1: Input Capture Edge Select. Этот бит выбирает тип среза (фронт или спад) на входе ICP1, который вызовет событие захвата импульса.
Когда в ICES1 записан лог. 0, то спад (отрицательный срез) вызовет срабатывание триггера, и когда в ICES1 записан лог. 1, срабатывание
триггера вызовет уже фронт (положительный срез) сигнала.
---
Bit 4:3 - WGM13 : WGM12: Выбор режима timer1. These bits are used for mode selection like Normal mode, PWM mode, CTC mode, etc.
here we will select normal mode, so set these bits to zero.


Когда срабатывает триггер захвата события по входу в соответствии с установкой ICES1, значение счетчика (TCNT1, регистры TCNT1H и TCNT1L) копируется
в регистр захвата Input Capture Register (ICR1). Событие также вызовет установку флага Input Capture Flag (ICF1), и это может использоваться
для срабатывания прерывания Input Capture Interrupt, если оно разрешено.
---
Bit 2:0 – CS12:10: Clock Select. Эти 3 бита задают источник тактового сигнала для счетчика.
===============
CS12 	CS11 	CS10 	Описание
===============
0 	0 	0 	Источник тактов не задан (таймер/счетчик остановлен).
0 	0 	1 	clkI/O (без делителя частоты)
0 	1 	0 	clkI/O / 8 (с выхода делителя)
0 	1 	1 	clkI/O / 64 (с выхода делителя)
1 	0 	0 	clkI/O / 256 (с выхода делителя)
1 	0 	1 	clkI/O / 1024 (с выхода делителя)
1 	1 	0 	Внешний тактовый сигнал, поданный на вход T1. Тактирование происходит по срезу (спаду) уровня сигнала.
1 	1 	1 	Внешний тактовый сигнал, поданный на вход T1. Тактирование происходит по фронту (нарастанию) уровня сигнала.
*/

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

// Настраиваем счетчик на фронт (бит 6 счетчика TCCR1B в 1), режим Normal (Table 46. Waveform Generation Mode Bit Description из даташита на 2313)
	TCCR1A = 0b00000000;
	TCCR1B = 0b01000100;

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

ISR (TIMER1_CAPT_vect)
{
    t = ICR1;
...
}

Ответить

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