Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
новий документ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

3. Блок-схема алгоритму роботи програмного забезпечення

3.1 Опис алгоритму роботи програми

При ввімкненні живлення вмикаються всі периферійні пристрої та програма на контролері починає свою роботу. Після початку програма виконує ініціалізацію виконавчих пристроїв, якщо цей етап програми проходить успішно, то через порти вводу/виводу контролер починає опитувати клавіатуру. Якщо кнопка «Start» натиснута, то контролер подає високий рівень напруги на вивід до якого підключений електромагніт та опитує оптопару №1, якщо на колекторі транзистора оптопари контролер зчитує низький рівень сигналу, то на вивід «CLOCK» драйвера керування кроковим двигуном SLA7078 подається високий рівень, що приводить в рух кроковий двигун. Контролер опитує вивід до якої підключена оптопара №2, якщо контролер зчитав з її виводу низький рівень, вбудований аналого-цифровий перетворювач зчитує дані із індуктивного давача, обробляє дані та паралельно з цим процесом контролер опитує оптопару №3. Якщо на колекторі транзистора оптопари №3 встановився високий рівень, то на вивід «CLK» драйвера керування кроковим двигуном SLA7078 подається низький рівень, що приводить до зупинки крокового двигуна. Далі відбувається подача низького рівня на вивід контролера до якої підключений електромагніт, що вимикає його.

Після виконання всіх цих операцій контролер обробляє значення отримані із індуктивного давача по певній формулі та виводить результат на LCD у вигляді:

  • min – ширина;

  • max – ширина;

  • середнє значення ширини пояска;

  • брак/не брак.

Також, отримані дані можуть передаватися на персональний комп’ютер через послідовний інтерфейс RS-232. Після виконання всіх вище сказаних дій програма починається спочатку.

4. Програмний код

/*

підключення файлу із описом

регістрів спеціальних функцій для

звертання до периферії мікроконтролера

*/

#include <ADUC841.H>

/*

глобальна змінна для збереження

даних із індуктивного давача

*/

unsigned int peremishchennya_shtoka_davacha = 0;

void init (void)

{

ADCCON1 = 0xBC; //1011 1100 ввімкнення АЦП

//функція ініціалазації виконавчих пристроїв

}

unsigned char readKey ()

{

unsigned char _Key;

P0 = 0x80;

P2 = 0xF8;

_Key = P0;

switch (_Key)

{

case ~ 0x01: return '1'; //кнопка START

case ~ 0x02: return '2'; //кнопка Stop

case ~ 0x04: return '3'; //кнопка Break

}

return 0;

}

void keryvannya_elektromagnitom (char stan_elektromagnity)

{

if (stan_elektromagnity == 1)

{

//вмикається електромагніт

}

else

{

//вимикається електромагніт

}

}

unsigned char Oputatu_Optopary (char nomer_optoparu)

{

char stan = 0;

if ( nomer_optoparu == 1)

{

//опитування виводу до якого підєднана оптопара №1

}

else if (nomer_optoparu == 2)

{

//опитування виводу до якого підєднана оптопара №2

}

else

{

//опитування виводу до якого підєднана оптопара №3

}

return stan;

}

unsigned int oputatu_davach (char result)

{

ADCCON2 = 0x10;

while (ADCI);

result = ((ADCDATAH&0xF)<<8)|(ADCDATAL);

/*

є глобальна змінна

"peremishchennya_shtoka_davacha"

в яку зберігаються дані зняті

з давача через АЦП.

*/

return result;

}

void keruvannya_krokovum_dvugynom (bit CCW)

{

static unsigned char StepN;

//Функція для керування кроками двигуна

if (CCW)

StepN=(StepN+1)&0x7F;

}

void vuvestu_dani_LCD (void)

{

/*

в цій функції будуть виводитися

дані із глобальної змінної

"peremishchennya_shtoka_davacha"

*/

}

void peredacha_danuh_PC (void)

{

/*

значення змінної

"peremishchennya_shtoka_davacha"

передаємо через інтерфейс UART

на ЕОМ

*/

}

int main ()

{ //Початок

//Ініціалізація

init ();

while (readKey() == 1)

{

//Зчитування команд клавіатури

}

keryvannya_elektromagnitom (1);

while ( Oputatu_Optopary( 1 ) == 1 )

{

//визначення стану оптопари №1

}

while (Oputatu_Optopary(2) == 1)

{

//визначення стану оптопари №2

}

//приведення в рух крокового двигуна

keruvannya_krokovum_dvugynom ( 1 );

//запис зчитаних даних з АЦП в глобальну змінну

peremishchennya_shtoka_davacha = oputatu_davach;

while (Oputatu_Optopary(3) == 1)

{

//визначення стану оптопари №3

}

// зупинка крокового двигуна

keruvannya_krokovum_dvugynom ( 0 );

//вимкнення електромагніту

keryvannya_elektromagnitom (0);

/*

зчитані дані відображаються на LCD

*/

vuvestu_dani_LCD ();

/*

дані зчитані із індуктивного

давача передаються через UART

на персональний комп'ютер

*/

peredacha_danuh_PC ();

return 0;

} // Кінець