как выводить напряжение с 9-го пина в последовательный порт в этом примере?

andrrpetr
Offline
Зарегистрирован: 27.11.2016

как выводить напряжение с 9-го пина в последовательный порт (с Serial.println())?

void setup()
{
pinMode(9, OUTPUT);
}
void loop()
{
analogWrite(9,0);
delay(1000);
analogWrite(9,10);
delay(1000);
analogWrite(9,40);
delay(1000);
analogWrite(9, 100 );
delay(1000);
analogWrite(9,40);
delay(1000);
analogWrite(9,10);
delay(1000);
}
 
andrrpetr
Offline
Зарегистрирован: 27.11.2016

это можно сделать?

strarbit
Offline
Зарегистрирован: 12.06.2016
andrrpetr
Offline
Зарегистрирован: 27.11.2016

пробовал с analogWrite, видимо не то, не получается

какую строчку кода надо написать? 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

если имеете желание посмотреть, какое действительное напряжение на выходе шим, импульсы надо продифференцировать, включив простейшую RC цепь и уже напряжение после этой цепи мерять, подав его на аналоговый вход  к примеру A1, измерили - выводите в порт

andrrpetr
Offline
Зарегистрирован: 27.11.2016

аа, то есть надо всё равно что-то подать на один из анологовых входов (А0- А5) и потом с него только можно считывать? т.е. иначе никак?

т.е. напрямую считывать что-то с 9-го пина и показать это в seral.println не получится?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andrrpetr пишет:

аа, то есть надо всё равно что-то подать на один из анологовых входов (А0- А5) и потом с него только можно считывать? т.е. иначе никак?

т.е. напрямую считывать что-то с 9-го пина и показать это в seral.println не получится?

Напрямую там может быть или ноль или единица (как карта ляжет), а вот после диф. цепи, то да, там накапливающееся на конденсаторе напряжение
 

int sensorPin = A1;  
int sensorValue = 0; 

void setup() {
  pinMode(9, OUTPUT);
  Serial.begin(9600);
  Serial.println("\nOUTPUT Vdiff-from PORT-9");

}

void loop() {
analogWrite(9,0);
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
delay(1000);
analogWrite(9,10);
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
delay(1000);
analogWrite(9,40);
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
delay(1000);
analogWrite(9, 100 );
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
delay(1000);
analogWrite(9,40);
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
delay(1000);
analogWrite(9,10);
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);

}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Взял простейшую цепь 10k-10k и конденсатор 10000 заряжаем через 10к разряжаем аналогично, хотя через открытый выход, разряжаем через 5к получается )))

 

То-есть, диф цепь надо рассчитать на частоту ШИМ тогда возможно будет счастье

andrrpetr
Offline
Зарегистрирован: 27.11.2016

спасибо большое )

"какое действительное напряжение на выходе шим, импульсы надо продифференцировать, включив простейшую RC цепь и уже напряжение после этой цепи мерять, "

здесь вот совсем непонятно ) насчет "дифференципования"

ШИМ знаю что такое -- меняешь скважность получаешь сигнал нужного уроня,

а вот дальше мне непонятно что нужно сделать и как включить"простейшую RC цепь"

andrrpetr
Offline
Зарегистрирован: 27.11.2016

только сейчас увидел этот ответ

я хотел брату показать, что можно всё легко считывать при мигающей лампочке (LED)

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

спасибо ) 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andrrpetr пишет:

"какое действительное напряжение на выходе шим, импульсы надо продифференцировать, включив простейшую RC цепь и уже напряжение после этой цепи мерять, "

здесь вот совсем непонятно ) насчет "дифференципования"

И правильно, что непонятно.

В посте №4 ошибка. Читать нужно "проинтегрировать".

Цитата:

ШИМ знаю что такое -- меняешь скважность получаешь сигнал нужного уроня,

Выходит, не знаете.

Уровня там только два: 0 и напряжение питания (обычно 5В). Соответственно, и прочитать из порта можно только один из этих двух уровней с различной вероятностью.

Цитата:

а вот дальше мне непонятно что нужно сделать и как включить"простейшую RC цепь"

А самостоятельно найти никак? https://ru.wikipedia.org/wiki/RC-%D1%86%D0%B5%D0%BF%D1%8C

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

да просто всё )))
с 9 вывода на вывод A1 сопротивление 10 килоом, с вывода A1 на вывод GND конденсатор 3.3 мкф (взял какой лежал на столе)
и уже почти правильно получается, разброс небольшой

Здесь есть специалисты, надеюсь смогут подсказать, какие данные RC цепи должны быть...

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а я их всегда путаю (в названиях) ))) когда свайный дизель-молот вгоняет сваи с усилием тысячи тонн и так целый день,что интегрировать, что дифференцировать всё равно )))
Но замечание верное

Кстати, а какова частота этого ШИМ и какова должна быть ПРАВИЛЬНАЯ ЦЕПЬ? В значениях

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

Здесь есть специалисты, надеюсь смогут подсказать, какие данные RC цепи должны быть...

Принцип простой: постоянная времени RC-цепи должна быть намного больше, чем период ШИМ.

Если "намного" принять за 100 раз, то RC ~= 200мс, что достигается, например, при 10к и 20мкФ.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andriano пишет:

ua6em пишет:

Здесь есть специалисты, надеюсь смогут подсказать, какие данные RC цепи должны быть...

Принцип простой: постоянная времени RC-цепи должна быть намного больше, чем период ШИМ.

Если "намного" принять за 100 раз, то RC ~= 200мс, что достигается, например, при 10к и 20мкФ.

Я интуитивно почти не ошибся ))) взяв 3,3 мкф

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

МНОГО ))) при 33 мкф нет нуля, нее успевает разряжаться

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Частота ШИМ согласно документации Arduino равна 490Гц. Хотя, если исходить из документации AVR и элементарной арифметики, должна быть 1000000/2/1024=488,28125Гц.

При 3.3 мкФ уровень пульсаций и, соответственно, разброс параметров будет в 6 раз больше. Ну а так интуиция, естественно, работает. Более того, как раз в определении параметров интегрирующей цепи, зачастую, номиналы выбираются, исходя именно из интуиции, а не расчета.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

МНОГО ))) при 33 мкф нет нуля, нее успевает разряжаться

Так а чего Вы хотите добиться?

И, кстати, хотелось бы видеть схему, потому как мне крайне сомнительно, что после RC-цепи с постоянной времени 330 мс получается такой большой разброс, как на скриншоте.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andriano пишет:

ua6em пишет:

МНОГО ))) при 33 мкф нет нуля, нее успевает разряжаться

Так а чего Вы хотите добиться?

И, кстати, хотелось бы видеть схему, потому как мне крайне сомнительно, что после RC-цепи с постоянной времени 330 мс получается такой большой разброс, как на скриншоте.

схема - резистор 10 килоом с 9 ноги на ногу А1, с ноги А1 конденсатор сейчас  5 шт по 3,3 мкф на ногу GND
(ноль есть)
Добится соответствия значения передаваемого на ногу 9 ШИМ, значению считываемому ногой А1
0 - 0

10 - 10

....

Это скриншот работы программы поста 6

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Это уже ближе к телу, но всё же не столь точно, как хотелось бы

Программка

int sensorPin = A1;  
int sensorValue = 0; 

void setup() {
  pinMode(9, OUTPUT);
  Serial.begin(9600);
  Serial.println("\nOUTPUT Vdiff-from PORT-9");

}

void loop() {
analogWrite(9,0);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
delay(1000);
analogWrite(9,10);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
delay(1000);
analogWrite(9,40);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
delay(1000);
analogWrite(9, 100 );
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
delay(1000);
analogWrite(9,40);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
delay(1000);
analogWrite(9,10);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));

}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em, чтобы получить вменяемое значение, нужно дать интегратору время установиться. Т.е. после analogWrite нужно подождать време не меншее нескольких постоянных времени RC и только после этого читать значение.

Похоже, у Вас сейчас в строке 13 читается значение, установленное в строке 32, в строке 17 читается установленное в 12 и т.д. Т.е. происходит сдвижка с запаздыванием.

 

PS. И я так и не понял, для чего это все нужно. Не проще ли хранить число, выводимое в analogWrite в переменной (возможно, сделать обертку в виде класса).

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andriano пишет:

ua6em пишет:

МНОГО ))) при 33 мкф нет нуля, нее успевает разряжаться

Так а чего Вы хотите добиться?

И, кстати, хотелось бы видеть схему, потому как мне крайне сомнительно, что после RC-цепи с постоянной времени 330 мс получается такой большой разброс, как на скриншоте.

Да, кстати, раскинул тут мозгами насчёт интегрирующей - дифференцирующей цепи, для цепи разряда получается дифференцирующая!? конденсатор с резистором включен с точностью наоборот, разряд с + конденсатора через резистор, через открытый переход транзистора (при 1 то он закрыт) через GND, получаются совсем иные цепи, отсюда видимо и нессответстве переданных данных с полученным результатом??? а падение на переходе открытого транзистора?
Тема совершенно случайно коснулась будущего моего проекта, АПЧ генератора низких (300Кгц) частот, на XR2206

andrrpetr
Offline
Зарегистрирован: 27.11.2016

PS. И я так и не понял, для чего это все нужно. Не проще ли хранить число, выводимое в analogWrite в переменной (возможно, сделать обертку в виде класса).

я просто хотел брату показать, что меняющийся уровень сигнала можно видеть по освещенности лампочки (LED) и что все значения на лампочке можно легко читать с монитора в цифрах

легко не получается ) покажу ему в цифрах analogWrite на делителе напряджения тогда )

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Перенёс задержки, получил стабильный, но неточный (1-2 единицы) результат...
Вот, задал молодой человек вопрос и вылился он в целое исследование )))
 

int sensorPin = A1;  
int sensorValue = 0; 

void setup() {
  pinMode(9, OUTPUT);
  Serial.begin(9600);
  Serial.println("\nOUTPUT Vdiff-from PORT-9");

}

void loop() {
analogWrite(9,0);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
analogWrite(9,10);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
analogWrite(9,40);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));

analogWrite(9, 100 );
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));

analogWrite(9,40);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));

analogWrite(9,10);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));

}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

Да, кстати, раскинул тут мозгами насчёт интегрирующей - дифференцирующей цепи, для цепи разряда получается дифференцирующая!? конденсатор с резистором включен с точностью наоборот, разряд с + конденсатора через резистор, через открытый переход транзистора (при 1 то он закрыт) через GND, получаются совсем иные цепи, отсюда видимо и нессответстве переданных данных с полученным результатом??? а падение на переходе открытого транзистора?

Отнюдь.

Во-первых, в случае "0" открывается один транзистор, а в слцучсе "1" - другой. Так что в любом варианте один транзистор открыт, другой закрыт.

Во-вторых, вне зависимости от того, в какую сторону течет ток, направление распространения сигнала всегда остается одним и тем же - от входа в кыходу. В данном случае мы подаем сигнал на левый/верхний контакт сопротивления (в соответствии со стандартным изображением RC-цепи), а сниаем с места соединения резистора и конденсатора.

Так что никаких предпосылок, чтобы считать цепь как-то иначе, чем интегрирующую, нет.

Падение на переходе открытого транзистора можно рассматривать либо как уменьшение диапазона изменения сигнала, либо как выходное сопростивление источника сигнала. Суть от этого не меняется.

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andrrpetr пишет:

PS. И я так и не понял, для чего это все нужно. Не проще ли хранить число, выводимое в analogWrite в переменной (возможно, сделать обертку в виде класса).

я просто хотел брату показать, что меняющийся уровень сигнала можно видеть по освещенности лампочки (LED) и что все значения на лампочке можно легко читать с монитора в цифрах

легко не получается ) покажу ему в цифрах analogWrite на делителе напряджения тогда )

цифра хранимая в памяти не есть меняющийся уровень сигнала, в коде работающий скетч, точность на уровнях 50% в районе 1 %, а это очень хорошая точность, сейчас закину пару строк посмотрим 75 и 100% шкалы

andrrpetr
Offline
Зарегистрирован: 27.11.2016

я не использую резистор, а просто подаю 2v  на пин 9 (сигнал=100)

правильно я понимаю схему, которая получается (см. рис.)?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

Перенёс задержки, получил стабильный, но неточный (1-2 единицы) результат...
Вот, задал молодой человек вопрос и вылился он в целое исследование )))

А он в принципе не может быть точным.

Я вот выше писал, допустим, "намного" - это в 100 раз. Откуда сразу друг за другом следует два вывода:

1. Величина пульсаций на выходе интегрирующей цепи составить те самые 1/100 от размаха исходноо сигнала или 1%.

2. Т.к. мы измеряем напряжение в заранее неизвестную фазу пульсаций, то имеем неопределенность в тот самый 1%. Если полная шкала 255, то 1% - это 2-3 единицы сигнала.

Откуда вывод - если хотим увеличить точность, нужно увеличивать постоянную времени RC-цепи.

Следствие: нужно будет пропорционально увеличивать паузу перед началом измерения.

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

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

andrrpetr
Offline
Зарегистрирован: 27.11.2016

я не использую резистор, а просто подаю 2v  на пин 9 (сигнал=100)

правильно я понимаю схему, которая получается (см. рис.)?

R1 - это "сложное сопротивление" (котрое находится внутри платы) после точки A0 до "земли"

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andrrpetr пишет:

я не использую резистор, а просто подаю 2v  на пин 9 (сигнал=100)

правильно я понимаю схему, которая получается (см. рис.)?

Какая схема получается у Вас, знаете только Вы.

Все опубликованные выше рассуждения и измерения (скриншоты) относились к схеме, состоящей только из резистора и конденсатора, т.е. в Вашей схеме необходимо выкинуть нижний резистор и диод.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Вот что получилось, в принципе как в учебнике, в начале шкалы больший разброс значений

Код тут

int sensorPin = A1;  
int sensorValue = 0; 

void setup() {
  pinMode(9, OUTPUT);
  Serial.begin(9600);
  Serial.println("\nOUTPUT Vdiff-from PORT-9");

}

void loop() {
analogWrite(9,0);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
analogWrite(9,10);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
analogWrite(9,40);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));

analogWrite(9, 100 );
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));

analogWrite(9,40);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));

analogWrite(9,10);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));

analogWrite(9,0);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
analogWrite(9,0);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
analogWrite(9,0);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
Serial.println("\nOUTPUT Vout % PORT-9");
analogWrite(9,0);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,100));
analogWrite(9,64);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,100));
analogWrite(9,128);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,100));
analogWrite(9,192);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,100));
analogWrite(9,255);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,100));
analogWrite(9,0);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
analogWrite(9,0);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
analogWrite(9,0);
delay(1000);
sensorValue = analogRead(sensorPin);
Serial.println(map(sensorValue,0,1023,0,255));
}

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andrrpetr пишет:

R1 - это "сложное сопротивление" (котрое находится внутри платы) после точки A0 до "земли"

R1 мы пренебрегаем, т.к. его сопротивление на несколько порядков выше, чем сопростивление, используемое в схеме.

Если уж говорить о более точной эквивалентной схеме, следовало бы в первую очередь учесть внутреннее сопротивление источика сигнала, которое будет подключено между "входом" существующего резистора 10к и "pin9".

Кстати, почему там написано 2V, тогда как должно быть 5V?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Ни диода ни резистора у меня нет, оставьте на схеме резистор 10к и конденсатор, а эквивалентную схему я не знаю, нужно обязательно включить участок схемы выходного пина и участок схемы входного

Я то с ардуиной знаком месяца три как ))) не требуйте от меня невозможного

Инет тормозит, сразу не увидел посты выше, всё верно вами сказанное о точности, но и эта точность для практических случаев достаточна

andrrpetr
Offline
Зарегистрирован: 27.11.2016

у меня к пин 9 подключена лампочка (LED).

я не использую резистор, а просто подаю макс сигнал из расчета -- 2v  на пин 9 (аналоговый сигнал=100)

я пытаюсь разобраться

в частности как устроен аналоговый вход А0?

- дальше ведь (после точки контакта А0) идет т.н. "сложный резистор" R1 и это резистор соединение с землей? или не так?

т.е. R1 - это т.н. "сложное сопротивление" (котрое находится внутри платы) после точки A0 до "земли"

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

 

p.s. добавил внутреннее сопротивление источника Rs

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

Я то с ардуиной знаком месяца три как ))) не требуйте от меня невозможного

Думаю, Ардуино - не показатель. Я сам знаком с ней менее полутора лет, что явно недостаточно для того, чтобы считаться спеуциалистом. Но еще до Ардуино у меня было 20 лет опыта в схемотехнике (правда, это было давно - еще в советские годы).

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

лампочка или светодиод?

я по специальности техник-механик дорожного оборудования )))
Радио - хобби

andrrpetr
Offline
Зарегистрирован: 27.11.2016

светодиод (LED)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andrrpetr пишет:

у меня к пин 9 подключена лампочка (LED).

я не использую резистор, а просто подаю макс сигнал из расчета -- 2v  на пин 9 (сигнал=100)

я пытаюсь разобраться

в частности как устроен аналоговый вход А0?

- дальше ведь (после точки контакта А0) идет т.н. "сложный резистор" R1 и это резистор соединение с землей? или не так?

т.е. R1 - это т.н. "сложное сопротивление" (котрое находится внутри платы) после точки A0 до "земли"

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

Нет, понрмаете Вы неправильно.

Начну с самого начала.

 

1. LED - это светодиод, а не лампочка. Эти устройства радикально различаются своей ВАХ (Вольт-Амперной характеристикой). Разница очень существенная, особенно при использовании ШИМ.

Лампочка представляет собой резистор, сопротивление которого увеличивается по мере разогрева спирали. И это увеличение составляет несколько (до 10) раз. Но в остальном лампочка ведет себя как резистор, т.е. имеет линейную ВАХ: ток прямо пропорционален приложенному напряжению.

Светодиод ведет себя так же, как и обычный диод, т.е. в одну сторону ток не проводи вообще. В другую сторону ток экспоненциально зависит от приложенного напряжения. Экспонента - очень сильная функция, на практике можно считать, что до некоторого напряжения (0.7В для обычного диода и 1.6-3.3В для светодиода в зависимости от цвета) диод ток не проводит вообще, а после превышения этого порогового напряжения ток возрастает неограниченно. Поэтому на практике последовательно со светодиодом всегда ставят токоограничительный резистор.

 

2. Поэтому резистор использовать обязательно! Для экспериментов лучше в диапазоне 200 Ом - 1 кОм.

 

3. Никаких 2В, подаваемых на схему нет и быть не может. Вывод Ардуино может давать только 2 уровня: 0 и 5В.

Но при определенной настройке порта он может попеременно устанавливаться то в состояние "0", то в состояние "1" с некоторой частотой и скважностью.

Нсли бы мы имели настоящую лампочку, т.е. элемент, с линейной ВАХ (т.е. удовлетворяющий закону Ома), то можно было бы говорить об эффективном напряжении 2В, но т.к. светодиод - элемент нелинейный, никакого эффективного напряжения в схеме нет, можно говорить только об эффективном токе. Последний определеятся падением напряжения на диоде, величиной резистора и скважностью.

Кстати, это можно наглядно проверить, подключая и отключая от схемы конденсатор при фиксированном значении скважности. При высокой скважности (скажем, 50 и менее) напряжение на конденсаторе не будет достигать напряжения открывания диода и он не будет светиться (ток будет равным 0). А если конденсатор отключить, то 10-20% времени ток будет протекать через диод и он будет светиться на 10-20% от максимума (средний ток 10-20%).

 

4. Аналоговый вход - это просто вольтметр. Он измеряет напряжение в единицах 1/1023 от опорного напряжения. Имеет высокое входное сопротивление.

 

5. Выходным сопротивлением пина 9 и входным А0 лучше для простоты пренебречь. Необходимо только учитывать, что выходы Ардуино защищены от перегрузки по току - их ток принудительно ограничивается величиной 40 мА. Именно поэтому Вы еще не спалили ни Ардуину, ни светодиод. Максимальный ток среднео светодиода равен 20 мА. Средний ток в Вашем случае 40мА*(100/255)=16мА.

Я крайне не советую использовать выходы Ардуино в предельных режимах.

 

andrrpetr
Offline
Зарегистрирован: 27.11.2016

1. "LED - это светодиод, а не лампочка. Эти устройства радикально различаются своей ВАХ (Вольт-Амперной характеристикой). Разница очень существенная, особенно при использовании ШИМ.

Лампочка представляет собой резистор, сопротивление которого увеличивается по мере разогрева спирали. И это увеличение составляет несколько (до 10) раз. Но в остальном лампочка ведет себя как резистор, т.е. имеет линейную ВАХ: ток прямо пропорционален приложенному напряжению.

Светодиод ведет себя так же, как и обычный диод, т.е. в одну сторону ток не проводи вообще. В другую сторону ток экспоненциально зависит от приложенного напряжения. Экспонента - очень сильная функция, на практике можно считать, что до некоторого напряжения (0.7В для обычного диода и 1.6-3.3В для светодиода в зависимости от цвета) диод ток не проводит вообще, а после превышения этого порогового напряжения ток возрастает неограниченно. Поэтому на практике последовательно со светодиодом всегда ставят токоограничительный резистор."

 

Ток у нас течет в одном направлении, и напряжение всегда либо 0 либо 5 вольт , поэтому я считал, что светдиод одинаково реагирует (будет "выдавать" одно значение сопроивления) на одно и тоже напряжение 5v. (или нет так?) поэтому светодиод (в данном случае, когда без конденсатора) ведёт себя как обычная лампочка. поэтому я и называл его просто "лампочка"

хотя не надо было это делать -- так как при использовании, например, конденсатора (как в нашем случае) - поведение светодиода уже изменится от лампочки

 2. "Поэтому резистор использовать обязательно! Для экспериментов лучше в диапазоне 200 Ом - 1 кОм."

 

Если я устанавливаю analogWrite(9,100) , то зачем мне резистор?

 3. "Никаких 2В, подаваемых на схему нет и быть не может. Вывод Ардуино может давать только 2 уровня: 0 и 5В.

Но при определенной настройке порта он может попеременно устанавливаться то в состояние "0", то в состояние "1" с некоторой частотой и скважностью.

Нсли бы мы имели настоящую лампочку, т.е. элемент, с линейной ВАХ (т.е. удовлетворяющий закону Ома), то можно было бы говорить об эффективном напряжении 2В, но т.к. светодиод - элемент нелинейный, никакого эффективного напряжения в схеме нет, можно говорить только об эффективном токе. Последний определеятся падением напряжения на диоде, величиной резистора и скважностью.

Кстати, это можно наглядно проверить, подключая и отключая от схемы конденсатор при фиксированном значении скважности. При высокой скважности (скажем, 50 и менее) напряжение на конденсаторе не будет достигать напряжения открывания диода и он не будет светиться (ток будет равным 0). А если конденсатор отключить, то 10-20% времени ток будет протекать через диод и он будет светиться на 10-20% от максимума (средний ток 10-20%)."

 

я имел в виду среднее напряжение (можно ли его назвать "эффективным"?)                                                                                        среднее напряжение = (напряжение 5v)*(скважность)

4. "Аналоговый вход - это просто вольтметр. Он измеряет напряжение в единицах 1/1023 от опорного напряжения. Имеет высокое входное сопротивление."

 

я в этом и пытаюсь разобраться, пожалуйста скажите прямо

этот волтметр, он на чём меряет падение напряжение? на т.н. "сложном резисторе" R1 ?

т.е. "высокое входное сопротивление аналогового входа" - это имеется в виду, что у R1  высокое сопротивление?

5. Выходным сопротивлением пина 9 и входным А0 лучше для простоты пренебречь. Необходимо только учитывать, что выходы Ардуино защищены от перегрузки по току - их ток принудительно ограничивается величиной 40 мА. Именно поэтому Вы еще не спалили ни Ардуину, ни светодиод. Максимальный ток среднео светодиода равен 20 мА. Средний ток в Вашем случае 40мА*(100/255)=16мА."

 

да. я понимаю, что у реального источника (который выше 5v) есть внутренее сопртивление и уже на выходе этого реального источника (пин9) мы получаем те 5v и ток 40мА (при коротком замыкании)

 

спасибо что отвечаете

извините ,если я совсем нуб

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ток течёт когда цепь замкнута, нет нагрузки нет тока )))
 

andrrpetr
Offline
Зарегистрирован: 27.11.2016

"без нагрузки" -- я имел  в виду  -- короткое замыкание 

т.е. соединение выхода 5в и GRN -- проводом (с низким (нулевым) сопротивлением)

 

p.s. значит я неправильно выразился (исправил  в тексте)

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Нет. Без нагрузки, это когда к 5V и GND ничего не подсоединено. Цепь не замкнута. Там есть напряжение - 5 вольт, но нет тока - 0 ампер.

andrrpetr
Offline
Зарегистрирован: 27.11.2016

