Мультиметр на AVR
Мультиметр на AVR
Здравствуйте. Понимаю что тема замусолена, но покоя не дает один вопрос.
Как на мультиметре реализуется смена полярности? + - +, com - com и наоборот + - com, com - +?
Сколько схем любительских не смотрел, везде надо соблюдать полярность на щупах, а про реализацию смены полярности не слово. У меня в голове только идея с диодным мостом и контролем питания на входе моста.
Подскажите пожалуйста, как это можно реализовать?
Спасибо.
Как на мультиметре реализуется смена полярности? + - +, com - com и наоборот + - com, com - +?
Сколько схем любительских не смотрел, везде надо соблюдать полярность на щупах, а про реализацию смены полярности не слово. У меня в голове только идея с диодным мостом и контролем питания на входе моста.
Подскажите пожалуйста, как это можно реализовать?
Спасибо.
- Реклама
Re: Мультиметр на AVR
просто сдвинуть входной сигнал на половину измеряемого диапазона относительно земли.
Добавлено after 1 minute 26 seconds:
вот тут что-то такое обсуждалось:
https://electronix.ru/forum/index.php?a ... 2#comments
Добавлено after 1 minute 26 seconds:
вот тут что-то такое обсуждалось:
https://electronix.ru/forum/index.php?a ... 2#comments
Re: Мультиметр на AVR
[uquote="Martian",url="/forum/viewtopic.php?p=4236955#p4236955"]просто сдвинуть входной сигнал на половину измеряемого диапазона относительно земли.
Добавлено after 1 minute 26 seconds:
вот тут что-то такое обсуждалось:
https://electronix.ru/forum/index.php?a ... 2#comments[/uquote]
Спасибо. Но там как я понял обсуждается измерение 2 х полярного напряжения. А мне интересно, что бы меняя провода на мультиметре относительно "+" появлялся "-" на дисплее. Как это реализовано на заводских мультиметрах?
Добавлено after 1 minute 26 seconds:
вот тут что-то такое обсуждалось:
https://electronix.ru/forum/index.php?a ... 2#comments[/uquote]
Спасибо. Но там как я понял обсуждается измерение 2 х полярного напряжения. А мне интересно, что бы меняя провода на мультиметре относительно "+" появлялся "-" на дисплее. Как это реализовано на заводских мультиметрах?
Re: Мультиметр на AVR
ну дык, это оно и есть.
Предположим, мы решили мерять какое-то напряжение какой-то полярности. Наш АЦП может выдать число от 0 до 255, при измерении напряжения от 0 до 5 вольт.
Смещаем входной сигнал на 2.5 вольта. Теперь просто программа должна также сместить все значения. То есть, если мы получили на АЦП число 127, высвечиваем 0, если меньше 127 - высвечиваем значение напряжения, соответствующее результату АЦП, но со знаком "-" на индикаторе. Если больше 127, то на индикаторе значение = результат AЦП - 127, и без знака "-"
Предположим, мы решили мерять какое-то напряжение какой-то полярности. Наш АЦП может выдать число от 0 до 255, при измерении напряжения от 0 до 5 вольт.
Смещаем входной сигнал на 2.5 вольта. Теперь просто программа должна также сместить все значения. То есть, если мы получили на АЦП число 127, высвечиваем 0, если меньше 127 - высвечиваем значение напряжения, соответствующее результату АЦП, но со знаком "-" на индикаторе. Если больше 127, то на индикаторе значение = результат AЦП - 127, и без знака "-"
Re: Мультиметр на AVR
Прошу прощения, возможно я не правильно изложил свою мысль.
Мне надо :
красный провод(мультиметра) на плюс - на экране плюс;
черный провод(мультиметра) на плюс - на экране минус.
Мне надо :
красный провод(мультиметра) на плюс - на экране плюс;
черный провод(мультиметра) на плюс - на экране минус.
- Реклама
Re: Мультиметр на AVR
выше именно это.
попробую ещё раз.
ещё проще.
у Вас батарейка 1.5 вольта. Вы её подключили к мультиметру, плюс к плюсу, минус к минусу.
Что придёт на AЦП, если вход смещён на 2.5 вольта? Придёт сумма напряжений, 4 вольта.
Теперь перевернули батарейку, её плюс к минусу мультиметра, а минус - к плюсу, как Вы и хотите.
Что придёт на АЦП, если вход смещён на 2.5 вольта? Разница напряжений, 2.5 - 1.5 = 1.
Теперь вопрос: что должен высветить индикатор, если на АЦП пришло 4 и что, если 1?
попробую ещё раз.
ещё проще.
у Вас батарейка 1.5 вольта. Вы её подключили к мультиметру, плюс к плюсу, минус к минусу.
Что придёт на AЦП, если вход смещён на 2.5 вольта? Придёт сумма напряжений, 4 вольта.
Теперь перевернули батарейку, её плюс к минусу мультиметра, а минус - к плюсу, как Вы и хотите.
Что придёт на АЦП, если вход смещён на 2.5 вольта? Разница напряжений, 2.5 - 1.5 = 1.
Теперь вопрос: что должен высветить индикатор, если на АЦП пришло 4 и что, если 1?
Re: Мультиметр на AVR
[uquote="Martian",url="/forum/viewtopic.php?p=4236986#p4236986"]выше именно это.
попробую ещё раз.
ещё проще.
у Вас батарейка 1.5 вольта. Вы её подключили к мультиметру, плюс к плюсу, минус к минусу.
Что придёт на AЦП, если вход смещён на 2.5 вольта? Придёт сумма напряжений, 4 вольта.
Теперь перевернули батарейку, её плюс к минусу мультиметра, а минус - к плюсу, как Вы и хотите.
Что придёт на АЦП, если вход смещён на 2.5 вольта? Разница напряжений, 2.5 - 1.5 = 1.
Теперь вопрос: что должен высветить индикатор, если на АЦП пришло 4 и что, если 1?[/uquote]
Блин- блинский, я понял...
Спасибо огромное, чуток не в том направлении думал.
Добавлено after 1 hour 17 seconds:
примерно так
попробую ещё раз.
ещё проще.
у Вас батарейка 1.5 вольта. Вы её подключили к мультиметру, плюс к плюсу, минус к минусу.
Что придёт на AЦП, если вход смещён на 2.5 вольта? Придёт сумма напряжений, 4 вольта.
Теперь перевернули батарейку, её плюс к минусу мультиметра, а минус - к плюсу, как Вы и хотите.
Что придёт на АЦП, если вход смещён на 2.5 вольта? Разница напряжений, 2.5 - 1.5 = 1.
Теперь вопрос: что должен высветить индикатор, если на АЦП пришло 4 и что, если 1?[/uquote]
Блин- блинский, я понял...
Спасибо огромное, чуток не в том направлении думал.
Добавлено after 1 hour 17 seconds:
примерно так
Re: Мультиметр на AVR
идея то правильная, если мост из мосфетов. а сдвиг уменьшит эффективную разрядность ацп.Bodden писал(а):идея с диодным мостом
Re: Мультиметр на AVR
Здравствуйте друзья.
Попытка реализоваться с мультиметром имеет переменный успех. С одной стороны все получилось, с другой от -36 В. до 0, имеется постоянный коэффициент, уверенная линейность. От 0 до 36 ADC нелинейна, коэффициент постоянно увеличивается. Приходится корректировать на каждые 10 вольт. Предполагаю, что в настоящем железе нелинейность просто зашкалит. Если есть какие нибудь мысли, подскажите пожалуйста.
Добавлено after 5 minutes 4 seconds:
У меня у самого такие варианты:
1. Сделать swap;
2. использовать промышленный ADC;
3. использовать мысль - ><8>
Попытка реализоваться с мультиметром имеет переменный успех. С одной стороны все получилось, с другой от -36 В. до 0, имеется постоянный коэффициент, уверенная линейность. От 0 до 36 ADC нелинейна, коэффициент постоянно увеличивается. Приходится корректировать на каждые 10 вольт. Предполагаю, что в настоящем железе нелинейность просто зашкалит. Если есть какие нибудь мысли, подскажите пожалуйста.
Спойлер
Код: Выделить всё
/*
* Max7219.c
*
* Created: 5/23/2022 3:14:02 PM
* Author : Bodden007
*/
#define F_CPU 8000000L
#include <avr/io.h>
#include <avr/delay.h>
#include <math.h>
#include <avr/interrupt.h>
#define SPI_DDR DDRB
#define SPI_PORT PORTB
#define SPI_SS PB2
#define SPI_MOSI PB3
#define SPI_MISO PB4
#define SPI_SCK PB5
char d[19] ={ //character encoding for a seven-segment indicator
0x7E, //0
0x30, //1
0x6D, //2
0x79, //3
0x33, //4
0x5B, //5
0x5F, //6
0x70, //7
0x7F, //8
0x7B, //9
0x1, //- 10
0x77, //a 11
0x1F, //b 12
0x4E, //c 13
0x3D, //d 14
0x4F, //e 15
0x47, //f 16
0x80, //. 17
0x00 //NON 18
};
int Kfactor (int DataADC)
{
if ((DataADC>=480) && (DataADC<=611)) {DataADC = (DataADC-480)/0.13;}
else
if ((DataADC>611) && (DataADC<=677)) {DataADC = (DataADC-480)/0.131;}
else
if ((DataADC>677) && (DataADC<=743)) {DataADC = (DataADC-480)/0.1315;}
else
if ((DataADC>743) && (DataADC<=809)) {DataADC = (DataADC-480)/0.1316;}
else
if ((DataADC>809) && (DataADC<=875)) {DataADC = (DataADC-480)/0.1316;}
else
if ((DataADC>875) && (DataADC<=955)) {DataADC = (DataADC-480)/0.1319;}
DataADC = DataADC/10;
return DataADC;
}
void Razryd(int CorADC, int *pRazr2, int *pRazr3, int *pRazr4)
{
*pRazr4 = CorADC%10;
*pRazr3 = CorADC%100/10;
*pRazr2 = CorADC%1000/100;
}
ISR(ADC_vect)
{
ADCSRA |=(1<<ADSC);
}
void ADC_init()
{
ADCSRA |=(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|(1<<ADIE)
|(1<<ADPS2)|(1<<ADPS1); //ADC - ON, divider - 64
ADMUX |=(1<<REFS0); //External ION
}
void SPI_init()
{
SPI_DDR = (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS); //setting up MOSI, SCK, SS as outputs
SPI_PORT |=(1<<SPI_SS); //setting SS to 1
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); //through the SPSR register, we configure the hardware SPI
spi(0x0C,0x00); //Disabling indicators
spi(0x09,0x00); //Disabling decoding
spi(0x0A,0x0A); //The intensity of the glow of the indicators
spi(0x0B,0x04); //Number of indicators starting from 0
spi(0x0F,0x00); //Disabling the indicator test
spi(0x0C,0x01); //Enabling indicators
}
void spi(char cmd,char data) //The function of transmitting two 8-bit packets over the SPI protocol
{
SPI_PORT &= ~(1<<SPI_SS); //reset SS to 0
SPDR = cmd; //we send the data to the SPI address
while(!(SPSR&(1<<SPIF))); //we are waiting for the end of sending
SPDR = data; //we send data by SPI data
while(!(SPSR&(1<<SPIF))); //we are waiting for the end of sending
SPI_PORT |= (1<<SPI_SS); //setting SS to 1
}
void Send_SPI(char d[], int Razr1, int Razr2, int Razr3, int Razr4)
{
int Dp = 0x80;
spi(1,d[Razr1]);
spi(2,d[Razr2]);
spi(3,d[Razr3] | Dp);
spi(4,d[Razr4]);
}
void clrdig () //Indicator cleaning function
{
spi(0x01,d[17]);
spi(0x02,d[17]);
spi(0x03,d[17]);
spi(0x04,d[17]);
spi(0x05,d[17]);
}
int main(void)
{
int DataADC = 0;
int CorADC = 0;
int Razr1 = 0;
int Razr2 = 0;
int Razr3 = 0;
int Razr4 = 0;
ADC_init();
sei();
SPI_init();
clrdig(); //Clearing all indicators
while(1){
DataADC = ADC;
if (DataADC <= 2 ){Razr1=10; Razr2=10; Razr3=10; Razr4=10;}
else
if ((DataADC >= 0) && (DataADC < 479)){Razr1=10; CorADC = (480-DataADC)/1.323; Razryd(CorADC, &Razr2, &Razr3, &Razr4);}
else
if (DataADC == 479){Razr1=18; CorADC=0; Razryd(CorADC, &Razr2, &Razr3, &Razr4);}
else
if (DataADC > 955){Razr1=10; Razr2=10; Razr3=10; Razr4=10;}
else
if (DataADC >= 480){Razr1=18; CorADC = Kfactor(DataADC); Razryd(CorADC, &Razr2, &Razr3, &Razr4);}
Send_SPI(d, Razr1, Razr2, Razr3, Razr4);
DataADC = 0;
}
}
У меня у самого такие варианты:
1. Сделать swap;
2. использовать промышленный ADC;
3. использовать мысль - ><8>
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Мультиметр на AVR
поищи "выпрямитель на ОУ"
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: Мультиметр на AVR
Это делается двумя одинаковыми делителями с общей землёй и двумя диодами Шоттки.


Последний раз редактировалось ddr4 Чт июн 09, 2022 20:48:32, всего редактировалось 4 раза.
Re: Мультиметр на AVR
[uquote="><8>",url="/forum/viewtopic.php?p=4239400#p4239400"]если мост из мосфетов. а сдвиг уменьшит эффективную разрядность ацп.[/uquote]
Если мост из MOSFET, то им придётся достаточно сложно управлять.
Сдвиг ничего не уменьшает. Эффективная разрядность AЦП какой была, такой и остаётся.
Если мост из MOSFET, то им придётся достаточно сложно управлять.
Сдвиг ничего не уменьшает. Эффективная разрядность AЦП какой была, такой и остаётся.
Re: Мультиметр на AVR
.
Если нужно отображение минуса на экране при изменении полярности, то используем два АЦП-пина.

Если нужно отображение минуса на экране при изменении полярности, то используем два АЦП-пина.

Re: Мультиметр на AVR
Спасибо, попробую такой вариант
Добавлено after 1 minute 26 seconds:
Программно еще не корректировал. По тестирую.
Программно еще не корректировал. По тестирую.
Re: Мультиметр на AVR
Поигрался от скуки..
- Вложения
-
- Ashampoo_Snap_2022.06.10_19h55m47s_001_.png
- (16.41 КБ) 91 скачивание
Re: Мультиметр на AVR
.
Обновлённый вариант на двух дифф.усилителях, 4-х делителях, и с 4-мя АЦП-пинами.
Положительное входное напряжение на Vin1, Vin2, отрабатывается через АЦП-pin1 и pin2, отрицательное через АЦП-pin-3/4. Смешанное через смешанные состояние АЦП-пинов.

