Розробка генератору сигналів з програмним керуванням

аттестационная работа

2.2 Програмна реалізація цифрової частини

Основою генератора є мікроконтролер At90s2313 фірми Atmel. Швидкодії цього контроллера виявилося достатнім, щоб програмно реалізувати 28-розрядний накопичувач фази, що працює на частоті 250 Кгц. При цьому крок сітки рівний приблизно 0.001 Гц. Реально використовується крок сітки 0.01 Гц, що дозволило ввести цифрове калібрування опорної частоти.

Алгоритм цілком реалізований усередині переривання таймера, яке виникає з частотою 250кгц, тобто кожні 4 мкс. Таке мале значення часу зажадало граничної оптимізації обробника. Мікроконтролер має память програм обємом 2кбайт. Половина цього обєму відведена для зберігання таблиці функції sin. Для економії місця зберігається тільки 1/4 частина періоду, оскільки функція sin володіє властивостями симетрії. Проте, в результаті дещо ускладнився алгоритм. Для збільшення швидкості роботи в таблиці зберігаються 8-розрядні відліки. Оскільки на 1/4 періоду знак функції не міняється, це дозволило знаковий розряд в таблиці не зберігати. Знак відновлюється програмно, тому фактично на DAC поступають 9-розрядні відліки. У генераторі застосований дешевий 10-розрядний DAC типу Кр572па1, що працює в 9-розрядному режимі. Максимальна частота вихідного сигналу залежить від багатьох чинників, зокрема від характеристик LPF. Можна сказати, що у будь-якому випадку повинне дотримуватися нерівність: відношення частоти дискретизації до максимальної вихідної частоти має бути більше чотирьох. Тому для даного генератора максимальна вихідна частота дорівнює 50 Кгц.

-

Рис. 2.3 _ Програмна реалізація цифрової частини

У різних чвертях періоду синуса обробник переривання працює по різних вітках. Дуже важливо при цьому забезпечити рівний час виконання кожної вітки. Текст обробника переривання приведений нижче:

Рис. 2.4 _ Текст обробника переривання

Оскільки в системі використовується тільки одне переривання, виявилося можливим розташувати обробник, починаючи з адреси вектора. Це дозволило обійтися без команди rjmp на початку обробника. Миттєва фаза зберігається в регістрах PHASEK, L, M, N. З 32 біт використовуються тільки 28 молодших. Приріст фази (код частоти) зберігається в регістрах FREQK, L, M, N. Оскільки таблиця функції sin має розмір 1024 байти, необхідна 10-розрядна адреса. Він формується з розрядів 16 - 25 миттєвої фази:

Рис. 2.5 _ Обробник переривання

Розряд 26 визначає, триває перша або друга половина напівперіоду. На другій половині напівперіоду напрям зміни функції повинен мінятися на протилежне, для чого в цьому випадку адреса інвертується. Розряд 27 визначає, триває позитивний або негативний напівперіод. По суті це знаковий розряд. Тому він поступає безпосередньо на розряд Dac.9. Крім того, на негативному напівперіоді всі інші розряди DAC мають бути проїнвертіровани. Для усунення викидів (glitches) на головному переході DAC, при наростанні сигналу спочатку перемикається розряд Dac.9, а потім Dac1..8. На спаді все відбувається в зворотній послідовності. Логічніше було б виводити на DAC старші розряди одночасно, а потім один молодший. Але при цьому збільшується обєм коди і, як наслідок, час виконання обробника переривання. Не дивлячись на всі прийняті заходи, для виконання основної програми залишилося всього 22.5% ресурсів. Проте, цього цілком достатньо, оскільки основна програма зайнята інтерфейсом з користувачем, де висока швидкодія не потрібна.

Як опорне джерело для DAC застосована мікросхема регульованого стабілітрона U3 типу Tl431. Для живлення мікроконтролера застосована мікросхема інтегрального стабілізатора U2 типу 78LR05, яка має вбудований монітор живлення. Вона формує сигнал RESET, коли напруга живлення падає нижче за норму. Монітор живлення обовязковий, оскільки інакше у AVR при включенні/виключенні живлення псується внутрішній EEPROM даних (можливі і інші неприємності).

Оскільки DAC працює в однополярном режимі, було потрібно схему зрушення рівня. Вона виконана на ОУ U5b і резисторах R5, R6, R8. За нею включений активний LPF на ОУ U5c, U5d. Потрібно відзначити, що зсув нуля на виході LPF може бути задоволене значним. Застосований недорогий швидкодіючий ОУ Tl082 має досить великий зсув нуля. До того ж, схема зрушення рівня має бути виконана на прецизійних резисторах, інакше вона не точно виконує зрушення, що виявляється у вигляді підвищеного зсуву нуля. В даному випадку постійна складова сигналу в тракті завжди має дорівнювати нулю (синусоїдальний сигнал). Це зробило можливим застосувати схему компенсації зсуву нуля. Вона побудована на прецизійному (але достатньо повільному) ОУ U6 типу Op07. За допомогою фільтру нижніх частот R17c11 з сигналу виділяється постійна складова, яка подається на вхід активного інтегратора. Вихідна напруга інтегратора через резистор R7 подається в точку підсумовування. Таким чином, постійна сщо залишає сигналу на виході активного LPF (вихід ОУ U5d) підтримуватиметься рівною нулю з точністю до напруги зсуву ОУ U6. У тракті генератора ніде не немає розділових ємкостей. Це дозволяє у разі потреби працювати на інфранізких частотах. Знизу обмеження на діапазон частот накладає схема компенсації зсуву нуля. З вказаними на схемі номіналами на частоті 1 Гц буде спад біля -2 db. Діапазон частот можна розширити вниз, збільшивши ємкості конденсаторів C11 і C12.

Як активного LPF застосований фільтр Баттерворта 4-го порядку. Існує багато методик розрахунку фільтрів. Найбільш распространениє з них пропонують спочатку вибрати номінали резисторів (всі резистори однакові), а потім, використовуючи табличні значення коефіцієнтів, розрахувати ємкості конденсаторів. Такий метод розрахунку навряд чи є доцільним. Щоб отримати реальні характеристики фільтру, близькі до розрахункових, необхідно номінали елементів витримати з хорошою точністю (для фільтру 4-го порядку бажано не гірше 1 - 2%). Оскільки прецизійні конденсатори є дефіцитнішими елементами в порівнянні з прецизійними резисторами, доцільніше спочатку вибрати ємкості конденсаторів (з тих, що є), а потім розрахувати номінали резисторів. У звичайній структурі фільтру Sallen & Кеу з коефіцієнтом передачі, рівному одиниці, номінали конденсаторів не можуть бути однаковими, оскільки значення опорів мають бути дійсними. Проте, якщо коефіцієнт передачі фільтру в смузі пропускання вибрати рівним двом, то стає можливим застосувати однакові номінали. До того ж, в цьому випадку розрахункові формули значно спрощуються. Для ланки 2-го порядку (див. схему у вікні програми розрахунку фільтру, яке приведене нижче) формули мають наступний вигляд [2]:

R1 = 1 / a * 2р * f * C,

де f - частота зрізу

Ємкість конденсаторів C вибирають заздалегідь, для цього можна скористатися приблизною формулою:

C[nF] ? 10 / f[KHz]

Резистори зворотного звязку Rfb доцільно вибрати так, щоб значення опорів, приведені до різних входів ОУ, були однаковими і компенсували зсув, викликаний вхідними струмами. Для цього опору резисторів (для K = 2 вони однакові) розраховують по формулі:

Rfb = 2 [R1 + R2]

Коефіцієнти а і b для фільтру Баттерворта 2-го, 4-го і 6-го порядків приведені в таблиці:

Таблиця 2.1 _ Коефіцієнти а і b для фільтру Баттерворта 2-го, 4-го і 6-го порядків

2-pole

4-pole

6-pole

a

1.4142

1.8478

0.7654

1.9319

1.4142

0.5176

b

1.0000

1.0000

1.0000

1.0000

1.0000

1.0000

fi/f

1.000

0.719

1.390

0.676

1.000

1.479

Q

0.71

0.54

1.31

0.52

0.71

1.93

У двох останніх строчках таблиці преведено відношення частоти зрізу ланки до частоти зрізу фільтру і добротність ланки.

