частота которого определяется через АЦП микроконтроллера
Через АЦП частоту не меряют, через него меряют уровень напряжения.
Ну а чтобы узнать частоту, необходимо бы, для начала, узнать что вообще такое частота. Так же, Вы поймёте, что её нереально вычислить "без всяких там таймеров и тому подобного"...
Я знаю что не мериют частоту ЧЕРЕЗ АЦП, я же пишу условно (понятно что её нужно расчитать)
насчет таймеров я не спорю, я имею ввиду входные ножки таймеров счетчиков и всякие входные ножки внешних прерываний и захватов ICP мне хочется использовать ножку АЦП вместо них)))
наконец то хоть кто то более внятно обьясняет,спс АlЕХ "Другие пытаются научить загадками,а мне такое совсем не нужно, токо путаница возникает"
а F= 1/T
Аlex писал(а):
Для вычисления частоты аналогового сигнала необходимо динамически определять некий "виртуальный ноль", переходы через который считать началом и окончанием периода. Определять его нужно по среднему значению входного сигнала за определённый промежуток времени..
А как мне определять среднее значение входного сигнала через ножку АЦП?
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4565 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Среднее значение = сумма всех значений за период времени, делённый на количество выборок (семплов, как тут выражались) за этот период. Далее, пробегаемся по всем выборкам и смотрим "переход" через это значение (т.е. было меньше, стало больше). Продолжаем дальше бежать по выборкам, считая их, и ловить следующий переход. Вот их количество (выборок) - это будет время периода. Естественно, время - имеется в виду общее время этих выборок. Единица (количество периодов), делённое на время этого периода - как раз и будет частотой следования сигнала. Если, за анализируемый участок времени, будет не один период, то можно их (периоды) подсчитывать. Тогда в формулу уже подставляем не единицу, а их количество. Соответственно, время периода в формуле - будет суммой всех времён подсчитанных периодов. Тем самым, мы получим усреднённое значение частоты за весь анализируемый участок.
1.Мы задействуем таймер по совпадению, вкл функцию АЦП 2.Будем вкл таймер как токо на ножке АЦП что то будет (настроем на 10 мс) 3.Задействуем массив куда будем записывать значения АЦП за одно преобразование (я так понял что одно преобразование - это период одного семпла?) 4.Как токо на ножке АЦП не чего не будет откл таймер и все по новой (тут вычислим максимум АЦП) 5.Если мы настраиваем АЦП на 200 кгц я так понимаю что мы мерием АЦП каждую 1/200 сек? 6.Всегда будет меняться количество семплов на разных частотах ? - на одной одно количество на другой другое?
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4565 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
1. Выделяйте массив в ОЗУ, для буферизации значений АЦП. Настраиваете АЦП на необходимую частоту. Главное, чтобы преобразование было непрерывным. Как делается это в Вашем МК - я не знаю. Частота дискретизации расчитывается из объёма буфера и времени анализируемого участка. К слову, когда вы крутите развёртку на осциллографе - вы крутите частоту дискретизации (выборок). Соответственно, чем выше развёртка, тем выше частота выборок. А частота будет зависеть от времени показываемого участка на экране и количество выборок на этом участке. 2. На ножке АЦП не может ничего не быть, там всегда что-то есть. А начинать преобразование можете в любой момент. Если, конечно, речь не идёт о синхронизации сигнала в осциле. 3. Да 4. На ножке АЦП не может ничего не быть. Преобразование участка и укладка значений в буфер заканчивается по количеству преобразований. А количество, соответственно, зависит от максимального объёма буфера. 5. Вообще то, 200 КГц - это 1/200000 секунды 1 КГц = 1000 Гц = 1000 раз в секунду. 6. Кол-во семплов меняться не будет, будет меняться частота дискретизации, в зависимости от развёртки.
5. Вообще то, 200 КГц - это 1/200000 секунды 1 КГц = 1000 Гц = 1000 раз в секунду. 6. Кол-во семплов меняться не будет, будет меняться частота дискретизации, в зависимости от развёртки.
Я вот не понимаю почему количество семплов не изменится на разных частотах
к примеру 200 кгц частота АЦП, замер АЦП будет происходить 200000 раз в секунду
К примеру у нас входная частота 50 гц - максимум замеров на этой частоте будет 4000 (200000/50) к примеру у нас входная частота 1000 гц - максимум замеров 200
вот обьясните мне эти цифры 4000 и 200 - это количество семплов? - но тут то их разное количество
исходя из возможностей АЦП максимум что можно померить это 20кГц и то с разряшением 10 точек на период, что бы можно было понять какую форму имеет сигнал. чтобы определить сигнал с частотой 10Гц понадобиться массив на 10000(~10kb оперативки при 8 битах АЦП и 20к для 10бит ).... След. нужна гибкость по прескаллеру семплирования АЦП либо в ручном режиме либо в автоматическом. заполнили массив 100 замерами например на 200кГц(АЦП) - проанализировали, если нет цикличности - понизить частоту семплирования и т.д. Еще выход использовать аналоговый компаратор на этой же ноге, определить частоту, перенастроить порт на АЦП с расчитаным шагом семплирования, заполнить массив и вывести на экран...... Вопрос: что вы хотите им мерять?
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4565 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
sirha писал(а):
к примеру у нас входная частота 1000 гц - максимум замеров 200
Я расказывал один из принципов измерения, а не брал конкретную модель какого-то МК и её возможности. С таким успехом можно придраться к любому чипу, что его возможности не хватит оцифровать, например, 1 ГГц-овый сигнал. На 1000 Гц частоте и 200 дискрет - частота дискретизации будет равной 200 КГц, с таким же количеством дискрет, на частоте 50 Гц, частота дискретизации будет = 10 КГц. Количество дискрет не меняется, меняется только частота дискретизации. А уже по возможностям своего чипа и расчитывайте её, и максимальную частоту оцифровываемого сигнала. Это уже вопрос другой.
На 1000 Гц частоте и 200 дискрет - частота дискретизации будет равной 200 КГц, с таким же количеством дискрет, на частоте 50 Гц, частота дискретизации будет = 10 КГц. Количество дискрет не меняется, меняется только частота дискретизации. А уже по возможностям своего чипа и расчитывайте её, и максимальную частоту оцифровываемого сигнала. Это уже вопрос другой.
Все понял, то есть меняется частота дискретизации, млин чет как то все запутано(( Тоесть мне нужно сначала расчитать частоту дискретизации и разделить ее на количество семплов)), чтобы узнать входную частоту ,млин ели дошло. Частоту дескретизации расчитываем из обьема буфера и времени участка
так..... а можно поподробнее: тоесть обьем буфера- это максимальное количество измерений АЦП записанное в массив? Период--- время соответственно всех этих записей- вроде так? тоесть частота дескрит = количество измеренных АЦП делим на этот период? Я вот токо не пойму одного:от кокого до какого значения мерить как это отслеживать?когда начало и конец массива от максимума до минимума значения самого АЦП (тоесть следим за амплитудой)?
Alex, а где посмотреть скоко семплов для своего микроконтроллера, например для atmega8,если в даташите можете подсказать где именно? млин тоесть получается контролер сам частоту дискретизации подстраивает по семплам?
Последний раз редактировалось sirha Сб ноя 14, 2015 20:17:08, всего редактировалось 1 раз.
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4565 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Контроллер ничего сам по себе не подстраивает, он вообще ничего не знает ни о сигнале, ни о том, что Вы хотите сделать - ему по барабану. Частоту подстраиваете Вы сами, как уже выше сказали, либо в ручном режиме (каким-нибудь переключателем), либо в автоматическом - снижая частоту дискретизации. Частота дискретизации - это частота, с которой Вы измеряете напряжение на ноге АЦП.
Частота дискретизации - это частота, с которой Вы измеряете напряжение на ноге АЦП.
Я опять запутался
Таккк еще раз
1. мы делим наш сигнал на определенные точки - это семплы? их всегда одно и тоже значение, все зависит от микроконтроллера? к примеру ---10 семплов для atmega8 обьясните что делает контроллер когда мериет АЦП ,после того как я установлю частоту дескретизации к примеру 200 кгц 1/200000 - это один замер? тоесть если у нас 10 семплов то максимальная частота замера (тоесть расчетная на ножке АЦП) в данном варианте 20 кгц? а что тогда за частота дескритизации 200 кгц -это просто скорость замера? вот у atmega8 скоко семлов?
2.я сейчас не хочу рисовать синус крутить развертки мне нужно определить токо входную частоту на ножке АЦП 3. пусть у меня будет установлена частота дескретизации 200 кгц она не меняется как вы сказали 4.как уже было сказано запишем массив измерений АЦП как вы сказали,далее отсюда что мы узнаем ?- вычислим период что ли?
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4565 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
sirha писал(а):
количество семплов это количество чего?
Это количество замеров (дискрет), на которые Вы должны поделить определённый участок. Каждая дискрета (семпл) - это одно преобразование (замер) АЦП. Частота семплирования (дискретизации) - частота, с которой Вы совершаете эти преобразования и укладываете эти дискреты (семплы, замеры) в буфер. При частоте дискретизации в 200 КГц и количестве дискрет = 200 ,вы получаете в буфере информацию о 1 миллисекунде времени. Не нужно 1 миллисек, а нужно, например, 10 мс - снижаете частоту дискретизации в 10 раз (для сравнения - на осциле сделали развёртку с 0.1 мс на 1 мс), получаете 200 дискрет (замеров), частоту этих замеров (дискретизации) = 20 КГц. качество оцифровки осталось таким же, т.к. количество выборок (дискрет, семплов, замеров) осталось таким же.
Если частота входного сигнала намного выше измеренного окна (влезло 1 или более периодов), то при обработке Вы получите и среднее значение (нулевую точку) и период(ы) пересечения сигнала через эту точку. Если частота ниже - снижаем частоту дискретизации, тем самым увеличивая время окна. И пока в окно не влезет хотя бы один период входного сигнала. Как Вы будете её снижать - выбор за Вами.
Это количество замеров (дискрет), на которые Вы должны поделить определённый участок. Каждая дискрета (семпл) - это одно преобразование (замер) АЦП. Частота семплирования (дискретизации) - частота, с которой Вы совершаете эти преобразования и укладываете эти дискреты (семплы, замеры) в буфер. При частоте дискретизации в 200 КГц и количестве дискрет = 200 ,вы получаете в буфере информацию о 1 миллисекунде времени. Не нужно 1 миллисек, а нужно, например, 10 мс - снижаете частоту дискретизации в 10 раз (для сравнения - на осциле сделали развёртку с 0.1 мс на 1 мс), получаете 200 дискрет (замеров), частоту этих замеров (дискретизации) = 20 КГц. качество оцифровки осталось таким же, т.к. количество выборок (дискрет, семплов, замеров) осталось таким же.
Вроде бы понял
а теперь поближе к практике 1. пока куча идей как реализовать это на Си (правда еще не понятно как))) )
2.Созадим массив)))
3. Возникает вопрос:
в теории все хорошо а на практике ))
во первых мне нужно узнать период - это основная задача
как его узнать?
я установил частоту дескретизации 200 кгц - она неизменяеся
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4565 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Аlex писал(а):
Для вычисления частоты аналогового сигнала необходимо динамически определять некий "виртуальный ноль", переходы через который считать началом и окончанием периода. Определять его нужно по среднему значению входного сигнала за определённый промежуток времени
Аlex писал(а):
Среднее значение = сумма всех значений за период времени, делённый на количество выборок (семплов, как тут выражались) за этот период.Далее, пробегаемся по всем выборкам и смотрим "переход" через это значение (т.е. было меньше, стало больше). Продолжаем дальше бежать по выборкам, считая их, и ловить следующий переход. Вот их количество (выборок) - это будет время периода. Естественно, время - имеется в виду общее время этих выборок. Единица (количество периодов), делённое на время этого периода - как раз и будет частотой следования сигнала.
Среднее значение = сумма всех значений за период времени, делённый на количество выборок (семплов, как тут выражались) за этот период.Далее, пробегаемся по всем выборкам и смотрим "переход" через это значение (т.е. было меньше, стало больше). Продолжаем дальше бежать по выборкам, считая их, и ловить следующий переход. Вот их количество (выборок) - это будет время периода. Естественно, время - имеется в виду общее время этих выборок. Единица (количество периодов), делённое на время этого периода - как раз и будет частотой следования сигнала.
Alex скажите а какой именно период "сумма всех значений за период времени"? как его отсчитывать ,откуда и докуда?
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4565 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Ну представьте картинку осциллографа. Экран, на нём чего-то отображено, вот это и есть весь измеряемый период, поделённый на выборки (семплы). Сумма всех значений за этот период, поделённый на кол-во значений - будет средним значением за всю эту "картинку". Начинать отсчёт можно в любое время, если у Вас нет синхронизации по уровню.
Ну представьте картинку осциллографа. Экран, на нём чего-то отображено, вот это и есть весь измеряемый период, поделённый на выборки (семплы). Начинать отсчёт можно в любое время, если у Вас нет синхронизации по уровню.
Картину осциллографа я представил,но никак не могу представить как высчитать среднее значение для моего варианта (до сборки осцилографа мне ещё далеко),хотелось бы просто определить входную частоту)
С чего начать? ---------- включим таймер по совпадению к примеру на 10 мс сойдет? включим прерывание таймера и туда внесем счетчик t++? (для подсчета периода) Настроим АЦП на непрерывное преобразование? когда вкл таймер и когда выключаем?, если включаем как вы сказали с самого начала, то когда он должен остановится чтобы не получилось что когда нету сигнала период бесконечность))) верно ли будет сделать так?
нет, не верно. adc(0) почти всегда бдет возвращать значение больше 0, даже если вход АЦП коротнуть на землю (в атмегах АЦП паршивенький и крепко шумит). уже много раз писали, что нужно начинать отсчет времени от начала периода сигнала, а это никак не привязано к константам. ужно найти начало периода. как это сделать? нужно следить за сменой значений семплов. например значение от adc(0) постоянно увеличиваются и а в один прекрасный момент они начинают уменьшаться. отсюда и можно начинать отсчет времени для вычисления длительности периода и остановить отсчет времени в следующее такое же событие. а вот как это реализовать думайте сами
и как уже писали можно отслеживать момент перехода сигнала через среднее значение, но его еще нужно вычислить
это, конечно же самый примитивный алгоритм, нужно позаботиться о фильтрации шума, усреднении значений и т.д
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения