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

 
 
> Работа с AD5933 при заземленной нагрузке
vazz
сообщение Nov 15 2014, 16:54
Сообщение #1


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

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



За исходный вариант взял AN-847 (Measuring a Grounded Impedance Profile Using the AD5933 by Sean Brennan). По его повествованию сваял схему. Вместо инструментального ОУ применил 4 ОУ в одном корпусе общего применения (работают они не хуже). На странице 6 указанного документа приведен рисунок Figure 5, на котором приведено условие "REQUIRED OUTPUT SIGNAL" равное 1Vp-p. Собственно условие это у меня выполняется. НО! Тыкаю я осциллом в точку соединения двух 100кОмных сопротивлений и вижу фигу, т.е. отсутствие какого-либо синуса в этой точке (эти два сопротивления можно наблюдать на рисунках Figure 2 и Figure 3). Думается мне, что в этой точке должно быть ну хоть что-то, не так ли? У кого есть опыт пользования AD5933 прошу помощи/подсказок!
Ссылка на упомянутый документ: http://www.analog.com/static/imported-file...otes/AN-847.pdf


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 22)
Elsystems
сообщение Dec 3 2014, 08:27
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 265
Регистрация: 19-01-12
Пользователь №: 69 736



Да, я немного не так написал про входное напряжение. У АЦП вход 0...2В. Надо учитывать коэфициент PGA чтобы не заходить за рабочий диапазон АЦП. Вот из даташит: The peak-to-peak voltage presented to the ADC input is 2 V p-p. However, if a PGA gain of ×5 was chose, the voltage would saturate the ADC. Не вижу смысла в личных беседах, здесь выкладывайте, т.к. могут другие специалисты еще подсказать. Лично - это обычно когда разговор о разработке по ТЗ за деньги.
Go to the top of the page
 
+Quote Post
vazz
сообщение Dec 3 2014, 13:24
Сообщение #17


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

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Цитата(Elsystems @ Dec 3 2014, 00:19) *
Zreal := abs(Impedance) * cos(Z0);
Zimag := abs(Impedance) * sin(Z0);
if (cnt = 40) then
begin
Edit25.Text := Inttostr(Round(Zreal));
Edit26.Text := Inttostr(Round(Zimag));
if ((strtoint(edit23.Text) <> 0) and (Zimag <> 0)) then Edit27.Text := Inttostr(Round(1000000 / (2 * Pi * strtoint(edit23.Text) * Zimag)));
cnt := 0;
end;
cnt := cnt + 1;
end;


вот это самое интересное и не совсем понятное.

Код
Inttostr(Round(1000000 / (2 * Pi * strtoint(edit23.Text) * Zimag)))


это формула вычисления емкости как я поняимаю

а что это за цикл и почему циклов 40? т.е. во время этого цикла что-то проверяется и циклически "доводится" значение емкости до нужного значения. Что за функции Edit25, Edit26, Edit23? Это обрезание дробной части? Поясните пожалуйста смысл этого цикла и что там происходит

Цитата(Elsystems @ Dec 3 2014, 00:19) *
Чтобы сказать что то конкретное, нужно глянуть Вашу схему и алгоритм ПО (не на ассемблере, а в виде блок схемы)


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

1. Включение генератора. Если ошибок на шине I2C не возникло и полученные после записи параметры совпали с записываемыми - продолжаю (т.е. сделал контрольное чтение регистров AD5933 после их записи). Если ошибка - включаю аварийный индикатор и не продолжаю. В дальнейшем описании алгоритма не буду включать проверку на ошибки, но проверку делаю на все возможные ошибки после каждой операции.

2. Выжидаю 2 секунды перед командой на измерение. Затем даю команду измерить (Setteling cycles тоже на максимум x512). Решил пока все задержки сделать максимальными. После команды на измерение МК не отправляю в сон (понятно, что лучше отправлять, но этот марафет буду наводить уже после).

3. Дожидаюсь валидности данных опрашивая регистр статуса.

4. Получаю содержимое регистров Real и Imaginery Data.

5. Получаю модули значений (в отдельные переменные).

6. Получаю квадраты модулей (в отдельные переменные).

7. Получаю сумму квадратов (в отдельную переменную).

8. Вычисляю Magnitude = квадратный корень из полученной суммы квадратов (в отдельную переменную).

9. По полученным Real и Imaginery Data (не модулям, а реальным) вычисляю квадрат в котором произошло измерениеи собственно арктангенс отношения I/R. На выходе получаю значение нормализованное к шкале 0...359999999 (т.е. градусы). Записываю в отдельную переменную.

10. Вычисляю калибровочный GainFactor = Magnitude * (calib_r + calib_ri). Это значение используется если я кнопкой даю команду калибровки. Т.е. по команде кнопки происходит только запись в EEPROM уже готового калибровочного значения, которое получено еще до нажатия кнопки (мне показалось так удобней). calib_r - это известное сопротивление в Омах (в моем случае 51000), которое подключается при калибровке, calib_ri - это известное сопротивление Rsense в Омах (в моем случае 10000). Одновременно с записью в EEPROM калибровочного значения Gain Factor я записываю в EEPROM системную фазу, которую получил в предыдущем шаге.

11. Вычисляю комплексное сопротивление Impedance = (GainFactor / Magnitude) - calib_ri. Если GainFactor == 0 или 0xFFFFFF, то ничего не вычисляю (т.е. не было предварительной калибровки и записи в EEPROM).

12. Вычисляю угол фазового сдвига относительно системного значения сдвига (угол со знаком). Т.е. беру калибровочное значение фазы из EEPROM и вычитаю из него текущее значение фазы. Если сдвиг фазы более чем на 180 градусов (чего быть не может), то вычетаю получившееся значение из 360 градусов (произошел перход через 0, к примеру, системная фаза 320 градусов, а текущая 50 градусов). Записываю в отдельную переменную.

13. Вычисляю синус и косинус полученной разницы через тангенс половинного угла (в одной функции). Записываю в две отдельные переменные.

14. Далее шаг на котором я завис. Т.е. я множу комплексное сопротивление Impedance на косинус, чтобы получить активное сопротивление (Zreal) и на синус, чтобы получить реактивное сопротивление (Zimag).

15. Мыслей несколько.. чтобы получить емкость я должен воспользоваться формулой C = 1 / (2 * pi * F * Zimag)? + мне кажется что-то с фазой не то, мне кажется сдвиг фазы имеет какую-то дополнительную прибавку в зависимости от нагрузки/частоты, которую как-то нужно вычислять и прибавлять? нет?

Edit - это просто структура/массив с текстовыми переменными в Delphi? Тогда что содержится в элементе 23 этого массива? Что не должно быть равно 0 при проверке в цикле?


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
Elsystems
сообщение Dec 3 2014, 17:15
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 265
Регистрация: 19-01-12
Пользователь №: 69 736



Edit - ввод-вывод с формы. Цикл был чтобы на экране слишком часто данные не обновлялись. Дальше уже некуда, я вам уже разжевал и в рот положил. Если не поможет, тогда ваш путь только заказ разработки по ТЗ. Сделал более понятно:

Код
MagnitudeGF := sqrt((RealDR_cal * RealDR_cal) + (ImaginaryDR_cal * ImaginaryDR_cal));
Vsystem := ArcTan2(ImaginaryDR_cal, RealDR_cal); //Важно арктангенс с индексом 2
if (MagnitudeGF <> 0) then GainFactor := (R_cal / MagnitudeGF);
if ((RealDR <> 0) and (ImaginaryDR <> 0)) then
begin
  Magnitude := sqrt((RealDR * RealDR) + (ImaginaryDR * ImaginaryDR));
  Impedance := (GainFactor * Magnitude);
  Phase := ArcTan2(ImaginaryDR, RealDR); //Важно арктангенс с индексом 2
  Z0 := Phase - Vsystem;
  Zreal := abs(Impedance) * cos(Z0);
  Zimag := abs(Impedance) * sin(Z0);
  Resistance := Zreal; //Активное сопротивление в Омах
  Reactance := Zimag; //Реактивное сопротивление в Омах
  if ((Freq <> 0) and (Zimag <> 0)) then Capacitance := 1000000 / (2 * Pi *  Freq * Zimag);  //Вычисление емкости в нанофарадах. Freq - частота в кГц
end;


Если вы при калибровке учитываете потом шунт который измеряет ток, то это не верно, нужно в качестве R_cal ставить только подключенное калибровочное сопротивление. По идее вам значение шунта нигде не надо использовать в расчетах. Но я правда делал по другой схеме, на выходе с генератора источник тока, а на вход измерял ИУ падение напряжения на нагрузке. Но по моему разницы быть не должно. Все паразитные сопротивления в том числе ваш шунт должны учесться сами собой в результате калибровки.

Сообщение отредактировал Elsystems - Dec 3 2014, 17:37
Go to the top of the page
 
+Quote Post
vazz
сообщение Dec 4 2014, 12:28
Сообщение #19


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

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Код
Impedance := (GainFactor * Magnitude);


Я вот как на эту строку не смотрю, ну никак оно у меня не укладывается. Согласно ДШ и любым апнотам параметр Impedance обратно пропорционален параметру Magnitude. Если бы Вы параметр Magnitude как-то от обратного вычисляли, то я бы еще понял.

Код
GainFactor := (R_cal / MagnitudeGF);


Тот же самый вопрос. Rcal в числителе-то откуда, если и R_cal и MagnitudeGF согласно ДШ в знаменателе.

Цитата(Elsystems @ Dec 3 2014, 21:15) *
Если вы при калибровке учитываете потом шунт который измеряет ток, то это не верно, нужно в качестве R_cal ставить только подключенное калибровочное сопротивление.


В используемом мной апноте AN-847 (нагрузка к меня заземлена) это сопротивление учитывается во всех формулах с 7й по 12ю страницы. И как оно может не учитываться, если стоит последовательно с нагрузкой - тоже, хоть убейте, не понимаю.

Errata не могу найти на эту чудо имс, если у них ошибки в формулах, то наверное, об этому AD должно как-то сообщать народу


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Dec 4 2014, 12:58
Сообщение #20


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(vazz @ Dec 4 2014, 16:28) *
Errata не могу найти на эту чудо имс, если у них ошибки в формулах, то наверное, об этому AD должно как-то сообщать народу

Для AD это пройденный этап, похоже на заказной проект.
Как сказали региональные представители, когда были у нас в гостях, (а я спросил между делом) тема себя исчерпала и возврата или развития не будет.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
vazz
сообщение Dec 4 2014, 13:04
Сообщение #21


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

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Цитата(MrYuran @ Dec 4 2014, 16:58) *
тема себя исчерпала и возврата или развития не будет.


Ну имс же произвводят и не первый пяток лет производят. Мало того, что производят еще и народу продают (совсем не по спецзаказу). Да и перед тем, как с ней связываться я видел довольно внушительный список апнотов на сайте AD (не вникал конечно во все сразу перед покупкой, ограничился ДШ и AN-847, подумав "вот оно счастье!"). А теперь хрен разберешь где правда, а где чушь.


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
vazz
сообщение Dec 4 2014, 23:37
Сообщение #22


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

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Подскажите, пожалуйста, верно ли мое предположение:

После калибровки на известном сопротивлении вычисляемый в последствии параметр Impedance будет равен этому сопротивлению, если само сопротивление так и останется подключенным?

Также, если при подключенном калибровочном сопротивлении рассчитать |Zreal| = |Impedance| * cos(Z0), то |Zreal| также должен быть равным этому сопротивлению (сдвига фазы нет)?

короче откатился я обратно к своим начальным расчетам. все изначально было нормально, похоже, что надо над добавленным аналоговым трактом подумать, т.к. итоговую емкость примерно в 3-4 раза завышает и небольшая болтанка есть, видимо по земле от проца + питание общее с процем, в т.ч. на делителе после разделительного конденсатора между выходом AD5933 и аналоговым трактом. плюс избавляться от влияния активного сопротивления нагрузки, видимо, необходимо дополнительно с помощью расчетов, никак с AD5933 не связанных (имею в виду расчет сигналов цепей переменного тока).


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
vazz
сообщение Dec 5 2014, 21:53
Сообщение #23


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

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Самое крутое - это когда калибруешь натурный фазовый сдвиг (в моем случае 51 кОм), а потом ставишь, к примеру, 10 кОм вместо калибровочного, то фаза чудесным образом сдвигается на +5.5 градусов. Ошибки у меня точно нет. Это чудо-измеритель, откуда он берет фазу я не знаю, видимо, из космоса влияние sm.gif Вернее по какому там фурье он получает R и I одному Богу (AD) известно. Осциллографом все перепроверил в двух лучах на разных точках, никаких сдвигов реально нет.

Сообщение отредактировал vazz - Dec 5 2014, 21:54


--------------------
Не так страшна автоматизация, как её малюют.
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 July 2025 - 09:24
Рейтинг@Mail.ru


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