Щоб отримати порядок фільтру більше 2-го, ланки сполучають послідовно. Порядок проходження ланок фільтру може бути довільним. Для отримання якнайкращого відношення сигнал/шум ланки включають в порядку зниження частоти зрізу. Але в генераторі фільтр працює при великому сигналі і критерієм є максимальна перевантажувальна здатність. Річ у тому, що ланки з більшою частотою зрізу мають як правило велику добротність полюсів і, відповідно, можуть мати досить значний підйом АЧХ поблизу частоти зрізу. Це створює умови для виникнення перевантаження. Тому в генераторі ланки LPF розташовані в порядку возростанія частоти зрізу (у таблиці вони йдуть в такому ж порядку).

У багатьох випадках набагато важливіше отримати потрібну форму АЧХ фільтру, чим забезпечити точність частоти зрізу. Спочатку планувалося застосувати фільтр з частотою зрізу 60 Кгц. Але при розрахунках частота варіювалася так, щоб номінали резисторів виявилися якомога ближчими до стандартного ряду. У результаті вдалося отримати фільтр, який побудований повністю на стандартних номіналах з ряду Е24, хоча частота зрізу вийшла дещо інший: 57.4 Кгц. Таке відхилення частоти практично не впливає на роботу генератора. Розрахунок фільтру проводився за допомогою спеціальної програми:

Рис. 2.6 _ Розрахунок фільтру

Реальна АЧХ фільтру із-за відхилень номіналів резисторів і конденсаторів буде декілька відрізнятися від розрахованої теоретично. Проте, навіть при використанні елементів з допуском +/-5% характеристики фільтру залишаються в допустимих межах. Зміряна АЧХ фільтру приведена на малюнку:

Рис. 2.7 _ Реальна АЧХ фільтру

На виході LPF включений регулятор рівня вихідного сигналу генератора R20. Подстроєчний резистор R19 служить для калібрування вихідного рівня.

Генератор повинен мати достатньо низький вихідний опір. Для цього на виході включений буферний підсилювач. Оскільки навантаження генератора може бути складним, від буферного підсилювача потрібна стійка робота на ємкісне навантаження. Цим вимогам задовольняє схема, що є повторітель на ОУ U7 з двотактним емітерним повторітелем на транзисторах Vt1, - Vt4. Емітерний повторітель виконаний складеним на транзисторах різної структури. У такій схемі падіння напруги на переходах база-емітер різних транзисторів компенсують один одного. Автоматично виходить зсув для всіх транзисторів, тому струм спокою вихідного каскаду не дорівнює нулю. Це забезпечує малий коефіцієнт гармонік. Додатково, за допомогою резисторів R23, R24 введена місцева ООС. Ще ці резистори разом з R25 забезпечують захист від короткого замикання на виході.

На виході буферного підсилювача включений аттенюатор П-типа. В порівнянні з простим дільником він вимагає меншого діапазону опорів вживаних резисторів, але має декілька більший вихідний опір на нижніх межах. У аттенюаторе застосовані резистори стандартного ряду, в результаті погрішність складає до 3%. Якщо потрібна менша погрішність, то потрібно розрахувати точні номінали резисторів R26 - R32 і застосувати прецизійні резистори.

Як індикатор використаний 10-розрядний LCD з контроллером Ht1613. Його живлення здійснюється від параметричного стабілізатора, виконаного на резисторі R33 і діодах Vd1 і Vd2. Узгодження логічних рівнів виконане за допомогою дільників R34 - R37. Управління LCD здійснюється по двох лініях: SCK і DI. Для того, щоб індикатор не переходжував в режим таймера, на лінії SCK між операціями обміну підтримується низький логічний рівень.

Живлення генератора здійснюється від будь-якого малопотужного джерела живлення з двохполярною стабілізованою вихідною напругою +/-12 У і струмом навантаження до 300 ма. Просте джерело живлення можна побудувати з використанням невеликого трансформатора, випрямного містка з конденсаторами фільтру по 2200 мкф і інтегральні стабілізатори 7812 і 7912. Генератор зібраний в стандартному пластмасовому корпусі тіпоразмера Z-4 (50 x 130 x 150 мм). Зразковий дизайн передньої панелі генератора показаний на малюнку:

Рис. 2.7 _ Дизайн передньої панелі

Делись добром ;)