блок формирования синуса

Создаем свой блок. Вопросы, помощь знатоков.
Ответить
dmitriym73316
Рядовой
Сообщения: 3
Зарегистрирован: 16.09.2021{, 21:02}
Репутация: 0
Имя: дмитрий

блок формирования синуса

#1

Сообщение dmitriym73316 » 20.02.2023{, 20:37}

помогите с созданием блока формирования синуса .не получается самому создать. имеется скетч.
желательно добавить входы en и value.

#include <TimerOne.h>
#include "sineTable.h"

int counter;

void setup() {
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);

Timer1.initialize(100); // 100uS
Timer1.pwm(9, 100);
Timer1.pwm(10, 100);
Timer1.attachInterrupt(sineWave);
}

void loop() {

}

void sineWave() {
counter++;
if(counter == 200) counter = 0;
if (counter < 100) {
Timer1.setPwmDuty(9, sineVal[0][counter]);
Timer1.setPwmDuty(10, 0);
}
else {
Timer1.setPwmDuty(9, 0);
Timer1.setPwmDuty(10, sineVal[0][counter - 100]);
}
}
####################################


#ifndef SINETABLE_H
#define SINETABLE_H

//---- sineTable.h ----

const int sineVal[][100] = {
// Peak Value = 800
{0,25,50,75,100,125,150,175,199,223,247,271,294,318,341,363,385,407,429,450,470,490,510,529,548,566,583,600,616,632,647,662,675,689,701,713,724,734,744,753,761,768,775,781,786,790,794,796,798,800,800,800,798,796,794,790,786,781,775,768,761,753,744,734,724,713,701,689,675,662,647,632,616,600,583,566,548,529,510,490,470,450,429,407,385,363,341,318,294,271,247,223,199,175,150,125,100,75,50,25,},
};


#endif

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

блок формирования синуса

#2

Сообщение Dryundel » 20.02.2023{, 20:55}

dmitriym73316 писал(а):
20.02.2023{, 20:37}
помогите с созданием блока формирования синуса .не получается самому создать. имеется скетч.
желательно добавить входы en и value.
Какой контроллер?
Какой редактор ПБ?
Что именно не получается?

dmitriym73316
Рядовой
Сообщения: 3
Зарегистрирован: 16.09.2021{, 21:02}
Репутация: 0
Имя: дмитрий

блок формирования синуса

#3

Сообщение dmitriym73316 » 23.02.2023{, 19:23}

контроллер mega328,редактор code-basic.не очень разбираюсь в написании кода да и не знаю как прикрутить входы.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

блок формирования синуса

#4

Сообщение Dryundel » 23.02.2023{, 19:35}

dmitriym73316 писал(а):
23.02.2023{, 19:23}
не очень разбираюсь в написании кода да и не знаю как прикрутить входы
Создание пользовательского блока из скетча(примера)
Создание пользовательского блока (Code-Basic) простым языком.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

блок формирования синуса

#5

Сообщение Sancho » 23.02.2023{, 19:39}

dmitriym73316 писал(а):
20.02.2023{, 20:37}
имеется скетч.
желательно добавить входы en и value.
По коду проекта(скетча) всё понятно.
Не понятно, о каком входе value может идти речь?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

dmitriym73316
Рядовой
Сообщения: 3
Зарегистрирован: 16.09.2021{, 21:02}
Репутация: 0
Имя: дмитрий

блок формирования синуса

#6

Сообщение dmitriym73316 » 24.02.2023{, 20:28}

В скетче константа. желательно иметь возможность изменять.
Вложения
Снимок.PNG

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

блок формирования синуса

#7

Сообщение Dryundel » 24.02.2023{, 20:44}

dmitriym73316, это максимальное значение для PWM из массива.
Для того, чтобы изменить его, надо пересчитать весь массив и вставить в скетч.
Со входа блока это не возможно.
Можно сделать несколько массивов и переключаться между ними.
Если сделать через функцию синуса, то такого разрешения не получить. Контроллер не потянет.
2023-02-24_203710.jpg

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

блок формирования синуса

#8

Сообщение Ingwar » 24.02.2023{, 20:55}

Dryundel писал(а):
24.02.2023{, 20:44}
Можно сделать несколько массивов и переключаться между ними.
Если сделать через функцию синуса, то такого разрешения не получить. Контроллер не потянет.
Только если прикрутить делитель/множитель.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

блок формирования синуса

#9

Сообщение Dryundel » 24.02.2023{, 21:34}

Ingwar писал(а):
24.02.2023{, 20:55}
Только если прикрутить делитель/множитель.
К стати, как вариант. Голова! :)

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

блок формирования синуса

#10

Сообщение Sancho » 25.02.2023{, 09:46}

dmitriym73316 писал(а):
24.02.2023{, 20:28}
В скетче константа. желательно иметь возможность изменять.
Dryundel писал(а):
24.02.2023{, 20:44}
Для того, чтобы изменить его, надо пересчитать весь массив и вставить в скетч.
Со входа блока это не возможно.
Ingwar писал(а):
24.02.2023{, 20:55}
Только если прикрутить делитель/множитель.
Описание на русском тут и тут
void pwm(char pin, int duty, long period = -1)
Включает ШИМ на указанном пине. Параметр duty указывает заполнение ШИМ, которое может меняться от 0 до 1023. Да-да, не вся «16-битность» таймера задействована, увы. Параметр period позволяет задать интервал срабатывания, но учтите, что период задаётся не для отдельного пина, а вообще для таймера. То есть, если вы укажете период для 9го пина, то повлияет и на 10й. Неочевидно, да.
Ещё один момент — можно указывать в качестве номера пина 1 и 2 вместо 9 и 10, но здесь тоже нужно быть внимательным: если указать 1 или 2, то это сработает и на Arduino Mega (пины 11 и 12), и на простой Arduino (пины 9 и 10), но если указать 9 или 10, то сработает только на Arduino… Брр, и что только автор библиотеки курил?

void setPwmDuty(char pin, int duty)
Устанавливает заполнение ШИМ для указанного пина, если ШИМ на нём уже включена.
вкратце - 10бит.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

блок формирования синуса

#11

Сообщение Dryundel » 25.02.2023{, 10:04}

Sancho писал(а):
25.02.2023{, 09:46}
вкратце - 10бит.
Нет уж, давай развёрнуто. Что не так?

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

блок формирования синуса

#12

Сообщение Sancho » 25.02.2023{, 10:21}

Dryundel писал(а):
25.02.2023{, 10:04}
Sancho писал(а):
25.02.2023{, 09:46}
вкратце - 10бит.
Нет уж, давай развёрнуто. Что не так?
Имеем 10 бит, 1023. В массиве макс 800. Регулировать "амплитуду" выходного шим - мысль не оправданная, пока, ничем.
Если задача создать управление напряжение/частота, нужно идти на другой мк.

Отправлено спустя 3 минуты 7 секунд:
Кстати, массив обычно уменьшают в два раза, зеркаля от максимума.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

блок формирования синуса

#13

Сообщение Dryundel » 25.02.2023{, 10:29}

Sancho, и в чем мудрость?
Если например идти на ESP32. То там этого всего (что выше) вообще не нужно. Встроенный ЦАП обеспечивает хоть синус хоть пилу нормальную, помоему до 1МГц, если не ошибаюсь.

Отправлено спустя 3 минуты 22 секунды:
Sancho писал(а):
25.02.2023{, 10:24}
Кстати, массив обычно уменьшают в два раза, зеркаля от максимума.
Это тоже понятно.
Пример взят черте откуда. И годится только для понимания и наглядности. Надеюсь топикстартер что то вообще понял из уже сказанного.
:)

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

блок формирования синуса

#14

Сообщение Sancho » 25.02.2023{, 10:38}

Dryundel, Андрей. Думаю, судя по задумке, речь идёт о преобразователе частоты 50 Гц, т.к. 200тактов*100us они и есть.
Для этих целей есть совсем недорогие решения с бонусами на борту - приобретена, летом будем экспериментировать.
СпойлерПоказать
2023-02-25_10-35-50 (2).png
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

блок формирования синуса

#15

Сообщение Dryundel » 25.02.2023{, 10:45}

Sancho, помню эту эпопею.
Нашёл таки нормальный девайс. Решил не откусывать лишние ноги у микросхем. :)
Поздравляю!

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

блок формирования синуса

#16

Сообщение com » 26.02.2023{, 07:20}

Sancho,
Давно лежит такой модуль, руки не дошли до экспериментов, буду ждать ваших))

Ответить

Вернуться в «Разработка пользовательских блоков»