Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена...

84
Примена реконфигурабилних микроконтролера у управљану индукционим мотором Страна 1 Садржај 1. Увод.....................................................................................................................2 1.1 Сажетак рада.................................................................................................2 1.2 Проблеми везани за употребу индукционих мотора..................................3 2. Теоријске основе.............................................................................................4 2.1 Импулсно-ширинска модулација просторних вектора...............................4 2.2 Динамика индукционог мотора.....................................................................7 2.3 U/f регулација.................................................................................................8 2.4 ''Меки'' и ''тврди'' старт мотора....................................................................10 3. PSоC микроконтролер.................................................................................14 3.1 Основе архитектуре и организације микроконтролера.............................14 3.2 Организација процесорске јединице..........................................................15 3.2.1 Регистри процесора..........................................................................15 3.2.2 Прекиди..............................................................................................15 3.2.3 Начини адресирања..........................................................................16 3.2.4 Скуп инструкција...............................................................................18 3.3 Дигитални блокови микроконтролера........................................................20 3.4 Аналогни блокови микроконтролера..........................................................21 3.4.1 Континуални PЅoC аналогни блокови.............................................21 3.4.2 Прекидачко-капацитивни PЅoC аналогни блокови........................22 3.5 Посебни периферијски уређаји микроконтролера....................................24 3.5.1 Дециматор.........................................................................................24 3.5.2 Акумулациони множач......................................................................24 3.6 Зашто PЅoC?................................................................................................25 4. Дизајнерски алати.........................................................................................26 4.1 Емулаторска картица...................................................................................26 4.2 Интегрисано развојно окружење................................................................27 5. Опис кола енергетског претварача..........................................................35 5.1 Интегрисано коло IRAMS10UP60B.............................................................35 5.2 Електрична шема претварача....................................................................37 6. Имплементација дипломског рада..........................................................40 6.1 Електрична шема управљачке јединице...................................................40 6.2 Конфигурација микроконтролера...............................................................41 6.3 Дијаграм тока програма...............................................................................45 6.4 Изворни код програма микроконтролера...................................................62 7. Закључак...........................................................................................................83 8. Литература.......................................................................................................84

Transcript of Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена...

Page 1: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 1

Садржај 1. Увод.....................................................................................................................2

1.1 Сажетак рада.................................................................................................2 1.2 Проблеми везани за употребу индукционих мотора..................................3

2. Теоријске основе.............................................................................................4 2.1 Импулсно-ширинска модулација просторних вектора...............................4 2.2 Динамика индукционог мотора.....................................................................7 2.3 U/f регулација.................................................................................................8 2.4 ''Меки'' и ''тврди'' старт мотора....................................................................10

3. PSоC микроконтролер.................................................................................14 3.1 Основе архитектуре и организације микроконтролера.............................14 3.2 Организација процесорске јединице..........................................................15

3.2.1 Регистри процесора..........................................................................15 3.2.2 Прекиди..............................................................................................15 3.2.3 Начини адресирања..........................................................................16 3.2.4 Скуп инструкција...............................................................................18

3.3 Дигитални блокови микроконтролера........................................................20 3.4 Аналогни блокови микроконтролера..........................................................21

3.4.1 Континуални PЅoC аналогни блокови.............................................21 3.4.2 Прекидачко-капацитивни PЅoC аналогни блокови........................22

3.5 Посебни периферијски уређаји микроконтролера....................................24 3.5.1 Дециматор.........................................................................................24 3.5.2 Акумулациони множач......................................................................24

3.6 Зашто PЅoC?................................................................................................25 4. Дизајнерски алати.........................................................................................26

4.1 Емулаторска картица...................................................................................26 4.2 Интегрисано развојно окружење................................................................27

5. Опис кола енергетског претварача..........................................................35 5.1 Интегрисано коло IRAMS10UP60B.............................................................35 5.2 Електрична шема претварача....................................................................37

6. Имплементација дипломског рада..........................................................40 6.1 Електрична шема управљачке јединице...................................................40 6.2 Конфигурација микроконтролера...............................................................41 6.3 Дијаграм тока програма...............................................................................45 6.4 Изворни код програма микроконтролера...................................................62

7. Закључак...........................................................................................................83 8. Литература.......................................................................................................84

Page 2: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 2

1. Увод

1.1. Сажетак рада

Савремена индустријска производња се добрим делом заснива на употреби индукционих наизменичних машина. Разлог за то су пре свега њихова робусност и одличан однос цене и номиналне развијене снаге. Проблем је отежано управљање таквим погонима. Овај рад нуди једно low-cost решење засновано на употреби Cypress-овe фамилије PSoC микроконтролера и то применом напредније технике SPACE VECTOR модулације, чији су основни теоријски аспекти такође поменути у овом раду. Посебна пажња је посвећена поменутом интегрисаном колу и раду са развојним окружењем PsoC Designer. Оно што је такође специфично за овај рад је употреба интегрисаног склопа IRAMS10UP60B, који у себи садржи компоненте енергетске електронике потребне за погон једног индукционог мотора. У раду је дат и опис погонског дела, тј. поменутог склопа и пратећих компоненти. На самом крају је дат и комплетан изворни код програма за употребљени микроконтролер.

Page 3: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 3

1.2. Проблеми везани за употребу индукционих мотора У индустријски развијеним земљама 60-70 % електричне енергије се потроши у апликацијама са електромоторима као извршним органима. Разлог овоме су знатно већа флексибилност и перформансе у односу на решења која користе, било моторе са унутрашњим сагоревањем, било разне врсте парних турбина. Број индустријских погона са асихроним (индукционим ) моторима је у сталном порасту. Разлог томе су пре свега огромне предности ових машина у односну на машине једносмерне струје који су им главни конкуренти. Индукциони мотори пре свега имају мању запремину по јединици снаге (маса једносмерног мотора може износити 30-70% масе асихроног мотора једнаке снаге ). Друга предност је одсуство комутатора са четкицама које се троше временом услед трења, а такође ограничавају и максималну брзину коју мотор може да развије. Такође, треба додати да је максимални момент који асихрони мотор може краткотрајно развити одређен пре свега карактеристикама претварача и може бити и до осам пута већи од номиналног. Једина лоша особина индукционог мотора је отежано управљање и већа цена управљачке и погонске јединице. Међутим, и та добра страна машина једносмерне струје полако губи на значају. Пре пар година у цени погона са асихроним мотором значајно је доминирао управљачко-погонски склоп који се састојао од дигиталног контролера и трофазног инвертора (најчешће IGBT мост ) и чинио 70% цене. У скорије време тај однос се доста смањио и износи нешто испод 50%. Како је цена погона са мотором једносмерне струје доминантно одређена самим мотором, а цена погона са асихроним мотором ценом претварача и контролног склопа, за очекивати је даљи пад цене погона са аихроним мотором због појефтињења полупроводничких компоненти. Поред пада цене дошло је и до повећања перформанси и електронских прекидача, а посебно микропроцесора чиме је отворен пут имплементирању сложених управљачких алгоритама у циљу синтезе погона високих перформанси. Апликације које имају императив високе перформансе, пре свега малу грешку стационарног стања и висок пропусни опсег подразумевају векторску контролу индукционог мотора. Овај дипломски рад не нуди решење једног таквог проблема. Овде је презентовано једно low-cost решење које је засновано на Space Vector модулацији и скаларном управљању асихроним мотором. Главне уштеде које су направљене односе се на употребу јефтинијег микроконтролера и једноставно елиминисање давача позиције на осовини. Основно поље примена овог дипломског рада су пре свега погони који поседују захтев за регулацијом брзине, али немају строге спецификације ни за квалитет понашања у прелазном процесу, нити захтеве за високом тачношћу брзине у стационарном стању. У оним погонима у којима мотор ради са приближно константном брзином обртања (која је опет приближно једнака учестаности градске мреже подељене неким целим бројем ) употреба асихроних мотора се практично подразумева. Тамо нема потребе за регулисањем брзине, и може се у првом тренутку претпоставити да у тим случајевима примена овде изложених концепата није економски оправдана. У даљем тексту ће бити изложена теоријска разматрања и резултати симулација који ће показати да се применом резултата овог рада и у оним погонима који су намењени за рад са константном учестаношћу напајања може остварити извесна добит. Пре свега у избегавању неких по сам погон, а и по производни процес, штетних ефекта сложене динамике индукционог мотора. Пре свега са становишта развијеног момента и флукса у зазору.

Page 4: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 4

2. Теоријске основе

2.1 Импулсно ширинска модулација просторних вектора

Импулсно-ширинска модулација просторних вектора (или на енглеском SPACE VECTOR PULSE WIDTH MODULATION ) представља напреднију технику управљања трофазним транзисторским инвертором. На слици 1. је приказана упрошћена шема управо једног таквог инвертора, где су прекидачи реализовани као биполарни транзистори са изолованим гејтом (енгл. IGBT ).

Слика 1. Упрошћена шема трофазног прекидачког инвертора где је као прекидач употребљен IGBT. Ово је само принципска шема генератор једносмерног напона Е обично се добија као филтрирани излаз трофазног исправљача. Сигнали S1, S2, S3, S4, S5, S6 долазе из кола за побуду и директно су одређени стањем PWM генератора. Прекидачи се тако побуђују да је напон између било које фазе (U, V, W ) и заједничког потенцијала масе је Е или 0 (тј. прекидачи се побуђују тако да ако је на пример Т1 укључен да је Т4 искључен и обрнуто ), док напон између било које две фазе може бити Е, 0, -Е. Стандардне синусне модулације у којима посматрамо референтни и носећи сигнал и у зависности од њиховог односа укључујемо и искључујемо прекидаче у одговарајућим гранама. Такве модулације врше независно управљање фазним напонима чиме се не користе све могућности оваквог електричног склопа. Како за асихрони мотор фазни напони не значе ништа, већ су само битни линијски (тј. напони између фаза) неопходно је у циљу добијања максималне амплитуде муђуфазног напона спрегнуто управљати прекидачима. Један од начина да се то постигне је импулсно ширинска модулација просторних вектора. Напони који се генеришу у фазама нису међусобно независни већ је једна фаза линеарна комбинација друге две. У складу са тим ми вршимо Кларкову трансформацију којом уређену тројку (U, V, W ) трансформишемо у уређени пар (α-β). Основна идеја је да тај уређени пар посматрамо као вектор и да га реализујемо помоћу уређених тројки (U, V, W ) које опет посматрамо као векторе (стога се овај начин управљања инвертором и зове модулација

Page 5: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 5

просторних вектора). У табели 1. се налази дефиниција напонских вектора доступних на излазу трофазног транзисторског инвертора. Такође, приказане су њихове компоненте у α-β координатном систему, као и стање прекидача којим се реализује сваки од тих вектора понаособ.

Видимо да су амплитуде вектора доступних на излазу инвертора или Е или 0. Вектори V7 и V8 су као што се види нулти вектори, док остали имају неку своју просторну оријентацију. Такође, можемо видети да су сви ти вектори распоређени тако да два суседна се налазе под углом од 60 степени. Још једну интересантну ствар можемо запазити а то је да се два суседна вектора разликују само по једној прекидачкој грани, тј. да би се пребацио са једног вектора на други неопходно је да

Табела 1. Садржи дефиниције напонских вектора се промени стање који се могу добити на излазима инвертора, као и прекидача у само њихове α и β компоненте. једној грани. (*) 1 значи укључен горњи прекидач у грани, док 0 означава укључен доњи прекидач у грани На слици 2. је приказан просторни распоред вектора наведених у табели у α-β координатном систему. Као што се може видети врхови тих вектора образују правилни шестоугаоник. Оно што је битно рећи да је овим поступком модулације могуће реализовати сваки вектор унутар шестоугаоника. Ако посматрамо вектор Vr са слике њега је могуће представити као линеарну комбинацију вектора V1, V2. У поступку импулсно-ширинске модулације помоћу просторних вектора, задати вектор Vr се реализује тако што се унутар прекидачке периоде за време t1 примењује вектор V1, за време t2 се узима вектор V2 и за време Ts- t1- t2 потребно је применити неки нулти вектор, рецимо V8. Како су нам на располагању два нулта вектора, постоји могућност избора стратегије побуђивања прекидача у циљу минимизирања неких паразитних ефеката импулсно-ширинске модулације који су у том тренутку од нарочитог значаја. Једна могућност је да се при реализацији вектора Vr са слике 2. у свакој прекидачкој периоди првопримени вектор V1, потом V2 и на крају V8. Тако добијамо секвенцу : 100-110-000-100-110-000...

Вектор Угао αU βU Стања прек.(*)U V W αβU

V1 0 E 0 1 0 0 E

V2 60 2E

2

3⋅E 1 1 0 E

V3 120 2E

− 2

3⋅E 0 1 0 E

V4 180 - E 0 0 1 1 E

V5 240 2E

− 2

3⋅−

E 0 0 1 E

V6 300 2E

2

3⋅−

E 1 0 1 E

V7 - 0 0 1 1 1 0

V8 - 0 0 0 0 0 0

Page 6: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 6

која се потом понавља. Ова стратегија је једноставна за имплементацију али подразумева четири комутације у прекидачкој периоди. Ова стратегија се често у литератури назива директном (или DD стратегијом ).

Слика 2. Просторне локације вектора V1..V8 у стационарном α-β координатном систему. На слици су приказана стања прекидача којима се реализују поједини вектори, а која су дата у табели. Друга могућа стратегија је да се уведе секвенца: 100-110-111-110-100-000 која ће се потом понављати. Ова секвенца има периоду од 2Тs, и ако посматрамо само једну прекидачку периоду видимо да имамо три комутације прекидача. Оваква стратегија комутација се назива инверзном (или DI стратегијом ). За детаљније информације о обе стртегије неопходно је консултовати литературу[1]. У овом раду користити ћу DD секвенцу јер је она једноставнија за имплементацију на примењеном микроконтролеру. Остаје само да се у зависности од амплитуде вектора Vr и од угла ∆θ одреде времена t1 и t2 током којих примењујемо векторе V1 и V2 респективно. Може се показати да важи (видети [1]) : )60sin(1 θΔ−⋅⋅= mTt s )sin(2 θΔ⋅⋅= mTt s Наведене једначине представљају времена која су добијена при реализацији вектора у првом сектору. У осталим случајевима имаће сличан облик с тим да t1 и t2 могу заменити места и могу се односити на неке друге векторе.

Page 7: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 7

2.2 Динамика индукционог мотора Посматрамо једначине које описују асихрони мотор у α-β координатном систему статора и ротора. Оне гласе:

dtdiRU S

SSSα

ααΨ

+⋅= (2.1) dtd

iRU SSSS

βββ

Ψ+⋅= (2.2)

dtdiR R

RRα

αΨ

+⋅=0 (2.3) dtd

iR RRR

ββ

Ψ+⋅=0 (2.4)

⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢

⋅⋅−⋅⋅

⋅⋅⋅−⋅

=

⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢

ΨΨΨΨ

R

R

S

S

RRR

RRR

RRS

RRS

R

R

S

S

iiii

LMMLMM

MMLMML

β

α

β

α

β

α

β

α

θθθθ

θθθθ

0cossin0sincoscossin0sincos0 (*)

(2.5)

)(∗ Rθ - угао између оса Sα и Rα Компоненте статорског флукса зависе од обе компоненте роторских струја по структурно нелинеарном закону. Та структурна нелинеарност потиче од тога што је угао између оса ротоског и статорског координатног система променљив у времену (посебан додатак је то што имамо у једначинама тригонометријске функције ). Овај систем једначина може се додатно упростити применом Паркове трансформације (за детаљније информације погледати у литератури [2]). Тада добијамо модел без тригонометријских функција, али је он и даље четвртог реда и синтеза регулатора представља значајан проблем. Једно решење даје векторско управљање асихроним мотором чије су теоријске основе доста сложене и превазилазе оквире овог рада, а могу се наћи у многобројној литерартури [2]. Разлог због кога та метода није примењена у овом дипломском раду је управо та сложеност која захтева значајне процесорске ресурсе, што се опет не уклапа у идеју о low cost решењу проблема контроле индукционог мотора. Најједноставнији принцип приликом регулације који можемо применити, у системима у којима захтевани пропусни опсег није велики, јесте да занемаримо ту динамику јер нам тада време потребно да се заврши прелазни процес не представља проблем. Такав начин је такозвана '' U/f регулација '' која се заснива на одржавању флукса у зазору константим. Оно што је потребно обезбедити је такозвани '' меки старт '' који је значајан за квалитет понашања развијеног момента. Поменути начин регулације ће бити укратко објашњен у тексту рада и такође ће бити објашњена имплементација на PSoC микроконтролеру. Такође, у наредним поглављима оваг дипломског рада биће обрађен и поменути микроконтролер.

Page 8: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 8

2.3 U/f регулација Основна идеја код овог начина регулисања брзине јесте да се флукс у ваздушном зазору одржава константним. Тада се механичка карактеристика само транслира дуж осе која представља учестаност обртања ротора. Ради детаљнијег објашњења посматрајмо модел мотора у стационарном стању који је дат на Слици 3.

Слика 3. На слици 3. је приказан модел асихроног мотора у стационарном стању. Флукс у ваздушном зазору добијамо као количник напона на магнетизационој индуктивности и угаоне учестаности напајања и тада можемо на основу шеме приказане на слици написати једначину:

S

S

S

SSSS

S

mm j

Uj

IjXRUjU

ωωω≈

⋅−−==Ψ

)( (2.6).

Може се уочити да је абсолутна вредност флукса једнака количнику напона и угаоне учестаности. U/f регулација се управо базира на одржавању флукса константним, тј. регулатор брзине са синтетише тако да се ефективана вредност напона генерисаног на трофазном транзисторском инвертору мења у складу са генерисаном учестаности и то тако да им је количник константан. Од тог принципа се одустаје при ниским учестаностима, јер је у том случају занемарени члан значајан. Стога се примењује закон регулације који је најбоље приказати графички што је и учињено на слици 4. Као што је на слици приказано, карактеристика регулације је таква да на ниским учестаностима (до 8% номиналне ) ефективна вредност напона је константна и износи 8% номиналне. Након тога, ефективана вредност генерисаног напона расте линеарно са учестаношћу и то је онај закон регулације који се заснива на једначини (2.6). За учестаности веће од номиналне ефективна вредност напона је једнака номиналној (тј. константа је ) и тада асихрони мотор ради у области слабљења поља. Потребно је нагласити да није узета у обзир чињеница да се угаона брзина ротора разликује од генерисане учестаности за учестаност клизања која зависи од оптерећења (тј. од излазног момента ). Овде је тај ефекат занемарен

Page 9: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 9

јер његово узимање у обзир би захтевало неки вид компензације који би опет превазилазио оквире овог рада.

Слика 4. На слици је приказана статичка карактеристика U/f регулације, тј. приказана је зависност ефективне вредности напона од примењене учестаности напајања.

Page 10: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 10

2.4 ''Меки'' и ''тврди'' старт мотора Иако у системима са U/f регулацијом повратна спрега по учестаности често не постоји, и самим тим стабилност система није доминантан проблем, због сложеног система једначина којим се описује сам мотор у прелазном процесу при задавању брзине могу постојати проблеми. У случају да на асихрони мотор скоро тренутно доведемо систем трофазних напона (најчешћа индустријска апликација јесте да директно са градске мреже преко прекидача доведемо напајање ), квалитет развијеног момента би био јако лош. На слици 5. приказан је одзив момента неоптерећеног мотора на такав вид побуде (употребљен је Simulink модел мотора ' ZK132 ' произвођача ' Север Суботица ' ). Овакав начин пуштања мотора у рад се још назива и '' тврди '' старт.

Слика 5. Приказан је график момента неоптерћеног асихроног мотора при '' тврдом '' поласку, добијен симулацијом у Simulinku. Оса момента (Y-оса) је приказана у релативним јединицама, а временска оса (X-оса) у секундама. На Слици 5. се могу уочити велике екскурзије момента и што је још горе момент често мења знак што веома неповољно утиче на понашање механичког дела подсистема. Једно решење овог проблема јесте такозвани '' меки '' старт мотора. Принцип је веома једноставан. Уместо да се мотор побуђује наглим довођењем трофазног напона задате амплитуде и учестаности, жељено напајање се доводи постепено. Радна тачка се помера по карактерици U/f регулације дате на слици 3., почевши од нулте угаоне учестаности све до задате. На слици 6. и на слици 7. се могу видети резултати симулације '' меког '' старта мотора (мотор је као и у случају симулације '' тврдог '' старта неоптерећен ). Са слике 6. се види да је проблем честе промене знака развијеног момента елиминисан. На слици 7. се види да угаона брзина ротора у потпуности прати учестаност напајања, што је и било за очекивати.

Page 11: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 11

Слика 6. На слици је приказан резултат симулације у Simulinku момента мотора при '' меком '' старту. Мотор је стартован неоптерећен. Оса момента је приказана у релативним јединицама, а временска оса у секундама.

Слика 7. На слици је приказан резултат симулације у Simulinku брзине мотора при '' меком '' старту. Мотор је стартован неоптерћен. Оса брзине је приказана у релативним јединицама, а временска оса у секундама. У случају дејства оптерећења ситуација се не мења драстично. На слици 8. и слици 9. приказане су симулације момента и брзине ротора у том случају.

Page 12: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 12

Слика 8. На слици је приказан резултат симулације у Simulinku момента мотора при '' меком '' старту, са дејством оптерећења. Временска оса је приказана у секундама, а оса момента у релативним јединицама.

Слика 9. На слици је приказан резултат симулације у Simulinku брзине мотора при '' меком '' старту, са дејством оптерећења. Временска оса је приказана у секундама, а оса брзине у релативним јединицама

Page 13: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 13

Са приложених графика се види да је приликом U/f регулације боље жељену учестаност напајања задавати постепено јер ће на тај начин квалитет развијеног момента у прелазном процесу бити знатно већи. Међутим, постоји још један разлог за овакав начин управљања мотором који у досадашњем тексту није био помињан. То је пре свега ефективна вредност струје статора при поласку мотора у случају '' тврдог '' старта. Познато је да приликом таквог покретања индукционог мотора статорска струја достиже вредности које су неколико пута веће од номиналне. '' Меким '' стартом се тај проблем елиминише јер се струја као и напон напајања постепено доводи до оне коју ће имати у стационарном стању. Тиме је добијена могућност да се конструишу мотори који ће имати знатно мању расипну индуктивност. То значи да ће тада превални момент бити доста већи, што опет повлачи не само могућност доста веће краткотрајне преоптеретивости мотора, већ и значајно већи опсег у коме ће он радити у области слабљења поља. Узимајући све ово у обзир може се извести закључак да је често употреба овакве регулације чак и у погонима који раде са приближно константном учестаношћу обртања осовине мотора корисна, јер се за разумно већу цену погона може значајно добити на перформансама.

Page 14: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 14

3. PSоC микроконтролер

3.1 Основе архитектуре и организације микроконтролера PSoC (енгл. Programabile Socket on Chip ) микроконтролер је производ фирме Cypress Microsistems из Сједињених Америчких Држава. Представља новитет на тржишту и без обзира на тренутно не баш високе перформансе у односу на конкуренцију, реално је претпоставити да ће због своје концепције у наредним генерацијама постати доминантан избор дизајнера електронских система. Језгро овог 8-битног микроконтролера чини CPU са меморијски оријентисаном архитектуром. Ту се налази од 4 до 16 KB Flash програмске меморије и 128 или 256 бајтова RAM меморије, што зависи од избора конкретног микроконтролера из дате фамилије. При реализацији овог дипломског рада коришћен је CY8C26443 микроконтролер који има 16 KB програмске меморије и 256 бајтова меморије за податке. Поред меморијског адресног простора, на располагању нам је и регистарски адресни простор који је подељен у две странице. Поред свега наведеног постоје још осам дигиталних и дванаест аналогних блокова чија је конфигурабилност велика, те се од њих може добити широк спектар периферијских уређаја. Оно по чему је овај микроконтролер специфичан јесте управо постојање могућности да се на једном чипу синтетишу и аналогни и дигитални периферијски уређаји. Стога се пружа могућност да се улазни аналогни сигнал прво појача, потом да се филтрира аналогним нископропусним филтером и да се потом изврши аналогно-дигитална конверзија, и то све унутар једног интегрисаног кола. Поред ових могуће је добити низ периферијских уређаја које нису стандардне код других микроконтролера, али о њима неће бити у даљем тексту пуно речи зато што нису део самог дипломског рада. Неки од тих уређаја су DA конвертори, псеудо случајни генератори, температурни сензори, итд. Такође, могуће је (и ако ова опција није реализована у овом раду ) искористити један блок програмске меморије, како би се симулирао on-chip EEPROM. Цела фамилија микроконтролера има интегрисан осцилатор који се може користити као генератор такта. Такође, може се користити и спољњи 32КHz осцилатор. На располагању нам је велики избор извора такта за сам процесор као и за периферијске уређаје. Унутар самог интегрисаног кола постоји фазно сихронисана петља која генерише сигнале учестаности од 24МHz и од 48 МHz, као и неке сигнале нижих учестаности (рецимо 12 МHz, 6 МHz, 3 МHz итд. ). Највећа учестаност такта на којој може радити процесор је 24 МHz. Поред горе наведених сам микроконтролер поседује још две линије 24V1 и 24V2 чија се учестаност може мењати. Те линије су доста погодан избор за извор такта периферијских уређаја. Унутар интегрисаног кола се наравно налази Watchdog тајмер који се програмски активира и ресетује. Више детаља о поменутој фамилији биће изнето у даљем тексту, а читаоцима којима то није довољно препоручује се да погледа литературу [3].

Page 15: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 15

3.2. Организација процесорске јединице 3.2.1 Регистри процесора Као што је већ раније у тексту напоменуто, микроконтролер има CPU са меморијски оријентисаном архитектуром. То значи да је број регистара процесора јако оскудан и да се све променљиве смештају у меморију за податке. Процесор је осмобитни и основни регистри процесора којима се може програмски приступити, било директно, било индиректно су осмобитни и то су:

• Акумулатор (означава се са '' А '' ) • Индексни регистар (означава се са '' X '' ) користи се приликом индексног

адресирања и као помоћни регистар акумулатора уколико је потребно радити са шеснаестобитним бројевима (рецимо при дохватању података из табеле смештене унутар програмске меморије ).

• Показивач на врх стека (означава се са '' ЅР '' ). Садржи меморијску адресу врха стека. Стек код ове фамилије микроконтролера расте наниже.

• Статусни регистар (енгл. Flag Register или скраћено '' F '' ) садржи статусне бите преноса (енл. Carry Flag или СF ) и поређења акумулатора са нулом (енгл. Zero Flag или ZF ) који се постави када након извршења било које инструкције садржај акумулатора постане нула. Поред поменутих, овај регистар садржи и бит дозволе свих прекида (енгл. Global Interruppt Enable Bit ), као и бит селекције тренутно активне банке регистара (конфигурационих регистара микороконтролера има више од 256, стога је за њихово адресорање неопходно употребити више од 8 бита, па се они распоређују у две регистарске странице ). Поред досад наведених овај регистар садржи неке бите који су кориснику недоступни.

• Виши бајт програмског бројача (енгл. Program Counter High или скраћено '' PCH '' ) представља виши бајт програмског бројача који заједно са нижим бајтом чини 16-битни регистар чиме је постигнут адресни простор од 64 КВ.

• Нижи бајт програмског бројача (енгл. Program Counter Low или скраћено '' PCL '' ) представља нижи бајт програмског бројача.

Оно што је мана оваквог начина организовања процесора јесте спорије извршавање инструкција као и различито време извршавања инструкција у зависности од начина адресирања. Тако рецимо инструкција: MOV A,5 кoја у акумулатор уписује број 5 траје четири тактна импулса, док инструкција: MOV [5],[6] која садржај меморијске локације са адресом 6 уписује у локацију са адресом 5 траје десет тактних импулса. Предност оваквог решења је једноставно (временски јефтино ) чување контекста процесора приликом прекида. 3.2.2 Прекиди Ова фамилија микроконтролера има веома развијен систем прекида. Систем је векторисан и процесор разликује 15 различитих врста прекида. Они су приказани у табели 2. Прекиди са нижим редним бројем имају већи приоритет. Посебна флексибилност система за прекиде јесте то што се спољашњи прекид може прихватити са било ког пина микроконтролера чији је бит у регистру маске спољашњег прекида сетован. Поред тога нуди се ипрограмабилност начина активирања спољашњег прекида, тј. могуће је

Page 16: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 16

конфигурисати микроконтролер тако да се за сваки пин понаособ одреди да ли ће бити активиран на силазну, на узлазну ивицу или на промену нивоа на пину. Треба додати да су на располагању два регистра маске којима се дозвољавају или забрањују прекиди појединачно (наравно да би било који прекид био дозвољен мора бити сетован бит дозволе свих прекида у статусном регистру ). У литератури [3] се могу наћи детаљне информације о начину на који се могу дозволити и забранити одређени прекиди. Aдреса Број приоритета Опис 0х0004 1 Прекидни вектор монитора напајања 0х0008 2 Прекидни вектор дигиталног блока DBA00 0х000С 3 Прекидни вектор дигиталног блока DBA01 0х0010 4 Прекидни вектор дигиталног блока DBA02 0х0014 5 Прекидни вектор дигиталног блока DBA03 0х0018 6 Прекидни вектор дигиталног блока DCA01 0х001С 7 Прекидни вектор дигиталног блока DCA02 0х0020 8 Прекидни вектор дигиталног блока DCA03 0х0024 9 Прекидни вектор дигиталног блока DCA04 0х0028 10 Прекидни вектор Acolumn 0 0х002С 11 Прекидни вектор Acolumn 1 0х0030 12 Прекидни вектор Acolumn 2 0х0034 13 Прекидни вектор Acolumn 3 0х0038 14 Прекидни вектор спољашњег прекида 0х003С 15 Прекидни вектор Sleep тајмера Табела 2. У Табели 2. је приказан скуп прекидних вектора код PSoC микроконтролера. Прекиди су наведени тако да најмањи број представља у ствари највећи приоритет. Прекиди су смештени на почетку програмског адресног простора (ресетни вектор је на самом почетку, на адреси 0000 ) и кориснички програм може почети тек са адресе 0х0040. Из табеле се може видети да је прекид највећег приоритета прекид монитора напајања, потом следе дигитални блокови, па колоне аналогних блокова и на крају спољашњи прекид и прекид од стране Sleep тајмера. Обрада прекида тече на следећи начин: када се прекид појави уколико је сетован Global Interruppt Enable Bit, уколико дотични прекид није маскиран и уколико се тренутно не извршава прекидна рутина неког приоритетнијег прекида процесор ће прихватити прекид. Тада се на стек стављају PCH, PCL кao и Flag Register. Акумулатор и индексни регистар се морају, уколико је то потребно, да се ставе на стек од стране корисничког програма.

3.2.3 Начини адресирања: Кориснику микроконтролера је на располагању широк спектар начина адресирања. Инструкције процесора су или са два или са једним операндом и то тако да је први операнд одредишни, а други изворишни.

• Непосредно (примењује се за други операнд ) и податак који је тако адресиран налази се као саставни део инструкције у програмској меморији.

• Регистарско (може се применити за оба операнда ). Као један аргумент наводи се неки од процесорских регистара.

• Директно (такође се може применити на оба операнда ). Као аргумент се наводи адреса локације на којој се налази операнд. Могуће је користити и меморијски и регистарски адресни простор.

Page 17: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 17

• Индексно (такође се може применити на оба операнда ). Адреса операнда се израчунава тако да се на индексни регистар дода вредност аргумента који се преноси. Као и у предходном начину адресирања могуће је адресирати и меморијски и регистарски адресни простор.

• Индиректно (дестинациони операнд је акумулатор, док је изворишни меморијски, или регистарски адресни простор ). Као аргумент се предаје адреса локације на којој се налази адреса операнда. Након дохватања операнда, садржај локације која садржи операнд се инкрементира. Овај начин адресирања се примењује само са инструкцијом MVI. Пример таквог начина адресирања и примене дотичне инструкције:

MVI А, [5] На меморијској локацији са адресом 5 се налази адреса операнда. Након смештања операнда у акумулатор садржај меморијске локалокације са адресом 5 се инкрементира. Као пример могућности адресирања операнада код овог микроконтролера, најбоље је погледати табелу 3. која садржи све могуће варијанте MOV инструкције. Запис Оп. 1 Оп. 2 Бајт 1 Бајт2 Бајт 3 Број циклуса MOV X SP 4F 4 MOV A Izraz 50 izraz 4 MOV A [izraz] 51 izraz 5 MOV A [X+izraz] 52 izraz 6 MOV [izraz] A 53 izraz 5 MOV [X+izraz] A 54 izraz 6 MOV [izraz1] izraz2 55 izraz1 izraz2 8 MOV [X+izraz1] Izraz2 56 izraz1 izraz2 9 MOV X izraz 57 izraz 4 MOV X [izraz] 58 izraz 6 MOV X [X+izraz] 59 izraz 7 MOV [izraz] X 5A izraz 5 MOV A X 5B 4 MOV X A 5C 4 MOV A REG[izraz] 5D izraz 6 MOV A REG[X+izraz] 5E izraz 7 MOV [izraz1] [izraz2] 5F izraz1 izraz2 10 MOV REG[izraz] A 60 izraz 5 MOV REG[X+izraz] A 61 izraz1 6 MOV REG[izraz1] izraz2 62 izraz1 izraz2 8 MOV REG[X+izraz1] izraz2 63 izraz1 izraz2 9 Табела 3. Садржи све могуће варијанте MOV инструкције. У последњој колони је приказан број циклуса такта потребних за извршење ове инструкције. У четвртој колони су приказани операциони кодови ове исте инструкције за поједине начине адресирања. Из табеле се види да је најдуже извршавање оне варијанте која има највише приступа преко магистрале адресном простору. Остале инструкције имају мање могућности за комбиновање начина адресирања оба операнда.

Page 18: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 18

3.2.4 Скуп инструкција Скуп инструкција централне процесорске јединице овог микроконтролера се може поделити у неколико група:

• Инструкције за контролу тока програма. • Инструкције за поређење и тестирање података. • Инструкције за пренос података. • Аритметичко-логичке инструкције.

3.2.4.1 Инструкције за контролу тока програма Инструкције за контролу тока програма се користе да се реализују потпрограми, условни као и безусловни скокови. Ове инструкције су приказане у табели 4. Мнемоник Опис инструкције CALL adr Извршава безусловни скок на адресу дату као операнд. PC се

ставља на стек. HALT Зауставља се процесор JACC adr Извршава безусловни скок на локацију која је збир 12-битне

адресе ' adr ' и садржаја акумулатора. JC adr Условни скок на 12-битну адресу ' adr ' уколико је сетован CF

JMP adr Безусловни скок на адресу пренету као 12-битни параметар ' adr ' JNC adr Условни скок на 12-битну адресу ' adr ' уколико није постављен CF JNZ adr Условни скок на 12-битну адресу ' adr ' уколико није постављен ZF JZ adr Условни скок на 12-битну адресу ' adr ' уколико није постављен ZF LCALL adr Извршава безусловни скок на 16-битну адресу дату као операнд

' adr ' ( из два бајта ). PC се ставља на стек. LJMP adr Извршава безусловни скок на 16-битну адресу дату као операнд

' adr ' (из два бајта ). NOP Не ради ништа RET Повратак из потпрограма (скида само PC са стека ) RETI Повратак из прекидне рутине (скида и PC и Flag Register са стека ) SSC Инструкција која омогућава кориснику да приступи рутинама у

супервизорској ROM меморији. Табела 4. Садржи преглед инструкција за контролу тока програма. У првој колони су дати мнемоници инструкција, а у другој кратак опис сваке. 3.2.4.2 Инструкције за порeђење и тестирање података Ове Инструкције се користе за креирање логичких услова у програмима. У табели 5. приказане су инструкције за тестирањеи поређење података. Мнемоник Опис инструкције

CMP op1,op2 Изврши се одузимање op1- op2 и поставе се бити Flag Register-а док оба операнда остану непромењена

TST op,mask Извршава се (op)&(mask) и поставе се бити Flag Register-а док сами операнди остану непромењени. Поред тестирања меморијских локација могуће је тестирање I/O порта

Табела 5. У табели су приказане инструкције за поређење и тестирање података, с тим да операнди остају непромењени. 3.2.4.3 Инструкције за пренос података Ове инструкције обављају пренос података између разних делова микроконтролера. Систематски су приказане у табели 6.

Page 19: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 19

Мнемоник Опис инструкције INDEX adr Дохвата податак из програмске меморије и смешта га у

акумулатор. Адреса је задата 12-битним збиром акумулатора и операнда ' adr '.

MOV op1, op2 Врши наредбу доделе op1:= op2 MVI op1, op2 Такође врши померање података, али са индиректним

адресирањем POP op Скида податак са стека и смешта га у операнд ' op ' PUSH op Ставља на стек наведени операнд ROMX Податак из програмске меморије смешта у акумулатор.

Адреса је дата на следећи начин: у акумулатору се налази виши бајт, а у индексном регистру нижи бајт.

SWAP op1, op2 Замењује садржај наведених операнада Табела 7. У табели су систематски приказане инструкције за пренос података. У првој колони су приказани мнемоници, док су у другој дати описи инструкција. 3.2.4.4 Аритметичко-логичке инструкције Ове инструкције обављају разне аритметичке и логичке операције померања података и сл. Приказане су систематски у табели 7. Мнемоник Опис инструкције

ADC op1, op2 Сабирање са преносом тј. извршава се као op1:= op1+op2+CF ADD op1, op2 Обично сабирање тј. извршава се као op1:= op1+op2 AND op1, op2 Бит по бит логичко ' and ' тј. op1:= op1&op2 ASL op Аритметичко померање улево операнда op ASR op Аритметичко померање удесно операнда op CPL A Комплементирање акумулатора DEC op Декрементирање наведеног операнда INC op Инкрементирање наведеног операнда OR op1, op2 Бит по бит логичко ' or ' тј. op1:= op1&op2 RLC op Ротирање улево кроз CF операнда ' op ' RRC op Ротирање улево кроз CF операнда ' op ' SBB op1, op2 Одузимање са позајмицом op1:=op1-op2- CF SUB op1, op2 Обично одузимање без позајмице XOR op1, op2 Бит по бит логичко ' xor ' тј. op1:= op1&op2 Табела 7. У табели су приказане аритметичко-логичке инструкције. У првој колони су приказани мнемоници, док се у другој налазе објашњења. У наведеним табелама дата су само кратка објашњења инструкција. За детаљније информације неопходно је проучити одговарајућу литературу [4].

Page 20: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 20

3.3 Дигитални блокови микроконтролера PЅoC микроконтролер има осам конфигурабилних дигиталних блокова. Сваки од блокова се може конфигурисати тако да нуди велики број могућих периферијских уређаја. Сваки блок садржи у себи бројач регистре за податке и конфигурационе регистре који у ствари и обезбеђују програмабилност самих блокова. Више о конфигурационим блоковима се може наћи у литератури [3]. Оно што је битно нагласити да корисник микроконтролера не мора да уписује одговарајуће бројеве у те регистре. Од стране произвођача је обезбеђен развојни програм (енгл. Integrated Development Enviroment ), који генерише изворни код за микроконтролер који конфигурише дигиталне блокове у складу са нашим жељама. У даљем тексту ће бити објашњено коришћене тог програмског пакета без кога би коришћење микроконтролера било практично незамисливо. Периферијски уређаји који су нам на располагању су :

• Тајмери • Бројачи • Импулсно-ширински генератори • Генератор мртвог времена • Генератор псеудо-случајне секвенце • Универзални асихрони пријемник • Универзални асихрони предајник • Сихрони (SPI ) предајник (Master ) • Сихрони (SPI ) пријемник (Slave )

Наравно, постоји могућност да се поједини блокови упарују тако да добијемо разне другe функционалне периферијске уређаје. Рецимо да су пример тога импулсно ширински модулатор са генератором мртвог времена, или универзални аихрони примопредајник. Више детаља о свим наведеним периферијским уређајима може се наћи у литератури []. Поред горе наведеног, постоји могућност синтезе периферијских уређаја, који користе и дигиталне и аналогне блокове. Рецимо сигма –делта аналогно дигитални конвертор користи један аналогни и један дигитални блок (и то не било који већ мора бити блок ' DBA02 ' ). При избору извора такта за дигиталне блокове имамо на располагању велики број могућности. Можемо користити такт од 48МHz, онда такт од 24МHz, потом можемо користити линије 24V1, 24V2 или излаз неког другог блока, а може се такт довести и споља. Сваки блок има свој прекидни вектор и може да генерише прекид процесору. У зависности од тога како је блок конфигурисан прекид који он генерише има различиту функцију. Детаљније информације о овој теми је такође могуће пронаћи у литератури [3].

Page 21: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 21

3.4 Аналогни блокови микроконтролера За разлику од дигиталних, аналогни блокови микроконтролера немају толику независност. Они су посебно повезани тако да је донекле њихова флексибилност смањена. На слици 10. је приказана блок шема и њихов просторни распоред по колонама. То је битно рећи због прекида јер је свакој колони додељен један једини вектор у табели прекидних вектора.

Слика 10. На слици је приказана блок шема тј. распоред аналогних блокова микроконтролера и њихов просторни распоред. Постоје две врсте аналогних блокова које су и по структури и по намени доста различите.

• Континуални PЅoC аналогни блокови • Прекидачко-капацитивни PЅoC аналогни блокови 3.4.1 Континуални PЅoC аналогни блокови

Континуални аналогни блокови као основу имају операционо појачавач, отпорничку мрежу и низ аналогни мултиплексера. Уписом одговарајућих бројева у конфигурационе регистре појединих блокова они могу радити као појачавачи било инвертујући, било неинвертујући, као компаратори, итд. Оно што је за њих карактеристично јесте да се сигнал обрађује у континуалном домену. На слици 11. је приказана шема једног таквог блока. За више информација неопходно је консултовати литературу [3].

Page 22: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 22

Слика 11. На слици је приказана шема континуалног блока микроконтролера, као и његове могућности за повезивање на глобалне магистрале микроконтролера. 3.4.2 Прекидачко-капацитивни PЅoC аналогни блокови Ова врста аналогних блокова у себи садржи операциони појачавач и низове прекидача и кондензатора. Ови блокови сигнал обрађују не континуално него прекидачки (у дискретним временским тренутцима ). Помоћу њих се реализује широк спектар аналогних периферијских уређаја. Неки од њих су AD конвертори, DA конвертори, аналогни филтри, итд. Постоје два типа ових блокова. На слици 12. је приказана шема једног типа (тип А, или енгл. Тype A ) таквог блока. Док је на слици 13. приказана шема блока типа В (енгл. Тype В ). Ради добијања више информација неопходно је консултовати литературу [3].

Page 23: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 23

Слика 12. На слици је приказан тип А прекидачко-капацитивног аналогног блока микроконтролера.

Слика 13. На слици је приказан тип Б прекидачко-капацитивног аналогног блока микроконтролера.

Page 24: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 24

3.5 Посебни периферијски уређаји микроконтролера Од посебних периферијских уређаја овог микроконтролера у контексту овог дипломског рада неопходно је напоменути следећа два:

• Дециматор • Акумулациони множач

3.5.1. Дециматор

Дециматор је једна врста дигиталног филтра који се користи да излаз једнобитног DA конвертора на који се доводи излаз Σ-∆ модулатора претвори у податак са више бита. Овај перифериски уређај омогућава да се неки блокови конфигуришу као Σ-∆ АD конвертора. 3.5.2. Акумулациони множач PЅoC микроконтролер унутар себе има комбинациони осмобитни множач, који бројеве у комплементу двојке. Његов 16-битни резултат се може директно прочитати, а са њим се може ивршити и акумулационо сабирање. Блок шема акумулационог множача је приказана на слици 14.

Слика 14. На слици је приказана шема 8-битног акумулационог множача који је саставни део PЅoC микроконтролера. Задавање множења је нешто другачије у односу на друге микроконтролере. Стандардно множење се реализује уписом жељеног чиниоца било у регистар ' MUL_X ', било у регистар ' MUL_Y '. Множач ће тада уписати у регистре ' MUL_DH ' и ' MUL_DL ' који садрже виши и нижи бајт резултата. Акумулационо множење се остварује уписом жељеног чиниоца у регистре ' MAC_X ' и ' MAC_Y '. Оно што је битно рећи јесте да су регистри. Такође, 32-битни акумулатор који је саставни део акумулационог сабирача ' MUL_X ' и ' MAC_X ' су уствари један те исти физички имплемнтирани регистар. Исто важи и за регистре ' MUL_Y ' и ' MAC_Y '. За детаљније информације консултовати литературу[].

Page 25: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 25

3.6 Зашто PЅoC? Из досадашњег садржаја овог поглавља може се закључити да је флексибилност овог микроконтролера јако велика и то је углавном тачна. Из расположивих конфигурационих блокова могуће је добити велики број аналогних и дигиталних периферијских уређаја који омогућавају примену овог интергрисаног кола у разне сврхе. Микроконтролери који су намењени управљању индукционим моторима су специфичне архитектуре, јер сама област примене има специфичне захтеве у погледу периферијских уређаја. Тако су нам неопходни АD конвертори, импулсно-ширински модулатори са генератором мртвог времена, аналогни филтер за филтрирање сигнала струје пре АD конверзије, итд. PЅoC микроконтролер поседује све те могућности и са те тачке гледишта представља најбољи избор у духу идеје о једноставном и пре свега јефтином решењу проблема. Међутим, дубљом анализом долазимо до закључка да перформансе тих периферијских јединица и нису на завидном нивоу. Та чињеница би можда могла обесхрабрити потенцијалног дизајнера у избору овог микроконтролера, али треба имати на уму да је ово први такав производ на тржишту и да је сасвим реално очекивати да у будућим генерацијама сви ти недостаци буду исправљени.

Page 26: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 26

4. Дизајнерски алати

4.1 Емулаторска картица Емулаторска картица, или ICE (енгл. In-Circuit Emulator ) представља подршку инжењерима при дизајну са PSoC микроконтролерима. Поред класичне емулације корисничког програма, нуди могућност програмирања узорака, али само 28-пинског микроконтролера из фамилије (за њега је постављено PDIP-28 кућиште ). За програмирање осталих могу се користити изведених 5 сигнала (који су једини значајни за програмирање ). Емулаторска картица се са рачунаром повезује преко паралелног порта и поседује сопствено напајање. На слици 15. је приказан начин повезивања картице са рачунаром.

Слика 15. На слици је приказан начин повезивања картице са рачунаром На слици 15. је приказано и место конекције Pod кабла на који се конектује Pod картица чији је изглед приказан на слици 16.

Слика 16. На слици је приказан изглед Pod картице.

Page 27: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 27

4.2 Интегрисано развојно окружење Интегрисано развојно окружење ( енгл. Integrated Development Enviroment ) представља програмски пакет који омогућава олакшан дизајн са микроконтролерима ове фамилије. Та олакшања се пре свега односе на конфигурисање програмабилних блокова и програмско приступање тако конфигурисаним периферијским уређајима. Он садржи меније за избор периферија, меније за њихово позиционирање и повезивање у оквиру блокова, интерпретер инструкција и исправљач грешки (Debuger ). Програм је написан тако да је у потпуности компатибилан са у предходном заглављу објашњеном емулаторском картицом. Ради појашњења самог програмског пакета посматрјмо пример синтезе једног пројекта и његово тестирање. Када се стартује апликација у Windows окружењу појавиће се прозор који је приказан на слици 17.

Слика 17. На слици је приказан прозор који се види када се стартује апликација. Како је потребно креирати нови пројекат то треба кликнути на дугме за нови пројекат (поред њега пише ' Start new project ' ). Након тога ће се појавити форма у којој треба попунити име пројекта и навести име директоријума у који ће се сместити. Та форма је приказана на слици 18. Када се унесе све што треба кликне се на дугме за следећи прозор (дугме на коме пише ' Next ' ). Уколико наведени директоријум на диску не постоји програм ће питати да ли га треба креирати.

Page 28: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 28

Слика 18. На слици је приказан прозор који се појављује након избора опције да се креира нови пројекат. Након тога се појављује прозор приказан на слици 19.

Слика 19. На слици је приказан прозор који се појављује након избора имена пројекта. Овде се бира тип микроконтролера и начин креирања главног програма.

Page 29: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 29

Након одабира типа микроконтролера из фамилије и начина писања главног програма (било у асемблеру, било у програмском језику ' С ' ). Појављује се прозор у коме се бирају периферијски уређаји који се желе користити. Сам програм је кориснички оријентисан те се веома лако долази до жељене јединице. Двоструким кликом левим дугметом миша ми селектујемо шта желимо. У овом примеру биће показано, између осталог, рад са осмобитним импулсно-ширинским генератором са генератором мртвог времена. Након селекције тог периферијског уређаја прозор програма ће изгледати као на слици 20.

Слика 20. На слици је приказан изглед активног прозора програма након селекције импулсно-ширинског модулатора са генератором мртвог времена. Након избора периферијских уређаја неопходно је извршити њихова повезивања и подешавање неких опција микроконтролера. Стога се прелази на следећи прозор избором у главном менију опције Config ->Placement или притиском одговарајућег дугмета испод менија. Прозор у коме се врше поменута подешавања приказан је на слици 21. Са слике се види да импулсно-ширински модулатор са генератором мртвог времена захтева два суседна дигитална блока. У принципу је могуће извршити деселектовање текућих и селектовање нових блокова избором одговарајуће опције у главном менију (Config ->Next Allowed Placement ), али то овде неће бити урађено. Смештање периферијског уређаја у селектоване блокове обавља се командом из менија (Config ->Place User Module ) или притиском одговарајућег дугмета испод менија.

Page 30: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 30

Слика 21. На слици је приказан изглед прозора у коме се врши смештање изабраних периферијских уређаја у блокове микроконтролера, као и подешавање одговарајућих опција у оквиру самог микроконтролера. Када се изврши смештање неопходно је извршити подешавање опција везаних за блокове и сам микроконтролер. На слици 22. је приказан изглед дела активног прозора када се изврши смештање перифереријског уређаја.

Слика 22. На слици је приказан део активног прозора након распоређивања импулсно-ширинског модулатора са генератором мртвог времена у селектоване дигиталне блокове.

Page 31: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 31

На слици 23. је приказана секција у којој се врши избор параметара везаних за микроконтролер.

Већи део ових опција није потребно додатно подешавати (не у овом случају) јер се тичу делова микроконтролера који за овај пример нису од нарочитог значаја (референце за анлогне блокове, струје поларизације операционих појачавача итд. ). Потребно је подесити такт процесора на 24МHz подесити учестаности линија 24V1 и 24V2 на жељене (рецимо 24V1 на 3 МHz, а 24V2 на 1 МHz уписом броја 4 у опцији ' 24V1 = 24 МHz/N ' и броја 3 у опцији ' 24V1= 24V1/N ' ). Потребно је одабрати и извор 32К такта (унутрашњи

Слика 23. На слици је изглед секције за или спољашњи ). подешавање параметара микроконтролера. На слици 24. је приказана секција за подешавање параметара везаних за импулсно-ширински модулатор.

Сваки периферијски уређај има опције специфичне за њега самог. Што се овог импулсно-ширинског модулатора тиче потребно је пре свега подесити такт. У овом примеру је изабран као извор линија 24V2 (тј. према предходним подешавањима такт од 1 МHz ). Потом се мора подесити сигнал ' Enable ' на ' High ', подесити периода и ширина импулса (250 периода такта је период излазног сигнала ). Подешава се и на који ће се догађај јавити прекид и то да ли се излаз самог модулатора спаја на

Слика 24. На слици је приказана секција за глобалну излазну подешавање параметара везаних за сам магистралу или не. Одабира модулатор се и трајање мртвог времена, као и на коју линију глобалне излазне магистрале се жели спојити излази из генератора мртвог времена.

Page 32: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 32

После подешавања параметара неопходно је доделити излазе генератора мртвог времена пиновима микроконтолера. То се ради у ствари посредно јер се на спољашње излазе повезују у ствари линије излазне магистрале (на које су претходно повезани излази жељеног периферијског уређаја ). На слици 25. приказан је део активног прозора, у коме се врши додељивање пинова излазу периферијског уређаја.

Слика 25. На слици је приказан део активног прозора у коме се врши подешавање побуђивања пинова микроконтолера. Као што се са слике види пинови Р0[0] и Р0[1] су додељени глобалној излазној магистрали, тј. линијама Global_OUT_0 и Global_OUT_1. Ове линије су претходно додељене излазима импулсно-ширинског модулатора са генератором мртвог времена. Остали пинови су директно контролисани од стране централне процесорске јединице, што представља дефинисано почетно стање. Неопходно је подесити и начин побуђивања пина (тј. да ли се пин доводи у стање високе импедансе да ли је у питању класични излазни пин, итд. ). Пинови који су у овом примеру коришћени као излази периферијског уређаја су класични излази са '' чврстом '' побудом, остали су пинови преко '' Pull Down '' отпорника повезани са масом микроконтролера и '' чврсту '' побуду имају само за логичку јединицу на излазу.

Page 33: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 33

Након тога неопходно је извршити унос асемблерског кода. Тада је потребно у главном менију одабрати опцију Config->Generate Application након тога ће се појавити упитник у коме је потребно кликнути левим тастером миша на дугме поред натписа Application Editor. Тада ће се појавити прозор за креирање апликације. На левој страни се налази листа свих фајлова који се користе у апликацији. Листа фајлова везаних за овај пример приказана је на слици 26.

Оно што се са слике може видети јесте да имамо три категорије фајлова везаних за овај пројекат. У првој су boot.asm и main.asm. први се скоро цео креира од стране преводиоца, иницијализује такт и неке друге системске ресурсе како се корисник не би оптерећивао тиме. Други је у ствари главни програм који корисник пише. У другој су фајлови који су или системски API, или се такође користе за иницијализацију. Први из групе је у ствари табела у програмској меморији која садржи податке који се уписују у локације у регистарском адресном простору они се уписују помоћу процедура дефинисаним у другом фајлу. Трећи фајл је у ствари скуп процедура којима корисник

Слика 26. На слици је приказана листа управља периферијским уређајем фајлова везаних за текући пројекат. (тј. стартује PWM генератор, зауставља га и сл. ). Четврти фајл представља прекидну рутину за импулсно-ширински модулатор и уколико има потребе корисник може дефинисати неки програмски код који ће садржати та рутина. У трећој групи фајлова се налазе заглавља датотоека са изворним кодом програма, тј. налазе се дефиниције разноразних константи и макроа везаних како за периферију, тако за микроконтролер. Сада је потребно унети жељени изворни код за досадашњи пројекат. Једна могућност је да се направи само једноставни програм који стартује PWM и сабира два броја који су садржани у две независне меморијске локације. Ниже је приказан садржај датотеке main.asm. export _main area bss(ram) X :BLK 1 Y :BLK 1 Z :BLK 1 area text(rom,rel) _main: call PWMDB8_1_Start ; Startovanje PWM bloka // Deo koda koji izvršava operaciju Z=X+Y mov A,[X] add A,[Y] mov [Z],A ret

Page 34: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 34

Сада је потрбено извршити превођење изворног кода и повезивање свих датотека у један фајл. То се ради помоћу опције Build->Build (F7) из главног менија. Уколико постоје неке синтаксне грешке биће пријављене. Уколико не постоје програм ће у доњем делу активног прозора исписати поруку да нема грешака. Након тога се може вршити програмирање чипа или емулирање корисничког програма. За програмирање чипа потребно је изабрати опцију Program->Program Part. За емулирање програма бира се опција Build->Start Debug (Ctrl+F5). Тада се отвара прозор у коме се врши отклањање логичких грешака унутар програма. Кориснику је на располагању инспекција меморије за податке, процесорских регистара, програмске меморије и регистарског адресног простора. Опцијама из Debug менија се могу додавати тачке прекида, могу се извршавати једна по једна инструкција, тј. све оно што нуде сви стандардни програми за отклањање логичких грешака из корисничких програма. Пројекат приказан у овом примеру нема велику употрбну вредност. Идеја је била да се помоћу њега објасне основне функције програма за развој апликација на овом микроконтролеру. Уколико читалац жели може се додатно информисати из литературе [5]. Поред тога са самим програмом произвођач даје два видео фајла чија је сврха да објасни начин коришћења Интегрисаног развојног окружења. У овом дипломском раду је поклоњена пажња оним фазама развоја које тамо нису детаљно објашњене.

Page 35: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 35

5. Опис кола енергетског претварача

5.1 Интегрисано коло IRAMS10UP60B Хибридно интегрисано коло IRAMS10UP60B, чији је произвођач компанија International Rectifier представља интегрисани склоп који у себи обједињује и транзисторски мост и коло за побуду самих транзистора. Тиме је постигнуто да сигнали који се доводе на коло, а који укључују, односно искључују поједине прекидаче имају TTL логички ниво. Такође, постоји сигнал дозволе који мора бити на логичкој јединици када желимо да инвертор ради. И наравно постоји сигнал којим се споља сигнализира интегрисаном склопу да је активирана прекострујна заштита. На овај начин је поједностављен дизајн управљачке јединице погона, јер је сада могуће побуђивати прекидаче директно помоћу пина микроконтролера. На слици 27. приказана је чеона страна интегрисаног кола IRAMS10UP60B.

Слика 27. На слици је чеони изглед интегрисаног кола IRAMS10UP60B. Као прекидачи су коришћени биполарни транзистори са изолованим гејтом. Систем трофазних напона који се генерише на излазу је снаге до 0.4kW и напона ефективне вредности до 253V. Поред тога уграђени су и монитор температуре и монитор ниског напона.

Page 36: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 36

У табели 8. описани су укратко пинови интегрисаног кола IRAMS10UP60B Пин Назив Опис

1 VB3 Напона напајања побуде плутајућег транз. W фазе 2 W-VS3 W фаза генерисаног напона 3 - Није физички присутан 4 VB2 Напона напајања побуде плутајућег транз. V фазе 5 V-VS2 V фаза генерисаног напона 6 - Није физички присутан 7 VB1 Напона напајања побуде плутајућег транз. U фазе 8 U-VS1 U фаза генерисаног напона 9 - Није физички присутан

10 VDD Напон DС магистрале 11 - Није физички присутан 12 VRU Извод са емитера доњег транзистора U фазе 13 VRV Извод са емитера доњег транзистора V фазе 14 VRW Извод са емитера доњег транзистора W фазе 15 HI-in1 Сигнал за укључење горњег прекидача U фазе 16 HI-in2 Сигнал за укључење горњег прекидача V фазе 17 HI-in3 Сигнал за укључење горњег прекидача W фазе 18 LO-in1 Сигнал за укључење доњег прекидача U фазе 19 LO-in2 Сигнал за укључење доњег прекидача V фазе 20 LO-in3 Сигнал за укључење доњег прекидача W фазе 21 T/I trip Улазни сигнал монитора температуре и монитора струје 22 VDD Напон напајања логичких кола инвертора 23 VSS Маса

Табела 8. У табели су приказани пинови интегрисаног кола IRAMS10UP60B са кратким објашњењима функција сваког од њих.

Page 37: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 37

5.2. Електрична шема претварача У овом поглављу биће укратко објашњена елелктрична шема енергетског претварача помоћу кога је реализован један погон са индукционим мотором. На слици 28. је приказано повезивање интегрисаног кола IRAMS10UP60B у шеми самог претварача.

Слика 28. На слици је приказано повезивање IRAMS10UP60B интегрисаног кола у електричној шеми претварача.

Page 38: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 38

Сигнали PHASE_A, PHASE_B, PHASE_C представљају сигнале излаза инвертора (фазе U, V и W респективно ). Сигнали #A_HI, #B_HI, #C_HI, #A_LO, #B_LO, #C_LO су сигнали стандардног логичког нивоа који се доводе на улазе интегрисаног инвертора и њима се укључују, односно искључују прекидачи. Сигнал ITRIP долази са кола прекострујне заштите и надгледања температуре. DC_BUS је у ствари једносмерни напон напајања инвертора, и представља излаз монофазног исправљача. На слици 29. приказан је део електричне шеме који представља у ствари тај монофазни исправљач са капацитивним филтром.

Слика 29. На слици је приказан део елктричне шеме који обезбеђује напајање за инвертор. Сигнал SHUNT представља сигнал измерене струје и мери се на отпорнику. У циљу постизања ниске цене, постоји један једини струјни сензор и то је отпорник у међуколу. Сигнал SHUNT се не води на улаз микроконтролера већ се мора прво прилагодити његов напонски ниво. Тај део кола је приказан на слици 30.

Слика 30. На слици је приказан део кола којим се врши прилагођавање напонског нивоа сигнала са струјног сензора и напајања инвертора.

Page 39: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 39

Сигнали AN0 и AN1 се воде на улазе микроконтролера. И на слици су приказани напонски нивои тих сигнала у случају неких карактеристичних вредности, како напона, тако струје. Тако струји од 0А, 1А, 2А одговарају напонски нивои сигнала AN0 од 2.5V, 1.95V, 1.36V респективно, док нивоу DC_BUS-а од 385V одговара напонски ниво од 3V. У колу постоји тастер за рестартовање погона. Притиском на њега се сигнализира микроконтролеру (сигналом TAST ) да ресетује струјну заштиту напонским импулсом на линији RESETSC и потом подигне сигнал ENABLE на висок ниво. На тај начин су оборени сигнали SHORT_CIRCUIT и ITRIP и омогућен је рад погона. Поред ових линија које су објашњене детаљно уз приказ на сликама на картици енергетског претварача налазе се и следећи сигнали који су директно контролисани од стране микроконтролера:

• TxD сигнал предајника асихроне серијске везе. • RxD сигнал пријемника асихроне серијске везе. • LED1 сигнал за укључивање прве светлеће диоде. • LED2 сигнал за укључивање друге светлеће диоде. • LED3 сигнал за укључивање треће светлеће диоде.

Као улази микроконтролера појављују се још и сигнали AN2 и AN4 који представљају сигнале са температурског сензора, односно са потенциометра.

Page 40: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 40

6. Имплементација дипломског рада

6.1. Електрична шема управљачке јединице Срж управљачке јединице чини већ у предходним поглављима помињани CY8C26443 микроконтролер. Поред њега ту је и интегрисани логички инвертор (шест инвертора у једном интегрисаном колу ). Електрична шема управљачке јединице приказана је на слици 31.

Слика 31. На слици је приказана електрична шема управљачке јединице погона. Реализација управљачке јединице извршена је на тест плочици и стога нема шеме штампане плочице која иде уз електричну шему. Отпорник R2 и кондензатор C9 чине нископропусни филтар првог реда којим се доводи сигнал ITRIP у микроконтролер. Кондензатори C5 и C6 су саставни део осцилатора са кристалом кварца. Кондензатор C4 и отпорник R1 чине коло за ресет микроконтролера (у ствари то је такође филтар првог реда ). Кондензатори C1, C2, C7 и C8 представљају кондензаторе за блокаду и обезбеђују стабилно напајање за рад микроконтролера. Интегрисано коло CD74HC04 је скуп од 6 логичких инвертора који се користе да инвертују логичке нивое сигнала на излазима микроконтролера и да их прилагоде потребама кола IRAMS10UP60B. Светлећа диода се користи као индикатор да је процесор спреман да изда команду погону за укључење. У табели 9. је приказан списак елемената са приказане електричне шеме и њихов кратак опис.

Page 41: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 41

Број Назив Опис 1 CY8C26443 28-пински микроконтролер 2 CD74HC04 14-пински скуп од 6 логичких инвертора 3 R1 Отпорник од 100КΩ и максималне снаге од 0.25W 4 R2 Отпорник од 10КΩ и максималне снаге од 0.25W 5 R4 Отпорник од 1КΩ и максималне снаге од 0.25W 6 C1 Керамички кондензатор капацитивности 10nF 7 C2 Керамички кондензатор капацитивности 200nF 8 C4 Керамички кондензатор капацитивности 250nF 9 C5 Керамички кондензатор капацитивности 15pF

10 C6 Керамички кондензатор капацитивности 15pF 11 C7 Електролитски кондензатор од 25μF и напона пробоја 25V12 C8 Керамички кондензатор капацитивности 200nF 13 C9 Керамички кондензатор капацитивности 100nF 14 OS1 Кристал кварца који осцилује на 32687Hz

Табела 9. У табели је приказан списак елемената употребљених при синтези управљачке јединице погона.

Page 42: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 42

6.2. Конфигурација микроконтролера Периферијски уређаји потребни за имплементацију овог дипломског рада су:

• Три осмобитна импулсно-ширинска модулатора са генераторима мртвог времена.

• Осмобитни Σ-∆ анлогно-дигитални конвертор • Универзални асихрони серијски пријемник • Неинвертујући појачавач са програмабилним појачањем • Два компаратора са програмабилним прагом компарације.

У принципу је могуће ставити и аналогни филтер, али то овде није урађено јер један такав филтар већ постоји на картици енергетског претварача. На слици 32. је приказано подешавање параметара везаних за микроконтролер.

Процесорски такт је постављен на вредност 24MHz. Извор нискофреквентног такта је спољашњи и активиран је PLL. Битно је рећи да је избором бројева 10 и 3 у петој и шестој врсти респективно подешена учестаност сигнала на линији 24V1 износи 2.4MHz, док је учестаност такта на линији 24V2, 800kHz. Напон напајања је 5V, а напон аналогне масе је 2.5V (напон напајања подељен са два ). Програмирана толеранција напона је 80%.

Слика 32. На слици је приказан избор параметара микроконтролера за овај пројекат. Осмобитни импулсно-ширински модулатор са генератором мртвог времена заузима два суседна дигитална блока. У реализацији овог дипломског рада употребљена су три таква модула чији излази се воде на пинове микроконтролера који се потом инвертују и воде на интегрисани трофазни енергетски инвертор. Први модул заузима блокове DBA00 и DBA01, други модул заузима блокове DBA03 и DСA00 док трећи модул заузима блокове DСA01 и DСA02. Такт сва три модула је заједнички и као извор је употребљена линија 24V1. На слици 33. је приказано распоређивање првог импулсно-ширинског модулатора са генератором мртвог времена. Први блок је сам импулсно-ширински модулатор, док други блок представља генератор мртвог времена. Једино овај модул има на глобалну излазну магистралу повезан и излаз самог модулатора, док су код осталих на излазну магистралу повезани само излази генератора мртвог времена.

Page 43: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 43

Слика 33. На слици 33 је приказано размештање модула за контролу прве фазе трофазног транзисторског инвертора. На слици 34. су приказани параметри оваквог периферијског уређаја

Као што се са слике може видети период генератора је 250 тактних интервала. Узимајући у обзир да је учестаност такта на линији 24V1 износи 2.4MHz то се добија да је периода импулса 0.10417ms. Постављена ширина импулса је само привремена и мењаће се у програму. Прекид је подешен да буде активиран на добројавање до нуле бројача самог модулатора. Мртво време је подешено да буде 5 тактних периода.

Слика 34. На слици су приказани подешени параметри за модул који управља фазом А инвертора. Што се остала два модула овог типа тиче њихово подешавање је слично оном приказаном на слици 34. Разлика је у томе што је код њих у рубрици ' PWMOutput ' уписано ' none ', док су у рубрикама ' Phase1 ' и ' Phase2 ' уписани ' Global_OUT_4 ' и ' Global_OUT_5 ' тим редом, за модул PWMDB8_2 и ' Global_OUT_6 ' и ' Global_OUT_7 ' за модул PWMDB8_3. Постоји разлика и у подешавању периоде. Због каснијег стартовања (у програму се прво стартује блок ' PWMDB8_1 ', па ' PWMDB8_2 ' и на крају ' PWMDB8_3 ' ) је неопходно ради усклађивања тренутака добројавања до нуле сва три бројача уписати различите почетне периоде. Тако други блок има почетну периоду 249, а трећи 248. Након стартовања сва три блока у регистре периода се упише вредност 250 и тиме је обезбеђено да у даљем програму сви блокови имају једнаке периоде генерисаних импулса.

Page 44: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 44

Осмобитни Σ-∆ анлогно-дигитални конвертор заузима један дигитални (и то мора бити блок DBA02 ) и један аналогни блок (изабран је блок ASB13 ) као такт оба блока (они морају имати јединствен такт ) се користи линија 24V2. Да би обрадио један одбирак овом AD конвертору треба 256 узлазних ивица сигнала такта 24V2 и још 190 периода процесорског такта. Када тајмер доброји до нуле он генереише прекид, приоритет тог прекида је мањи од приоритета прекида PWM блока. За улаз у овај AD конвертор (тј. за улаз у блок ASB13 ) одабран је излаз блока АСA03 у који је смештен неинвертујући појачавач. Универзални асихрони серијски пријемник мора бити смештен у неки од блокова DСA00 до DСA03. У овом пројекту он је смештен у блок DСA03. Као сигнал такта је искоришћен излаз првог импулсно-ширинског модулатора који је повезан на Global_OUT магистралу (тј. Global_OUT0 линију ). Фреквенција тог такта подељена са 8 нам даје брзину преноса и она износи 1200 b/s. Као улаз изабран је параметар Global_IN4. Неинвертујући појачавач са програмабилним појачањем захтева један аналогни блок са континуалном обрадом сигнала и смештен је у блок АСA03. Појачавач је јединични и његова улога је да спроведе сигнал до AD конвертора. Улаз у појачавач је доведен са пина Р06. Компаратори су постављени у блокове АСA02 и АСA01 и користе се за сигнализирање када је напон превелики или премали и када је температура прерасла максималну вредност. Компаратор CMPPRG_2 је смештен у блок АСA01 и врши надгледање напона, док је компаратор CMPPRG_3 смештен у блок АСA02 и врши надгледање температуре.

Page 45: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 45

6.3. Дијаграм тока програма Програм за микроконтролер CY8C26443 који је развијан у оквиру овог дипломског рада се може поделити у три целине:

• Главни програм • Прекидна рутина модула PWMDB8_1 • Прекидна рутина AD конвертора.

Прекиди од стране свих осталих модула су забрањени. У главном програму се врши иницијализација променљивих и пероферијских уређаја као и понеких пинова микроконтролера. На диаграму 1. приказан је део организације главног програма и то онај део који се бави иницијализацијом променљивих.

Диаграм 1. На диаграму је приказан део организације главног програма и то онај део у коме се врши иницијализација променљивих.

Main

DisableGInt

Упис логичког '1' у бите P0[0]; P2[0]; P2[2]; P2[4] који побуђују LE диоде Подешавање побудног мода наведених пинова на ' Strong '

sector=1; direction=1; frequency=0.5Hz; wantedFrequency=50Hz; teta=6° PWMDisconnectFlag(i) =1; PulseWidth(i)=20; i=1,2,3 voltage=voltageMin

counter1=0; counter2=0; tempCheckCounter=2; maxVoltCheckCounter=0; minVoltCheckCounter=5; resetSC_Counter=4;

initFlag= POT_MASK || CURR_INIT_MASK || DEB_MASK; fault=0; onOffFlag=Off; state=0; messgeStatus=0

PGA_1_Start; CMPPRG_2_Start; CMPPRG_3_Start; DELSIG8_1_Start; PWM1_Start; PWM2_Start; PWM3_Start; PWM2_Per=250; PWM3_Per=250; PWM1_EnableInt; PWM2_DisableInt; PWM3_DisableInt;

REG[INT_VECT]=0; EnableWatchDog; ResetWatchDog; EnableGInt;

1

Page 46: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 46

Прво се врши упис логичке јединице у бите који одређују садржај пинова P0[0], P2[0], P2[2] и P2[4]. Тиме се обезбеђује гашење светлећих диода. Оне нису ни дотада светлеле иако је стање на тим пиновима било једнако логичкој ' 0 '. То је било због тога што је начин побуде тих пинова преко '' Pull-down '' отпорника. Како је то неопходно променити морају се прво поуздано угасити диоде, а потом подесити начин побуде тих пинова на '' Strong ''. Потом је неопходно подесити тренутни сектор у коме ће се примењивати реализовани вектор напона. То се ради подешавањем променљиве sector на јединицу. Подесити смер обртања на смер супротан обртању казаљке на сату и то уписом логичког 1 у променљиву direction. Почетна фреквенција се подешава на 0.5Hz, а крајња (жељена ) на 50Hz. То се ради тако што се у променљиве frequencyHIGH и frequencyLOW упише 0 и 1 респективно и у променљиве wantedFrequencyHIGH, wantedFrequencyLOW упише 0 и 100 респективно. Потом се почетни угао подеси на 6° тако што се у променљиве tetaHIGH и tetaLOW упишу 1 и 64 респективно. Потребно је подесити флегове pwm1Disconnect ,pwm2Disconnect и pwm3Disconnect на 1. Тиме се сигнализира прекидној рутини да треба да искључи сва три PWM блока са глобалне излазне магистрале. Такође, потребно је у променљиве pwm1PulseWidth, pwm2PulseWidth и pwm3PulseWidth уписати бројеве који ће се у прекидној рутини учитати у регистре ширине импулса за коришћена три импулсно-ширинска модулатора. Изабрани је број 20 иако је избор практично произвољан. На крају, потребно је подесити почетну вредност амплитуде примењеног напона у складу са карактеристиком регулације датој на слици 4., тј. на већ дефинисану константу voltageMin. Након подешавања ових променљивих приступа се иницијализацији бројача који обезбеђују временске референце великих периода како за дигитално филтрирање одбирака струје, тако и за одређивање корака увећања фреквенције приликом промене брзине обртаја. Прво се иницијализују бројачи Counter1, Counter2 на 0. Ове две бројачке променљиве се користе приликом иницијализације и приликом подешавања учестаности генерисаног сигнала. Када се користе приликом иницијализације Counter1 служи за одређивање периода испитивања тастера, а Counter2 за бројање почетних одбирака струје. Када је погон стартован тада ове две променљиве збирно дају бројач периода између два прекида од стране првог PWM блока. Тиме се обезбеђује временска референца за промену фреквенције излазног сигнала. Потом се бројачи tempCheckCounter, maxVoltCheckCounter и minVoltCheckCounter подесе на вредности 2, 0 и 5 респективно. Ове променљиве се користе као индикатори прекидној рутини да читајући излазе одговарајућих компаратора провере да није дошло до претераног загревања погона или да након напајања инвертора није премали нити превелики. Битно је нагласитi да су њима додељене различите вредности да се спречило испитивање било која два захтева истовремено приликом обраде једног прекида. Бројач resetSC_Counter служи да броји колико је пута ресетована прекострујна заштита. Он се иницијализује на 4. Неопходно је иницијализовати и променњиву initFlag која претставља индикатор стања иницијализације. Иницијализацији струје и испитивању тастера додељен је по један бит. Ти бити су одређени маскама CURR_INIT_MASK и DEB_MASK респективно. Неопходно их је на почетку поставити на логичко 1, потом ће они бити брисани како се који посао око иницијализације буде завршио. Након тога се индикатор грешке, тј. променљива fault подеси на 0. Такође, неопходно је индикатор активности погона onOffFlag подесити на Off. Променљиву state неопходно је подесити на 0. Ову променљиву користимо да направимо машину стања приликом испитивања тастера.

Page 47: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 47

Сада је потребно стартовати аналогне периферијске уређаје што се чини позивом одговарајућих процедура системског API-а. Потом, стартујемо PWM блокове. Након тога у регистре периоде блокова 2 и 3 упишемо 250. То се ради јер је неопходно изједначити периоде сва три PWM генератора. Затим, забране се прекиди од стране блокова 2 и 3, а дозволи прекид од стране блока 1. На крају иницијализације обришу се сви прекиди који чекају на обраду, стартује се WatchDog тајмер, ресетије се WatchDog тајмер и на крају дозволимо све прекиде који нису маскирани. На дијаграму 2. приказан је наставак тела главног програма.

Дијаграм 2. На дијаграму је приказан остатак организације главног програма. Прво се искључи диода LED1. Потом се испитује променљива initFlag. Уколико је једнака нули, наставља се са укључењем погона скоком на лабелу startOfPWM. Уколико није једнака нули испитује се да ли је активан само бит чекања на притискање тастера. Ако није тако враћа се два корака уназад скоком на лабелу waitForInitEnd. Ако је остало само да се притисне тастер онда се укључи диода LED4 и испитује се садржај промељивеonOffFlag. Уколико је та промељива постављена на Оn наставља се са укључењем погона, у супротном се враћа уназад скоком на лабелу waitForInitEnd . Под стартовањем погона подразумева се између осталог иницијализација променљивих initFlagна 0 и onOffFlag на ' Оn '. Такође, неопходно је применити нула вектор на пиновима микроконтролера који контролишу прекидаче инвертора. Након тога се угасе диоде LED2 и LED3, а укључи диода LED4, подеси побуда пинова RESET_SC, ENABLE на ' Strong ', затим се ресетује струјна заштита (за сваки случај ), омогући се рад погона подизањем сигнала ENABLE на висок логички ниво. Након тога се примењује упослено чекање. На дијаграму 3. приказана је организација прекидне рутине AD конвертора.

1

TurnOffLED1

initFlag==0

initFlag&& ~ DEB_MASK==0

TurnOnLED4

onOffFlag==On

state=0; initFlag=0; onOffFlag=0; P1=ZeroVector; TurnOffLED2; TurnOffLED3; TurnOnLED1; ResetSC; EnableDevice;

wait

да

дане

не

не

да

Page 48: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 48

Дијаграм 3. На дијаграму је приказана организација прекидне рутине AD конвертора.

AD_Int.

DisableGInt

Digital filtering

initFlag && bINIT_CUR_MASK==0

counter2++

counter2<4

counter2=0; initCurrent=Sample; initFlag &= bINIT_CUR_MASK oldSample=0; curSamCount=0; counter1=0; counter2=0;

current-=initCurrent; currSqr=sqr(current);

RETI

curSamCount1++;

curSamCount2--;

ZF==1

ZF==1

newSample=a0*oldSample+ b0*currSqr; oldSample=newSample; curSamCount2=9;

newSample<ramp

SetOverCurrFault; SetDebBit; onOffFlag=Off; DisableDevice; TurnOnLED3; ' ljmp waitForInitEnd '

не

неда

дане

не

да

да

да

не

Page 49: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 49

Прво је неопходно дозволити све немаскиране прекиде, како би се обрадио прекид од стране PWMDB8_1 блока. Потом се врши дигитално софтерско филтрирање одбирка струје и тај део изворног кода генерише интегрисано развојно окружење. Након тога се испитује да ли је још у току процес иницијализације струје. Ако јесте инкрементира се бројачка променљива counter2, потом се испитује та променљива. Уколико је мања од 4 још је потребно вршити иницијализацију,у супротном се иницијализација се завршава и узети одбирак смешта у променљиву initCurrent, бројачи curSamCount1 и curSamCount2 се иницијализују на 0 и 9 респективно. Они служе да дају временску референцу за узимање одбирака приликом дигиталног филтрирања квадрата струје. Док се бројачи counter1 и counter2 иницијализују на 0, јер је то неопходно за функционисање прекидне рутине блока ' PWMDB8_1 '. Промељива oldSample се иницијализује на нулу и садржи претходну вредност одбирка квадрата струје. Сада је иницијализација готова и у променљивој initFlag се брише бит који сигнализира да је у току иницијализација струје. Након тога се прекидна рутина завршава. Када је иницијализација готова прелази се на узимање одбирака струје и филтрирање квадрата струје у циљу заштите мотора од дуготрајног преоптерећења. Филтрирање се обавља софтверски и наредба која реализује филтер првог реда је: newSample = a0*oldSample + b0*currSqr . Потом се на место претходног одбирка упише вредност новог израчунатог у променљивој newSample ( наредба oldSample=newSample ). Тада се испитује вредност новоизрачунатог одбирка и уколико је мања од унапред задате вредности завршава се прекидна рутина, у супротном се: подеси onOffFlag на вредност Off, у променљивој initFlag постави на логичко ''1'' онај бит који сигнализира да се чека притисак тастера да би се активирао погон, у променљивој fault се подеси на логичко ''1'' онај бит који сигнализира да је дошло до предугог задржавања струје изнад нимоналне. Потом се искључи погон и изврши скок на лабелу ' waitForInitEnd '. На дијаграму 4. је организација дела прек. рутине блока ' PWMDB8_1 '.

Дијаграм 4. На дијаграму је организација дела прек. рутине бл. PWMDB8_1.

PWMDB8 1 Int

initFlag==0

counter1++; 1

counter1==120;

state==0;

TAST==0

[state]++

[state]<8

[initFlag]&= ~bDEB_MASK

6

не

да

не

да

не

да

да

не

Page 50: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 50

Са дијаграма 4. се може видети да се прво пита да ли је у току иницијализација система. Уколико јесте, увећа се counter1 и пита се да није постао 120. Ако није једнака 120 онда се излази напоље из прекидне рутине. Уколико јесте посматра се стање тастера. Ако није 0 променљива state постаје 0 и иде се на крај прекидне рутине. У супротном се инкрементира и када постане 8 укида се бит у промељивој initFlag који означава да је у току чекање на притисак тастера. Уколико променљива state није постала 8 тада се испитује стање серијског преноса. У сличају да иницијализација није у току, акције које треба предузети су приказане на дијаграму 5. Прво се подесе ширине импулса сва 3 импулсно-ширинска модулатора за наступајућу периоду, уписом претходно израчунатих вредности у одговарајуће регистре поменутих периферијских уређаја. Потом се испитује промељива resetSCFlag и ако је једнака 1 врши се софтерски ресет система. Ако је поменута променљива једнака 0 наставља се даље. Тада се у зависности од промељиве [sector] врши искључивање појединих PWM блокова. У случају да је променљива [sector] једнака 1 неопходно је искључити блок ' PWMDB8_3 ' са глобалне излазне магистрале. Након тога се испитује ширина импулса предвиђена за периферијски блок ' PWMDB8_2 '. Уколико је дужина недопустиво мала тај блок се такође искључује са глобалне излазне магистрале, а ширина импулса се повећава. У случају других вредности промељиве [sector] алгоритам остаје исти само ће се мењати блокови који се искључују. Када се испитају свих 6 случајева променљиве sector прелази се на остатак прекидне рутине. Прво се испитује садржај промељиве onOffFlag што је већ приказано на дијаграму 6. Уколико та променљивљ има вредност ' Оn ' наставља се даље. У супротном се скаче на крај прекидне рутине. У наставку се увећају бројачи tempCheckCounter, maxVoltCheckCounter, minVoltCheckCounter. Прво се испитује да ли је прво наведени бројач достигао вредност ' checkValue '. Уколико јесте, ресетује се бројач, чита се садржај компараторске магистрале и издваја бит који претставља стање компаратора ' CMPPRG_3 '. Уколико је стање 1 тада је дошло до прегревања погона и неопходно је искључити погон, укључити диоду LED3, поставити одговарајући бит у променљивој fault, променљива onOffFlag се постави на ' Off ' и на крају потребно је поставити у промељивој initFlag бит који сигнализира да је у току чекање на притисак тастера. Након тога се скаче на крај прекидне рутине. Потом се испитује променљива maxVoltCheckCounter, тј. да ли је достигла вредност ' checkValue '. У случају да је достигнута вредност ' checkValue ' променљивљ се ресетује на 0 и подешава се референтна вредност компаратора позивом одговарајуће процедуре системског API-а. Потом се испитује бит компараторске магистрале који претставља стање компаратора ' CMPPRG_2 '. Ако је прочитана 1 значи да је дошло до прекорачења напона напајања инвертора и тада треба предузети све оне кораке који су наведени у претходном пасусу за случај прегревања погона. Уколико је променљива minVoltCheckCounter достигла вредност ' checkValue ', потребно је испитати да није напон напајања пао испод задатог минимума. Након тога прибегава се поступку сличном оном у претходном пасусу. Разлика је у томе што се као грешка детектује стање 0 одговарајућег компаратора. У сваком случају се након извршеног тестирања референтна вредност компаратора подеси на ону која је потребна за испитивање максимума напона напајања. Када је све то завршено потребно је израчунати времена која ће се уписати у променљиве које садрже ширине импулса за наредну прекидачку периоду.

Page 51: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 51

Поступак њиховог одређивања приказан је на дисграмима 7. и 8.

Дијаграм 5. На дијаграму је приказан део 2 тока прек. рутине блока ' PWMDB8_1 '

1

Set PWM1 Pulse_Width Set PWM2 Pulse_Width Set PWM3 Pulse_Width

resetSCFlag==0

Reset_SC

Connect PWM1 and PWM2 PWM3Disconnect

sector==1

pwm2Disc==1

PWM2Disconnect

Connect PWM1 and PWM2 PWM3Disconnect

sector==2

pwm1Disc==1

PWM1Disconnect

sector==3

Connect PWM2 and PWM3 PWM1Disconnect

pwm3Disc==1

PWM3Disconnect

Connect PWM2 and PWM3 PWM1Disconnect

sector==4

pwm2Disc==1

PWM2Disconnect

sector==5

Connect PWM1 and PWM3 PWM2Disconnect

pwm1Disc==1

PWM1Disconnect

2

да

не

не

да

не

да

да

не

не

да

да не

да не

не

не

не

да

не

Page 52: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 52

Дијаграм 6. На дијаграму је приказан наставак организације шрекидне рутине блока ' PWMDB8_1 '.

2

sector==6

Connect PWM1 and PWM3 Disconnect PWM2

pwm3Disc==1

Disconnect PWM3

tempCheckCounter++; maxVoltCheckCounter++; minVoltCheckCounter++;

onOffFlag ==On

RTI

tempCheck

tempCheckCounter=0

OverTemp

Set OverTempFault initFlag|= bDEB_MASK onOffFlag=Off DisableDevice TurnOnLed3 ' ljmp waitForInitEnd '

maxVoltCheck

maxVoltCheckCounter=0

OverVoltage

Set MaxVoltFault initFlag|= bDEB_MASK onOffFlag=Off DisableDevice TurnOnLed3 ' ljmp waitForInitEnd '

minVoltCheck

minVoltCheckCounter=0

UnderVoltage

Set MinVoltFault initFlag|= bDEB_MASK onOffFlag=Off DisableDevice TurnOnLed3 ' ljmp waitForInitEnd '

3

не

да

не

да

да

не

да

да

не

не

не

да

да

не

не

не

Page 53: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 53

Прво је потребно испитати да ли се тренутна фреквенција излазног напона разликује од жељене. Уколико се разликује потребно је извршити скуп иструкција које ће извршити прилагођење фреквенција, у супротном се одмах приступа израчунавању времена. Ако долази до промене тренутне фреквенције прво се испитује да ли је потребно увећавање или смањивање исте, што се сигнализира променљивом upDown. Након тога се увећа временски бројач (виши бајт тог бројача је променљива counter2, а нижи counter1 ). Када бројач доброји 512 он се ресетује и у зависности од променљиве upDown се изврши инкрементирање, односно декрементирање фреквенције (фреквенција се такође репрезентује као 16-битна променљива ). Сада је потребно извршити одабир напона у складу са новом фреквенцијом. У случају да је нова учестаност напона напајања мотора већа или једнака од номиналне (која је у програму задата константом ), узима се номинална вредност напонадок се у супротном одговарајућа вредност напона бира из табеле смештене у програмској меморији микроконтролера. Приликом израчунавања ширина импулса за следећу периоду морају се израчунати углови ' teta ' и ' tetaPrim ' (у складу са теоријским разматрањима датим у поглављу 2. ). Потребно је на вредност ' teta ' додати производ прекидачке периоде и тренутно примењене учестаности (како је за све променљиве извршено скалирање, то се своди на просто додавање фреквенцијена на вредност угла записаног променљивима tetaLOW и tetaHIGH ). У сличају да је новодобијени угао ' teta ' већи од 60 степени, мора се увећати променљива sector (тј. мора се инкрементирати по модулу 6 ) и од угла ' teta ' одузети 60 степени. Угао ' tetaPrim ' се рачуна по формули 60° -' teta '. Након тога се израчунавају синусне функције тих углова тако што се прочитају из табеле смештене у програмској меморији микроконтролера. После се приступа множењу синусних функција са напоном и добијају се времена Т1 и Т2, током којих ће бити примењени одговарајући вектори. И синусне функције и израчуната времена су 16-битне неозначене речи. То компликује множење, али је због повећане тачности непходно на тај начин вршити израчунавање. У зависности од вредности променљиве sector у вариабле које садрже ширине импулса за наредну периоду се уписују одговарајуће вредности. Уколико sector једнак 1 у променљиву pwm1PulseWidth се уписује Т1 + Т2, у променљиву pwm2PulseWidth се уписује Т2, док се у променљиву pwm3PulseWidth упише број 10 (да би блок ' PWMDB8_3 ' исправно радио ). Након тога се променљива pwm3Disconnect сетује на 1 чиме се сигнализира да је при наредном проласку кроз прекидну рутину неопходно искључити блок ' PWMDB8_3 ' са глобалне излазне магстрале. Потом се испитује време Т2 и уколико је мања од 7 поставља се променљива pwm2Disconnect на 1 чиме се сигнализаира прекидној рутини која ће обрађивати следећи прекид да треба да искључи овај блок са глобалне излазне магистрале. Поред тога се подеси и променљива pwm2PulseWidth на вредност која гарантује исправан рад блока (рецимо број 20 ). За друге вредности променљиве sector ситуација је слична, тако се рецимо за вредност 2, у променљиву pwm2PulseWidth уписује вредност Т1+Т2, а у променљиву pwm1PulseWidth вредност Т1. Ово подразумева да се провери, да ли је потребно евентуално искључити блок ' PWMDB8_1 ' са глобалне излазне магистрале, као што је већ објашњено. На дијаграму 8. приказано је сликовито које вредности треба уписивати у које променљиве које садрже у случају да променљива sector има друге вредности осим јединице.

Page 54: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 54

Дијаграм 7. Приказан је наставак дијаграма тока прекидне рутине блока ' PWMDB8_1 '.

3

Freq!= wantedFreq

Freq< wantedFreq

upDown=Up upDown=Down

counter++;

counter<512

upDown==Up

counter=0

Freq-- Freq++

freq<freqNom

voltage= vTablefreq

voltage=Max

teta+=freq*Ts;

teta<60°

teta-=60°; (sector++)%6;

tetaPrim=60°-teta; sin1=sinTabelatetaPrim sin2=sinTabelateta T1=sin1*voltage; T2=sin2*voltage;

sector==1

pwm3Disc=1 pwm3PulseWidth=20 pwm2PulseWidth=T2 pwm1PulseWidth=T1+T2

T2<7

pwm2PulseWidth=20 pwm2Disc=1

4

не

да

да не

не

да

да не

да не

не

да

да

не

не

да

Page 55: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 55

Дијаграм 8. Приказан је део дијаграма тока прекидне рутине блока 'PWMDB8_1' који приказује шта је потребно урадити приликом прорачуна

4

sector==2

pwm3Disc=1 pwm3PulseWidth=20 pwm1PulseWidth=T1 pwm1PulseWidth=T1+T2

T1<7

pwm1PulseWidth=20 pwm1Disc=1

[sector]==3

pwm1Disc=1 pwm1PulseWidth=20 pwm3PulseWidth=T2 pwm2PulseWidth=T1+T2

T2<7

pwm3PulseWidth=20 pwm3Disc=1

sector==5

pwm2Disc=1 pwm2PulseWidth=20 pwm1PulseWidth=T2 pwm3PulseWidth=T1+T2

T2<7

pwm1PulseWidth=20 pwm1Disc=1

[sector]==6

[pwm2Disc]=1 pwm2PulseWidth=20 pwm3PulseWidth=T1 pwm1PulseWidth=T1+T2

T1<7

pwm3PulseWidth=20 pwm3Disc=1

5

sector==4

pwm1Disc=1 pwm1PulseWidth=20 pwm2PulseWidth=T1 pwm3PulseWidth=T1+T2

T1<7

pwm2PulseWidth=20 pwm2Disc=1

да не

не

не

не

не

не

не

не

не

не

Page 56: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 56

ширина импулса за наредну периоду, за случај да променљива [sector] има вредности мање од 1 . На дијаграму 9. је приказан наставак дијаграма тока прекидне рутине импулсно-ширинског модулатора. Описан је део изворног кода који испитује да ли је дошло до прекорачења максималне дозвољене тренутне струје у међуколу.

Дијаграм 10. На дијаграму је приказан дијаграм тока дела прекидне рутине којим се проверава да ли је у међуколу дошло до прекорачења тренутне вредности струјеу изнад дозвољене и да ли је потребно извршити програмски ресет микроконтролера. Прво је потребно испитати стање пина на који се доводи ITRIP сигнал. Уколико је он нула онда се прескаче цео даљњи поступак и наставља даље прекидна рутина. У супротном се поставља resetSCFlag на 1 и декрементира се променљива resetSC_Counter. Након тога се испитује садржај декрементиране променљиве и ако је достигао нулу онда је потребно подесити resetSCFlag на 0, подесити у променљивој [initFlag] бит који сигнализира да се чека на притисак тастера, потом се променљива onOffFlag поставља на ' Off ', искључује се погон, укључује се диода LED2 и врши се програмски ресет микроконтролера. У случају да није дошло до прекорачења бројача ресетовања струјне заштите, онда је потребно наставити даље са прекидном рутином. У наставку прекидне рутине се врши серијска комуникација са надређеним рачунаром. Због ограничења од 8 дигиталних периферијских уређаја реализација предаје карактера надређеном рачунару (у даљем тексту само рачунар ) је реализована програмски.

5

resetSCFlag=1 resetSC_Counter--

ITRIP pin

resetSC_Counter==0

resetSCFlag==0 initFlag |= bDEB_MASK onOffFlag=Off DisableDevice TurnOnLed2 Software Reset

6

не

не

да

да

Page 57: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 57

Протокол комуникације је следећи: • Рачунар иницира пренос слањем првог карактера ка микроконтролеру.

Прва два бита одређују тип преноса. Комбинација ' 00 ' иницира циклус читања, а комбинација ' 11 ' циклус уписа једног карактера на специфицирану адресу дату са првих шест бита.

• Потом, микроконтролер шаље исти бајт назад рачунару. • Ако је у питању циклус читања након тога се шаље захтевани бајт. У

супротном се чека на пријем карактера за упис, након чијег пријема се исти пошаље назад рачунару.

Адреса податка у меморији микроконтролера који се било шаље, било прима се одређује тако што се на адресу променљиве BuffFrequencyHIGH дода вредност садржана у 6 бита најмање тежине првог карактера. Реализација овог протокола је приказана на дијаграмима 11. и 12. и 13. и 14.

Дијаграм 11. На дијаграму је приказан део организације изворног кода којим се реализује серијски пренос. На дијаграму 12. је приказан наставак дијаграма 11.

6

Бајт је примљен

messageStatus==4

8

не

не

Грешка?

да

да

helpCounter1++

ZF==1

helpCounter2--

да

ZF==1

MessageStatus=0

да

RTI

не

не

SendMark

да

messageStatus=4

не

messageStatus++ Упис примљеног бајта на локацију receivedByte и на адресу дату на почетку циклуса и у локацију transmitBuff

да

RTI 7

не

Page 58: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 58

Дијаграм 12. На дијаграму је приказан наставак дијаграма тока дела изворног кода којим се реализује серијска веза са надређеним рачунаром. Као што је на дијаграму 11. приказано прво се испитује да ли је примљен нови карактер. Ако није онда се испитује стање преноса, испитујући променљиву messageStatus и узависности од њене вредности се предузимају одређене акције:

• Ако је вредност те промељиве 4 повећа се helpCounter1 и ако достигне нулу декрементира се садржај променљиве helpCounter2 и ако он достигне нулу ресетује се започети серијски пренос тако што се [messageStatus] постави на 0 и прелази се на крај прекидне рутине.

• Ако је њена вредност 0 не предузима се ништа. • Ако је њена вредност 1 или 2 или 3 или 5 прелази се на део изворног

кода који врши серијску предају карактера рачунару. Што је приказано на дијаграму 13.

У случају да је нови бајт ипак примљен потребно је испитати да ли је дошло до грешке. Уколико јесте шаље се ''MARK'' на предајни канал и не чини се ништа. У случају да нема грешке у зависности од вредности променљиве messageStatus се предузимају следећи кораци:

• Ако је њена вредност 4 примљени бајт се упише на локацију [transmitBuff], и на адресу која је већ дата првим бајтом. Такође се инкрементира променљива messageStatus.

• Ако је пак њена вредност 0. Тада се примљени бајт смести на локацију [transmitBuff] како би се касније послао као ехо порука рачунару. Потом

7

messageStatus==0

RTI

не

receivedByte& 11000000b==0

Упис примљеног бајта на локације receivedByte и transmitBuff

да

messageStatus==1

messageStatus==3

receivedByte& 11000000b==С0h

RTI

не

да

не да

Page 59: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 59

се испитују два бита највеће тежине. Ако је у питању комбинација ' 00 ' иницира се циклус читања и messageStatus се иницијализује на 1, док у случају да имамо комбинацију ' 11 ' иницирамо циклус уписа и messageStatus се иницијализује на 3. Уколико није присутна ни једна од те две комбинације процес комуникације се прекида.

Сама предаја карактера надређеном рачунару се реализује програмски. Прво се декрементира променљива transmitCounter2 и уколико није нула (ZF је нула) тада се прелази на крај прекидне рутине. У супротном се вредност те променљиве подеси на 8 и инкрементира transmitCounter1 и у зависности од чије вредности се ради следеће:

• Ако је њена вредност 1 шаље се бит старта тј. логичка нула. • Ако њена вредност није један, а мања је од 9 шаљу се бити податка. • Ако је њена вредност 10 шаље се бит парности, тј. бит најмање тежине

променљиве parity. • Ако је њена вредност већа од 10, а мања или једнака 12 шаљу се

зауставни бити тј. логичке јединице. • У случају да је њена вредност већа од 12, пренос текућег бајта је

завршен и прво се подесе променљиве transmitCounter1 и transmitCounter2 на вредности 0 и 2 респективно, како би биле спремне за следећи трансфер. Затим се инкрементира садржај променљиве messageStatus и пошаље висок логички ниво на предајну линију (он би по логици програма тамо требало већ да се налази, али је ова команда ипак додата ради веће поузданости ).

На дијаграму 14. је приказан наставак акција које је потребно предузети након предатог карактера у зависности од вредности променљиве messageStatus.

• Вредност променљиве је 6. Тада је пренос поруке завршен и вредност која се упише у messageStatus је 0. Потребно је испитати и садржај променљиве strobe. У случају да је њена вредност 1 упише се садржај променљивих BuffFrequencyHIGH и BuffFrequencyLOW у локације wantedFrequencyHIGH и wantedFrequencyLOW респективно и у локацију strobe се упише 0 и након тога се иде на крај прекидне рутине. Ово је неопходно због тога што се жељена фреквенција задаје из два бајта и морају се прво пренети оба да би их микроконтролер посматрао као нову референцу коју је потрбно постићи.

• Ако је вредност променљиве 3 тада је пренос завршен у локацију messageStatus се упише 0 и скок на крај прекидне рутине.

• Ако је вредност променљиве 4 иницијализују се TIMEOUT бројачи helpCounter1 и helpCounter2 на 0 и 6 респективно (тиме се обезбеђује TIMEOUT од 160ms ) и скаче се на крај рутине.

• Ако је вредност променљиве messageStatus 2, тада је потребно уписати у локацију transmitBuff вредност карактера који рачунар жели да прочита и потом изаћи из прекидне рутине.

Page 60: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 60

Дијаграм 13. На дијаграму је приказана организација изворног кода којим се реализује предаја податка надређеном рачунару.

8

messageStatus==0

RTI

да

transmitCounter2--

не

ZF==1

transmitCounter2=8 transmitCounter1++

да

не

transmitCounter1==1

SendSPACE

не

transmitCounter1<=9

да

transmitCounter1==10

transmitCounter1<=12

не

не

transmitCounter1=0 transmitCounter2=8 messageStatus++ SendMARK

SendMARK

не

Бити података

Бит парности

да

да

9

SendMARK

да

RTI

Page 61: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 61

Дијаграм 14. На дијаграму је приказан део организације изворног кода за микроконтролер којим се обавља серијска комуникација са рачунаром. Уједно ово је сам крај прекидне рутине.

messageStatus=0

9

messageStatus==6

messageStatus==3

не

да

messageStatus=0

да

messageStatus==4

не

helpCounter1=0 helpCounter2=6

да

RTI

RTI

RTI

messageStatus==2

не

Упис податка за слање рачунару на адресу transmitBuff

RTI

не

да

strobe==1

strobe=0 freqWANTED=freqBUF

не

да

Page 62: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 62

6.4. Изворни код програма микроконтролера У овом поглављу је дат изворни код за коришћени микроконтролер, којим се врши имплементација дипломског рада. Две датотеке са изворним кодом генерише развојно окружење и то за сваку апликацију и помоћу њих се конфигурише микроконтролер према спецификацијама датим приликом пројектовања. Први такав фајл је boot.asm, а други PSoCConfig.asm. Потом следи фајл ' main.asm ' који садржи иницијализацију променљивих и у коме се стартује погон. ;----------------------------------------------------------------------------- ; Assembly main line ;----------------------------------------------------------------------------- include "m8c.inc" include "PWMDB8_1.inc" include "PWMDB8_2.inc" include "PWMDB8_3.inc" include "CMPPRG_1.inc" include "CMPPRG_2.inc" include "CMPPRG_3.inc" include "PGA_1.inc" include "DELSIG8_1.inc" include "RX8_1.inc" include "diplomski.inc" export _main export sector export direction export voltage export upDown export pwm1PulseWidth export pwm2PulseWidth export pwm3PulseWidth export pwm1Disc export pwm2Disc export pwm3Disc export frequencyLOW export frequencyHIGH export tetaLOW export tetaHIGH export addressLOW export addressHIGH export sin1LOW export sin1HIGH export sin2LOW export sin2HIGH export tetaPrimLOW export tetaPrimHIGH export wantedFrequencyLOW export wantedFrequencyHIGH export initFlag export state export resetSCFlag export fault export onOffFlag export dataStrobe export BuffFrequencyHIGH export BuffFrequencyLOW export T1HIGH

Page 63: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 63

export T2HIGH export T1LOW export T2LOW export tempReg1 export tempReg2 export temp export counter1 export counter2 export resetSC_Counter export tempCheckCounter export minVoltCheckCounter export maxVoltCheckCounter export transmitCounter1 export transmitCounter2 export parity export messageStatus export transmitBuff export addressForSerTrans export helpCounter2 export helpCounter1 export initCurrent export current export currSqr export newSample export oldSample export currSampleCounter1 export currSampleCounter2 export waitForInitEnd area bss(RAM) sector : BLK 1 ; direction : BLK 1 ; pwm1PulseWidth : BLK 1 ;Promenljiva koja sadrzi sirinu impulsa za PWM1 pwm2PulseWidth : BLK 1 ;Promenljiva koja sadrzi sirinu impulsa za PWM2 pwm3PulseWidth : BLK 1 ; pwm1Disc : BLK 1 ;Flagovi koji govore pwm2Disc : BLK 1 ;da li je potrebno diskonektovati PWM pwm3Disc : BLK 1 ;blokove sa GLOBALOUT magistrale frequencyHIGH : BLK 1 ;Visi bajt trenutne frekvencije PWM-a frequencyLOW : BLK 1 ;Nizi bajt trenutne frekvencije PWM-a wantedFrequencyHIGH : BLK 1 ;Visi bajt zeljene frekvencije PWM-a wantedFrequencyLOW : BLK 1 ;Nizi bajt zeljene frekvencije PWM-a tetaHIGH : BLK 1 ;Naredne dve promenljive su visi i nizi bajt ugla teta tetaLOW : BLK 1 ; addressHIGH : BLK 1 ;Naredna dva bajta su visi i nizi bajt adrese addressLOW : BLK 1 ;ugla u look-up tabeli sin1HIGH : BLK 1 ;Naredna dva bajta su sinus ugla 'pi/3-teta' sin1LOW : BLK 1 ; sin2HIGH : BLK 1 ;Naredna dva bajta su sinus ugla 'teta' sin2LOW : BLK 1 ; tetaPrimHIGH : BLK 1 ;Naredna dva bajta pamte ugao ' pi/3-teta ' tetaPrimLOW : BLK 1 ; T1HIGH : BLK 1 ;Vreme trajanja impulsa dobijen proizvodom T1LOW : BLK 1 ;sinusa ugla i primenjenog napona T2HIGH : BLK 1 ;Vreme trajanja impulsa dobijen proizvodom T2LOW : BLK 1 ;sinusaodgovarajuceg ugla i napona tempReg2 : BLK 1 ;U naredne tri promenljive se tempReg1 : BLK 1 ; smeštaju privremeni rezultati temp : BLK 1 ; voltage : BLK 1 ;Primenjeni napon current : BLK 1 ;Izmerena struja initCurrent : BLK 1 ;Izmerena struja kada je pogon iskljucen currSqr : BLK 1 ;kvadrat odbirka struje ( 'current-initCurrent' ) newSample : BLK 1 ;izlaz filtra prvog reda oldSample : BLK 1 ;element za kasnjenje

Page 64: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 64

currSampleCounter1 : BLK 1 ;Brojaci za realizovanje digitalnog filtra struje currSampleCounter2 : BLK 1 ; parity : BLK 1 ;promenljiva koja sadrzi bit parnosti messageStatus : BLK 1 ;promenljiva koja sadrzi status poruke addressForSerTrans : BLK 1 ;adresa koju nadredjeni racunar salje u prvom bajtu transmitBuff : BLK 1 ;Promenljiva za podatak koji se predaje racunaru transmitCounter1 : BLK 1 ;Prvi brojac koji omogućuje vremensku referencu transmitCounter2 : BLK 1 ;Drugi brojac koji omogucuje vremensku referencu helpCounter2 : BLK 1 ;Pomoćne brojacke promenljive helpCounter1 : BLK 1 ; counter1 : BLK 1 ;Promenljive 'counter1' i 'counter2' counter2 : BLK 1 ;su visenamenski brojaci tempCheckCounter : BLK 1 ;Brojac koji odredjuje da li se ispituje temperatura maxVoltCheckCounter : BLK 1 ;Brojac koji odredjuje da li se ispituje maks. napona minVoltCheckCounter : BLK 1 ;Brojac koji odredjuje da li se ispituje min. napona resetSC_Counter : BLK 1 ;Brojac resetovanja strujne zastite upDown : BLK 1 ; state : BLK 1 ;Promenljiva stanja prilikom debouncing-a initFlag : BLK 1 ;Promenljiva koja sadrzi stanje procesa inicijalizacije resetSCFlag : BLK 1 ; BuffFrequencyHIGH : BLK 1 ; BuffFrequencyLOW : BLK 1 ; fault : BLK 1 ; onOffFlag : BLK 1 ; dataStrobe : BLK 1 ; area text(ROM,REL) _main: ; Insert your main assembly code here. /////////////////////////////////////////////////////////////////////// //Inicijalizacija /////////////////////////////////////////////////////////////////////// M8C_DisableGInt TurnOffLED1 TurnOffLED2 TurnOffLED3 TurnOffLED4 SetLEDDriveMode mov [sector],1 ;Postavljanje sektora na 1 mov [direction],1 mov [frequencyLOW],1 ;Postavljanje pocetne frekvencije mov [frequencyHIGH],0 ;na 0.5 Hz mov [wantedFrequencyHIGH],0 ;Inicijijalizujemo mov [wantedFrequencyLOW],100 ;zeljenu ucestanost na 50Hz mov [tetaHIGH],1 ;Inicijalna vrednost ugla tj. postavljamo visi bajt na 1 mov [tetaLOW],64 ;a nizi na 0 mov [voltage],voltageMin ;Inicijalna vrednost napona se postavlja na 'VoltageMin' mov [pwm1Disc],1 ;Naglasavamo da treba diskonektovati PWM1 mov [pwm2Disc],1 ;Naglasavamo da treba diskonektowati PWM2 mov [pwm3Disc],1 ;Naglasavamo da treba diskonektowati PWM3 mov [pwm1PulseWidth],20 ;Vrednosti koje se upisuju u registre PWM mov [pwm2PulseWidth],20 ;prilikom aktiviranja prekidne rutine, mov [pwm3PulseWidth],20 ;a da uredjaj nije pusten u rad. mov [counter1],0 ; mov [counter2],0 ; mov [tempCheckCounter],2 ; mov [maxVoltCheckCounter],0 ; mov [minVoltCheckCounter],5 ; mov [resetSC_Counter],4 ; mov [transmitCounter1],0 ; mov [transmitCounter2],2 ; mov [messageStatus],0 ;Resetuje se indikator stanja poruke mov [initFlag],0 ;Promenljivu "initFlag" prvo inicijalizujemo na nulu

Page 65: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 65

or [initFlag],bDEB_MASK ;potom setujemo bit za ispitivanje potenciometra or [initFlag],bINIT_CUR_MASK ;potom setujemo bit za merenje nulte struje mov [fault],0 ; mov [onOffFlag],Off ; mov [dataStrobe],0 ; ;Inicijalizacija (startovanje)analognih PSoC blokova mov A,PGA_1_HIGHPOWER lcall PGA_1_Start mov A,CMPPRG_2_HIGHPOWER lcall CMPPRG_2_Start mov A,CMPPRG_3_HIGHPOWER lcall CMPPRG_3_Start mov A,DELSIG8_1_HIGHPOWER lcall DELSIG8_1_Start lcall DELSIG8_1_StartAD ;Kraj koda koji je startovao analogne PSoC blokove // Pocetak dela koda koji startuje PWM blokove ;start PWM1 or REG[PWMDB8_1_PWM_CONTROL_REG], bCONTROL_REG_START_BIT or REG[PWMDB8_1_DB_CONTROL_REG ], bCONTROL_REG_START_BIT ;start PWM2 or REG[PWMDB8_2_PWM_CONTROL_REG], bCONTROL_REG_START_BIT or REG[PWMDB8_2_DB_CONTROL_REG ], bCONTROL_REG_START_BIT ;start PWM3 or REG[PWMDB8_3_PWM_CONTROL_REG], bCONTROL_REG_START_BIT or REG[PWMDB8_3_DB_CONTROL_REG ], bCONTROL_REG_START_BIT ;postavlja periodu za PWM2 na 250 mov REG[PWMDB8_2_PWM_PERIOD_REG ], 250 ;postavlja periodu za PWM3 na 250 mov REG[PWMDB8_3_PWM_PERIOD_REG ], 250 lcall PWMDB8_1_EnableInt ; lcall PWMDB8_2_DisableInt ; lcall PWMDB8_3_DisableInt ; mov REG[INT_VC],0 ;Resetovanje svih prekida M8C_ClearWDT ;Resetuj WDT M8C_EnableWatchDog ;Dozvoli WDT M8C_EnableGInt ;Dozvoli sve prekide waitForInitEnd: ;Oko ove labele se vrti program kada ceka start TurnOffLED1 ; mov A,[initFlag] ;Upisemo u akumulator sadrzaj "initFlag" jz startOfPWM ;ukoliko je 0 skok na labelu 'startOfPWM' and A,~bDEB_MASK ;Da li je ostao samo bit koji za jnz waitForInitEnd ;debouncing, ako nije ostajemo u petlji inace se TurnOnLED4 ;Ukljuci indikator da je procesor spreman da ukljuci pogon cmp [onOffFlag],On ;nastavljamo i ispitujemo "onOffFlag" jnz waitForInitEnd ;ako nije skacemo skacemo na 'waitForInitEnd' startOfPWM: ;Ovde se nalazimo kada hocemo da startujemo pogon mov [state],0 ; mov [initFlag],0 ;Postavlja se "initFlag" na nulu mov [onOffFlag],On ;zadate preko serijske veze.onOffflag=On mov REG[PRT1DR],ZeroVector ;U output reg. porta P1 upisujemo zero vector TurnOffLED2 ;Iskljucenje indikatora prekostrujne zastite TurnOffLED3 ;Iskljucenje indikatora 'fault-a' TurnOnLED1 ;Ukljucuje se indikator ukljucenog pogona ResetSC ;Resetujemo strujnu zastitu (za svaki slucaj) EnableDevice ;Podignemo signal 'Enable' i ukljucimo pogon /////////////////////////////////////////////////////////////////////// // Kraj inicijalizacije /////////////////////////////////////////////////////////////////////// wait1: jmp wait1 ret

Page 66: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 66

Следећи фајл је ' DELSIG8int.asm ' који садржи прекидну рутину аналогно-дигиталног конвертора. ;;******************************************************************** ;;******************************************************************** ;; DELSIG8int.asm ;; ;; Assembler source for interrupt routines the 8 bit Delta Sigma ;; A/D converter. ;; ;; Rev B, 2001 May 24 ;; ;; Copyright: Cypress MicroSystems 2000,2001. All Rights Reserved. ;; ;;********************************************************************* ;;********************************************************************* export DELSIG8_1_ADConversion ;; ----------------------------------------------------------------- ;; Register Definitions ;; ----------------------------------------------------------------- ;; ;; Uses 1 Switched Cap Block configured as shown. ;; ;; BIT FIELD Mask/Val Setting ;; ----------------- ----- -------------------- ;; CR0.OSZ 80/1 Feedback cap size 32 ;; CR0.CLOCK_PHASE 40/0 Normal phase ;; CR0.SIGN 20/0 Pos ;; CR0.A_CAP_SIZE 1F/16 16 ;; ;; CR1.INPUT_MUX_A C0/* SCA: User parameter ;; C0/* SCB: User parameter ;; CR1.INPUT_MUX_C 20/* Don't care ;; CR1.B_CAP_SIZE 1F/0 0 ;; ;; CR2.A_OUT 80/0 Off ;; CR2.COMP_OUT 40/1 On ;; CR2.AZ_PHASE 20/1 On ;; CR2.C_CAP_SIZE 1F/0 0 ;; ;; CR3.REF_SELECT C0/3 CMP ;; CR3.FB_CAP_SELECT 20/1 On ;; CR3.FP_CAP_GROUND 10/1 On ;; CR3.INPUT_MUX_B 0C/* SCA: Don't Care - this branch pruned ;; 08/* SCB: Don't Care - this branch pruned ;; CR3.SBB 04/0 SCB: Off ;; CR3.PWR 03/* User Parameter: Power, def=OFF ;; ;; Uses 1 Digital Block for timer ;; ;; BIT FIELD Mask/Val Setting ;; ----------------- ----- -------------------- ;; Reserved C0/* Reserved ;; End 20/1 IsEnd ;; CompareType 10/0 LTorEQ ;; InterruptType 08/0 TerminalCount ;; Function 07/0 Timer ;; ;; DataSelect F0/0 DISABLE ;; ClockSelect 0F/* User Paramet;; ;; Reserved C0/* Resrved ;; AUX OUT Enable 20/0 DISABLE ;; AUX OUT 18/* Don't Care ;; OUT Enable 04/0 DISABLE ;; OUT 03/* DOn't Care ;; ;; Uses 1 Digital Block for Counter ;; ;; BIT FIELD Mask/Val Setting ;; ----------------- ----- -------------------- ;; Reserved C0/* Reserved ;; End 20/1 IsEnd ;; CompareType 10/0 LTorEQ ;; InterruptType 08/0 TerminalCount

Page 67: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 67

;; Function 07/0 Counter ;; ;; DataSelect F0/0 Placement de;; ClockSelect 0F/* User Paramet;; ;; Reserved C0/* Resrved ;; AUX OUT Enable 20/0 DISABLE ;; AUX OUT 18/* Don't Care ;; OUT Enable 04/0 DISABLE ;; OUT 03/* Don't Care ;; include "DELSIG8_1.inc" include "m8c.inc" include "diplomski.inc" area bss(RAM) iOut: BLK 2 ;the ADC iTmp2: BLK 2 ;z^-2 iTmp1: BLK 2 ;z^-1 area text(ROM,REL) ;;------------------------------------------------------------------ ;; DELSIG8_1_ADConversion: ;; This routine takes the data from the decimator and calculates ;; a new 8 bit value. A entry point in this API has been marked where the user ;; get this data. ;; INPUTS: None. ;; OUTPUTS: None. ;;------------------------------------------------------------------ LowByte : equ 1 HighByte : equ 0 bINIT_CUR_MASK : equ 4 ; Maska bita koji predstavlja inicijalizaciju pocetne struje DELSIG8_1_ADConversion: M8C_DisableGInt push A ;Initial state ;Out (x3-x2)-(x2-x1) ;Tmp2 (x2-x1) ;Tmp1 x1 ;deci x0 mov [(iOut + LowByte)], [(iTmp2 + LowByte)] mov [(iOut + HighByte)],[(iTmp2 + HighByte)] ;Tmp2 moved to Out ;Out (x2-x1) ;Tmp2 (x2-x1) ;Tmp1 x1 ;deci x0 mov [(iTmp2 + LowByte)], [(iTmp1 + LowByte)] mov [(iTmp2 + HighByte)],[(iTmp1 + HighByte)] ;Tmp1 moved to Tmp2 ;Out (x2-x1) ;Tmp2 x1 ;Tmp1 x1 ;deci x0 mov A,reg[DEC_DL] mov [(iTmp1 + LowByte)],A sub [(iTmp2 + LowByte)],A mov A,reg[DEC_DH] mov [(iTmp1 + HighByte)],A sbb [(iTmp2 + HighByte)],A ;Deci to Tmp1 & deci subtracted from Tmp2 ;Out (x2-x1) ;Tmp2 x1-x0 ;Tmp1 x0 ;deci x0 mov A,[(iTmp2 + LowByte)] sub [(iOut + LowByte)],A mov A,[(iTmp2 + HighByte)] sbb [(iOut + HighByte)],A ;Subtract Tmp2 for Out ;Out (x2-x1)-(x1-x0)

Page 68: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 68

;Tmp2 x1-x0 ;Tmp1 x0 ;deci x0 cmp [(iOut + HighByte)],10h jnz else2 ; if(value is full scale) mov A,7fh jmp endif2 else2:;(value is less than full scale) mov A,[(iOut + HighByte)] rlc [(iOut + LowByte)] ; divide by 32 (multiply by 8) rlc A rlc [(iOut + LowByte)] rlc A rlc [(iOut + LowByte)] rlc A endif2: ;;-------------------------------------------------------- ;; ;; data is now in A. ;; The user's handler should be placed here ;; ;;-------------------------------------------------------- push A mov A,[initFlag] and A,bINIT_CUR_MASK jz noInit pop A inc [counter2] cmp [counter2],4 jc end mov [counter2],0 mov [initCurrent],A and [initFlag],~bINIT_CUR_MASK mov [oldSample],0 mov [currSampleCounter1],0 ; mov [currSampleCounter2],9 ; jmp end noInit: pop A mov [current],A mov A,[initCurrent] sub A,[current] mov REG[MUL_X],A ; mov REG[MUL_Y],A ; mov A,REG[MUL_DH] ; mov [currSqr],A ; mov A,REG[MUL_DL] ; add A,128 ; adc [currSqr],0 ; inc [currSampleCounter1] ; jnz end ; dec [currSampleCounter2] ; jnz end ; mov [currSampleCounter2],9 ; mov A,[oldSample] ; mov REG[MUL_X],A ; mov REG[MUL_Y],a0 ; mov A,REG[MUL_DL] ; mov [tempReg1],A ; mov A,REG[MUL_DH] ; mov [tempReg2],A ; mov A,[currSqr] ; mov REG[MUL_X],A ; mov REG[MUL_Y],b0 ; mov A,REG[MUL_DH] ; add A,[tempReg2] ; mov [newSample],A ; mov A,REG[MUL_DL] ; add A,[tempReg1] ; adc [newSample],0 ; mov A,[newSample] ; mov [oldSample],A ;

Page 69: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 69

cmp A,ramp ; jc end ; or [fault],bLONG_T_OVER_CUR ; or [initFlag],bDEB_MASK ;Podesimo bit za deb. u "initFlag" promenljivoj mov [onOffFlag],Off ;Podesimo "onOffFlag" na 'Off'. Sa ovimsmo podesili da program shvati da je pogon DisableDevice ;iskjucen. Makroom 'DisableDevivce' iskljucujemo pogon TurnOnLED3 ;Ukljucimo LED3 kao indikator da se desio 'FAULT' ljmp waitForInitEnd end: pop A reti DELSIG8_1_APIINT_END: Најзначајнији део изворног кода садржан је у датотеци ' PWMDB8_1.asm ' која у ствари садржи синхрону прекидну рутину која се активира са учестаношћу 9.6kHz. ;------------------------------------------------------------------------------ ; FILENAME: PWMDB8_1int.asm ; VERSION: Rev B, 2001 May 21 ;------------------------------------------------------------------------------ ; DESCRIPTION: ; Interrupt handler routine for PWMDB8 user module instance: ; PWMDB8_1. ;------------------------------------------------------------------------------ ; Copyright (c) Cypress MicroSystems 2000,2001. All Rights Reserved. ;------------------------------------------------------------------------------ include "PWMDB8_1.inc" include "PWMDB8_2.inc" include "PWMDB8_3.inc" include "RX8_1.inc" include "m8c.inc" include "diplomski.inc" ;----------------------------------------------------- ; Export interrupt handler ; NOTE that interrupt handler is NOT exported ; for access by C function. Interrupt handlers ; are not callable by C functions. ;----------------------------------------------------- export PWMDB8_1INT ;----------------------------------------------------------------------------- ; FUNCTION NAME: PWMDB8_1Int ; ; DESCRIPTION: ; Interrupt handler for instance PWMDB8_1. ; ; This is a place holder function. If the user requires use of an interrupt ; handler for this function, then place code where specified. ; ; ARGUMENTS: ; none. ; ; RETURNS: ; none. ; ; SIDE EFFECTS: ; none. ; ; THEORY of OPERATION: ; none. ; ;----------------------------------------------------------------------------- PWMDB8_1INT: ;-------------------------- ; Place user code here!!! ;-------------------------- push A push X

Page 70: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 70

mov A,[initFlag] ;Ako je "initFlag" razlicito od nule jnz checkForSerialData ;skok na labelu za inicijalizaciju ;Set PulseWidth for both PWM mov A,[pwm1PulseWidth] SetPWM1PulseWidth mov A,[pwm2PulseWidth] SetPWM2PulseWidth mov A,[pwm3PulseWidth] SetPWM3PulseWidth mov A,[resetSCFlag] jz skip ResetSC skip: M8C_SetBank1 ;Setujemo banku 1 Register file-a,da bismo konektovali ;i diskonektovali PSOC portove na GLOBALOUT magistralu cmp [sector],1 jnz next1 PWM3Disconnect ;iskljucenje PWM3 sa GLOBALOUT magistrale ConnectPWM1 ;ukljucenje na GLOBALOUT magistralu PWM1 ConnectPWM2 ;ukljucenje na GLOBALOUT magistralu PWM2 cmp [pwm2Disc],0 ;Ako je pak "pwm2Disc"=0 moramo jnz next1 ;diskonektovati i PWM2 sa GLOBALOUT magistrale PWM2Disconnect ;sto se ovim makroom i cini next1: cmp [sector],2 jnz next2 PWM3Disconnect ;iskljucenje PWM3 sa GLOBALOUT magistrale ConnectPWM1 ;ukljucenje na GLOBALOUT magistralu PWM1 ConnectPWM2 ;ukljucenje na GLOBALOUT magistralu PWM2 cmp [pwm1Disc],0 ;Ako je pak "pwm1Disc"=0 moramo jnz next2 ;diskonektovati i PWM1 sa GLOBALOUT magistrale PWM1Disconnect ;sto se ovim makroom i cini next2: cmp [sector],3 jnz next3 PWM1Disconnect ;iskljucenje PWM1 sa GLOBALOUT magistrale ConnectPWM3 ;ukljucenje na GLOBALOUT magistralu PWM3 ConnectPWM2 ;ukljucenje na GLOBALOUT magistralu PWM2 cmp [pwm3Disc],0 ;Ako je pak "pwm3Disc"=0 moramo jnz next3 ;diskonektovati i PWM3 sa GLOBALOUT magistrale PWM3Disconnect ;sto se ovim makroom i cini next3: cmp [sector],4 jnz next4 PWM1Disconnect ;iskljucenje PWM1 sa GLOBALOUT magistrale ConnectPWM3 ;ukljucenje na GLOBALOUT magistralu PWM3 ConnectPWM2 ;ukljucenje na GLOBALOUT magistralu PWM2 cmp [pwm2Disc],0 ;Ako je pak "pwm2Disconnect"=0 moramo jnz next4 ;diskonektovati i PWM2 sa GLOBALOUT magistrale PWM2Disconnect ;sto se ovim makroom i cini next4: cmp [sector],5 jnz next5 PWM2Disconnect ;iskljucenje PWM2 sa GLOBALOUT magistrale ConnectPWM3 ;ukljucenje na GLOBALOUT magistralu PWM3 ConnectPWM1 ;ukljucenje na GLOBALOUT magistralu PWM1 cmp [pwm1Disc],0 ;Ako je pak "pwm1Disconnect"=0 moramo jnz next5 ;diskonektovati i PWM1 sa GLOBALOUT magistrale PWM1Disconnect ;sto se ovim makroom i cini next5: cmp [sector],6 jnz next6 PWM2Disconnect ;iskljucenje PWM2 sa GLOBALOUT magistrale ConnectPWM3 ;ukljucenje na GLOBALOUT magistralu PWM3 ConnectPWM1 ;ukljucenje na GLOBALOUT magistralu PWM1 cmp [pwm3Disc],0 ;Ako je pak "pwm3Disconnect"=0 moramo

Page 71: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 71

jnz next6 ;diskonektovati i PWM3 sa GLOBALOUT magistrale PWM3Disconnect ;sto se ovim makroom i cini next6: M8C_SetBank0 cmp [onOffFlag],On ;Ako nije pogon ukljucen ni na koji nacin jnz end ;onda skok na kraj,a ako jeste onda nastavak inc [tempCheckCounter] ; inc [maxVoltCheckCounter] ; inc [minVoltCheckCounter] ; cmp [tempCheckCounter],checkValue jnz checkMaxVoltCounter ;Ako vrednost "tempCheckCounter" nije 'checkValue' skok mov [tempCheckCounter],0 ;Ako pak jeste u promenljivu "tempCheckCounter" upisemo nulu mov A,[CMP_CR] ;U akumulator upisemo sadrzaj registra CMP_CR and A,bTEMP_MASK ;Ostavimo samo bit koji predstavlja komparator za temperaturu jz checkFrequency ;ako je nula preskacemo na ispitivanje frekvencije or [fault],bOVER_TEMP_FAULT ;Ako nije nula onda treba setovati fault usled pregrevanja or [initFlag],bDEB_MASK ;Podesimo bit za deb. u "initFlag" promenljivoj mov [onOffFlag],Off ;Podesimo "onOffFlag" na 'Off'. Sada program zna da je pogon DisableDevice ;iskjucen. Makroom 'DisableDevivce' iskljucujemo pogon TurnOnLED3 ; ljmp waitForInitEnd ; checkMaxVoltCounter: ;Ovde se ispituje da nije doslo do prekoracenja dozvoljenog napona cmp [maxVoltCheckCounter],checkValue jnz checkMinVoltCounter ;Ako nije vreme za njegovo ispitivanje onda skok mov [maxVoltCheckCounter],0 ;Ako jeste resetujemo u brojac mov A,REG[CMP_CR] ;Ucitamo u akumulator registar CMP_CR push A ;Stavimo ACC na stek da bismo promenili ref. vrednost mov A,MIN_VOLT_REF ;Sto sa naredne dve instrukcije i cinimo call CMPPRG_2_SetRef ; pop A ;Restauriramo ACC and A,bVOLT_MASK ;Vidimo da li je setovan bit za taj komparator jz checkFrequency ;ako nije skacemo na ispitivanje frekvencije or [fault],bVOLT_MAX_FAULT ;U suprotnom setujemo odgovarajuci bit u promenljivoj 'fault' or [initFlag],bDEB_MASK ;Podesimo bit za deb. u "initFlag" promenljivoj mov [onOffFlag],Off ;Podesimo "onOffFlag" na 'Off'. Program sada zna da je pogon DisableDevice ;iskjucen. Makroom 'DisableDevivce' iskljucujemo pogon TurnOnLED3 ; ljmp waitForInitEnd ; checkMinVoltCounter: cmp [minVoltCheckCounter],checkValue jnz checkFrequency ; mov [minVoltCheckCounter],0 ; mov A,REG[CMP_CR] ; push A ; mov A,MAX_VOLT_REF ; call CMPPRG_2_SetRef ; pop A ; and A,bVOLT_MASK ; jnz checkFrequency ; or [fault],bVOLT_MIN_FAULT ; or [initFlag],bDEB_MASK ;Podesimo bit za deb. u "initFlag" promenljivoj mov [onOffFlag],Off ;Podesimo "onOffFlag" na 'Off'. Sa ovimsmo podesili da program DisableDevice ;shvati da je pogon iskjucen. Makrom 'DisableDevivce' to radi TurnOnLED3 ;Ukljucimo LED3 kao indikator da se desio 'FAULT' ljmp waitForInitEnd checkFrequency: mov A,[frequencyHIGH] ;U Acc ucitamo visi bajt fekvencije cmp A,[wantedFrequencyHIGH] ;To poredimo sa zeljenim visim bajtom frekvencije jnz setDir ;ako nisu jednaki onda skacemo da izvrsimo blok koji ih azurira mov A,[frequencyLOW] ;U Acc ucitamo nizi bajt frekvencije cmp A,[wantedFrequencyLOW] ;ako nisu jednaki onda nastavljamo dalje ,a ako jesu jz continue ;skacemo na labelu "continue" ;Ako se trenutna frekvencija razlikuje od zeljene onda nastavak na labeli "continue" setDir:

Page 72: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 72

mov [upDown],Up ;Ako je zeljena frekvencija manja od trenutne upDown=Down jc UpdateFrequency ; u suprotnom postaje 'Up' mov [upDown],Down ; UpdateFrequency: inc [counter1] ;Sa promenljivima "counter1" i "counter2" jnz continue ;se obezbedjuje da na svakih 2560 inc [counter2] ;otkucaja tajmera dodje do azuriranja napona i frekvencije cmp [counter2],10 ; jc continue ; cmp [upDown],Up ;Ako promenljiva "upDown" nije jednaka'Up' onda skacemo na labelu jnz subOfFreq ;'subOfFreq' u suprotnom nastavljamo dalje add [frequencyLOW],step ;Prvo nizeg,pa viseg bajta adc [frequencyHIGH],0 ; jmp setVoltage ;Skacemo na labelu 'setVoltage' subOfFreq: ; sub [frequencyLOW],step ;Potrebno je izvrsiti oduzimanje (dekrrementiranje) frekvencije sbb [frequencyHIGH],0 ;jer je sadrzaj promenljive "upDown" bio jednak 'Down' setVoltage: ;Da li je trenutna frekvencija manja od nom? cmp [frequencyHIGH],freqNomHIGH jc pickVoltage ;ako jeste skace se na labelu 'pickvoltage' jnz setMaxVolt ;u suprotnom se voltage podesi na maksimum cmp [frequencyLOW],freqNomLOW jc pickVoltage setMaxVolt: mov [voltage],voltageMax jmp continue pickVoltage: ;Ovde se program nalazi ako treba da iz tabele uzme napon mov A,[frequencyLOW] ;frekvencija manja od nominalne. add A,<voltageT ;Visi i nizi bajt se stave u A i X registre mov X,A ;potom se iz programske memorije to ucita mov A,[frequencyHIGH] ;i upise u promenljivu "voltage" adc A,>voltageT ; romx ; mov [voltage],A ; continue: cmp [direction],1 ;ako je zadati smer pozitivan nastavljam jnz NO ;u suprotnom skacemo na labelu NO mov A,[frequencyLOW] ;ove cetiri instrukcije izvrsavaju add [tetaLOW],A ;16-bitno sabiranje teta:=teta+ delta mov A,[frequencyHIGH] adc [tetaHIGH],A cmp [tetaHIGH],teta60HIGH ;Ovde se vrsi poredjenje da li je doslo jc NO_crossing_the_border ;do prelaska granice izmedju sectora jnz cross_the_border ;ako jeste onda se skace na labelu cmp [tetaLOW],teta60LOW ; "cross_the_border" u suprotnom na labelu jc NO_crossing_the_border ;"NO_crossing_the_border". cross_the_border: sub [tetaLOW],teta60LOW ;oduzimanje teta:=teta-teta60 koje vrsimo sbb [tetaHIGH],teta60HIGH ;kada smo presli granicu sectora inc [sector] ;inkrementira se tekuci sector cmp [sector],7 ;ako je promenljiva "newSektor" jednaka 7 jc NO_crossing_the_border ;tada treba da joj dodelimo vrednost 1 mov [sector],1 ;inace da nastavimo od labele ljmp NO_crossing_the_border ;"NO_crossing_the_border" NO: mov A,[frequencyHIGH] ;U narednom bloku instrukcija se uporedjuju ugao teta cmp A,[tetaHIGH] ;i pomeraj delta.Prvo se porede visi bajtovi ovih promenljivih jc substraction ;ako je visi bajt ugla teta veci automatski je 'teta' vece i jnz cross_the_border2 ;i mi skacemo na labelu "substraction" gde se vrsi oduzimanje mov A,[frequencyLOW] ;ako su i nejednaki onda smo presli granicu i skacemo na labelu cmp A,[tetaLOW] ;"cross_the_border2",ako je ZF 0 onda poredimo nize bajtove

Page 73: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 73

jc substraction ;i po potrebi skacemo na labelu "substraction" ;ili izvrsavamo narednu instrukciju cross_the_border2: add [tetaLOW],teta60LOW ;Izvrsavamo sabiranje 16 bitno 'teta:=teta+teta60' adc [tetaHIGH],teta60HIGH ; dec [sector] ;dekrementiramo promenljivu "sector" cmp [sector],0 ;Ako je promenljiva "sector" postala 0 jnz substraction ;tada treba izvrsiti dodelu 'sector:=6' mov [sector],6 ; substraction: mov A,[frequencyLOW] ;Ovde se vrsi oduzimanje 'teta:=teta-delta'. sub [tetaLOW],A ;Prvo se oduzimaaju nizi bajtovi,a potom visi mov A,[frequencyHIGH] ;pri tome se oduzimanje nizih bajtova vrsi sa pozajmicom sbb [tetaHIGH],A ; NO_crossing_the_border: mov A,teta60LOW ;U narednim instrukcijama odradjujemo "tetaPrim:=teta60-teta" sub A,[tetaLOW] ;Prvo se u akumulator upise konstanta "teta60LOW",nakon toga mov [tetaPrimLOW],A ;se od akumulatora oduzme "tetaLOW" i to se smesti na lokaciju mov A,teta60HIGH ;"tetaPrimLOW".Isto se uradi i sa visim bajtovima podatka,s time sbb A,[tetaHIGH] ;da se ovde vrsi oduzimanje sa pozajmicom(sbb) mov [tetaPrimHIGH],A ; mov A,[tetaLOW] ;Mi zelimo da na adresu "SinusnaTabela" dodamo dvostruku vrednost rlc A ;promenljive "teta", rotiranjem ulevo,mnozimo je sa 2 and A,0FEh ;ovom instrukcijom se ubija eventualna jedinica koja je mogla iz CF mov [addressLOW],A ;da dospe na bit najmanje tezine.Sada u nizi bajt adrese upisemo A mov A,[tetaHIGH] ;Slicno to uradimo sa visim bajtom adrese,samo sto se ovde ne vrsi rlc A ;brisanje bita najmanje tezine mov [addressHIGH],A ;Upisujemo akumulator u visi bajt adrese add [addressLOW],<SinusnaTabela ;Dodajemo nizi bajt adrese na nizi bajt 'SinusnaTabela' adc [addressHIGH],>SinusnaTabela ;Dodajemo visi bajt adrese na visi bajt 'SinusnaTabela' mov A,[addressHIGH] ;Ovako formiranu adresu upisujemo u A i X registar mov X,[addressLOW] ; romx ;ovime u A dohvatamo visi bajt sinusa ugla 'teta' mov [sin2HIGH],A ; inc X ;Uvecamo X da bismo dohvatili nizi bajt mov A,[addressHIGH] ;U A upisemo visi bajt adrese adc A,0 ;Ako je doslo do prekoracenja pri predhodnom sabiranju romx ;ovime dohvatamo nizi bajt sinusa ugla 'teta' mov [sin2LOW],A ; mov A,[tetaPrimLOW] ;U ovih nekoliko instrukcija obavljamo slican posao rlc A ;s tim da to radimo za ugao '60-teta' and A,0FEh ; mov [addressLOW],A ; mov A,[tetaPrimHIGH] ; rlc A ; mov [addressHIGH],A ; add [addressLOW],<SinusnaTabela ; adc [addressHIGH],>SinusnaTabela ; mov A,[addressHIGH] ; mov X,[addressLOW] ; romx ; mov [sin1HIGH],A ; inc X ; mov A,[addressHIGH] ; adc A,0 ; romx ; mov [sin1LOW],A ; mov REG[MAC_CL0],0 ;Resetujemo vrednost akumulacionog registra ;odredjivanje vremena T1 mov [temp],0 ;postavi se [temp] na nulu, ako je potrebno kasnije se setuje [voltage] and F,~bFlagCarry ;Ocistimo CF mov A,[sin1LOW] ; rrc A ;podelimo "sin1LOW" sa 2 i ostavimo ga u akumulatoru jnc noLastDigit1 ;ukoliko je setovan CF tada je 'izgubljena' cifra 1 i potrebno mov X,[voltage] ;je rezultat uvecati za vrednost drugog umnoska

Page 74: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 74

mov [temp],X ;(napona napajanja motora) koji je u promenljivoj [temp] noLastDigit1: mov REG[MUL_X],A ;U registar 'MUL_X' se upisuje promenljiva [sin1LOW] podeljena sa 2 mov A,[voltage] ; mov REG[MUL_Y],A ;U registar 'MUL_Y' se upisuje promenljiva [voltage] skaliranom sa 2 mov A,REG[MUL_DL] ; mov [tempReg1],A ;U [tempReg1] se stavlja nizi bajt proizvoda mov A,REG[MUL_DH] ; mov [tempReg2],A ;U [tempReg2] se stavlja visi bajt proizvoda and F,~bFlagCarry ;Ocistimo CF rlc [tempReg1] ; rlc [tempReg2] ;Pomnozimo rezultat sa 2 mov A,[temp] ;Dodaje se promenljiva temp koja sadrži nula ili voltage u zavisnosti add [tempReg1],A ;da li je prilikom deljena sa 2 cifra koja je prebacena u CF 0 ili 1 adc [tempReg2],0 ;Izvrsi se eventualni prenos bita rlc [tempReg1] ; rlc [tempReg2] ;Pomnozimo rezultat sa 2 add [tempReg1],128 ;Izvrsava se zaokruzivanje adc [tempReg2],0 ; mov A,[sin1HIGH] ;Sada se promenljiva [voltage] mnozi sa visim bajtom sinusa ugla mov REG[MUL_X],A ;koji je vec skaliran sa 2 mov A,REG[MUL_DL] ;potom se nizi bajt rezultata upise u promenljivu [T1LOW] mov [T1LOW],A ; mov A,REG[MUL_DH] ; mov [T1HIGH],A ;U promenljivu [T1HIGH] se upise visi bajt rezultata and F,~bFlagCarry ;Ocistimo CF rlc [T1LOW] ; rlc [T1HIGH] ;Pomnozimo rezultat sa 2 mov A,[tempReg2] ;doda se na nizi bajt visi bajt prethodnog proizvoda add [T1LOW],A ; adc [T1HIGH],0 ;potom se izvrsi zaokruzivanje ;odredjivanje vremena T2, analogno odredjivanju vremena T1 mov [temp],0 and F,~bFlagCarry ;Ocistimo CF mov A,[sin2LOW] rrc A jnc noLastDigit2 mov X,[voltage] mov [temp],X noLastDigit2: ;podelimo "sin2LOW" sa 2 i ostavimo ga u akumulatoru mov REG[MUL_X],A mov A,[voltage] mov REG[MUL_Y],A mov A,REG[MUL_DL] mov [tempReg1],A mov A,REG[MUL_DH] mov [tempReg2],A and F,~bFlagCarry ;Ocistimo CF rlc [tempReg1] rlc [tempReg2] mov A,[temp] add [tempReg1],A adc [tempReg2],0 rlc [tempReg1] rlc [tempReg2] ;Pomnozimo rezultat sa 4 add [tempReg1],128 adc [tempReg2],0 mov A,[sin2HIGH] mov REG[MUL_X],A mov A,REG[MUL_DL] mov [T2LOW],A mov A,REG[MUL_DH] mov [T2HIGH],A and F,~bFlagCarry ;Ocistimo CF rlc [T2LOW] rlc [T2HIGH] ;Pomnozimo rezultat sa 2 mov A,[tempReg2]

Page 75: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 75

add [T2LOW],A adc [T2HIGH],0 ;Upis vremena u promenljive "pwm1PulseWidth", "pwm2PulseWidth", "pwm3PulseWidth" cmp [sector],1 ;Ako je "sector==1" nastavljamo dalje jnz skip1 ;u protivnom skacemo na labelu 'skip1' mov [pwm3PulseWidth],10 ;U prekidnoj rutini cemo upisati U PWM_Pulse_Width reg. 10 mov [pwm3Disc],1 ;a programu javljamo da treba da iskljuci te blokove add [T2LOW],128 ;sa pinova P1[7] i P[6] adc [T2HIGH],0 ; mov A,[T1LOW] ; add A,[T2LOW] ; mov A,[T2HIGH] ; mov [pwm2PulseWidth],A ; adc A,[T1HIGH] ; mov [pwm1PulseWidth],A ; mov A,0 mov [pwm1Disc],A mov [pwm2Disc],A cmp [pwm2PulseWidth],7 jnc end mov [pwm2PulseWidth],10 ;U registar sirine impulsa PWM2 bloka upisujemo 10 mov [pwm2Disc],1 ;dok signaliziramo setovanjem ovog flega da treba da se otkaci sa porta skip1: cmp [sector],2 ;Ako je "sector"==2 tada nastavljamo inace skacemo na labelu 'skip2' jnz skip2 mov [pwm3PulseWidth],10 ;Postavljamo promenljivu "pwm3PulseWidth" na 10 mov [pwm3Disc],1 ;oznacavamo da PWM3 treba diskonektovati sa pinova P1[7] i P1[6] add [T1LOW],128 ;Zaokruzujemo "sin1" tako sto dodajemo 128 i ako dodje do adc [T1HIGH],0 ;prenosa tada sa instrukcijom 'adc' korigujemo promenljivu "T1HIGH" mov A,[T2LOW] ;Sa korigovanom vrednoscu 'sin1' mi treba da racunamo 'T1'+'T2' add A,[T1LOW] ;Prvo saberemo nize bajtove da vidimo da li ima prenosa. mov A,[T1HIGH] ;Onda zaokruzenu vrednost za "T1HIGH" upisemo u "pwm1PulseWidth", mov [pwm1PulseWidth],A ;tako sto je prvo upisemo u ACC adc A,[T2HIGH] ;Potom sa 'adc' instrukcijom sracunamo zaokruzenu vrednost 'T1+T2' mov [pwm2PulseWidth],A ;i nju upisemo u "pwm2PulseWidth" mov A,0 ;U promenljive "pwm1Disconnect" i "pwm2Disconnect" mov [pwm1Disc],A ;upisujemo 0 cime oznacavomo da one nisu za iskljucivanje mov [pwm2Disc],A ; cmp [pwm1PulseWidth],7 ;Ako je pak "pwm1PulseWidth" manje od 7 tada treba izvrsiti korekciju jnc end ;i tu promenljivu postaviti na neku vrednost vecu od 7 recimo 10 mov [pwm1PulseWidth],10 ; i ipak treba je oznaciti za diskonekciju. mov [pwm1Disc],1 ;Ako nije onda skacemo na labelu 'end' skip2: cmp [sector],3 jnz skip3 mov [pwm1PulseWidth],10 mov [pwm1Disc],1 add [T2LOW],128 adc [T2HIGH],0 mov A,[T1LOW] add A,[T2LOW] mov A,[T2HIGH] mov [pwm3PulseWidth],A adc A,[T1HIGH] mov [pwm2PulseWidth],A mov A,0 mov [pwm3Disc],A mov [pwm2Disc],A cmp [pwm3PulseWidth],7 jnc end mov [pwm3PulseWidth],10 mov [pwm3Disc],1 skip3: cmp [sector],4 jnz skip4

Page 76: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 76

mov [pwm1PulseWidth],10 mov [pwm1Disc],1 add [T1LOW],128 adc [T1HIGH],0 mov A,[T2LOW] add A,[T1LOW] mov A,[T1HIGH] mov [pwm2PulseWidth],A adc A,[T2HIGH] mov [pwm3PulseWidth],A mov A,0 mov [pwm3Disc],A mov [pwm2Disc],A cmp [pwm2PulseWidth],7 jnc end mov [pwm2PulseWidth],10 mov [pwm2Disc],1 skip4: cmp [sector],5 jnz skip5 mov [pwm2PulseWidth],10 mov [pwm2Disc],1 add [T2LOW],128 adc [T2HIGH],0 mov A,[T1LOW] add A,[T2LOW] mov A,[T2HIGH] mov [pwm1PulseWidth],A adc A,[T1HIGH] mov [pwm3PulseWidth],A mov A,0 mov [pwm1Disc],A mov [pwm3Disc],A cmp [pwm3PulseWidth],7 jnc end mov [pwm3PulseWidth],10 mov [pwm3Disc],1 skip5: cmp [sector],6 jnz skip6 mov [pwm2PulseWidth],10 mov [pwm2Disc],1 add [T1LOW],128 adc [T1HIGH],0 mov A,[T2LOW] add A,[T1LOW] mov A,[T1HIGH] mov [pwm3PulseWidth],A adc A,[T2HIGH] mov [pwm1PulseWidth],A mov A,0 mov [pwm1Disc],A mov [pwm3Disc],A cmp [pwm1PulseWidth],7 jnc end mov [pwm1PulseWidth],10 mov [pwm1Disc],1 skip6: mov A,REG[PRT2DR] ;Ucitamo u akumulator stanje pinova porta P2 and A,bITRIP_MASK ;Izolujemo bit koji predstavlja signal ITRIP jz checkForSerialData ;Ukoliko je nula, tada skacemo na kraj mov [resetSCFlag],1 ;U suprotnom doslo je do prekoracenja struje. dec [resetSC_Counter] ;dekrementiramo brojac reseta jnz checkForSerialData ;ukoliko nije nula skacemo na kraj or [initFlag],bDEB_MASK ;U suprotnom podesimo flegove na iskljuceno mov [onOffFlag],Off ;(i "initFlag" i "onOffFlag" ) TurnOnLED2 ;

Page 77: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 77

DisableDevice ;Podesimo 'enable' na nizak nivo pogon Off SoftReset ;potom izvrsimo softverski reset // DEBOUNCING TASTERA !!! // DEBOUNCING TASTERA !!! // labela gde se vrsi debouncing tastera za startovawe pogona initLabel: mov A,[initFlag] ;U akumulatoru se vec nalazi vrednost "initFlag" and A,bDEB_MASK ;Ponistimo sve ostale bite osim bita za debouncing jz end ;Ako je u ACC 0 onda skok na kraj inc [counter1] ;Ukoliko nije nula vrsi se debouncing cmp [counter1],120 ;Ukoliko je "counter1" ,manji od 120 tada jc end ;skok na labelu "end" mov [counter1],0 ;U "counter1" upisemo nulu da ga resetujemo mov A,REG[PRT0DR] ;U akumulator ucitamo stanje na pinovima porta P0 and A,bTAST_MASK ;Odgovarajucom maskom se ostavčja samo bit za taster jnz cancel ;Ako nije nula onda znaci nije pritisnut i state=0 inc [state] ;U suprotniom predjemo u naredno stanje cmp [state],8 ;Ako je "state" manje od 8 jc end ;skacemo na labelu "end" and [initFlag],~bDEB_MASK ;Inace ocistimo maskom bit koji oznacava taster jmp end ;Skocimo na labelu "end" cancel: mov [state],0 ;Resetujemo masinu stanja // REALIZACIJA SERIJSKE VEZE!!!!! // REALIZACIJA SERIJSKE VEZE!!!!! // REALIZACIJA SERIJSKE VEZE!!!!! // REALIZACIJA SERIJSKE VEZE!!!!! // REALIZACIJA SERIJSKE VEZE!!!!! checkForSerialData: mov A,REG[RX8_1_CONTROL_REG] ;Ucitati u akumulator statusni registar prijemnika and A,RX8_RX_COMPLETE ;Proveravamo da li je prenos zavrsen jnz noReceivedByte ;ako nije idemo na predaju podatka mov A,REG[RX8_1_CONTROL_REG] ;Ponovo se ucitatava u akumulator status prijemnika cmp A,RX8_RX_NO_ERROR ;Proveravamo da li nema greske u prenosu jz noRecieveErr ;Ako nije pogresno jmp end ;skacemo na kraj noReceivedByte: cmp [messageStatus],4 jnz transmitingData inc [helpCounter1] jnz end dec [helpCounter2] jnz end mov [messageStatus],0 jmp end noRecieveErr: ;Ovde se program nalazi kada nema greske mov A,REG[RX8_1_RX_BUFFER_REG];Ucitavamo u akumulator primljen podatak mov [transmitBuff],A ;U registar za prenos podatka ubacujemo karakter cmp [messageStatus],0 ;Pitamo se da li je ovo prvi bajt jnz notFirstByte ;ako jeste onda nastavlja se inace se skace na 'notFirstByte' and A,0C0h ;Obrisu se svi biti sem dva najvece tezine jz read ;ako je ostala nula onda je u pitanju ciklus citanja cmp A,0C0h ;ako nije poredimo sadrzaj sa C0 i ako je jednak, jz write ;onda se skace na labelu 'write' mov [messageStatus],0 ;ako ne onda je greska u prenosu messageStatus na 0 jmp transmitingData ; skace se na 'transmitingData' read: ; Program se ovde nalazi ako je zapocet ciklus citanja mov [messageStatus],1 ;promenljiva "messageStatus" se inicijalizuje na vrednost 1 mov A,[transmitBuff] ;Opet se u ACC ucitava "transmitBuff" and A,addressMASK ;Maskom 'addressMASK' se odvajaju bitovi adrese mov [addressForSerTrans],A ;i ta adresa se smesta u promenljivu "addressForSerTrans" jmp transmitingData ;potom skok na labelu 'transmitingData' write: ; Program se ovde nalazi ako je zapocet ciklus citanja

Page 78: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 78

mov [messageStatus],3 ;promenljiva "messageStatus" se inicijalizuje na vrednost 3 mov A,[transmitBuff] ;Opet se u ACC ucita "transmitBuff" and A,addressMASK ;Izdvajaju se biti adrese mov [addressForSerTrans],A ;Podesi se adresa bajta sa kojim se operise mov [helpCounter1],0 ;Podesavanje brojaca vremena prijema poruke mov [helpCounter2],3 ; jmp transmitingData ;resetuje se prenos),potom skok na deo koda za prenos podatka notFirstByte: cmp [messageStatus],4 ; jnz end ; inc [messageStatus] ; mov A,[transmitBuff] ;Karakter koji je primljen treba upisati na primljenu adresu mov X,[addressForSerTrans] ;sto se sa ove cetiri instrukcije i cini mov [X+wantedFrequencyHIGH],A; ; Ovaj deo koda vrsi serijsku predaju karaktera transmitingData: cmp [messageStatus],0 jnz endOfMessage dec [transmitCounter2] ;dekrementiramo "transmitingCounter2" jnz end ;Ako nije odbrojao do nule ne menjamo nista na izlazu mov [transmitCounter2],8 ;Podesavamo "transmitingCounter2" na 8 inc [transmitCounter1] ;inkrementira se "transmitCounter1" koji je brojac bitova cmp [transmitCounter1],1 ;Ako je "transmitCounter1" jednak 1 jnz checkForDataBits ;ako nije pitamo da li su u pitanju biti podataka SendSPACE ; U suprotnom salje se startni bit mov [parity],0 ;setuje se "parity" na nulu. jmp end ;skace se na kraj dela koda za serijski prenos checkForDataBits: ;Ovde se vrsi provera da li su na redu biti podatka cmp [transmitCounter1],10 ;Ako je "transmitCounter1" veci ili jednak od 10 jnc checkForParityBit ;skok na labelu "checkForParityBit" rlc [transmitBuff] ;Zarotira sa "transmitingData" ulevo i u CF se upise MSB jnc sendLow ;ako je CF setovan onda se Salje 'MARK',inace'SPACE' SendMARK ;ovim makroom se salje 'MARK' xor [parity],1 ;promeni se znak parity bita jmp end ;skoci se na labelu 'end' sendLow: ; SendSPACE ;Salje se 'SPACE' preko linije za TXD jmp end ; checkForParityBit: ; cmp [transmitCounter1],10 ;Poredjenje "transmitCounter1" sa 1 jnz stopBit ;Inace skok na labelu 'stopBit' cmp [parity],1 ;ispituje se sadrzaj promenljive "parity" jz setParityBit ;ako je jednak 1 skace se na labelu 'setParityBit' SendSPACE ;ako ne posalje se nula (tj. SPACE) jmp end ;skok na kraj transmisije setParityBit: ; SendMARK ;Slanje 'MARK' kao bita parnosti jmp end ; stopBit: ; cmp [transmitCounter1],12 ;Ako je "transmitCounter1" veci ili jednak 12 jnc currentByteTransmited ;prenos je zavrsen i skok 'currentByteTransmited' SendMARK ;inace potrebno je poslati 'MARK' kao stop bit jmp end ; currentByteTransmited: ; mov [transmitCounter1],0 ;Resetuju se brojaci "transmitCounter1" na 0 mov [transmitCounter2],8 ;i "transmitCounter2" na 8 inc [messageStatus] ; SendMARK ; cmp [messageStatus],6 ;Ako je "messageStatus" nije jednak 6 onda se jnz not_6 ;skace na labelu ' not_6 '. mov [messageStatus],0 ;Ako jeste onda se postavi messageStatus na 0 cmp [dataStrobe],1 ;Poredi se [dataStrobe] sa 1 i ako nisu jednaki jnz end ;onda skok na kraj mov [dataStrobe],0 ;U suprotnom se [dataStrobe] postavi na 0 mov A,[BuffFrequencyHIGH] ;A primljena frekvencija izlaznog napona se prepise mov [wantedFrequencyHIGH],A ;u promenljive za zeljenu frekvenciju mov A,[BuffFrequencyLOW] ; mov [wantedFrequencyLOW],A ;

Page 79: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 79

jmp end ;Kada je to gotovo skok na kraj not_6: cmp [messageStatus],3 ;Poredi se messageStatus sa 3 i ako nisu jednaki jnz not_3 ;skok na labelu ' not_3 ' mov [messageStatus],0 ;Ako jesu messageStatus=0 jer je kraj ciklusa jmp end ;skok na kraj not_3: cmp [messageStatus],4 ;Poredi se messageStatus sa 4 i ako nisu jednaki jnz not_4 ;skok na labelu ' not_4 ' mov [helpCounter1],0 ;Ako jeste esetuje se TIMEOUT brojac mov [helpCounter2],3 ; jmp end ;skok na kraj not_4: cmp [messageStatus],2 ;Poredi se messageStatus sa 2 jnz end ;ako nisu jednaki onda skok na kraj mov X,[addressForSerTrans] ;Karakter koji se prenosi sada se uzima sa naznacene adrese mov A,[X+wantedFrequencyHIGH]; mov [transmitBuff],A ; endOfMessage: SendMARK end: M8C_ClearWDT pop X pop A reti Поред ових преводилац генерише датотеке које садрже процедуре системског API-а за блокове PWMDB8_1, PWMDB8_1, PWMDB8_1, DELSIG8_1, RX8_1, PGA_1, CMPPRG_2, CMPPRG_3 су PWMDB8_1.asm, PWMDB8_2.asm, PWMDB8_3.asm, RX8_1.asm, PGA_1.asm, CMPPRG_2.asm, CMPPRG_3.asm. Такође се креирају фајлови који садрже дефиниције константи и макроа којима се олакшава програмирање. Један такав фајл је и dplomski.inc који представља саставни део пројекта (не генерише га преводилац ). ///////////////////////////////////////////////////////////////////////////////// // Fajl dplomski.inc sadrži definicije konstanti i makroa upotrebqenih // prilikom implementacije algoritma diplomskog rada // ///////////////////////////////////////////////////////////////////////////////// include "m8c.inc" bCONTROL_REG_START_BIT : equ 1 ; Control register start bit bINTERRUPT_MASK : equ 085h ; Maska koju dodeljujemo prekidima bFlagCarry : equ 4 ; CF je na poziciji 2 teta60HIGH : equ 0Ch ; Visi bajt konstante koja predstavlja ugao pi/3 teta60LOW : equ 80h ; Nizi bajt konstante koja predstavlja ugao pi/3 voltageMax : equ 07Ch ; Maksimalni indeks modulacije koji primenjujemo ovde voltageMin : equ 14h ; Minimalni indeks modulacije koji mozemo da primenimo freqNomHIGH : equ 0 ; Visi bajt nominalne frekvencije freqNomLOW : equ 100 ; Nizi bajt nominalne frekvencije freqCompHIGH : equ 0 ; freqCompLOW : equ 10 ; ZeroVector : equ 54h ; Konstanta koju upisujemo na port P1 kao zero vektor step : equ 1 ; Korak za uvecavanje napona prilikom mekog starta Up : equ 1 ; Konstanta koja nam oznacava povecanje frekvencije Down : equ 0 ; Konstanta koja nam oznacava smanjenje frekvencije Over : equ 1 ; Under : equ 0 ; On : equ 55h ; Konstanta koja nam predstavlja ukljucen pogon Off : equ 0CCh ; Konstanta koja nam predstavlja iskljucen pogon RX8_RX_ACTIVE : equ 10h ; RX8_RX_COMPLETE : equ 08h ; RX8_RX_PARITY_ERROR : equ 80h ; RX8_RX_OVERRUN_ERROR : equ 40h ;

Page 80: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 80

RX8_RX_FRAMING_ERROR : equ 20h ; RX8_RX_NO_ERROR : equ E8h ; checkValue : equ 10 ; bINIT_CUR_MASK : equ 4 ; Maska bita koji predstavlja inicijalizaciju pocetne struje bCHECK_POT_MASK : equ 2 ; Maska bita koji predstavlja fleg inic. potenciometra bDEB_MASK : equ 1 ; Maska bita koji predstavlja fleg za debouncing tastera bTAST_MASK : equ 1 ; Maska koja sa porta P0 odvaja bit koji predstavlja stanje tastera bITRIP_MASK : equ 2 ; Maska kojom sa porta P2 odvajamo ITRIP signal bPOT_COMP_BUS : equ 16 ; Konst. koja predstavlja masku za izdvajanje bita COMP mag. koji pred. poten. step2 : equ 16 ; Korak povecanja ref. vrednosti za CMP1(mernje potenciometra) bTEMP_MASK : equ 40h ; Maska koja sa komparatorske magistrale izdvaja bit CB2 (6-bit) bVOLT_MASK : equ 40h ; Maska koja sa komparatorske magistrale izdvaja bit CB2 (6-bit) MAX_VOLT_REF : equ C0h ; Referenca za komparator napona koji predstavlja dozvoljeni maksimum MIN_VOLT_REF : equ 50h ; referenca za napon koja predstavlja minimum bOVER_TEMP_FAULT : equ 1 ; Maska za bit koji nam oznacava da je doslo do pregrevanja pogona bVOLT_MAX_FAULT : equ 2 ; Maska za bit koji nam oznacava da je doslo do pada napona iznad maksimuma bVOLT_MIN_FAULT : equ 4 ; Maska za bit koji nam oznacava da je doslo do pada napona ispod minimuma bLONG_T_OVER_CUR : equ 8 ; Maska za bit koji nam oznacava da je stuja predugo imala visoku vrednost bResetSC_MASK : equ 8 bEnable_MASK : equ 8 bLED1_MASK : equ 16 bLED2_MASK : equ 4 bLED3_MASK : equ 1 bLED4_MASK : equ 1 noMessage : equ 0 ReadByte : equ 3 WriteByte : equ 5 Error : equ 6 addressMASK : equ 3Fh a0 : equ 210 b0 : equ 50 ramp : equ 100 macro ResetSC M8C_DisableGInt or REG[PRT2DR],bResetSC_MASK and REG[PRT2DR],~bResetSC_MASK M8C_EnableGInt endm macro EnableDevice or REG[PRT0DR],bEnable_MASK endm macro DisableDevice and REG[PRT0DR],~bEnable_MASK endm macro TurnOnLED1 or REG[PRT0DR],bLED1_MASK endm macro TurnOnLED2 or REG[PRT0DR],bLED2_MASK endm macro TurnOnLED3 or REG[PRT0DR],bLED3_MASK endm macro TurnOnLED4 or REG[PRT0DR],bLED4_MASK endm macro TurnOffLED1 and REG[PRT0DR],~bLED1_MASK

Page 81: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 81

endm macro TurnOffLED2 and REG[PRT0DR],~bLED2_MASK endm macro TurnOffLED3 and REG[PRT0DR],~bLED3_MASK endm macro TurnOffLED4 and REG[PRT0DR],~bLED4_MASK endm macro SetLEDDriveMode M8C_SetBank1 or REG[PRT0DM0],bLED1_MASK or REG[PRT0DM0],bLED2_MASK or REG[PRT0DM0],bLED3_MASK or REG[PRT0DM0],bLED4_MASK M8C_SetBank0 endm ;Naredna dva makroa salju jedinicu, odnosno nulu preko TXD linije macro SendMARK and REG[PRT0DR],~bLED4_MASK endm macro SendSPACE and REG[PRT0DR],~bLED4_MASK endm ;Makro koji obezbeđuje programski reset mikrokontrolera macro SoftReset M8C_DisableGInt call PGA_1_Stop call CMPPRG_2_Stop call CMPPRG_3_Stop call DELSIG8_1_Stop call PWMDB8_1_Stop call PWMDB8_2_Stop call PWMDB8_3_Stop and REG[PRT1GS],0 endm macro PWM1Disconnect and REG[PRT1GS],0F3h endm macro PWM2Disconnect and REG[PRT1GS],0CFh endm macro PWM3Disconnect and REG[PRT1GS],03Fh endm macro ConnectPWM1 or REG[PRT1GS],0Ch endm macro ConnectPWM2 or REG[PRT1GS],30h endm macro ConnectPWM3 or REG[PRT1GS],0C0h endm macro SetPWM1PulseWidth mov REG[PWMDB8_1_PULSE_WIDTH_REG],A ;set PWM1 PulseWidth endm macro SetPWM2PulseWidth

Page 82: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 82

mov REG[PWMDB8_2_PULSE_WIDTH_REG],A ;set PWM2 PulseWidth endm macro SetPWM3PulseWidth mov REG[PWMDB8_3_PULSE_WIDTH_REG],A ;set PWM3 PulseWidth endm Развојно окружење генерише фајлове који садрже остале декларације и то су PWMDB8_1.inc, PWMDB8_2. inc, PWMDB8_3. inc, RX8_1. inc, PGA_1. inc, CMPPRG_2. inc, CMPPRG_3. inc и m8c.inc и Diplomski_GlobalParams.inc.

Page 83: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 83

7. Закључак Из досадашњег текста се могу увидети све предности и мане предложеног решења проблема управљања индукционим мотором. Такође, могу се увидети и добре и лоше стране употребе PSoC микроконтролера у апликацијама оваквог типа. Оно што је добра страна овог решења је пре свега његова једноставност и самим тим ниска цена, нема давача позиције на осовини мотора и тиме је олакшана конструкција погона. Што се тиче избора микроконтролера, у њему се налазе сви потребни периферијски уређаји за синтезу једне управљачке јединице погона са асихроним мотором. То су појачавачи, аналогни филтри, аналогно-дигитални конвертори и импулсно-ширински модулатори са генератором мртвог времена. Тиме се избегава њихово додавање споља, што представља класичан начин синтезе управљачке јединице. Оно је главна мана оваквог решења су пре свега перформансе. Избегавањем монтирања давача положаја на осовини мотора отежава се синтеза повратне спреге, јер се сада она не може мерити него се мора естимирати што захтева много више процесорске снаге. Такође, мана су и перформансе самог микроконтролера. Висока флексибилност овог интегрисаног кола је плаћена лошијим особинама периферијских уређаја који се на њему налазе. То и релативно лоша централна процесорска јединица чине да перформансе ове фамилије микроконтролера нису на високом нивоу. Ипак не без основа је уверење аутора, да ће будуће генерације микроконтролера овог типа донети и побољшање квалитета периферијских јединица као и повећање процесорске снаге чиме ће се моћи применити и неки напреднији алгоритми управљања.

Page 84: Садржај - emp.etf.rsemp.etf.rs/radovi/Diplomski/Jovanovic.pdf · Примена реконфигурабилних микроконтролера у управљану индукционим

Примена реконфигурабилних микроконтролера у управљану индукционим мотором

Страна 84

8. Литература [1] Виктор Р. Стефановић и Слободан Н. Вукосавић: ' Space-Vector PWM Voltage control with optimized switching strategy ’ . [2] Слободан Н. Вукосавић: ' Докотрска дисертација ' [3] Cypress Microsystems, Inc.: ' 8C20000DataSheet ' [4] Cypress Microsystems, Inc.: ' Assembly Language User Guide ' [5] Cypress Microsystems, Inc.: ' Integraded Development Enviorment User Guide '