Как отрицательный полупериод синусоиды сделать положительным

Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Михаил_
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Вс янв 06, 2013 03:47:31

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]
Да бывает, просыпаешся, засыпаешь и продолжение сна видишь. Нет не оно.
Реклама
metan
Вымогатель припоя
Сообщения: 593
Зарегистрирован: Ср янв 06, 2010 10:01:46

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение metan »

Михаил_ писал(а): бывает, просыпаешся, засыпаешь и продолжение сна видишь
один профессор рассказывал:
Как-то раз снится мне, что я читаю лекцию. Просыпаюсь, и точно - читаю лекцию :))
Реклама
Михаил_
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Вс янв 06, 2013 03:47:31

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение Михаил_ »

[uquote="mickbell",url="/forum/viewtopic.php?p=4568546#p4568546"]И это - тоже неправда. Я, может быть, и поверил бы, если бы сам не делал на АВРках ничего. Одно из моих последних изделий на АВРках на работе - восьмиканальный измеритель напряжений с внешними АЦП (ибо гальваноразвязка между каналами), измеряющий среднеквадратичные значения напряжений с полосой до 5 кГц и отправляющий измеренные данные по интерфейсу RS-485. В ардуях стоят примерно такие же АВРки.
о[/uquote]
Незнаю о какой скорости речь, у меня её нет. Ардуино нано использую. Сделал как советовали программный выпрямитель сигнала. Работает. Но скорость черепашшья. Подаю на вход ардуино синусоиду с постоянной составляющей в половину напряжения питания. Частота 30 Гц .. и на графике ещё можно увидеть что-то напоминающее полуволны синусоиды выпрямленные.
Изображение

Повыщаю частоту до 50Гц. и ардуино не успевает за сигналом... вижу пики разной амплитуды, и нет ничего похожего на полуволны синусоиды. :dont_know: И это ещё, там нет никакого кода дополнительного, для обнаружения фазы БДГ. Просто код выпрямителя сигнала и вывод полученного результата в монитор порта. Если дополнить код, то всё ещё замедлится.
Изображение
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25292
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение КРАМ »

Может стоит привести тут код?
Реклама
Эиком - электронные компоненты и радиодетали
Михаил_
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Вс янв 06, 2013 03:47:31

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';
Реклама
Аватара пользователя
mickbell
Друг Кота
Сообщения: 16431
Зарегистрирован: Пт мар 30, 2012 05:17:29
Откуда: Екатеринбург

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение mickbell »

Ардуйский код. С функциями, непонятно как и кем написанными. Писать надо самому всё, начиная от инициализации железа. Кстати, что такое t в апострофах?
И хрюкотали зелюки,
Как мюмзики в мове.

На каждый РКН
Найдётся VPN.
Реклама
Михаил_
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Вс янв 06, 2013 03:47:31

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение Михаил_ »

t в апострофах, это я пытался в переменной с именем t, все отрицательные значения перевести в положительные. Наверноге для вас я выкляжу неандертальцем ) Ардуйский.. ну в интернете так учили программы составлять для ардуино. :dont_know: А на каком нужно , на Эльфийском ? :)) Короче видимо нужно всё с нуля начать изучать.

Добавлено 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Гц сигнал искажается, так понимаю ардуино просто не успевает ослеживать синусоиду.

Программно выпрямленный сигнал синусоида частота 10Гц, ещё более менее, но не идеал..
СпойлерИзображение
Частота 20Гц..
СпойлерИзображение
Частота 30Гц..
СпойлерИзображение
Вобщем унылая картина. Непонимаю, как люди на ардуино что-то делают, проекты разные. 20Гц частоту не может даже отобразить. Что я не так делаю ?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25292
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение КРАМ »

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

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение Муркиз »

t = (abs(-t))

А просто t = -t использовать не пробовал ?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25292
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение КРАМ »

[uquote="Муркиз",url="/forum/viewtopic.php?p=4569811#p4569811"]А просто[/uquote]
А "просто" если используется abs(), то не требуется минус перед t и совершенно не нужен if.
Аватара пользователя
Муркиз
Друг Кота
Сообщения: 25926
Зарегистрирован: Пн фев 09, 2009 22:19:49
Откуда: Когда-то был прекрасный город для людей

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение Муркиз »

