Отговори на тема  [ 16 мнения ]  Отиди на страница 1, 2  Следваща
Реализиране на софтуерен PWM 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение Реализиране на софтуерен PWM
Досега съм имал нужда само от един такъв модул и съм ползвал вградения. Сега ми трябват 8 бр., които да работят независимо. Няма изисквания за поддържане на постоянна честота и форма на сигнала. Трябва ми да регулирам независимо плавната подсветка на 8 осветителни тела. Ще използвам 16Ф88. Тепърва ще си изграждам методиката и ще се радвам на всякакви съвети. (Може би не е сложно за реализация, но като не съм се занимавал до сега, ще ми отнеме време)


Пон Яну 21, 2008 4:05 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Ами щом не е толкова критично ....8 синхрони ШИМ, примерно таймер се прекъсва на всеки 100 мкс, Имаш 16 променливи, по 2 на ШИМ, това са стойноста на всеки шим, при влизане в прекъсване от таймер аинкрементваш едната и я сравняваш с другата. Когато се изравнят сваляш изхода з съответния ШИМ. Като достигнеш някакева максимална стойност, да речем 100, нулираш променливите които се инкрементват, и вдигаш изходите на всички ШИМ-ве. Друг вариант който моцже да спедсти инструкции, в зависимост от процесора е да не сравняваш, а да намаляваш към 0, применро при пик това е по ефективно като код. Като достигнеш 0, сваляш изхода, достигнеш ли зададената от теб стойност сетваш про,менливите с зелания коефициент на запълване. Вече от тук нататък могат да с ползват всякакви разновидности, зависи какво имаш като софтуер и хардуер, какво може да позлваш ...


Пон Яну 21, 2008 4:54 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Юни 05, 2006 1:48 pm
Мнения: 4906
Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
Мнение 
елегантното/малко скъпо решение е :
http://www.nxp.com/acrobat_download/dat ... 9551_7.pdf

иначе може с изместващ регистър с дискретни елементи или реализиран на евтино CPLD :!:

_________________
... ако трети ден не ти се работи... това означава, че е сряда !


Пон Яну 21, 2008 4:55 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Чет Дек 02, 2004 7:22 pm
Мнения: 140
Мнение 
Ако например периаода ти е 100 микросекунди и имаш 10 стъпки Правиш прекъсване от таймер на всеки 10 микросекунди. Правиш променлива timer = 0. В прекъсването променливата timer ти брои от 0 до 9 (инкементва се с 1 )и после пак превърта на 0 . Така знаеш къде във времето си, като настъпи прекъсване. Другото , което правиш е разбира се по една променлива за всеки изход, която казва ккава интензивността на светене от 0 до 10. Та във всяко прекъсване гледаш timer къде във времето си и сравняваш с тия 8 променливи. Ако имаш променлива = 0 при timer = 0 не буташ изхода и , ако имаш друга променлива = 1, при timer = 0 - сетваш изхода и в 1, като стане timer = 1 клирваш изхода и в 0. и т.н. до 9. Ако имаш поменлива = 10 - сетваш я при timer = 0 и не я клирваш.

Това всичко е примерно разбира се просто начин за който се сещам. Смятам, че ще имаш достатъчно време да вършиш и други неща през това време когато не си в прекъсване. На колко микросекунди и колко стъпки вече е твое решение.


Пон Яну 21, 2008 5:02 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Чет Дек 02, 2004 7:22 pm
Мнения: 140
Мнение 
Чакай да сложа и един пример за променлива = 5:
Влизаш в прекъсването и се окаже че timer = 0 - сетваш изхода на тая променлива.
Влизаш пак и timer = 1, 2, 3, 4, - нищо не правиш с тоя изход, може пак да сетнеш, ако кода стане по-четлив и компактен.
Влизаш - timera станал 5, тогава нулираш изхода.
Пак ще влезеш, но timer е вече 6, 7, 8, 9 - нищо не правиш или пак нулираш.

ТАка проверка за всеки от 8-те извода. При следващо прекъсване ще си с timer = 0 и всичко отначало.


Пон Яну 21, 2008 5:15 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Честотата нужно ли е да се променя или е константна?


Пон Яну 21, 2008 5:41 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Чет Дек 02, 2004 7:22 pm
Мнения: 140
Мнение 
Честотата по принцип е най-добре да е възможно най- висока за да не се виждат трептения. От друга страна обаче ще има загуби в управляващите ключове (транзистори). Но тъй-като пикчето е бавна машинка не смятам да се притесняваме за загубите ;)


Пон Яну 21, 2008 5:48 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение 
Благодаря на всички. Вече започнах да правя нещо подобно на това, което казвате с таймер 1. За сега го правя за 1 пин, после лесно ще стане за 8. Честотата няма да я изменям. Предполагам и 100 херца ще ми свърши работа, щом ще управлявам лампи/светодиоди без да се усеща трептене. Сега ще прегледам основно всички съвети, за да си помогна на работата.


Пон Яну 21, 2008 5:57 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Чет Дек 02, 2004 7:22 pm
Мнения: 140
Мнение 
100 Hz са малко за светодиоди


Пон Яну 21, 2008 6:06 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение 
Това успях да сглобя набързо
ШИМ си работи добре, като го гледам на осцилоскопа. Обаче честотата ми се струва, че е доста по ниска от очакваната - по мои изчисления период - 28us, а на осцилоскопа периода ми излиза около 9-10 ms. Къде бъркам?


Прикачени файлове:
EX_CCP1S.C [656 Байта]
311 пъти
Пон Яну 21, 2008 7:21 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Съб Юли 09, 2005 12:49 pm
Мнения: 306
Местоположение: София
Мнение 
Светодиодите са бързи. Ако в зоната на осветителните тела ще има въртящи се части, не забравяй стробоскопичния ефект :wink:


Пон Яну 21, 2008 8:35 pm
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Пон Яну 09, 2006 11:32 am
Мнения: 276
Местоположение: Kozloduy
Мнение 
Сетвай таймера още щом влезеш в прекъсването щото иначе към периода добаваш и закъснението в прекъсването (сметките, а при 8 шим-а май ще е доста). Като гледам има на къде да увеличаваш честотата така че няма проблем.
А относно това че диодите са бързи, то окото е достатъчно бавно, би трябвало и 100Hz да стигат, макар че повече е по-добре, ама над килохерц няма смисъл.


Пон Яну 21, 2008 9:11 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Окт 05, 2007 8:34 pm
Мнения: 76
Местоположение: Русе
Мнение 
При по висока честота ще постигнеш по голям интензитет на светлината излъчена от светодиодите. От опита ми с RGB контролерите съм достигнал до извода, че 800-1000Hz е оптимален вариант интензитет/загуби.


Пон Яну 21, 2008 9:22 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение 
Няма да има движение на светодиодите. ШИМ-а ще го напасвам визуално. И все пак, не можах да схвана от къде ми дойде тази огромна разлика между изчисления и получения период на сигнала. Ще взема да пробвам при тези настройки да превключвам един порт без да ползвам прекъсване, да видя каква честота ще ми изкара. Да не би нещо да идва от това, че ползвам вътрешния осцилатор или пък нещо съм объркал при конфигурирането. Но това май ще е утре. :)


Вто Яну 22, 2008 12:46 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Чет Дек 02, 2004 7:22 pm
Мнения: 140
Мнение 
y и z са с едни и същи стойности - обедини ги в една променлива. нулират се по едно и също време и се инкрементират по едно и също време. Генерратора сигурно наистина не е инициализиран, за да има такава разлика във времената. Иначе за 28us период не съм сигуремн , че C-то ще се справи да провери всичките 8 променливи на PWMa. Или на асемблер, или малко по -бавна честота на ШИМа, или малко по-висока на генеаратора - с кварц.
Както винаги ще трябват компромиси. :)


Сря Яну 23, 2008 1:46 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни