Лабораторна робота 4. Розробка додатків IoT з використанням таймерів- лічильників

 

Мета роботи: набуття практичних навиків використання таймерів- лічильників в додатках IoT

 

Програма роботи

 

1.  Ознайомитися з теоретичним матеріалом, наведеним в описі, а також в [1, 2].

2.  Розробити та налагодити програми асинхронного обміну з використанням віртуальних пристроїв і інструментів.

3.  Закріпити навички розробки підключених пристроїв IoT для формування імпульсних сигналів і роботи в реальному масштабі часу з використанням Arduino IDE, Proteus VSM.

4.  Отримати навички налагодження програм і аналізу імпульсних сигналів з використанням віртуальних пристроїв і інструментів.

5.Реалізувати програму вибору однієї з трьох частот за варіантом за допомогою трьох кнопок.

6.  Реалізувати програму керування двигуном (освітленням) з циклічною 3-ступінчастою зміною шпаруватості ШІМ за індивідуальним варіантом.

7.  Провести моделювання кута повороту сервопривіда та розрахувати значення тривалості імпульсів для послідовної установки в задані положення.

8.  Провести аналіз використовуваного об'єму ресурсів МК та проаналізувати тимчасові діаграми імпульсних сигналів

9.  Закріплення навичок завантаження програм в пам'ять МК навчального стенду і налагодження з використанням осцилографа і логічного аналізатора.

10.                 Підготувати звіт про виконану роботу.

 

Теоретичні відомості

 

МК ATmega328 містить 3 таймер-лічильники - ТС0 (8 бітовий), ТС1 (16-бітовий) і ТС2 (8 бітовий). Вони побудовані на основі двійкових лічильників. Схема і принцип роботи 8-бітового


двійкового лічильника на U1A, B (рисунок 4.1) ілюструється тимчасовими діаграмами виходів лічильника і результату ЦАП (DAC1) послідовності станів лічильника.

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 4.1 – Схема і діаграми станів двійкового лічильника Стани лічильника в двійковому коді - 00000000...11111111,

десятковому - 0...255 і шістнадцятирічному - 0x00...0xff. Цикл рахунку повторюється через 28…256 імпульсів від внутрішнього або зовнішнього джерела. ТС0 пов'язаний з виведенням T0/PD4 (pin D4), а ТС1 з TC1/PD5 (pin D5), а ТС2 не має такого зв'язку (рисунок 4.2). ICP (D8) - вхід захоплення, виходи ШІМ ТС0 - OC0A, B (D5, D6), ШІМ ТС1 - OC1A, B (D9, D10), ШІМ ТС2 - OC2A, B (D11, D3).

Рисунок 4.2 Призначення виводів МК ATmega328Р


ТЛ мають наступні режими:

0)  зупинка;

1)  рахунок кожного тактового імпульсу (переддільник 1/1);

2)    рахунок кожного 8-го тактового імпульсу (переддільник 1/8)№

3)   рахунок кожного 64-го тактового імпульсу (переддільник 1/64);

4)   рахунок кожного 256-го тактового імпульсу (переддільник 1/256);

5)  рахунок кожного 1024-го тактового імпульсу (переддільник 1/1024);

6)  рахунок перепадів 1→0 вхідних імпульсів;

7)  рахунок перепадів 0→1 вхідних імпульсів;

8)  формування ШІМ сигналів;

9)   вимір інтервалу між заданими змінами сигналу на вході

ICP.

З таймерами пов'язані регістри керування і стану, за

допомогою яких задаються їх функції. Можливе пряме звернення до цих регістрів, або використання бібліотечних функцій.

 

Функції IDE Arduino

 

Advanced I/O:

-  tone (pin, frequency) - генерація імпульсів заданої частоти frequency (Гц) на виведенні pin;

-  noTone (pin) - припинення генерації;

-    pulseIn (pin, value) - повертає тривалість рівня value (HIGH, LOW) імпульсу на виводі pin - analogWrite (pin, value) - генерація ШІМ з параметром value=0.255 на виведенні pin=3 (5,6,9,10,11);

- 3,11 - ТС2;

 

Time:

-  millis () - повертає число мілісекунд від запуску програми (період рахунку близько 50 днів);

-     micros () - повертає число мікросекунд від запуску програми (період рахунку близько 70 днів);

-  delay (value) - затримка на value мілісекунд;


-  delayMicroseconds (value) - затримка на value мікросекунд;

 

Функція tone з використанням ТЛ2:

-     tone (pin, unsigned int frequency); 0…13        Гц

-     tone (12,440) - генерація 440 Гц на pin D12;

-     tone (pin, unsigned int frequency, unsigned long duration); 0…13         Гц                             мс

-     tone(9,800,500) - 500 мс генерація 800 Гц на pin D8;

-     noTone(pin);

-     noTone(12) - припинення генерації на pin D12.

 

Приклад 1. Ступінчата зміна тону (тут потрібно знайти помилку).

int ledPin = 11; unsigned char val = 64;

 

void setup(){ pinMode(ledPin, OUTPUT);

}

 

void loop()

{

tone(LedPin,val*4); val+=16; if(val<64) val=64; delay(250);

}

 

Для налагодження програми можуть використовуватися проекти-приклади з Proteus з віртуальним осцилографом (рисунок 4.3). З отриманої за допомогою віртуального осцилографа тимчасової діаграми періоду сигналу частоту можна знайти таким чином. Добуток величини розгортки по горизонталі в мс і числа поділок в одному періоді дає тривалість періоду Т сигналу в мс, а частота визначається як F = 1000/Т, Гц. Порівняти отриману частоту із заданою.


 

Рисунок 4.3 – Приклади керування ШІМ з Proteus

 

Для прикладу "DDS Generator" на основі ATmega168 слід виконати приведені рисунку 4.4 налаштування.


Рисунок 4.4 – Вибір плати в середовищі розробки


При значному відхиленні результату вимірів від завдання слід перевірити встановлену тактову частоту в моделі МК, враховуючи, що за замовчуванням програма компілюється для тактової частоти 16 Мгц.

Для комплексного налагодження програми є стенди на основі ATmega168, ATmega328, осцилограф, частотомір і п’єзовипромінювачі для контролю вихідних сигналів, генерованих під керуванням програм (рисунок 4.4).

 

 

 

 

 

 

 

 

 

а)

 

б)

Рисунок 4.5 - стенди на основі ATmega168 (а) и ATmega328 (б)

 

При необхідності можуть використовуватися стенди інших форм- факторів на основі ATmega328, ATmega2560 і інших МК.


Формування ШІМ

Функція analogWrite(pin, value) виведення ШІМ сигналу, де pin=(3,5,6,9,10,11), value=0..255.

 

Приклад 2. Вивід ШІМ сигналу зі змінною шпаруватістю сигналу.

int ledPin = 9; unsigned char val = 0; void setup()

{

pinMode(ledPin, OUTPUT);

}

void loop()

{

analogWrite(ledPin, val); val++;

delay(10);

}

 

Для налагодження програми можна використовувати проект- приклад з Proteus з віртуальним осцилографом (рисунок 4.3) для вимірювання параметрів ШІМ.

 

В прикладі 3 розглянуто використання функцій відліку часу millis(), micros().

 

Приклад 3. Використання millis() програма Blink без delay()

 

// Blink without Delay const int ledPin = 13; int ledState = LOW;

 

unsigned long previousMillis = 0; const long interval = 1000;

 

void setup() { pinMode(ledPin, OUTPUT);


}

 

void loop()

{

unsigned long currentMillis = millis(); if(currentMillis - previousMillis >= interval)

{

previousMillis = currentMillis; if (ledState == LOW)

ledState = HIGH; else

ledState = LOW; digitalWrite(ledPin, ledState);

}

}

 

Для налагодження програми можна використовувати проект-приклад з Proteus з віртуальним осцилографом (рисунок 4.3) для вимірювання параметрів імпульсів.

 

Задача 1. Формування меандру з частотами заданих нот

У таблиці 4.1 приведені частоти основних нот для індивідуального завдання. Виділено 48 частот - від 130.82 Гц до 1975.5 Гц (варіанти 1 .. 48). Використовуючи приклад, написати програму для відтворення тону з частотою, що відповідає заданому варіанту. Провести моделювання з використанням Proteus (рисунок 4.6). З допомогою віртуального осцилографа визначити тривалість періоду імпульсів і розрахувати їх частоту. Порівняти результат із завданням. Завантажити програму в МК Аrduino Uno (Nano), прослухати тон за допомогою п’єзовипромінювача. Виміряти частотоміром частоту тону. Побудувати програму вибору однієї з трьох частот за варіантом з таблиці .4.2 за допомогою трьох кнопок. За допомогою четвертої кнопки вибирається послідовність відтворення трьох нот.


Таблиця 4.1 - Частоти звучання нот

Вар

Частота, Гц

Вар

Частота, Гц

Вар

Частота, Гц

1

130.82

13

261.63

25

523.25

2

138.59

14

277.18

26

554.36

3

147.83

15

293.66

27

587.32

4

155.56

16

311.13

28

622.26

5

164.81

17

329.63

29

659.26

6

174.62

18

349.23

30

698.46

7

185.00

19

369.99

31

739.98

8

196.00

20

392.00

32

784.00

9

207.00

21

415.30

33

830.60

10

220.00

22

440.00

34

880.00

11

233.08

23

466.16

35

932.32

12

246.96

24

493.88

36

987.75

Провести моделювання з використанням Proteus (рисунок 4.6). Завантажити програму в МК Аrduino Uno (Nano), прослухати тон за допомогою п’єзовипромінювача. Виміряти частотоміром частоти тону.

 

Таблиця 4.2. - Трьохканальні комбінації

Вар.

F1, Гц

F2, Гц

F3, Гц

Вар.

F1, Гц

F2, Гц

F3, Гц

1

130,82

233,08

523,25

14

155,56

246,96

554,36

2

138,59

246,96

554,36

15

164,81

261,63

587,32

3

147,83

261,63

587,32

16

174,62

277,18

622,26

4

155,56

277,18

622,26

17

185

293,66

659,26

5

164,81

293,66

659,26

18

196

311,13

698,46

6

174,62

311,13

698,46

19

207

329,63

739,98

7

185

329,63

739,98

20

220

349,23

784

8

196

349,23

784

21

130,82

369,99

830,6

9

207

369,99

830,6

22

138,59

392

880

10

220

392

880

23

147,83

415,3

932,32

11

130,82

415,3

932,32

24

155,56

440

987,75

12

138,59

440

987,75

25

164,81

277,18

523,25

13

147,83

233,08

523,25

26

174,62

246,96

830,6


Задача 2. Побудувати програму керування двигуном (освітленням) з циклічною 3-ступінчастою зміною шпаруватості ШІМ за індивідуальним варіантом з таблиці 4.3. Для заданих значень шпаруватості 0..99% необхідно розрахувати значення параметрів для функцій формування ШІМ - analogWrite (pin, val). Провести моделювання за допомогою віртуального середовища на основі проекту на рисунку 4.3 або на рисунку 4.6. Виміряти період, частоту і шпаруватість сигналу.

 

Програмування генератора ШІМ

 

ШІМ використовується для керування двигунами постійного струму і світлодіодним освітленням.

 

Таблиця 4.3. Значення скважності ШІМ

Вар

Q1, %

Q2, %

Q3, %

Вар

Q1, %

Q2, %

Q3, %

1

19

57

70

16

10

59

88

2

27

43

89

17

30

59

88

3

11

40

90

18

10

46

89

4

29

48

72

19

16

43

90

5

22

41

73

20

19

54

80

6

26

55

74

21

17

43

74

7

22

50

72

22

21

50

81

8

30

59

83

23

28

53

86

9

14

42

90

24

26

56

80

10

19

50

87

25

17

54

80

11

15

40

87

26

13

49

75

12

23

53

82

27

14

50

79

13

19

49

76

28

10

57

81

14

30

51

74

29

15

43

75

15

20

53

86

30

23

49

87


 

Рисунок 4.6 Налагодження програми в середовищі Proteus

 

З отриманої за допомогою віртуального осцилографа тимчасової діаграми ШІМ сигналу (рисунок 4.7) частоту і шпаруватість можна знайти наступним чином. Величина розгортки по горизонталі - 1 мс / справа. Тоді період сигналу становить близько 4 мс, що відповідає частоті 250 Гц. Тривалість імпульсу - близько 1.4 мс, тоді шпаруватість становить: 1.4 / 4 *

100 = 35%, яка досягається використанням параметра функції analogWrite зі значенням 1.4 / 4 * 256 = 90.


Рисунок 4.7 Вигляд ШІМ сигналу з частотою 250 Гц і

шпаруватістю 35%

 

Завантажити програму в МК і перевірити роботу пристрою.

 

Задача 3. Для заданих в таблиці 4.4 значень кута повороту валу сервопривода -90...+ 90% необхідно розрахувати значення тривалості імпульсів для послідовної установки в задані


положення. Спеціальні бібліотеки містять методи для керуванням сервоприводами. Провести моделювання за допомогою віртуального середовища на основі проекту на рисунку 4.8. Виміряти період, частоту і тривалість імпульсів керування приводом.

 

Керування сервоприводом


 

Рисунок 4.8 Моделювання сервопривода в Proteus

 

Кут повороту вала сервоприводу -90⁰ .. + 90⁰ задається послідовністю імпульсів з частотою 50-60 Гц і тривалістю 500 .. 2500 мкс.


Таблиця 4.4. Значення кута повороту вала сервопривода

Вар

α1,⁰

α2,⁰

α3,⁰

Вар

α1,⁰

α2,⁰

α3,⁰

1

-80

-28

54

16

-56

26

89

2

-85

3

58

17

-89

26

78

3

-64

-8

60

18

-43

6

61

4

-66

-20

45

19

-52

-2

50

5

-53

-14

56

20

-63

8

75

6

-63

10

82

21

-64

24

89

7

-80

-21

45

22

-66

28

66

8

-44

-30

47

23

-51

14

70

9

-46

1

59

24

-45

29

80

10

-89

8

77

25

-83

-15

59

11

-83

-20

58

26

-90

29

70

12

-63

5

59

27

-84

8

62

13

-56

20

61

28

-49

-6

69

14

-78

29

62

29

-64

-11

87

15

-68

-5

69

30

-81

5

47

 

Завантажити програму в МК і перевірити роботу пристрою.

Виміряти параметри сигналів керуванням сервоприводом.

 

Зміст звіту

 

1.   Схеми для проведених експериментів.

2.   Тексти програм для завдань.

3.   Результати моделювання (тимчасові діаграми, оцінка часових параметрів).

4.   Результати виконання експериментів.

5.   Результати експериментів з використанням навчальних стендів і вимірювальних приладів, фото і відео експериментів (при необхідності).

6.   Висновки по роботі.


Контрольні запитання

 

1. Схема і принцип роботи 8-бітового двійкового лічильника? 2.Перерахуйте режими роботи ТЛ.

3.Опишіть функцію tone з використанням ТЛ2. 4.Як формується ШІМ сигнал?

5. Як визначити частоту сигналу ШІМ?

6. Як визначити шпаруватість сигналу ШІМ? 7.Для чого використовується ШІМ?

8. Як визначити тривалість періоду імпульсів.

9.  Як здійснити вибір плати в середовищі розробки?

10.   Як завантажити програму в МК?

 

Література

 

1.   Опис навчальних стендів.

2.   Соммер У. Программирование микроконтроллерных плат Arduino/Freeduino.- СПб.: БХВ – Петербург, 2012.- 256с.

3.   Brian W. Evans Блокнот програмиста. 2007.

4.   Среда разработки Arduino. [Електронний ресурс]. – Режим доступу: http://www.arduino.cc/en/Main/Software

5.   Simulator for Arduino. [Електронний ресурс]. Режим доступу: http://virtronics.com.au/Data/SetupFree.zip.

6.   Программирование Ардуино. [Електронний ресурс]. Режим доступу: http://arduino.ru/Reference

7.   PROTEUS VSM. Среда виртуального моделирования. - PROTEUS-d.pdf [Електронний ресурс]. Режим доступу: http://proteus123.narod.ru/