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

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

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

Сообщение dmitriym73316 »

помогите с созданием блока формирования синуса .не получается самому создать. имеется скетч.
желательно добавить входы 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
Полковник
Сообщения: 2392
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение Dryundel »

dmitriym73316 писал(а): 20 фев 2023, 20:37 помогите с созданием блока формирования синуса .не получается самому создать. имеется скетч.
желательно добавить входы en и value.
Какой контроллер?
Какой редактор ПБ?
Что именно не получается?
Выразить благодарность
Мой E-mail: dryundel@flprog.pro
dmitriym73316
Рядовой
Сообщения: 3
Зарегистрирован: 16 сен 2021, 21:02
Имя: дмитрий

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

Сообщение dmitriym73316 »

контроллер mega328,редактор code-basic.не очень разбираюсь в написании кода да и не знаю как прикрутить входы.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2392
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение Dryundel »

dmitriym73316 писал(а): 23 фев 2023, 19:23 не очень разбираюсь в написании кода да и не знаю как прикрутить входы
Создание пользовательского блока из скетча(примера)
Создание пользовательского блока (Code-Basic) простым языком.
Выразить благодарность
Мой E-mail: dryundel@flprog.pro
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение Sancho »

dmitriym73316 писал(а): 20 фев 2023, 20:37 имеется скетч.
желательно добавить входы en и value.
По коду проекта(скетча) всё понятно.
Не понятно, о каком входе value может идти речь?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
dmitriym73316
Рядовой
Сообщения: 3
Зарегистрирован: 16 сен 2021, 21:02
Имя: дмитрий

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

Сообщение dmitriym73316 »

В скетче константа. желательно иметь возможность изменять.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2392
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение Dryundel »

[ref]dmitriym73316[/ref], это максимальное значение для PWM из массива.
Для того, чтобы изменить его, надо пересчитать весь массив и вставить в скетч.
Со входа блока это не возможно.
Можно сделать несколько массивов и переключаться между ними.
Если сделать через функцию синуса, то такого разрешения не получить. Контроллер не потянет.
2023-02-24_203710.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Выразить благодарность
Мой E-mail: dryundel@flprog.pro
Ingwar
Полковник
Сообщения: 1928
Зарегистрирован: 28 окт 2015, 22:47
Откуда: Ленобласть
Имя: Игорь

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

Сообщение Ingwar »

Dryundel писал(а): 24 фев 2023, 20:44 Можно сделать несколько массивов и переключаться между ними.
Если сделать через функцию синуса, то такого разрешения не получить. Контроллер не потянет.
Только если прикрутить делитель/множитель.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2392
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение Dryundel »

Ingwar писал(а): 24 фев 2023, 20:55 Только если прикрутить делитель/множитель.
К стати, как вариант. Голова! :)
Выразить благодарность
Мой E-mail: dryundel@flprog.pro
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение Sancho »

dmitriym73316 писал(а): 24 фев 2023, 20:28 В скетче константа. желательно иметь возможность изменять.
Dryundel писал(а): 24 фев 2023, 20:44 Для того, чтобы изменить его, надо пересчитать весь массив и вставить в скетч.
Со входа блока это не возможно.
Ingwar писал(а): 24 фев 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
Полковник
Сообщения: 2392
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение Dryundel »

Sancho писал(а): 25 фев 2023, 09:46 вкратце - 10бит.
Нет уж, давай развёрнуто. Что не так?
Выразить благодарность
Мой E-mail: dryundel@flprog.pro
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение Sancho »

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

Отправлено спустя 3 минуты 7 секунд:
Кстати, массив обычно уменьшают в два раза, зеркаля от максимума.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2392
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение Dryundel »

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

Отправлено спустя 3 минуты 22 секунды:
Sancho писал(а): 25 фев 2023, 10:24 Кстати, массив обычно уменьшают в два раза, зеркаля от максимума.
Это тоже понятно.
Пример взят черте откуда. И годится только для понимания и наглядности. Надеюсь топикстартер что то вообще понял из уже сказанного.
:)
Выразить благодарность
Мой E-mail: dryundel@flprog.pro
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение Sancho »

[ref=#ff8000]Dryundel[/ref], Андрей. Думаю, судя по задумке, речь идёт о преобразователе частоты 50 Гц, т.к. 200тактов*100us они и есть.
Для этих целей есть совсем недорогие решения с бонусами на борту - приобретена, летом будем экспериментировать.
[spoiler]
2023-02-25_10-35-50 (2).png
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2392
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение Dryundel »

[ref=#ff8000]Sancho[/ref], помню эту эпопею.
Нашёл таки нормальный девайс. Решил не откусывать лишние ноги у микросхем. :)
Поздравляю!
Выразить благодарность
Мой E-mail: dryundel@flprog.pro
com
Капитан
Сообщения: 829
Зарегистрирован: 31 май 2018, 22:12
Откуда: Санкт-Петербург
Имя: Ринат

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

Сообщение com »

[ref=#ff8000]Sancho[/ref],
Давно лежит такой модуль, руки не дошли до экспериментов, буду ждать ваших))
Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя