Свежие обсуждения
Измерения

Дизайн народного RLC-метра (RLC-3)

1 9 174

GM:
просим Вас это сделать
К предыдущему оратору добавить нечего. Прям мои слова. Единственное, могу помочь с бета-тестированием.

 

Есть еще небольшое замечание по "дешевизне". Обычно думается так "все дешевые детали купим в магазинах нашего города". А на практике получаем, что все (почти) надо заказывать через интернет, так как в магазинах этих деталей просто нет, вот и получается, что никакой дешевизны не получается и по стоимости выигрывает прибор с меньшим количеством деталей. Считать то надо ПОЛНЫЕ затраты.

 

Само собой. Но в любом случае относительно быстрые 16 разрядные АЦП все-же товар довольно экзотический. (речевые кодеки не берем в рассчет) и недешевый.

 

Я имел в виду ADS1252 - они нашлись в первом же интернет - магазине. 10$.

 

Предлагаю генератором синуса микросхему
ICL8038 в корпусе DIP

 

Так, народ, вот первый вариант (сырой) программы для расчёта элементов последовательной схемы замещения в проектируемом приборе RLC-3. Лобовое решение, без всяких измов. Здесь присутствует преобразование Фурье и расчёт последовательных схем замещения. Как видите, не так страшен чёрт, как его малюта .
Чего тут нет, так это накопления оцифрованных данных с опорного и измеряемого резисторов в буфера x(i) и y(i) соответственно. Не думаю, что это большая проблема. Ну и вывода на экран, собственно, тоже нет.


float fabs(float x);
void output1(float x,float r);
void output2(float x,float r);
void main(void)
{
int i,nsamples=1000;
int x[1000],y[1000];
int costab[1000],sintab[1000];
double dnm,r1,r2,x1,x2,x3,x4;
double L,C,r0,w;
r0=1000.0;
w=6.283185306*10000.0;
while(1)
{
x1=0.0;
x2=0.0;
x3=0.0;
x4=0.0;
for(i=0;insamples;i++)
{
x1=x1+x[i]*costab[i];
x2=x2-x[i]*sintab[i];
x3=x3+y[i]*costab[i];
x4=x4-y[i]*sintab[i];
}
dnm=r0/(x1*x1+x2*x2);
r1=(x1*x3+x2*x4)*dnm;
r2=(x1*x4-x2*x3)*dnm;
if(r2 < 0.0) C=1/fabs(r2*w);
else L=r2/w;
if(r2 < 0.0) output1(C,r1);
else output2(L,r1);
}
}

void output1(float x,float r)
{
//conversion and output the x,r variables
}

void output2(float x,float r)
{
//conversion and output the x,r variables
}

float fabs(float x)
{
if(x0) x=-x;
return(x);
}


Обсуждение и полезные изменения приветствуются.

По моей оценке расчёт коэффициентов Фурье по 1000 точкам займёт где-то 50 мс на весь цикл при 20 МГц тактовой. Компилировал CodeVisionAVR, длина программы примерно 840 слов, пришлось, правда, схитрить и уменьшить размеры буферов до 100, поскольку стек вылезал за допустимые пределы, эта мелочь легко решаема. Вот что хотелось бы пообсуждать, так это условия смены частоты генератора.

 

Wladimir_TS: Мое мнение - упростить и оптимизировать ее, даже в ущерб некоторый точности измерения - но на более доступных комплектующий и в первую очередь с заменой МАХа. (Увы АЦП там заменить нечем - самая дешевая из того что может быть с такой разрядностью)

Как раз АЦП там заменить можно одной левой, поскольку это конечный пункт назначения.

Но сейчас речь не об этом, я хотел именно о генераторе с вами поговорить. Насколько знаю у вас есть живая плата, давайте закачаем туда мою программу и посмотрим на результат. Тут будет очевидная польза всем, вы (и все остальные) получат вариант замены МАХа, а мы экспериментальные данные для нашего прибора RLC-3, а возможно, и практическую схему с рекомендациями. Как вы на этот счёт? Готовы поработать на благо сообщества ?

Отвлекусь немного. Подумалось, что в принципе, на основе данного прибора можно сделать ряд других, а именно, низкочастотный измеритель АЧХиФ 0-500 кГц (программка-свип уже написана), измеритель нелинейных искажений, НЧ-милливольтметр (немного посложнее),

 

GM: Насколько знаю у вас есть живая плата, давайте закачаем туда мою программу и посмотрим на результат.
Симулятор типа Протеус Вас не устроит?
Если есть принципиальная схема генератора и .hex могу попробовать получить спектрограмму в Протеусе.

 

Ув GM! Хотелось бы уяснить один момент. Предположим, что генератор у нас выдает идеальную синусоиду без всяких дополнительных ухищрений (пусть это, например, обычный LC-генератор ). Правильно ли я полагаю, что в этом случае вместо таблиц синуса и косинуса можно воспользоваться в расчете, к примеру, таблицами треугольной функции?

 

GM: Но сейчас речь не об этом, я хотел именно о генераторе с вами поговорить. Насколько знаю у вас есть живая плата, давайте закачаем туда мою программу и посмотрим на результат.
Это ж в какую живую плату Вы хотите закачать программу с двумя массивами по 1000 Int (точек)?