Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

ШИМ, синусоида на Мега8?

Непрочитано 08.02.2010, 18:31  
=GM=
Прописка
 
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
=GM= на пути к лучшему
По умолчанию Re: ШИМ, синусоида на Мега8?

Сообщение от kison Посмотреть сообщение
Нет, это не проще, так работоспособность вообще нарушится. ptrsin - это накопитель фазы, а F_OUT_BIT1 это константа определяющая частоту сигнала
Спасибо, за ссылки, я всё это знаю, даже писал программу с 8, 7 и 4 тактами на выборку. Как бы то ни было,

строка из программы SasaVitebsk

if(ptrsin›&sinus[VOL_SIN-1]) ptrsin -= VOL_SIN;

и строка, предлагаемая мной

if(ptrsin›&sinus[VOL_SIN-1]) ptrsin = &sinus[0];

функционально совершенно равны, поскольку после выполнения

ptrsin = ptrsin - VOL_SIN = &sinus[0];

указатель оказывается одинаковым в обоих вариантах.

Однако, в первом случае компилятор выбирает два байта памяти ptrsin, вычитает два байта константы VOL_SIN и сохраняет результат в ptrsin.

Во второй случае компилятор берет константу &sinus[0], это начальный адрес буфера, и сохраняет её в ptrsin. Пропадает операция двухбайтного вычитания, о чём я и толкую.

Вообще-то, там и второй вопрос был.
Реклама:
=GM= вне форума  
Непрочитано 08.02.2010, 18:43  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: ШИМ, синусоида на Мега8?

Сообщение от =GM= Посмотреть сообщение
строка из программы SasaVitebsk

if(ptrsin›&sinus[VOL_SIN-1]) ptrsin -= VOL_SIN;

и строка, предлагаемая мной

if(ptrsin›&sinus[VOL_SIN-1]) ptrsin = &sinus[0];

функционально совершенно равны, поскольку после выполнения
Вы в этом уверены? Подсчитаем на пальцах. Пусть sinus[VOL_SIN] массив в 1 килобайт, начинается с адреса 1000. VOL_SIN соответственно =1000. Пусть указатель равен 1950 и F_OUT_BIT1 = 100. После исходной конструкции
Код:
ptrsin += F_OUT_BIT1;			  					
if(ptrsin›&sinus[VOL_SIN-1])ptrsin -= VOL_SIN;
ptrsin = 1950+100-1000 = 1050
После Вашей ptrsin = 1000.
Неужели одно и то же?
Одинаково бы было :
Код:
if(ptrsin == &sinus[VOL_SIN-1]) ptrsin = &sinus[0];
kison вне форума  
Непрочитано 08.02.2010, 18:44  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: ШИМ, синусоида на Мега8?

Сообщение от =GM= Посмотреть сообщение
Вообще-то, там и второй вопрос был.
Про второй вопрос не понял. Это типа можно ли сложение с ПРОИЗВОЛЬНОЙ константой заменить на ++?
kison вне форума  
Непрочитано 08.02.2010, 19:02  
=GM=
Прописка
 
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
=GM= на пути к лучшему
По умолчанию Re: ШИМ, синусоида на Мега8?

Ну, если F_OUT_BIT1!=1, то вы правы. Я рассматривал как раз случай 1.

Второе моё упрощение основано на том же предположении, так что с первыми двумя вопросами всё ясно.

Третий вопрос. Допустимо ли на си для мк писать так

dpwm = *(ptrsin+=F_OUT_BIT1);
=GM= вне форума  
Непрочитано 08.02.2010, 19:25  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: ШИМ, синусоида на Мега8?

Сообщение от =GM= Посмотреть сообщение
Ну, если F_OUT_BIT1!=1, то вы правы. Я рассматривал как раз случай 1.
В DDS-e приращение фазы обычно далеко не 1. Иначе чем частоту то задать?

Сообщение от =GM= Посмотреть сообщение
Третий вопрос. Допустимо ли на си для мк писать так

dpwm = *(ptrsin+=F_OUT_BIT1);
В принципе да, но делать этого не стОит. ИМХО конечно. Читабельность падает, а выигрыша в коде не будет.
Вот это:
Код:
ptrsin += F_OUT_BIT1;			  					
if(ptrsin›&sinus[VOL_SIN-1])ptrsin -= VOL_SIN;
тоже можно переписать на:
Код:
ptrsin = ptrsin + F_OUT_BIT1 -(ptrsin › &sinus[VOL_SIN-1])*VOL_SIN;
Но тоже не нужно, тем более что тут используется недокументированная фича компиляторов, то что true == 1. Хотя в стандарте С это не так и истиной может быть любое ненулевое значение. Тут кстати умножения реально не будет и по коду эти две конструкции одинаковы. А вот по читабельности нет.
kison вне форума  
Непрочитано 08.02.2010, 19:40  
=GM=
Прописка
 
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
=GM= на пути к лучшему
По умолчанию Re: ШИМ, синусоида на Мега8?

Сообщение от kison Посмотреть сообщение
В DDS-e приращение фазы обычно далеко не 1. Иначе чем частоту-то задать?
Не совсем так, как правило, в DDS приращение фазы много меньше единицы, а ёмкость фазового аккумулятора много больше размера таблицы.

Ну а частоту можно задавать размером таблицы и/или частотой выборки, похоже у Александра весьма специфический случай.
=GM= вне форума  
Непрочитано 08.02.2010, 20:08  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: ШИМ, синусоида на Мега8?

Сообщение от =GM= Посмотреть сообщение
Не совсем так, как правило, в DDS приращение фазы много меньше единицы,
Ну в данном случае единица - условное понятие и каждый ее по своему представляет. Назовем это не единица, а "наименьшее приращение фазы" Которого практически никогда не бывает в DDS. А меньше единицы и арифметика с указателями не стыкуются никак.
kison вне форума  
Непрочитано 08.02.2010, 21:09  
=GM=
Прописка
 
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
=GM= на пути к лучшему
По умолчанию Re: ШИМ, синусоида на Мега8?

Ну почему ж так сразу не стыкуется. Берётся, например, 24 или 32 бита фазы и старшие 8/12 бит представляют адрес. Я делал с 32 битами и 10 тактов на выборку. При тактовой контроллера 20 МГц, частота выдачи выборок равна 2 МГц, при этом шаг частоты равен 0.000466 Гц. До 300 кГц очень даже неплохой синус получается.

Последний раз редактировалось =GM=; 08.02.2010 в 21:11.
=GM= вне форума  
Непрочитано 08.02.2010, 21:13  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: ШИМ, синусоида на Мега8?

Я не знал, что этот метод обзывается DDS. Соответственно нигде об этом не читал. Смысл читать, если прога состоит из 4 строк Си? Метод - очевиден. Генерация частот с частотой, кратной частоте выборки - есть частный случай.

Совершенно очевидно, что чем больше размер таблицы и больше соотношение частоты ШИМ к формируемой частоте, тем более гладкая кривая получается. Формирование ступеньки ШИМ либо ЦАП - не меняют алгоритма. Фильтрация - это отдельный вопрос. Сделать её в широких пределах, достаточно проблематично. Конечно, можно зарезать частоту раза в 4 меньше ШИМ.

Почему такой метод применял я писал. Мне надо было менять частоту сигнала, не разрывая фазы. Кроме того, необходимо было менять и амплитуду сигнала. Причина - именно неравномерность интегрирующей/ фильтрующей цепочек для разных частот. Точность частоты меня вполне устраивала и 1%. Хотя я мог сделать и 0.1%.

В результате то, что у поляков получилось на msp430 + 4 операционника+ 4 транзистора, у меня заняла mega88 + 4 транзистора. Пассивных элементов раз в 5 меньше. Качество генерируемого сигнала - в несколько раз лучше.
Миниатюры:
Нажмите на изображение для увеличения
Название: xx.GIF
Просмотров: 65
Размер:	15.6 Кб
ID:	4404  
SasaVitebsk вне форума  
Непрочитано 08.02.2010, 21:29  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: ШИМ, синусоида на Мега8?

Сообщение от SasaVitebsk Посмотреть сообщение
В результате то, что у поляков получилось на msp430 + 4 операционника+ 4 транзистора, у меня заняла mega88 + 4 транзистора. Пассивных элементов раз в 5 меньше. Качество генерируемого сигнала - в несколько раз лучше.
Страшно представить что же у этих поляков получилось. Если Ваш "синус" в несколько раз лучше...
kison вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ШИМ для стартера 55mak Источники питания и свет 10 21.08.2010 18:05
переделка БП на ШИМ 2003 на одно напряжение artem_y Источники питания и свет 9 26.02.2010 23:35
не работает ШИМ в контроллере 40inD Proteus 10 11.01.2010 00:22
Управление автомобильной форсункой ШИМ сигналом, Помогите stanikstanik Автоматика и аппаратура связи 2 19.11.2009 19:27
Нужно преобразовать ШИМ в 0-10В, нагрузка 3А Xuchik Источники питания и свет 37 02.10.2009 08:24


Часовой пояс GMT +4, время: 04:16.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.