Ну зачем так сразу в лоб ? Это надо было оставить на второе... и на компот...
А может быть - и сам догадался бы

Как и то, что некоторые трансляторы понимают запись t=|t| как t=abs(t)
Насчёт каввчек- не встречал.
Михаил_
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Вс янв 06, 2013 03:47:31

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение Михаил_ »

[uquote="Муркиз",url="/forum/viewtopic.php?p=4569811#p4569811"]t = (abs(-t))
А просто t = -t использовать не пробовал ?[/uquote]
Пробовал, не работает.

[uquote="КРАМ",url="/forum/viewtopic.php?p=4569788#p4569788"]Вы как себе представляете вывод данных с Ардуино? Святым духом?
У вас скорость вывода 9600. ДЕВЯТЬ ТЫСЯЧ ШЕСТЬСОТ БИТ В СЕКУНДУ, Карл!!! :facepalm:
Вы выводите двухбайтовые числа. То есть скорость вывода ОДНОЙ ТОЧКИ составляет примерно 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);

}
При 50Гц входном сигнале, на выходе выпрямленный...
СпойлерИзображение
При 150Гц входном сигнале, на выходе выпрямленный...
СпойлерИзображение
При 200Гц..
СпойлерИзображение
Вместо синуса, подал пилообразный сигнал 50Гц.. на выходе искажения пошли..
СпойлерИзображение
Последний раз редактировалось Михаил_ Пт апр 19, 2024 19:12:13, всего редактировалось 4 раза.
Аватара пользователя
Муркиз
Друг Кота
Сообщения: 25926
Зарегистрирован: Пн фев 09, 2009 22:19:49
Откуда: Когда-то был прекрасный город для людей

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение Муркиз »

Не работает... А перенеси-ка вывод строкою выше...
Михаил_
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Вс янв 06, 2013 03:47:31

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение Михаил_ »

[uquote="Муркиз",url="/forum/viewtopic.php?p=4570582#p4570582"]Не работает... А перенеси-ка вывод строкою выше...[/uquote]
Так что ли ?... А смысл ? Не работает выпрямление.
Спойлерint t = 0;

void setup() {
Serial.begin(115200);
}

void loop() {

t = analogRead(A0) - 512;
Serial.println(t);
t = -t;
}
Аватара пользователя
Муркиз
Друг Кота
Сообщения: 25926
Зарегистрирован: Пн фев 09, 2009 22:19:49
Откуда: Когда-то был прекрасный город для людей

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение Муркиз »

График где ?
Михаил_
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Вс янв 06, 2013 03:47:31

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение Михаил_ »

[uquote="Муркиз",url="/forum/viewtopic.php?p=4570608#p4570608"]График где ?[/uquote]
На графике просто синусоида относительно нуля. С положительными и отрицательными полуволнами. Собственно выводиться код который выше вывода, а всё что ниже не отобразиться, результат тех дейсвий, если они есть вообще, не выводится никуда. И какое бы значение переменная t не имела после вывода, она сбрасывается в ноль с каждым началом нового цикла. И что там получаентся мы никогда не увидем, либо вывод нужно разместить в самом низу.
Спойлерint t = 0;

void setup() {
Serial.begin(115200);
}

void loop() {

t = analogRead(A0) - 512;
Serial.println(t);
t = -t;
}
Аватара пользователя
mickbell
Друг Кота
Сообщения: 16431
Зарегистрирован: Пт мар 30, 2012 05:17:29
Откуда: Екатеринбург

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение mickbell »

Опять начинаются капризы. Если сказано "покажи график", надо показать график, а не писать, почему это не сделано.
И хрюкотали зелюки,
Как мюмзики в мове.

На каждый РКН
Найдётся VPN.
Михаил_
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Вс янв 06, 2013 03:47:31

Re: Как отрицательный полупериод синусоиды сделать положител

Сообщение Михаил_ »

Код...
Спойлер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 = (abs(t))
Так всё-таки работает.

А вариант t=-t требуется лишь для оператора if.

Да, программирование тебе надо ещё изучать и изучать. И для начала - на уровне построения алгоритмических конструкций и методов решения задач прикладной математики...
Ответить

Вернуться в «Практика»