Страница 1 из 1

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

Добавлено: 20.02.2023{, 20:37}
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

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

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

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

Добавлено: 23.02.2023{, 19:23}
dmitriym73316
контроллер mega328,редактор code-basic.не очень разбираюсь в написании кода да и не знаю как прикрутить входы.

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

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

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

Добавлено: 23.02.2023{, 19:39}
Sancho
dmitriym73316 писал(а):
20.02.2023{, 20:37}
имеется скетч.
желательно добавить входы en и value.
По коду проекта(скетча) всё понятно.
Не понятно, о каком входе value может идти речь?

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

Добавлено: 24.02.2023{, 20:28}
dmitriym73316
В скетче константа. желательно иметь возможность изменять.

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

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

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

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

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

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

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

Добавлено: 25.02.2023{, 09:46}
Sancho
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бит.

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 26.02.2023{, 07:20}
com
Sancho,
Давно лежит такой модуль, руки не дошли до экспериментов, буду ждать ваших))