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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
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.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
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.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
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.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
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.RU
 
Регистрация: 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.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
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, время: 21:36.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot