Мониторинг напряжения

favidu
Offline
Зарегистрирован: 12.10.2017

Нужно мониторить переменное напряжение в цепи и реагировать на события.

Амплитуда переменного напряжения от -20 до 20 вольт (не более).

Форма сигнала - близкая к синусу. Частота около 1кГц.

Мониторить нужно (предварительно думаю) каждые 10 микросекунд.

События, на которые нужно реагировать:

1) Изменение знака напряжения (переход графика синуса через ноль, конец/начало полупериода)

2) Прекращение роста напряжения (вершина положительного/отрицательного синуса)

Способ реакции на событие:

Управление электронным ключем. В качестве ключа предварительно взят тиристор КУ112А

( http://tec.org.ru/board/ku112a/148-1-0-867 )

КУ112А - незапираемый, закрываться он будет от смены направления тока. Ардуино должен только открывать его в нужные моменты.

Всего нужно управлять четырьмя тиристорами. Каждый из тиристоров должен открываться один раз за период:

1) Открывается на вершине первого полупериода

2) Открывается в момент смены знака напряжения (конец первого полупериода / начало второго полупериода)

3) Открывается на вершине второго полупериода

4) Открывается в момент смены знака напряжения (конец второго полупериода / начало первого полупериода)

Ардуино должен реагировать именно на динамику напряжения, расчет по времени не подойдет, так как частота переменного тока в цепи может изменяться.

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

Khludenkov
Offline
Зарегистрирован: 11.11.2015

Нужна ли гальваническая развязка по цепям проверки напряжения и по цепям управления?

favidu
Offline
Зарегистрирован: 12.10.2017

Khludenkov пишет:

Нужна ли гальваническая развязка по цепям проверки напряжения и по цепям управления?

Мониторинг напряжения происходит в том же контуре, в котором используются тиристоры в качестве ключей.

По-этому думаю, что нет. Лишь бы ардуинку не спалить.

Khludenkov
Offline
Зарегистрирован: 11.11.2015

Ну тогда делители напряжения и ацп.

Если каждые 10 мкс, то штатный ацп осилит. Можно ардуино 2009 например. На 16 МГц.

Могу сделать. Насколько всё быстро надо сделать?

 

Khludenkov
Offline
Зарегистрирован: 11.11.2015

Одна из моих статей

 

http://masters.donntu.org/2011/fkita/gorlova/library/tez5.htm

 

Живу в Красногорске, хорошо знаю и программирование и железо и ардуино.

 

favidu
Offline
Зарегистрирован: 12.10.2017

Спешки нет.

Во сколько оцените?

Каким образом предпочтете оплату?

Будет еще пара технических вопросов/пожеланий.

Если хотите, можем списаться в частном порядке (хоть просто по e-mail)

Khludenkov
Offline
Зарегистрирован: 11.11.2015

5000 вполне устроит. Нормально?

Можно переводом на карту сбербанка. Частями.

Можно без предоплаты.

 

почта vladimirostu@mail.ru

возник вопрос - как измерять отрицательное напряжение?

Сделать землю "плавающей"?

Диодный мост даёт сдвиг примерно на 0.8*2 = 1.6 вольт.

Это критично?

 

favidu
Offline
Зарегистрирован: 12.10.2017

Я не разбираюсь особо.

Нарисую простейшую схему и сброшу не e-mail с вопросами. Вопросы будут касаться не того, как это сделать, а того, как с этим работать в дальнейшем.

favidu
Offline
Зарегистрирован: 12.10.2017

Написал на e-mail.

Onkel
Offline
Зарегистрирован: 22.02.2016

Не осилит. АЦП ардуины с лучшем случае 60 мкс на сэмпл осилит, Но не 10 мкс.

Если хотите сделать на ардуино, то как минимум Due нужно, а ATsam3. Пишите ydom@mail.ru , сделаем.

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

От проблема то... Внешний ацп, в разы дешевле.

Khludenkov
Offline
Зарегистрирован: 11.11.2015

В докуменации на чип mega328 написано про АЦП, что он может сделать преобразование за 80 тактов.

Поэтому при частоте чипа 16 МГц имеем преобразование за 5 мкс. Для двух каналов 10 мкс.

Может чуть побольше будет, но явно не 60.

 

Вот код для проверки (в atmel studio 6.2)

 

/*
 * AE328.c
 *
 * Created: 16.10.2017 14:43:31
 *  Author: Vladimir
 */ 


#include <avr/io.h>
#include <avr/interrupt.h>

int a = 0;
int b = 0;


ISR (ADC_vect)
{
	++a;
	PORTB = a + ADC;
	ADCSRA |= 1 << ADSC;
}



int main(void)
{
	ADCSRA = 1 << ADEN | 1 << ADSC | 1<< ADIE;
	sei();
	
	
    while(1)
    {
        ++b;
		PORTC = b;
    }
}

и скриншот.

 

Khludenkov
Offline
Зарегистрирован: 11.11.2015

Но это так, в общем виде.

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Круто,  я в шоке....

dmitron1036
Offline
Зарегистрирован: 10.01.2016

Ух жара...

У меня 10 кСэмплов получалось под ардуино ИДЕ. на чём - не помню. Нано наверное.

На чистом Си работать будет конечно на порядок лучше, без костылей то.

------------------

а вообще есть контроллеры и пожирнее.

60 мегагерц тактовая - не предел мечтаний.

Да и 100 кСэмплов - не новость.

--------------------

задача то серьёзная - на R-С цепочке можно реализовать. без АЦП.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Khludenkov пишет:

В докуменации на чип mega328 написано про АЦП, что он может сделать преобразование за 80 тактов.

Укажите пожалуйста страницу, где это написано. Вот даташит.

Только что ведь обсудили все нюансы. 

 

Khludenkov
Offline
Зарегистрирован: 11.11.2015
By default, the successive approximation circuitry requires an input clock frequency between 50kHz and
200kHz to get maximum resolution. If a lower resolution than 10 bits is needed, the input clock frequency
to the ADC can be higher than 200kHz to get a higher sample rate.
 
Насколько уменьшится точность измерения - это уже практика покажет
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Из того же даташита, страница 374, следует что максимальная тактовая  АЦП 1 МГц,  т.е. при кварце 16МГц максимальная скорость преобразования  составит 16/1 x13=208 тактов МК. Причём это УЖЕ с большими потерями качества, т.к. рекомендуемая частота превышена в 5 раз.

Khludenkov
Offline
Зарегистрирован: 11.11.2015

не буду спорить

 

Khludenkov
Offline
Зарегистрирован: 11.11.2015
  1. Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно — он-то и делает открытие.
  2. А. Эйнштейн.