Построить синус на микроконтроллере?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Не совсем понимаю как написать таблицу на первые 90гр. Если у меня весь синус будет разбит на 256, то 90 гр. я разбиваю на 64. т.е вычисляю значение sin(x) при х=1,4*n; n=0...90. и заношу эти значения в массив. Я так понял? Мне требуется получить синус используя ШИМ. Пока я выход мк подцеплю на RC цепочку... думаю за аналог индуктивности сойдет. в конечном итоге мне надо завести асинхронный двигатель. управлять частотой оборотов планирую изменяя частоту питающего его напряжения... т.е изменяя скважность ШИМ.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Реклама
Открыл глаза
Сообщения: 56
Зарегистрирован: Пт янв 26, 2007 20:08:21

Сообщение Davlet »

Если в системе команд микроконтроллера есть умножение, то есть смысл воспользоваться таким алгоритмом.
Вычисляем необходимые константы A=sin(2*pi*Fs/Fd) и B=2*cos(2*pi*Fs/Fd), где Fd - частота дискретизации, Fs- частота сигнала.
Первый отсчет X(0)=0, второй X(1)=A. Третий (n=2) и далее X(n)=B*X(n-1)-X(n-2). Т.е. вычисление следуещего значения синусоиды сводится к умножению текущего значения на константу B и вычитанию предыдущего.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Сделай в excele таблицу синуса с шагом 1/256 содержащий 1 период.
Затем все значения умножай на 128 и прибавь 128- избавишься от отрицательных составляющих.
Результат переведи в целочисленный вид, а в послеующем в двоичные значения.
Для формирования, настраивай таймер на период Т=1/(50*256), с этим интервалом меняй значения в регистре OCR.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

я что то наверное не так сделал... вот что получилось. как ЭТО можно перевести в целочисленное значение?
Вложения
син.rar
синус
(14.8 КБ) 386 скачиваний
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Вот держи тут от 1 до 254 - как раз тебе хватит
Вложения
Sinus.rar
(11.55 КБ) 667 скачиваний
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Спасибо! сча посморю )
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Я бы сделал так. Таймер 0 - генерит.
Таймер 1 - с периодом 1/(50*256) записывает в Таймер 0 новое значение
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Ясно. T0 - ШИМ
Т1 - задает значения из таблицы с периодом 1/(F*256) в Т0, тем самым изменяя скважность импульсов. F - частота требуемого синуса. Изменяя параметр F буду управлять частотой выходного сигнала.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25570
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Ммм-дяяя!
Господа... У меня такое ощущение, что вы пытаетесь сделать не синус для асинхронника, а генератор НЧ с прямым синтезом частоты...
Во первых совершенно не требуется делать 256 значений на период. За глаза хватит 64-х (а ежели немного посчитать, то и 32-х будет с избытком).
Второе. Полный период и знаковое представление тоже не требуется. Это следует из схемотехники управления мощной нагрузкой на переменном токе.
Вспомним как делают выходные ШИМ драйверы для асинхронников.
Прежде всего это МОСТОВАЯ схема. Иначе не получить знакопеременного напряжения из однополярного питания частотного преобразователя. Управление вертикальными стойками ключей этой мостовой схемы делают через бутстрепные драйверы. А соответственно драйверами управляют от четырехфазного модуля ШИМ микроконтроллера.
Этот самый четырехфазный модуль требует ТОЛЬКО ПОЛУПЕРИОДНОЙ ТАБЛИЦЫ синуса.
Знак формируется переворотом моста.
В таких раскладах считать аналитически синус - глупость несусветная. Это займет и места больше во флеше и потребует ресурсов скорости больше. А значит при равной тактовой у контроллера понизит частоту ШИМа и увеличит габариты цепей фильтрации.
Так что формирование однофазного синуса для асинхронника - задача давно решенная, совершенно простая и не требующая практически никаких ресурсов от МК. В отличие от векторного управления трехфазными двигателями...
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

КРАМ, Вы конечно правы в том что можно и нужно делать меньшее число и .д и т.п.
Но лучше дать чуток с избытком - Чип115-й потом сам разберется что ему надо, а чего не надо.
Тем более, когда у Чипа115-го проблемы с расчетом были.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

ну у мя тактовая 24,5 МГц. Да и 32 КБ памяти. думаю влезет. Но я учту то что Вы сказали. Просто я впервые пытаюсь получить синус на мк. потому столько вопросов.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25570
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Я еще раз заостряю Ваше внимание:
Дело не в получении синуса вообще, а в конкретной его реализации для синтеза знакопеременного напряжения на силовой нагрузке.
Т.е. Вам нужно познакомится с диаграммой синус-ШИМа для полномостовой схемы.
А какая дискретизация нужна для таблицы синуса - разберетесь сами.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Спасибо! Сча буду разбираться.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»