Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Ответить

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

Вт апр 16, 2024 12:56:06

Есть советская микросхема К157ДА1. Эта микросхема является двухполуперидным выпрямителем среднеквадратичного переменного напряжения.

Микросхема конечно хорошая для моих целей, но её нет в продаже, это уже антиквариат.

Добавлено after 1 minute 59 seconds:
[uquote="Михаил_",url="/forum/viewtopic.php?p=4568941#p4568941"] "Выхода в атсрал" с соответствующими ощущениями всё-таки не было. Ещё так бывало. Что-то приснилось, но я проснулся, потом подумалось: а что там дальше-то? Опять уснул и увидел продолжение сна, но это уже не оно, как я себе понимаю.

Да бывает, просыпаешся, засыпаешь и продолжение сна видишь. Нет не оно.

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

Вт апр 16, 2024 20:57:35

Михаил_ писал(а): бывает, просыпаешся, засыпаешь и продолжение сна видишь
один профессор рассказывал:
Как-то раз снится мне, что я читаю лекцию. Просыпаюсь, и точно - читаю лекцию :))

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

Ср апр 17, 2024 20:25:33

И это - тоже неправда. Я, может быть, и поверил бы, если бы сам не делал на АВРках ничего. Одно из моих последних изделий на АВРках на работе - восьмиканальный измеритель напряжений с внешними АЦП (ибо гальваноразвязка между каналами), измеряющий среднеквадратичные значения напряжений с полосой до 5 кГц и отправляющий измеренные данные по интерфейсу RS-485. В ардуях стоят примерно такие же АВРки.
о

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

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

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

Ср апр 17, 2024 20:57:04

Может стоит привести тут код?

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

Ср апр 17, 2024 21:29:23

КРАМ, а всё, не работает уже, не выпрямляет. Почему не понимаю. Что я там изменил понятия не имею. работало, а теперь нет. Сейчас код такой...

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: Как отрицательный полупериод синусоиды сделать положител

Ср апр 17, 2024 21:42:27

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

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

Ср апр 17, 2024 23:12:11

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Гц частоту не может даже отобразить. Что я не так делаю ?

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

Чт апр 18, 2024 04:47:14

Serial.begin(9600);
с повышением частоты более 10Гц сигнал искажается
Непонимаю, как люди на ардуино что-то делают, проекты разные. 20Гц частоту не может даже отобразить. Что я не так делаю ?

Люди, когда делают проекты на Ардуине, пытаются думать как работает код. Поэтому у них получается то, о чем они думают.
Вы как себе представляете вывод данных с Ардуино? Святым духом?
У вас скорость вывода 9600. ДЕВЯТЬ ТЫСЯЧ ШЕСТЬСОТ БИТ В СЕКУНДУ, Карл!!! :facepalm:
Вы выводите двухбайтовые числа. То есть скорость вывода ОДНОЙ ТОЧКИ составляет примерно 480 слов/сек.
Даже если кроме вывода ничего не делать - выводить синус из таблицы, то и тогда синусоида 20 Гц будет состоять всего из 24 точек.
А еще есть остальное. И это остальное - такое же блокирующее исполнение, как и вывод двух байт подряд.
Не нужно использовать даже Ардуино как утюг. Типа включил - греет. Это не утюг.
:)

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

Чт апр 18, 2024 07:32:36

t = (abs(-t))

А просто t = -t использовать не пробовал ?

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

Чт апр 18, 2024 07:57:32

А просто

А "просто" если используется abs(), то не требуется минус перед t и совершенно не нужен if.

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

Чт апр 18, 2024 08:00:55

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

Как и то, что некоторые трансляторы понимают запись t=|t| как t=abs(t)
Насчёт каввчек- не встречал.

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

Пт апр 19, 2024 18:26:48

t = (abs(-t))
А просто t = -t использовать не пробовал ?

Пробовал, не работает.

Вы как себе представляете вывод данных с Ардуино? Святым духом?
У вас скорость вывода 9600. ДЕВЯТЬ ТЫСЯЧ ШЕСТЬСОТ БИТ В СЕКУНДУ, Карл!!! :facepalm:
Вы выводите двухбайтовые числа. То есть скорость вывода ОДНОЙ ТОЧКИ составляет примерно 480 слов/сек.

Именно так и представляю. Перкрестил ардуино, святой водой побрызгал.. произнёс.. с Богом, Аллилуя... и понеслась :))
Поздно было, спать ложится собирался уже, по быстрому что-то там менял особо не задумываясь Когда лёг, думал, что возможно нужно поменять скорость с 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 раз(а).

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

Пт апр 19, 2024 18:56:35

Не работает... А перенеси-ка вывод строкою выше...

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

Пт апр 19, 2024 19:08:13

Не работает... А перенеси-ка вывод строкою выше...

Так что ли ?... А смысл ? Не работает выпрямление.
Спойлерint t = 0;

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

void loop() {

t = analogRead(A0) - 512;
Serial.println(t);
t = -t;
}

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

Пт апр 19, 2024 19:45:38

График где ?

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

Пт апр 19, 2024 20:29:16

График где ?

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

Спойлерint t = 0;

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

void loop() {

t = analogRead(A0) - 512;
Serial.println(t);
t = -t;
}

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

Пт апр 19, 2024 22:20:44

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

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

Пт апр 19, 2024 23:36:46

Код...
Спойлерint t = 0;

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

void loop() {

t = analogRead(A0) - 512;
Serial.println(t);
t = -t;
}


График...
СпойлерИзображение

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

Сб апр 20, 2024 05:12:46

Проколы на "пиле" - это переполнение.

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

Сб апр 20, 2024 06:03:19

Замечено такое изменение
t = (abs(t))


Так всё-таки работает.

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

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