блок формирования синуса
Добавлено: 20 фев 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 фев 2023, 20:55
Dryundel
dmitriym73316 писал(а): 20 фев 2023, 20:37
помогите с созданием блока формирования синуса .не получается самому создать. имеется скетч.
желательно добавить входы en и value.
Какой контроллер?
Какой редактор ПБ?
Что именно не получается?
блок формирования синуса
Добавлено: 23 фев 2023, 19:23
dmitriym73316
контроллер mega328,редактор code-basic.не очень разбираюсь в написании кода да и не знаю как прикрутить входы.
блок формирования синуса
Добавлено: 23 фев 2023, 19:39
Sancho
dmitriym73316 писал(а): 20 фев 2023, 20:37
имеется скетч.
желательно добавить входы en и value.
По коду проекта(скетча) всё понятно.
Не понятно, о каком входе value может идти речь?
блок формирования синуса
Добавлено: 24 фев 2023, 20:28
dmitriym73316
В скетче константа. желательно иметь возможность изменять.
блок формирования синуса
Добавлено: 24 фев 2023, 20:44
Dryundel
[ref]dmitriym73316[/ref], это максимальное значение для PWM из массива.
Для того, чтобы изменить его, надо пересчитать весь массив и вставить в скетч.
Со входа блока это не возможно.
Можно сделать несколько массивов и переключаться между ними.
Если сделать через функцию синуса, то такого разрешения не получить. Контроллер не потянет.
2023-02-24_203710.jpg
блок формирования синуса
Добавлено: 24 фев 2023, 20:55
Ingwar
Dryundel писал(а): 24 фев 2023, 20:44
Можно сделать несколько массивов и переключаться между ними.
Если сделать через функцию синуса, то такого разрешения не получить. Контроллер не потянет.
Только если прикрутить делитель/множитель.
блок формирования синуса
Добавлено: 24 фев 2023, 21:34
Dryundel
Ingwar писал(а): 24 фев 2023, 20:55
Только если прикрутить делитель/множитель.
К стати, как вариант. Голова!

блок формирования синуса
Добавлено: 25 фев 2023, 09:46
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бит.
блок формирования синуса
Добавлено: 25 фев 2023, 10:04
Dryundel
Sancho писал(а): 25 фев 2023, 09:46
вкратце - 10бит.
Нет уж, давай развёрнуто. Что не так?
блок формирования синуса
Добавлено: 25 фев 2023, 10:24
Sancho
Dryundel писал(а): 25 фев 2023, 10:04
Sancho писал(а): 25 фев 2023, 09:46
вкратце - 10бит.
Нет уж, давай развёрнуто. Что не так?
Имеем 10 бит, 1023. В массиве макс 800. Регулировать "амплитуду" выходного шим - мысль не оправданная, пока, ничем.
Если задача создать управление напряжение/частота, нужно идти на другой мк.
Отправлено спустя 3 минуты 7 секунд:
Кстати, массив обычно уменьшают в два раза, зеркаля от максимума.
блок формирования синуса
Добавлено: 25 фев 2023, 10:32
Dryundel
[ref=#ff8000]Sancho[/ref], и в чем мудрость?
Если например идти на ESP32. То там этого всего (что выше) вообще не нужно. Встроенный ЦАП обеспечивает хоть синус хоть пилу нормальную, помоему до 1МГц, если не ошибаюсь.
Отправлено спустя 3 минуты 22 секунды:
Sancho писал(а): 25 фев 2023, 10:24
Кстати, массив обычно уменьшают в два раза, зеркаля от максимума.
Это тоже понятно.
Пример взят черте откуда. И годится только для понимания и наглядности. Надеюсь топикстартер что то вообще понял из уже сказанного.

блок формирования синуса
Добавлено: 25 фев 2023, 10:38
Sancho
[ref=#ff8000]Dryundel[/ref], Андрей. Думаю, судя по задумке, речь идёт о преобразователе частоты 50 Гц, т.к. 200тактов*100us они и есть.
Для этих целей есть совсем
недорогие решения с бонусами на борту - приобретена, летом будем экспериментировать.
[spoiler]
2023-02-25_10-35-50 (2).png
[/spoiler]
блок формирования синуса
Добавлено: 25 фев 2023, 10:45
Dryundel
[ref=#ff8000]Sancho[/ref], помню эту эпопею.
Нашёл таки нормальный девайс. Решил не откусывать лишние ноги у микросхем.

Поздравляю!
блок формирования синуса
Добавлено: 26 фев 2023, 07:20
com
[ref=#ff8000]Sancho[/ref],
Давно лежит такой модуль, руки не дошли до экспериментов, буду ждать ваших))