реклама на сайте
подробности

 
 
> ads1255, скорость сбора данных
messenger
сообщение Aug 20 2015, 05:13
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



Добрый день!
Помогите разобраться.
У ацп ads1255 максимальная скорость оцифровки 30 000 измерений в секунду.
Флаг готовности ацп появляется с периодом 34 мкс. При работе на рекомендуемой производителем тактовой частоте 7,68 Мгц, время на запрос, t6, и чтение составляет порядка 23 мкс.
Задача собрать максимальное количество измерений за 1 мс.
Ранее я уже работал с этим ацп, блок расчетов взял старый, но там и скорости были 1-5 измерений в секунду.
Сейчас ПО организовано так, запускаю таймер на 1 мс, и читаю в цикле сколько успею. Получается 1 измерение. А нужно 5-10.
Вопросы)
1. На какой тактовой частоте должен работать контроллер, чтобы успеть забрать все данные на такой скорости?
2. Данные забирает компьютер. Как правильно организовать алгоритм чтения чтобы забрать максимальное количество измерений. Т.е. пересылать только значения 3-х байт данных, а обрабатывать уже в ПК? А как же переключение пределов.

У меня сейчас Atmega16 разбирает данные. Пишу на Си. Так в лучшем случае 1-2 измерения получается забрать на такой скорости.
Циклы for, While, и т.д. съедают от 5 до 10 мск.
Если заремаркировть полные циклы вычислений, то удается проконтролировать байт готовности 23-26 раз. Как только добавляю вычисления (приведение к виду напряжения, обработку предела) все сразу сходит до 1 го измерения за 1 мс.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 19)
Plain
сообщение Aug 20 2015, 08:35
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710



Тема о нехватке квалификации в правильном выборе и последующей работе с аппаратурой и ПО, а несчастный АЦП здесь вовсе не при чём.
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Aug 21 2015, 05:01
Сообщение #3


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Цитата(messenger @ Aug 20 2015, 08:13) *
1. На какой тактовой частоте должен работать контроллер, чтобы успеть забрать все данные на такой скорости?
2. Данные забирает компьютер. Как правильно организовать алгоритм чтения чтобы забрать максимальное количество измерений. Т.е. пересылать только значения 3-х байт данных, а обрабатывать уже в ПК? А как же переключение пределов.

1. Встречные вопросы. SPI реализован аппаратно или программно? Если второе, то о высокой скорости можно забыть. Далее при аппаратной реализации скорость чтения НАПРЯМУЮ определяется настройками тактовой частоты блока SPI. Достаточно просто помножить длительность такта SPI на число бит (24 или сколько там выдает АЦП) и получите время, затрачиваемое на чтение слова.
2. Опять вопросы. А что нужно обрабатывать и как? Может Вы там корреляцию считаете или БПФ, а может нужно просто взять среднее - это совершенно разные по затратам операции и план действий соответственно будет разным. Но в любом случае, если объем данных для передачи после обработки не снижается кординально, то лучше передавать в ПК "как есть", и обработку делать в нём же.
Что значит переключение пределов? У Вас интерфейс какой - USB? Или COM? Что мешает передавать в одну сторону данные, а в другую команды на переключение пределов? (одновременно)
Если нужно задать определенную комбинацию каналов для опроса, то это можно сделать массивом -передаете массив номеров каналов, в той последовательности, в которой нужно их опросить, и контроллер далее начинает опрос согласно этому порядку. Тем более что каналов у вас, насколько я понимаю, всего 2 sm.gif
Работа с АЦП по прерываниям -АЦП завершил преобразование -> попали в прерывание от АЦП -> запустили чтение 3байт SPI ->вышли из прерывания; чтение SPI закончено->попали в прерывание от блока SPI -> скопировали значение из SPI в программный буфер->вышли из прерывания. C портом ВВ- можно и в главном цикле работать. Если что приходит (команда) -изменяете настройки АЦП (согласно команде) между циклами заполнения буфера. Это если 1мс нужно опросить разово. Если нужно непрерывный опрос -тогда 2 буфера "качельки", один заполняется -второй в это время передается в ПК. Это удобней для USB. Если UART -удобнее один кольцевой буфер. Както так.
Go to the top of the page
 
+Quote Post
=AK=
сообщение Aug 21 2015, 07:18
Сообщение #4


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(Alexashka @ Aug 21 2015, 14:31) *
1. Встречные вопросы. SPI реализован аппаратно или программно? Если второе, то о высокой скорости можно забыть. Далее при аппаратной реализации скорость чтения НАПРЯМУЮ определяется настройками тактовой частоты блока SPI. Достаточно просто помножить длительность такта SPI на число бит (24 или сколько там выдает АЦП) и получите время, затрачиваемое на чтение слова.

В порядке общего трепа: программный SPI не так уж плох. Помнится, лет пять назад я его гонял на Cypress EZ FX2, получалось около 800 kbps. Писал на С, на Кайле.
Go to the top of the page
 
+Quote Post
Herz
сообщение Aug 21 2015, 07:38
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(=AK= @ Aug 21 2015, 10:18) *
В порядке общего трепа: программный SPI не так уж плох. Помнится, лет пять назад я его гонял на Cypress EZ FX2, получалось около 800 kbps. Писал на С, на Кайле.

А что ж в нём плохого? Только максимальная скорость от МК ведь зависит. На Меге атора столько не получится.
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Aug 21 2015, 18:23
Сообщение #6


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Цитата(=AK= @ Aug 21 2015, 10:18) *
получалось около 800 kbps. Писал на С, на Кайле.

Это если хорошо представляешь как работает ядро контроллера, для этого надо немного и ассемблером владеть sm.gif А вот если писать на С чисто алгоритмически, не задумываясь об оптимизации можно такого наворотить что ууу... Вот сегодня как раз разгребал чужой г%№*о-код: тоже запись в SPI, программная, сделано на сдвигах. На запись одного бита уходит более 100 команд (точно не считал), а всего передается 24 бита (хотя нужно 21, но кодер не стал заморачиваться такой мелочью). В итоге на весь цикл записи уходит около 1мс, рабочая частота контроллера 20МГц (сравнивая с результатами ТС -у него результат даже чуть лучше). После оптимизации весь цикл стал занимать 33мкс при том что тактовая частота была еще и снижена до 5МГц. Как говорится - почуствуй разницу biggrin.gif
А использование аппаратного SPI даст тотже результат (а то и лучше) не прикладывая особых умственных усилий. Кстати по моим прикидкам тот же цикл в аппаратной реализации у меня бы вышел за 8,5мкс, т.е в 4 раза лучше чем оптимизированный программный вариант.
Go to the top of the page
 
+Quote Post
messenger
сообщение Aug 22 2015, 02:46
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



SPI программный. Скорость взята максимально возможная исходя из рекомендаций производителя ацп.
Как я писал выше на обработку получается 10 мкс, это если хотим успеть забарать все данные.
А циклы For While сьедают порядка 5 -10 мкс. Если еще добавить приведение к виду напряжения, несколько перемножений и делений числел с точкой (что бы понять на какой предел переключиться) то все сводится к одному измерению.
Вот и не пойму как праильно
Go to the top of the page
 
+Quote Post
Herz
сообщение Aug 22 2015, 08:42
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Правильно - с аппаратным SPI, никаких делений и умножений, только сдвиги и сложения, и работа по прерываниям, а не парсинг.
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Aug 22 2015, 09:03
Сообщение #9


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Цитата(messenger @ Aug 22 2015, 05:46) *
Вот и не пойму как праильно

Во время работы аппаратного SPI контроллер может обрабатывать предыдущий результат, ну это так, на заметку - времени на умножение/деление с плавающей точкой все равно не хватит. Можно делать проще -есть какойто индикатор переполнения АЦП -ну например один отсчет перевалил за 0.9 шкалы -просто берете и в 2 раза уменьшаете усиление PGA АЦП. Приводить к вольтам не нужно если в самом устройстве не требуется отображать значение в вольтах - просто передаете отсчет АЦП в компьютер, снабдив его значением PGA при котором этот отсчет получен, а комп сам посчитает сколько это будет в вольтах.
Задача ведь наверняка использовать по максимуму шкалу АЦП, а не подстраивать ее под какието вольты или амперы, так и меняйте шкалу -для этого достаточно оценивать сами отсчеты без перевода в физические величины.
Go to the top of the page
 
+Quote Post
messenger
сообщение Aug 26 2015, 12:35
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



Ошибся. SPI аппаратный.
Как я понял приводить к виду напряжения не нужно.
Тогда другой вопрос, а как правильно контролировать флаг готовность, в цикле программно или аппаратно через прерывание?
И как узнать сколько нужно машинных циклов на обработку операций с плавающей точкой?
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Aug 26 2015, 18:40
Сообщение #11





Guests






Цитата(messenger @ Aug 26 2015, 15:35) *
И как узнать сколько нужно машинных циклов на обработку операций с плавающей точкой?


Ручками.

P.S.
Для прикола ради - как мы считали в 80-х ручками объемы и такты на асме i8080 - 580:
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 27 2015, 05:05
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(messenger @ Aug 26 2015, 18:35) *
И как узнать сколько нужно машинных циклов на обработку операций с плавающей точкой?

Также как и операций фиксированной точки:
Делаете короткий цикл, выполняете его N раз (N большое число == тысячи или десятки или сотни тысяч), измеряете длительность цикла по таймеру.
Добавляете в цикл исследуемую команду, выполняете его N раз, измеряете длительность цикла по таймеру.
Вычитаете первый результат из второго, делите на N.
Go to the top of the page
 
+Quote Post
panther26
сообщение Aug 27 2015, 17:48
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-07-13
Пользователь №: 77 509



удалено

Сообщение отредактировал panther26 - Aug 27 2015, 17:54
Go to the top of the page
 
+Quote Post
messenger
сообщение Nov 18 2015, 03:47
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



Возник еще вопрос.
Я правильно понимаю таблицу 13 и 15. Что за 1 мс я получу только 1 измерение?
Период обновления 0,21 мс и первые 5 измерений нужно выбросить?
Go to the top of the page
 
+Quote Post
messenger
сообщение Nov 18 2015, 16:39
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



на осциллографе DRDY идет с периодом 30 мкс
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Nov 19 2015, 06:01
Сообщение #16


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Насколько я понимаю при скорости преобразования 30 килосэмплов в сек. период выдачи DRDY равна 1/30000=33,3мкс, далее по табл.15 находим, что для получения независимых отсчетов (без замешивания предыдущих значений) на этой частоте требуется выждать время Settling time равное 5 периодам DRDY, т.е 167 мкс. Соответственно данные можно забирать с частотой 1/1.67Е-4 = 6000 Гц. (ну или проще 30000/5=6000 sm.gif Если у Вас период обновления (или частота с коротой Вы забираете отсчеты) больше, чем 167мкс, то Вы уже автоматически пропускате нужное количество DRDY, а значит никаких дополнительных пропусков делать не надо. По-моему так. Фильтру ведь все равно -забираете Вы данные или нет sm.gif -он свое дело всё равно делает.
Go to the top of the page
 
+Quote Post
messenger
сообщение Nov 19 2015, 11:00
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457



я правильно понимаю, что дождавшись изменение параметра и начав измерение из ряда измеренных значение нужно выбросить 1-5 т.к. они содержат результаты преобразования до момента окончания установления параметра. А начиная с 5 можно брать все?

Сообщение отредактировал messenger - Nov 19 2015, 11:00
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Nov 19 2015, 11:52
Сообщение #18


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Ну это не совсем задержка в обычном понимании, просто отсчеты АЦП всегда содержат комбинацию (по простому говоря -среднее значение) последних 5 отсчетов, и если произошло резкое изменение сигнала, то нужно выждать 5 периодов DRDY, при этом выходной код АЦП будет точно соответствовать новому установившемуся значению сигнала.
Вопрос в том, какие именно и когда отсчеты нужно пропускать, ведь момент изменения сигнала как правило не известен...
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 19 2015, 14:31
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Вообще-то лучше несколько иначе подходить.
На 30ksps сеттлинг тайм 5 периодов, то есть считаете все кроме первых четырех от момента переключения коммутатора. А дальше - просто есть вклад величины до изменения в следующие после ее изменения четыре преобразования, ну и что? Это есть всегда, когда больше, когда меньше, и часто зависит больше от физики датчика, чем от измерителя.
То есть берем все измерения кроме первых 4х после переключения коммутатора и усредняем-фильтруем, как хотите.
Это усреднение реальных показаний реальной величины. Первые 4 величины после переключения- да, мусор. А дальше-нормальные измерения.


Если же необходимо измерять резко меняющиеся сигналы без влияния предыстории- то нужно усреднять плавающим окном по 5 соседним значениям, это даст 5 независимых значений каждую миллисекунду.
Ну а если три значения достаточно- то 3750sps без заморочек с ручными вычислениями.
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Nov 20 2015, 06:30
Сообщение #20


Практикующий маг
******

Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576



Я так понимаю автору просто нужно оцифровывать один канал с максимально-возможной частотой, поэтому и 30kSps. Если это так, то я бы вообще не заморачивался с какими-то пропусками отсчетов -АЦП имеет встроенный фильтр и сужает полосу, а любая фильтрация (не важно цифровой фильтр или банальная RC цепочка) приводит к тому, что выходной сигнал начинает зависеть от предыстории. Это есть и в обычных (недельтасигма АЦП), поскольку там есть антиалиайзинговый фильтр. И этого не нужно бояться.
Но вот чего точно нужно бояться (о чем в даташите особо предупреждают) -это то, что при переключении каналов происходит наложение данных нескольких каналов, в этом случае нужно обязательно делать пропуски или как там рекомендуется выполнять команду синхронизации.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 22:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01537 секунд с 7
ELECTRONIX ©2004-2016