доведеться підібрати номінали ФНЧ на вході компаратора або навіть ввести в компаратор слабкий гістерезис. Як вже зазначалося вище, при управлінні малопотужними двигунами від ШІМ-стабілізації струму можна зовсім відмовитися, застосувавши звичайну L/R-схему живлення обмоток. Для виключення Шим-стабілізації досить просто не підключати входи INT0 і INT1 мікроконтролера, природно, при цьому можна взагалі не встановлювати компаратор і датчики струму. У даній програмі періодичність обчислення нових значень швидкості та періоду обрано рівної 15.625мс. Таке значення обрано не випадково. Цей інтервал становить 1/64с, а головне, він містить ціле число періодів переповнення таймера 0 (25мкс). Зручно, якщо значення швидкості і прискорення задаються в природних одиницях, тобто в кроках в секунду і в кроках, ділених на секунду в квадраті. Для того щоб мати можливість у целочисленной арифметиці обчислювати миттєву швидкість 64 рази на секунду, потрібно перейти до внутрішнього уявлення швидкості, збільшеному в 64 рази. Множення і ділення на 64 зводиться до звичайних зрушень і тому вимагає дуже мало часу. Задану періодичність обчислень забезпечує ще один програмний таймер URCNT, який декрементируется в перериванні таймера 0 (раз на 25мкс). Цей таймер завжди завантажується постійною величиною, що забезпечує незмінний період його переповнень, рівний 15.625мс. При переповненні цього таймера встановлюється бітовий прапор UPD, який сигналізує основній програмі, що В«Пора-б оновити значення швидкості та періодуВ». Основна програма (рис. 34) виконує обчислення миттєвих значень швидкості і періоду проходження кроків, забезпечуючи необхідну криву розгону. У даному випадку розгін і гальмування здійснюються з постійним прискоренням, тому швидкість змінюється лінійно. Період при цьому змінюється за гіперболічним законом, і його обчислення - основна робота програми. В
Рис. 34. Блок-схема основного циклу програми.
Оновлення значень швидкості і періоду проходження кроків основна програма робить періодично, періодичність задається прапором UPD. Оновлення програма робить на основі порівняння значень двох змінних: миттєвої швидкості VC і необхідної швидкості VR. p> Значення необхідної швидкості навіть визначається в основній програмі. Це робиться на основі аналізу керуючих сигналів і сигналів з кінцевих вимикачів. Залежно від цих сигналів, основна програма завантажує змінну VR значенням необхідної швидкості. У даній програмі це V для руху вперед,-V для руху назад і 0 для зупинки. У загальному випадку, набір швидкостей (а також прискорень і струмів фаз) може бути як завгодно великим, залежно від вимог. Якщо швидкості VC і VR рівні, значить, кроковий двигун працює в стаціонарному режимі і оновлення не потрібно. Якщо ж швидкості не рівні, те значення VC із заданим прискоренням наближається до VR, тобто двигун прискорюється (Або сповільнюється) до досягнення номінальної швидкості. У разі, коли навіть знаки VR і VC відрізняються, двигун сповільнюється, реверсують і потім досягає необхідної швидкості. Відбувається це як би само собою, завдяки структурі програми. Якщо при черговій перевірці виявляється, що швидкості VR і VC НЕ рівні, те до значення VC додається (або віднімається) значення прискорення A. Якщо в результаті цієї операції відбувається перевищення необхідної швидкості, то отримане значення коригується шляхом заміни на точне значення необхідної швидкості.
Потім відбувається обчислення періоду T (рис. 35).
В
Рис. 35. Блок-схема підпрограми обчислення періоду. p> Спочатку обчислюється модуль поточної швидкості. Потім відбувається обмеження мінімальної швидкості. Це обмеження необхідно з двох причин. По-перше, нескінченно малій швидкості відповідає нескінченно великий період, що викличе помилку в обчисленнях. По-друге, крокові двигуни мають досить протяжну за швидкістю зону старту, тому немає необхідності стартувати на дуже маленькій швидкості, тим більше що обертання на малих швидкостях викликає підвищений шум і вібрацію. Значення мінімальної швидкості VMIN повинно вибиратися виходячи з конкретної завдання і типу двигуна. Після обмеження мінімальної швидкості виробляється обчислення періоду за формулою T = 2560000/| VC |. На перший погляд формулу не очевидна, але якщо врахувати, що період необхідно отримати в 25мкс-інтервалах, а внутрішнє подання VC - це помножене на 64 її справжнє значення, то все стає на свої місця. При обчисленні T потрібна операція беззнакового ділення формату 24/24, яке AVR на тактовій частоті 10МГц робить приблизно за 70мкс. Враховуючи, що обчислення періоду відбуваються не частіше, ніж один раз на 15.625мс, навантаження на ЦП виходить дуже низькою. Основну завантаження виробляє переривання таймера 0, та й воно в основному виконується по короткій гілці (без переповнення STCNT) тривалістю приблизно 3мкс, що відповідає 12%-й завантаженні процесора. Це означає, що є значні резерви обчислювальних ресурсів. p> Друкована плата контролер...