Построить синус на микроконтроллере?
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Построить синус на микроконтроллере?
Не совсем понимаю как написать таблицу на первые 90гр. Если у меня весь синус будет разбит на 256, то 90 гр. я разбиваю на 64. т.е вычисляю значение sin(x) при х=1,4*n; n=0...90. и заношу эти значения в массив. Я так понял? Мне требуется получить синус используя ШИМ. Пока я выход мк подцеплю на RC цепочку... думаю за аналог индуктивности сойдет. в конечном итоге мне надо завести асинхронный двигатель. управлять частотой оборотов планирую изменяя частоту питающего его напряжения... т.е изменяя скважность ШИМ.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- Реклама
Re: Построить синус на микроконтроллере?
Если в системе команд микроконтроллера есть умножение, то есть смысл воспользоваться таким алгоритмом.
Вычисляем необходимые константы 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 и вычитанию предыдущего.
Вычисляем необходимые константы 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 и вычитанию предыдущего.
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Построить синус на микроконтроллере?
Сделай в excele таблицу синуса с шагом 1/256 содержащий 1 период.
Затем все значения умножай на 128 и прибавь 128- избавишься от отрицательных составляющих.
Результат переведи в целочисленный вид, а в послеующем в двоичные значения.
Для формирования, настраивай таймер на период Т=1/(50*256), с этим интервалом меняй значения в регистре OCR.
Затем все значения умножай на 128 и прибавь 128- избавишься от отрицательных составляющих.
Результат переведи в целочисленный вид, а в послеующем в двоичные значения.
Для формирования, настраивай таймер на период Т=1/(50*256), с этим интервалом меняй значения в регистре OCR.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Построить синус на микроконтроллере?
я что то наверное не так сделал... вот что получилось. как ЭТО можно перевести в целочисленное значение?
- Вложения
-
- син.rar
- синус
- (14.8 КБ) 385 скачиваний
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Построить синус на микроконтроллере?
Вот держи тут от 1 до 254 - как раз тебе хватит
- Вложения
-
- Sinus.rar
- (11.55 КБ) 665 скачиваний
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- Реклама
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Построить синус на микроконтроллере?
Спасибо! сча посморю )
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Построить синус на микроконтроллере?
Я бы сделал так. Таймер 0 - генерит.
Таймер 1 - с периодом 1/(50*256) записывает в Таймер 0 новое значение
Таймер 1 - с периодом 1/(50*256) записывает в Таймер 0 новое значение
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Построить синус на микроконтроллере?
Ясно. T0 - ШИМ
Т1 - задает значения из таблицы с периодом 1/(F*256) в Т0, тем самым изменяя скважность импульсов. F - частота требуемого синуса. Изменяя параметр F буду управлять частотой выходного сигнала.
Т1 - задает значения из таблицы с периодом 1/(F*256) в Т0, тем самым изменяя скважность импульсов. F - частота требуемого синуса. Изменяя параметр F буду управлять частотой выходного сигнала.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- КРАМ
- Друг Кота
- Сообщения: 25277
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Построить синус на микроконтроллере?
Ммм-дяяя!
Господа... У меня такое ощущение, что вы пытаетесь сделать не синус для асинхронника, а генератор НЧ с прямым синтезом частоты...
Во первых совершенно не требуется делать 256 значений на период. За глаза хватит 64-х (а ежели немного посчитать, то и 32-х будет с избытком).
Второе. Полный период и знаковое представление тоже не требуется. Это следует из схемотехники управления мощной нагрузкой на переменном токе.
Вспомним как делают выходные ШИМ драйверы для асинхронников.
Прежде всего это МОСТОВАЯ схема. Иначе не получить знакопеременного напряжения из однополярного питания частотного преобразователя. Управление вертикальными стойками ключей этой мостовой схемы делают через бутстрепные драйверы. А соответственно драйверами управляют от четырехфазного модуля ШИМ микроконтроллера.
Этот самый четырехфазный модуль требует ТОЛЬКО ПОЛУПЕРИОДНОЙ ТАБЛИЦЫ синуса.
Знак формируется переворотом моста.
В таких раскладах считать аналитически синус - глупость несусветная. Это займет и места больше во флеше и потребует ресурсов скорости больше. А значит при равной тактовой у контроллера понизит частоту ШИМа и увеличит габариты цепей фильтрации.
Так что формирование однофазного синуса для асинхронника - задача давно решенная, совершенно простая и не требующая практически никаких ресурсов от МК. В отличие от векторного управления трехфазными двигателями...
Господа... У меня такое ощущение, что вы пытаетесь сделать не синус для асинхронника, а генератор НЧ с прямым синтезом частоты...
Во первых совершенно не требуется делать 256 значений на период. За глаза хватит 64-х (а ежели немного посчитать, то и 32-х будет с избытком).
Второе. Полный период и знаковое представление тоже не требуется. Это следует из схемотехники управления мощной нагрузкой на переменном токе.
Вспомним как делают выходные ШИМ драйверы для асинхронников.
Прежде всего это МОСТОВАЯ схема. Иначе не получить знакопеременного напряжения из однополярного питания частотного преобразователя. Управление вертикальными стойками ключей этой мостовой схемы делают через бутстрепные драйверы. А соответственно драйверами управляют от четырехфазного модуля ШИМ микроконтроллера.
Этот самый четырехфазный модуль требует ТОЛЬКО ПОЛУПЕРИОДНОЙ ТАБЛИЦЫ синуса.
Знак формируется переворотом моста.
В таких раскладах считать аналитически синус - глупость несусветная. Это займет и места больше во флеше и потребует ресурсов скорости больше. А значит при равной тактовой у контроллера понизит частоту ШИМа и увеличит габариты цепей фильтрации.
Так что формирование однофазного синуса для асинхронника - задача давно решенная, совершенно простая и не требующая практически никаких ресурсов от МК. В отличие от векторного управления трехфазными двигателями...
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Построить синус на микроконтроллере?
КРАМ, Вы конечно правы в том что можно и нужно делать меньшее число и .д и т.п.
Но лучше дать чуток с избытком - Чип115-й потом сам разберется что ему надо, а чего не надо.
Тем более, когда у Чипа115-го проблемы с расчетом были.
Но лучше дать чуток с избытком - Чип115-й потом сам разберется что ему надо, а чего не надо.
Тем более, когда у Чипа115-го проблемы с расчетом были.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Построить синус на микроконтроллере?
ну у мя тактовая 24,5 МГц. Да и 32 КБ памяти. думаю влезет. Но я учту то что Вы сказали. Просто я впервые пытаюсь получить синус на мк. потому столько вопросов.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- КРАМ
- Друг Кота
- Сообщения: 25277
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Построить синус на микроконтроллере?
Я еще раз заостряю Ваше внимание:
Дело не в получении синуса вообще, а в конкретной его реализации для синтеза знакопеременного напряжения на силовой нагрузке.
Т.е. Вам нужно познакомится с диаграммой синус-ШИМа для полномостовой схемы.
А какая дискретизация нужна для таблицы синуса - разберетесь сами.
Дело не в получении синуса вообще, а в конкретной его реализации для синтеза знакопеременного напряжения на силовой нагрузке.
Т.е. Вам нужно познакомится с диаграммой синус-ШИМа для полномостовой схемы.
А какая дискретизация нужна для таблицы синуса - разберетесь сами.
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Построить синус на микроконтроллере?
Спасибо! Сча буду разбираться.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн


