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


