Как отрицательный полупериод синусоиды сделать положительным
Re: Как отрицательный полупериод синусоиды сделать положител
[uquote="vishne-aleksandr",url="/forum/viewtopic.php?p=4568520#p4568520"]Есть советская микросхема К157ДА1. Эта микросхема является двухполуперидным выпрямителем среднеквадратичного переменного напряжения.[/uquote]
Микросхема конечно хорошая для моих целей, но её нет в продаже, это уже антиквариат.
Добавлено after 1 minute 59 seconds:
[uquote="mickbell",url="/forum/viewtopic.php?p=4569004#p4569004"][uquote="Михаил_",url="/forum/viewtopic.php?p=4568941#p4568941"] "Выхода в атсрал" с соответствующими ощущениями всё-таки не было. Ещё так бывало. Что-то приснилось, но я проснулся, потом подумалось: а что там дальше-то? Опять уснул и увидел продолжение сна, но это уже не оно, как я себе понимаю.[/uquote]
Да бывает, просыпаешся, засыпаешь и продолжение сна видишь. Нет не оно.
Микросхема конечно хорошая для моих целей, но её нет в продаже, это уже антиквариат.
Добавлено after 1 minute 59 seconds:
[uquote="mickbell",url="/forum/viewtopic.php?p=4569004#p4569004"][uquote="Михаил_",url="/forum/viewtopic.php?p=4568941#p4568941"] "Выхода в атсрал" с соответствующими ощущениями всё-таки не было. Ещё так бывало. Что-то приснилось, но я проснулся, потом подумалось: а что там дальше-то? Опять уснул и увидел продолжение сна, но это уже не оно, как я себе понимаю.[/uquote]
Да бывает, просыпаешся, засыпаешь и продолжение сна видишь. Нет не оно.
- Реклама
Re: Как отрицательный полупериод синусоиды сделать положител
один профессор рассказывал:Михаил_ писал(а): бывает, просыпаешся, засыпаешь и продолжение сна видишь
Как-то раз снится мне, что я читаю лекцию. Просыпаюсь, и точно - читаю лекцию
Re: Как отрицательный полупериод синусоиды сделать положител
[uquote="mickbell",url="/forum/viewtopic.php?p=4568546#p4568546"]И это - тоже неправда. Я, может быть, и поверил бы, если бы сам не делал на АВРках ничего. Одно из моих последних изделий на АВРках на работе - восьмиканальный измеритель напряжений с внешними АЦП (ибо гальваноразвязка между каналами), измеряющий среднеквадратичные значения напряжений с полосой до 5 кГц и отправляющий измеренные данные по интерфейсу RS-485. В ардуях стоят примерно такие же АВРки.
о[/uquote]
Незнаю о какой скорости речь, у меня её нет. Ардуино нано использую. Сделал как советовали программный выпрямитель сигнала. Работает. Но скорость черепашшья. Подаю на вход ардуино синусоиду с постоянной составляющей в половину напряжения питания. Частота 30 Гц .. и на графике ещё можно увидеть что-то напоминающее полуволны синусоиды выпрямленные.

Повыщаю частоту до 50Гц. и ардуино не успевает за сигналом... вижу пики разной амплитуды, и нет ничего похожего на полуволны синусоиды.
И это ещё, там нет никакого кода дополнительного, для обнаружения фазы БДГ. Просто код выпрямителя сигнала и вывод полученного результата в монитор порта. Если дополнить код, то всё ещё замедлится.

о[/uquote]
Незнаю о какой скорости речь, у меня её нет. Ардуино нано использую. Сделал как советовали программный выпрямитель сигнала. Работает. Но скорость черепашшья. Подаю на вход ардуино синусоиду с постоянной составляющей в половину напряжения питания. Частота 30 Гц .. и на графике ещё можно увидеть что-то напоминающее полуволны синусоиды выпрямленные.

Повыщаю частоту до 50Гц. и ардуино не успевает за сигналом... вижу пики разной амплитуды, и нет ничего похожего на полуволны синусоиды.

- КРАМ
- Друг Кота
- Сообщения: 25292
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Как отрицательный полупериод синусоиды сделать положител
Может стоит привести тут код?
Re: Как отрицательный полупериод синусоиды сделать положител
КРАМ, а всё, не работает уже, не выпрямляет. Почему не понимаю. Что я там изменил понятия не имею. работало, а теперь нет. Сейчас код такой...
int t = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
t = analogRead(A0) - 512;
if (t < 0) {
t = 't';
}
Serial.println(t);
}
Подозреваю что эта часть неправильная.. t = 't';
int t = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
t = analogRead(A0) - 512;
if (t < 0) {
t = 't';
}
Serial.println(t);
}
Подозреваю что эта часть неправильная.. t = 't';
- Реклама
Re: Как отрицательный полупериод синусоиды сделать положител
Ардуйский код. С функциями, непонятно как и кем написанными. Писать надо самому всё, начиная от инициализации железа. Кстати, что такое t в апострофах?
И хрюкотали зелюки,
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.
Re: Как отрицательный полупериод синусоиды сделать положител
t в апострофах, это я пытался в переменной с именем t, все отрицательные значения перевести в положительные. Наверноге для вас я выкляжу неандертальцем ) Ардуйский.. ну в интернете так учили программы составлять для ардуино.
А на каком нужно , на Эльфийском ?
Короче видимо нужно всё с нуля начать изучать.
Добавлено after 1 hour 14 minutes 19 seconds:
Re: Как отрицательный полупериод синусоиды сделать положительным
Разобрался. заработало. Выпрямляет сигнал. Функция abs() возвращает модуль передаваемого числа. Код получается таким...
void setup() {
Serial.begin(9600);
}
void loop() {
t = analogRead(A0) - 512;
if (t < 0) {
t = (abs(-t));;
}
Serial.println(t);
}
Но всё равно фигня получается, с повышением частоты более 10Гц сигнал искажается, так понимаю ардуино просто не успевает ослеживать синусоиду.
Программно выпрямленный сигнал синусоида частота 10Гц, ещё более менее, но не идеал..
Частота 20Гц..
Частота 30Гц..
Вобщем унылая картина. Непонимаю, как люди на ардуино что-то делают, проекты разные. 20Гц частоту не может даже отобразить. Что я не так делаю ?
Добавлено after 1 hour 14 minutes 19 seconds:
Re: Как отрицательный полупериод синусоиды сделать положительным
Разобрался. заработало. Выпрямляет сигнал. Функция abs() возвращает модуль передаваемого числа. Код получается таким...
Спойлер
int t = 0;void setup() {
Serial.begin(9600);
}
void loop() {
t = analogRead(A0) - 512;
if (t < 0) {
t = (abs(-t));;
}
Serial.println(t);
}
Программно выпрямленный сигнал синусоида частота 10Гц, ещё более менее, но не идеал..
Спойлер

Спойлер

Спойлер

- КРАМ
- Друг Кота
- Сообщения: 25292
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Как отрицательный полупериод синусоиды сделать положител
[uquote="Михаил_",url="/forum/viewtopic.php?p=4569748#p4569748"]Serial.begin(9600);
с повышением частоты более 10Гц сигнал искажается
Непонимаю, как люди на ардуино что-то делают, проекты разные. 20Гц частоту не может даже отобразить. Что я не так делаю ?[/uquote]
Люди, когда делают проекты на Ардуине, пытаются думать как работает код. Поэтому у них получается то, о чем они думают.
Вы как себе представляете вывод данных с Ардуино? Святым духом?
У вас скорость вывода 9600. ДЕВЯТЬ ТЫСЯЧ ШЕСТЬСОТ БИТ В СЕКУНДУ, Карл!!!
Вы выводите двухбайтовые числа. То есть скорость вывода ОДНОЙ ТОЧКИ составляет примерно 480 слов/сек.
Даже если кроме вывода ничего не делать - выводить синус из таблицы, то и тогда синусоида 20 Гц будет состоять всего из 24 точек.
А еще есть остальное. И это остальное - такое же блокирующее исполнение, как и вывод двух байт подряд.
Не нужно использовать даже Ардуино как утюг. Типа включил - греет. Это не утюг.

с повышением частоты более 10Гц сигнал искажается
Непонимаю, как люди на ардуино что-то делают, проекты разные. 20Гц частоту не может даже отобразить. Что я не так делаю ?[/uquote]
Люди, когда делают проекты на Ардуине, пытаются думать как работает код. Поэтому у них получается то, о чем они думают.
Вы как себе представляете вывод данных с Ардуино? Святым духом?
У вас скорость вывода 9600. ДЕВЯТЬ ТЫСЯЧ ШЕСТЬСОТ БИТ В СЕКУНДУ, Карл!!!
Вы выводите двухбайтовые числа. То есть скорость вывода ОДНОЙ ТОЧКИ составляет примерно 480 слов/сек.
Даже если кроме вывода ничего не делать - выводить синус из таблицы, то и тогда синусоида 20 Гц будет состоять всего из 24 точек.
А еще есть остальное. И это остальное - такое же блокирующее исполнение, как и вывод двух байт подряд.
Не нужно использовать даже Ардуино как утюг. Типа включил - греет. Это не утюг.
- Муркиз
- Друг Кота
- Сообщения: 25926
- Зарегистрирован: Пн фев 09, 2009 22:19:49
- Откуда: Когда-то был прекрасный город для людей
Re: Как отрицательный полупериод синусоиды сделать положител
t = (abs(-t))
А просто t = -t использовать не пробовал ?
А просто t = -t использовать не пробовал ?
- КРАМ
- Друг Кота
- Сообщения: 25292
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Как отрицательный полупериод синусоиды сделать положител
[uquote="Муркиз",url="/forum/viewtopic.php?p=4569811#p4569811"]А просто[/uquote]
А "просто" если используется abs(), то не требуется минус перед t и совершенно не нужен if.
А "просто" если используется abs(), то не требуется минус перед t и совершенно не нужен if.
- Муркиз
- Друг Кота
- Сообщения: 25926
- Зарегистрирован: Пн фев 09, 2009 22:19:49
- Откуда: Когда-то был прекрасный город для людей
Re: Как отрицательный полупериод синусоиды сделать положител
Ну зачем так сразу в лоб ? Это надо было оставить на второе... и на компот...
А может быть - и сам догадался бы
Как и то, что некоторые трансляторы понимают запись t=|t| как t=abs(t)
Насчёт каввчек- не встречал.
А может быть - и сам догадался бы
Как и то, что некоторые трансляторы понимают запись t=|t| как t=abs(t)
Насчёт каввчек- не встречал.
Re: Как отрицательный полупериод синусоиды сделать положител
[uquote="Муркиз",url="/forum/viewtopic.php?p=4569811#p4569811"]t = (abs(-t))
А просто t = -t использовать не пробовал ?[/uquote]
Пробовал, не работает.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4569788#p4569788"]Вы как себе представляете вывод данных с Ардуино? Святым духом?
У вас скорость вывода 9600. ДЕВЯТЬ ТЫСЯЧ ШЕСТЬСОТ БИТ В СЕКУНДУ, Карл!!!
Вы выводите двухбайтовые числа. То есть скорость вывода ОДНОЙ ТОЧКИ составляет примерно 480 слов/сек.[/uquote]
Именно так и представляю. Перкрестил ардуино, святой водой побрызгал.. произнёс.. с Богом, Аллилуя... и понеслась
Поздно было, спать ложится собирался уже, по быстрому что-то там менял особо не задумываясь Когда лёг, думал, что возможно нужно поменять скорость с 9600 на большую.
Поставил Serial.begin(115200). Стало немного лучше, но сигнал выпрямленный почему то над 0 висит. Видимо скорости всё же не хватает. Хотя для моих целей, с натяжкой, пойдёт. Частоты мозга максимум до 30Гц. Но что там будет со коростью кода ещё кода добавлю, не известно.
В итоге получилась такая картина...
Код..
void setup() {
Serial.begin(115200);
}
void loop() {
t = analogRead(A0) - 512;
t = (abs(t));;
Serial.println(t);
}
При 50Гц входном сигнале, на выходе выпрямленный...
При 150Гц входном сигнале, на выходе выпрямленный...
При 200Гц..
Вместо синуса, подал пилообразный сигнал 50Гц.. на выходе искажения пошли..

А просто t = -t использовать не пробовал ?[/uquote]
Пробовал, не работает.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4569788#p4569788"]Вы как себе представляете вывод данных с Ардуино? Святым духом?
У вас скорость вывода 9600. ДЕВЯТЬ ТЫСЯЧ ШЕСТЬСОТ БИТ В СЕКУНДУ, Карл!!!
Вы выводите двухбайтовые числа. То есть скорость вывода ОДНОЙ ТОЧКИ составляет примерно 480 слов/сек.[/uquote]
Именно так и представляю. Перкрестил ардуино, святой водой побрызгал.. произнёс.. с Богом, Аллилуя... и понеслась
Поздно было, спать ложится собирался уже, по быстрому что-то там менял особо не задумываясь Когда лёг, думал, что возможно нужно поменять скорость с 9600 на большую.
Поставил Serial.begin(115200). Стало немного лучше, но сигнал выпрямленный почему то над 0 висит. Видимо скорости всё же не хватает. Хотя для моих целей, с натяжкой, пойдёт. Частоты мозга максимум до 30Гц. Но что там будет со коростью кода ещё кода добавлю, не известно.
В итоге получилась такая картина...
Код..
Спойлер
int t = 0;void setup() {
Serial.begin(115200);
}
void loop() {
t = analogRead(A0) - 512;
t = (abs(t));;
Serial.println(t);
}
Спойлер

Спойлер

Спойлер

Спойлер

Последний раз редактировалось Михаил_ Пт апр 19, 2024 19:12:13, всего редактировалось 4 раза.
- Муркиз
- Друг Кота
- Сообщения: 25926
- Зарегистрирован: Пн фев 09, 2009 22:19:49
- Откуда: Когда-то был прекрасный город для людей
Re: Как отрицательный полупериод синусоиды сделать положител
Не работает... А перенеси-ка вывод строкою выше...
Re: Как отрицательный полупериод синусоиды сделать положител
[uquote="Муркиз",url="/forum/viewtopic.php?p=4570582#p4570582"]Не работает... А перенеси-ка вывод строкою выше...[/uquote]
Так что ли ?... А смысл ? Не работает выпрямление.
void setup() {
Serial.begin(115200);
}
void loop() {
t = analogRead(A0) - 512;
Serial.println(t);
t = -t;
}
Так что ли ?... А смысл ? Не работает выпрямление.
Спойлер
int t = 0;void setup() {
Serial.begin(115200);
}
void loop() {
t = analogRead(A0) - 512;
Serial.println(t);
t = -t;
}
Re: Как отрицательный полупериод синусоиды сделать положител
[uquote="Муркиз",url="/forum/viewtopic.php?p=4570608#p4570608"]График где ?[/uquote]
На графике просто синусоида относительно нуля. С положительными и отрицательными полуволнами. Собственно выводиться код который выше вывода, а всё что ниже не отобразиться, результат тех дейсвий, если они есть вообще, не выводится никуда. И какое бы значение переменная t не имела после вывода, она сбрасывается в ноль с каждым началом нового цикла. И что там получаентся мы никогда не увидем, либо вывод нужно разместить в самом низу.
void setup() {
Serial.begin(115200);
}
void loop() {
t = analogRead(A0) - 512;
Serial.println(t);
t = -t;
}
На графике просто синусоида относительно нуля. С положительными и отрицательными полуволнами. Собственно выводиться код который выше вывода, а всё что ниже не отобразиться, результат тех дейсвий, если они есть вообще, не выводится никуда. И какое бы значение переменная t не имела после вывода, она сбрасывается в ноль с каждым началом нового цикла. И что там получаентся мы никогда не увидем, либо вывод нужно разместить в самом низу.
Спойлер
int t = 0;void setup() {
Serial.begin(115200);
}
void loop() {
t = analogRead(A0) - 512;
Serial.println(t);
t = -t;
}
Re: Как отрицательный полупериод синусоиды сделать положител
Опять начинаются капризы. Если сказано "покажи график", надо показать график, а не писать, почему это не сделано.
И хрюкотали зелюки,
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.
Как мюмзики в мове.
На каждый РКН
Найдётся VPN.
Re: Как отрицательный полупериод синусоиды сделать положител
Код...
void setup() {
Serial.begin(115200);
}
void loop() {
t = analogRead(A0) - 512;
Serial.println(t);
t = -t;
}
График...

Спойлер
int t = 0;void setup() {
Serial.begin(115200);
}
void loop() {
t = analogRead(A0) - 512;
Serial.println(t);
t = -t;
}
Спойлер

- КРАМ
- Друг Кота
- Сообщения: 25292
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Как отрицательный полупериод синусоиды сделать положител
Проколы на "пиле" - это переполнение.
- Муркиз
- Друг Кота
- Сообщения: 25926
- Зарегистрирован: Пн фев 09, 2009 22:19:49
- Откуда: Когда-то был прекрасный город для людей
Re: Как отрицательный полупериод синусоиды сделать положител
Замечено такое изменение
А вариант t=-t требуется лишь для оператора if.
Да, программирование тебе надо ещё изучать и изучать. И для начала - на уровне построения алгоритмических конструкций и методов решения задач прикладной математики...
Так всё-таки работает.t = (abs(t))
А вариант t=-t требуется лишь для оператора if.
Да, программирование тебе надо ещё изучать и изучать. И для начала - на уровне построения алгоритмических конструкций и методов решения задач прикладной математики...