хорошо )

значит я неправильно выразился

я имел в виду "короткое замыкание" 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andrrpetr, пожплуйста, когда цитируете, постарайтесь сделать так, чтобы можно было без труда отличить цитаты от Ваших комментариев или вопросов. Иначе на длинные сообщения отвечать просто невозможно.

andrrpetr пишет:

Ток у нас течет в одном направлении, и напряжение всегда либо 0 либо 5 вольт , поэтому я считал, что светдиод одинаково реагирует (будет "выдавать" одно значение сопроивления) на одно и тоже напряжение 5v. (или нет так?) поэтому светодиод (в данном случае, когда без конденсатора) ведёт себя как обычная лампочка. поэтому я и называл его просто "лампочка"

У светодиода нет сопротивления. Сопротивление - это котангенс угла наклона ВАХ. Если ВАХ - не прямая линия, ни о каком котангенсе речи идти не может. (точнее, у ВАХ может быть касательная - тогда получим дифференциальное сопротивление - но у него другие свойства, пока не будем об этом)

Поэтому светодиод не может и не ведет себя "как обычная лампочка".

Более того, в данном конкретном случае у нас не сгорают одновременно и светодиод и порт Ардуино исключительно потому, что порт имеет защиту по току. А это, помимо прочего, значит, что на самом деле напряжение на светодиоде не 5 В, а меньше - равно прямому напряжению на светодиоде, т.е. 1.6-3.3 В в зависимости от цвета. Посмотрите осциллографом - там максимум намного меньше 5 В.

Цитата:

Если я устанавливаю analogWrite(9,100) , то зачем мне резистор?

Извините, второй раз писать не буду.

Цитата:

я имел в виду среднее напряжение (можно ли его назвать "эффективным"?)                                                                                        среднее напряжение = (напряжение 5v)*(скважность)

Нету там никакого среднеого напряжения. Средний ток - есть, а среднего напряжения - нет.

Конечно, Вы можете сами ввести определение среднего напряжения и им пользоваться, но никакого физического смысла это определение иметь не будет. А потому использовать его бессмысленно.

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

Цитата:

я в этом и пытаюсь разобраться, пожалуйста скажите прямо

этот волтметр, он на чём меряет падение напряжение? на т.н. "сложном резисторе" R1 ?

т.е. "высокое входное сопротивление аналогового входа" - это имеется в виду, что у R1  высокое сопротивление?

Вольтметр измеряет не падение напряжения, а разность потенциалов. Т.е. для его работы никакие "сложные резисторы", равнео как и простые - не нужны.

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

Цитата:

да. я понимаю, что у реального источника (который выше 5v) есть внутренее сопртивление и уже на выходе этого реального источника (пин9) мы получаем те 5v и ток 40мА (при коротком замыкании)

Нет. Из-за защиты по току напряжение существенно меньше 5 В. Только поэтому светодиод еще не сгорел. При попытке подать на него 5В о бы сгорел сразу.

Цитата:

спасибо что отвечаете

извините ,если я совсем нуб

К сожалению, закон Ома - это не фундаментальный закон, а империческое обобщение некоторых экспериментальных данных. Поэтому у него так много исключеий. Поэтому мы так часто говорим, вот здесь так считать можно, а вот здесь - уже нельзя. Но проблема в том, что другого способа расчета электрических цепей кроме закона Ома нет.

Сейчас Вы столкнулись с тем, что, оказывается, выход Ардуины может принимать не только значения 0 и 5В, а еще и другие, которые обусловлены встроенной защитой по току.

Поэтому можно сформулировать так: Ардуино может выдавать на выходах напряжение только либо 0 либо 5 В при условии отсутствия перегрузки по току. Перегрузка по току возникает при токе примерно 40 мА. Если перегрузка возникает, то напряжение на выходе такое, которое обеспечивает через нагрузку ток 40 мА.

andrrpetr
Offline
Зарегистрирован: 27.11.2016
У светодиода нет сопротивления.

Попробую возразить.

1. При добавлении светодиода снижаается ток в цепи.

2. Светлодиод также участвует в разделении общего вольтажа (в разделении ЭДС источника).

Значит светодиод имеет сопротивление.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Попытайтесь измерить это сопротивление, и, исходя из измеренного, что-нибудь посчитать.