Обновлённый вариант на двух дифф.усилителях, 4-х делителях, и с 4-мя АЦП-пинами.
Положительное входное напряжение на Vin1, Vin2, отрабатывается через АЦП-pin1 и pin2, отрицательное через АЦП-pin-3/4. Смешанное через смешанные состояние АЦП-пинов.

Re: Мультиметр на AVR
Подскажите пожалуйста, для чего задействовали по два пина ADC?
Re: Мультиметр на AVR
1. Положительные входные напряжения на Vin1, Vin2 отрабатываются через АЦП-pin1 и pin2. Но данные АЦП будут перевёрнуты, то есть при Vin1 = 0, регистр АЦП будет выдавать 0xFF, а когда Vin1 = Vmax, то транзистор полностью открыт и pin = 0x00.
2. Отрицательные входное напряжение отрабатывается через АЦП-pin-3 и 4.
3. Смешанное - через смешанные состояние АЦП-пинов.
Пример на Vin1, Vin2 подано (3В, 5В), положительные напряжения, поэтому работает только левый диф.усилитель, начальные значения pin1 = 0xFF, pin2 = 0xFF.
На регистрах АЦП к примеру имеем pin1 = 240, pin2 = 224. Разницу pin1 - pin2 интерпретируем как напряжение между Vin1, Vin2, причём в зависимости от того какой у нас обозначен за чёрный вход (COM), устанавливаем минус на экране.
Тоже самое для отрицательных значений Vin1, Vin2, но там работает правый диф.усилитель pin3, pin4, c начальными значениями пинов (0x00, 0x00).
Смешанные состояния пинов, когда на вход Vin1 подано положительное напряжение на Vin2 отрицательное. Тогда (pin1, pin2, pin3, pin4) = (0xFF, 240, 0x00, 99) => U = k* ((0xFF - 240) + (99 - 0x00) ).
Недостаток такой схемы это настройка, подборка транзисторов с близким КУ и прочее. Положительная сторона схемы, что она почти не потребляет в режиме простоя, в отличии от большинства ОУ.
В данной схеме можно попробовать заменить диф.усилители на ОУ, но так как ОУ имеет только один выход т.е. сразу выдают разницу, то придётся делать двухполярное напряжение.

2. Отрицательные входное напряжение отрабатывается через АЦП-pin-3 и 4.
3. Смешанное - через смешанные состояние АЦП-пинов.
Пример на Vin1, Vin2 подано (3В, 5В), положительные напряжения, поэтому работает только левый диф.усилитель, начальные значения pin1 = 0xFF, pin2 = 0xFF.
На регистрах АЦП к примеру имеем pin1 = 240, pin2 = 224. Разницу pin1 - pin2 интерпретируем как напряжение между Vin1, Vin2, причём в зависимости от того какой у нас обозначен за чёрный вход (COM), устанавливаем минус на экране.
Тоже самое для отрицательных значений Vin1, Vin2, но там работает правый диф.усилитель pin3, pin4, c начальными значениями пинов (0x00, 0x00).
Смешанные состояния пинов, когда на вход Vin1 подано положительное напряжение на Vin2 отрицательное. Тогда (pin1, pin2, pin3, pin4) = (0xFF, 240, 0x00, 99) => U = k* ((0xFF - 240) + (99 - 0x00) ).
Недостаток такой схемы это настройка, подборка транзисторов с близким КУ и прочее. Положительная сторона схемы, что она почти не потребляет в режиме простоя, в отличии от большинства ОУ.
В данной схеме можно попробовать заменить диф.усилители на ОУ, но так как ОУ имеет только один выход т.е. сразу выдают разницу, то придётся делать двухполярное напряжение.



