Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

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

КурсоваДопомога в написанніДізнатися вартістьмоєї роботи

Під час виконання цієї частини курсового проекту необхідно зібрати та продемонструвати роботу принципової схеми. З цією метою використовується програма симуляції роботи схем у реальному часі — Proteus. Вона має у своєму складі багату бібліотеку елементів, яка до того ж, постійно оновлюється, що дозволяє працювати та перевіряти працездатність схем з використанням різноманітних актуальних… Читати ще >

Вимір напруги живлення контролера (реферат, курсова, диплом, контрольна)

Зміст

  • Всту
  • 1. Опис схемотехніки
  • 2. Розробка програмного забезпечення
  • 3. Моделювання схеми
  • 4. Створення та відлагодження програмного забезпечення
  • Висновок
  • мікроконтролер цифровий перетворювач програма
  • Вступ
  • На сьогоднішній день ми можемо сміливо казати, що людина не уявляє свого життя без досягнень сучасних найновіших технологій. Вони стають звичними для нас; їх розробники роблять усе можливе для аби різноманітні складні пристрої ставали більш дружніми та простими для користування. Проте за всією цією простотою та доступністю, насправді, стоять праця та досягнення багатьох людей, які творять прогрес своїми винаходами.
  • Одним з досягнень технічної думки людини є створення маленьких пристроїв, які, незважаючи на свої розміри, характеризуються високою продуктивністю та різноманітністю сфер свого застосування — мікроконтролерів. Вони можуть бути застосовані при створенні різних простих схем (годинники, світлофор, датчики, вимірювальні прилади тощо). Тому для програміста є важливим не лише теоретично знати, як зробити той чи інший прилад, а й вміти самому змоделювати принципову схему приладу та написати програму, яка б виконувала необхідні дії відповідно до поставленої мети.
  • В цій роботі ми будемо розробляти програму для ОМК, яка виконує функцію виміру напруги живлення контролера і відображує її на двох семисигментних індикаторах.
  • 1. Опис схемотехніки
  • При виконанні завдання курсової роботи для моделювання схеми та написанні програми використовувався мікроконтролер ATmega16. Це достатньо потужний контролер, який може бути використаний при розв’язанні різних задач.
  • Мікроконтролер ATmega16 32регістри загального призначення (РОН), може працювати при частоті 16МГц. Характеристики пам’яті ОМК є наступними:
  • — 16Кб пам’яті програм;
  • — 512 байтів енергонезалежної пам’яті (EEPROM);
  • — 1Кб SRAM.
  • До внутрішніх пристроїв, які може використовувати контролер відносяться:
  • — 2 8-бітних таймера-лічильника;
  • — 1 16-бітний таймер-лічильник з перериванням по співпадінню та по захвату ТЛ;
  • — 4 лінії ШІМ;
  • — внутрішній АЦП;
  • — синхронно-асинхронний прийомо-передатчик USART;
  • — підтримка інтерфейсу SPI;
  • — програмує мий сторожовий таймер;
  • — аналоговий компаратор.
  • Крім того, має 4 порти введення/виведення (32 лінії).
  • Далі детальніше розглянемо ті пристрої, які ми використовуємо для вирішення задачі.
  • Головним елементом контролера, який ми використовуємо є 10-розрядний аналогово-цифровий перетворювач. Основними характеристиками АЦП є:
  • — нелінійність — 0.5 молодшого задающого розряду (МЗР);
  • — точність — 2 МЗР;
  • — внутрішнє джерело опорної напруги — 2.56В;
  • — частота перетворення — 50−200КГц;
  • — кількість синфазних входів — 8;
  • — кількість диференціальних входів — 7.
  • АЦП перетворює аналогову вхідну напругу в 10-бітне цифрове значення. Мінімальне значення представлене значенням заземлення GND, а максимальне значення — напругою на вході AREF мінус 1 МЗР. Додатково AVCC або внутрішнє джерело напруги на 2.56 В можуть бути підключені до AREF програмним шляхом.
  • Розглянемо детальніше внутрішню структуру АЦП для ATmega16, яка надається виробником (рис.1):
  • Рис. 1. Внутрішня структура АЦП ATmega16
  • Як видно з рисунку АЦП оснащений внутрішнім передділенням. Варто зазначити, що частота, на якій рекомендується вести перетворення, повинна бути меншою за 200КГц, тому при його використанні для точних розрахунків слід використовувати передділення. Керування пристроєм здійснюється за допомогою 3 регістрів: ADMUX (регістр мультиплексора), ADCSRA (регістр керування та статусу АЦП), ADC (регістр даних).
  • За допомогою регістру ADMUX можна обрати, що є джерелом вхідного сигналу для АЦП, для цього можна використовувати один з 8 пінів порта А. Старші 2 біти регістру відповідають за вибір джерела опорної напруги (можна використовувати внутрішнє джерело напругою 2.56В). У таблиці 1 наведено, як можна використовувати 2 старші біти даного регістру:
  • Табл.1. Вибір джерела вхідної напруги
  • REFS1

    REFS0

    Обране джерело напруги

    Напруга на вході AREF

    Напруга на вході AVCC з зовнішнім конденсатором на вході AREF

    Зарезервовано

    Внутрішнє джерело напруги 2.56В

    • Регістр ADCSRA відповідає за роботу АЦП. Розглянемо призначення кожного з бітів цього регістру:
    • — ADEN — вмикання/вимикання АЦП;
    • — ADCS — початок перетворення;
    • — ADIF — прапор переривання;
    • — ADIE — дозвіл на переривання АЦП;
    • Три останні біти дозволяють вибрати передділення. Передділення обирається з ряду 2, 4, 8, 16, 32, 64 і 128. Рекомендовано використовувати такий коефіцієнт, щоб частота перетворення була в діапазоні від 50 до 200КГц. Регістр даних аналогово-цифрового перетворювача є двобайтним. У старшому байті використовуються лише 2 молодші біти.
    • 2. Розробка програмного забезпечення
    • Для написання програми було обране середовище розробки ImageCraft, яке дозволяє писати програми для мікроконтролерів на мові С.
    • На попередньому етапі визначаємо, з яких частин буде складатися програма:
    • 1. Ініціалізація та настроєння роботи портів та внутрішніх пристроїв контролера
    • 2. Запуск АЦП
    • 3. Зчитування даних, отриманих після опрацювання АЦП з регістру даних
    • 4. На основі зчитаних даних визначаємо, за допомогою математичних обчислень, напругу на вході
    • 5. Перетворюємо отриманий результат у форму, зручну для виведення
    • 6. Виведення даних на індикатори.
    • Визначимось з призначенням портів, які ми будемо використовувати. Порт С буде призначений для виводу значень на семи сегментні індикатори. Один з входів порту, А слід використати у якості входу для АЦП (інші порти для цього непридатні). З призначенням інших ліній у портах визначимось під час створення схеми.
    • Щодо аналогово-цифрового перетворювача, то для початку необхідно дозволити роботу пристрою та визначити передділення, з яким працює АЦП.
    • Першу частину зручно оформити у вигляді процедури, яку можна викликати на початку головної функції main.
    • З одного боку, контролер може використовувати переривання по настанню події завершення перетворення сигналу, але можна застосувати інший підхід — перевіркою та очікуванням появи 1 у регістрі керування та статусу біта закінчення перетворення сигналу. Коли цей біт встановлений, це означає, що дані повністю пройшли необхідні перетворення і готові до того, щоб їх можна було зчитувати. Після того, як дані готові до зчитування, слід зчитати дані з старшого та молодшого регістрів даних і за допомогою бітових операцій об'єднати значення та запам’ятати їх у змінну. Алгоритм даної частини є наступним:
    • 1. Визначити, з якого входу обробляються дані;
    • 2. Розпочати обробку інформації АЦП;
    • 3. Дочекатися закінчення перетворення аналогового сигналу;
    • 4. За допомогою бітових операцій об'єднати дані з регістру даних у одній змінній;
    • Головною функцією у програмі на мові С має бути функція main. Тому у цій функції слід об’явити та ініціалізувати усі змінні, які спростять написання та розуміння програми. Також у головній функції будуть викликатися інші підпрограми, які ми опишемо до їх виклику. Зокрема, доцільно виділити у підпрограми етапи ініціалізації ресурсів однокристального мікроконтролера (порти, АЦП), а також зчитування даних з регістрів АЦП. Алгоритм, який використовується при використанні функції main є наступним:
    • 1. Ініціалізувати додаткові змінні, необхідні для обчислень та виведення інформації;
    • 2. Ініціалізувати пристрої контролера, які будуть використовуватись;
    • 3. У циклі зчитувати перетворені дані;
    • 4. За формулою обчислити значення вхідної напруги;
    • 5. Вивести результат на індикатори;
    • 6. Викликати затримку та розпочати новий цикл.
    • Для того, щоб отримати значення вхідної напруги у доступному вигляді слід скористатися формулою, яка рекомендується для проведення обчислень:
    • ,
    • де VIN — вхідна напруга,
    • VREF — велична опорної напруги,
    • ADC — значення, яке отримане у результаті перетворення.
    • З цієї формули легко обчислити значення вхідної напруги, але, оскільки значення буде мати дробову частину, то бажано, помножити отриманий результат на 10, щоб зручно було виводити його на індикатори. У результаті отримуємо формулу, яку ми і будемо використовувати при написанні програми:
    • .
    • Враховуючи те, що значення опорної напруги ми оберемо у розмірі 5 В, то розрахунки зводяться до виконання множення та ділення.
    • Після виконання вищеописаних дій ми отримуємо ціле число з 2 розрядами, які необхідно виводити на 2 індикатори. Оскільки у мові С можна використовувати масиви, то доцільно буде їх використати для зберігання коду семисегментного індикатору десяткових цифр. Виділивши цілу та дробову частини цілочисельним діленням та діленням з залишком, знаходимо номер цифри у масиві та виводимо знайдений елементу масиву на порт виводу. Отже, алгоритм даної частини програми буде наступним:
    • 1. Об’явити та ініціалізувати масив, у якому знаходяться коди цифр для індикатора;
    • 2. Обчислити за формулою величину поданої напруги;
    • 3. Виділити цілу та дробову частину для виведення;
    • 4. За допомогою масиву знайти число, яке потрібно вивести на індикатор;
    • 5. Вивести числа на 2 індикатори.
    • Загальна блок-схема, якою ми будемо користуватися при написанні програми є наступною:
    • Рис. 2. Загальна блок-схема програми
    • Цю схему можна деталізувати. Кожен етап потребує деталізації.
    • Рис. 3. Блок-схема ініціалізації контролера
    • Рис. 4. Блок-схема алгоритму отримання результату перетворень
    • Рис. 5. Блок-схема алгоритму головного циклу програми
    • Опрацювавши створення алгоритмів та блок-схем, у результаті ми отримали готову структуру програми, що у подальшому значно спростить її написання, оскільки ми вже уявляємо те, як вона має виглядати, з яких елементів складатися і що кожен з них повинен робити для коректного функціонування програми.
    • 3. Моделювання схеми
    • Під час виконання цієї частини курсового проекту необхідно зібрати та продемонструвати роботу принципової схеми. З цією метою використовується програма симуляції роботи схем у реальному часі - Proteus. Вона має у своєму складі багату бібліотеку елементів, яка до того ж, постійно оновлюється, що дозволяє працювати та перевіряти працездатність схем з використанням різноманітних актуальних компонентів. У даній роботі використовувалась програма версії 7, яка випущена у 2009 році, тому може не працювати у більш ранніх версіях.
    • Як вже зазначалось вище, у першому розділі, для реалізації схеми використовуватиметься контролер серії Mega — Atmega16. Він є основним елементом принципової схеми. У середовищі програми він буде мати наступний вигляд:
    • Рис. Вигляд ОМК у Proteus
    • Та окрім самого контролера нам знадобляться й інші елементи. Зокрема, з завдання зрозуміло, що для того, щоб перевірити правильність роботи схеми, необхідно, щоб ми могли змінювати напругу на вході, нам знадобиться резистор зі змінною напругою.
    • Рис. Резистор зі змінною напругою
    • Також ми використаємо елементи, які будуть зберігати дані, які були видані до порту під час попереднього виводу перед викликом підпрограми затримки.
    • Рис. Елемент пам’яті
    • Для відображення інформації були обрані прості семисегментні індикатори:
    • Рис. Семисегментний індикатор у Proteus
    • Загалом, слід сказати, що принципова схема є достатньо простою та зрозумілою. Її можна було б умовно розділити на 3 частини:
    • — подача вхідних сигналів до ОМК;
    • — власне сам однокристальний мікроконтролер;
    • — пристрої для виведення даних.
    • Далі наведено підсумкову принципову схему, що була змодельована у програмі Proteus.
    • Рис. Підсумкова принципова схема
    • З принципової схеми видно, що на резистор зі змінним опором подається напруга, яка потім подається на один з входів аналогово-цифрового перетворювача (7-ий пін порта А). Відповідно для керування виведенням використовуються 2 порти. Перший (порт А) визначає, на який індикатор слід подавати сигнал, а другий (порт С) використовується для виводу чисел у коді семисегментного індикатора. Елементи пам’яті необхідні для того, аби не зникало зображення, яке подається на індикатори. Щодо приєднання мікроконтролера, то він підключений до зовнішнього генератора тактової частоти, який дозволяє ОМК працювати на частоті 8МГц. Важливим моментом також є те, що до ОМК приєднується джерело опорної напруги у 5 В (це спрощує арифметичні розрахунки), що слід враховувати при розрахунках.
    • 4. Створення програмного забезпечення
    • Даний розділ присвячений розгляду кінцевого проекту для програмування принципової схеми, яка була розглянута у попередньому розділі.
    • Як вже зазначалось вище, програма написана на мові С, а для побудови та компіляції проекту використовувався компілятор ImageCraft.
    • Проект програми складається з одного файлу, у якому розміщуються усі необхідні підпрограми, які будуть використовуватись.
    • Розглянемо детальніше програмну реалізацію та вирішення задачі курсового проекту.
    • Функція, init_cpu, яка відповідатиме за ініціалізацію ОМК, виглядатиме наступним чином:
    • void init_cpu (void)
    • {
    • DDRA=0b00000111;
    • DDRC=0xFF;
    • DDRD=0×80;
    • PORTD=0×80;
    • ADCSRA=0×86;
    • }
    • Перші три оператори налаштовують на вивід необхідні для роботи схеми піни портів введення/виведення. Далі на старший пін порта D видається 1. Після цього до регістру керування та статусу АЦП, записується, у якому режимі буде працювати перетворювач.
    • Ми записуємо маску, яка, по-перше, дозволяє роботу АЦП, по-друге, встановлює передділення 1/64 відносно кристалу, до якого приєднується ОМК. Завдяки підключенню заготовочного файлу iom16v. h ми можемо звертатися до регістрів за зручними для читання та розуміння іменами, а не за їх номерами у складі мікроконтролера.
    • Цю дію також оформимо у вигляді функції:
    • unsigned int read_adc (unsigned char channel)
    • unsigned int adcw;
    • char a;
    • char b;
    • ADMUX=channel;
    • // Start the AD conversion
    • ADCSRA
    • Параметр функції визначає, з якої лінії отримує сигнал АЦП. Далі починається перетворення аналогового сигналу у цифровий код. Це продовжується до тих пір, поки не встановлюється прапор завершення перетворення у регістрі статусу. Коли перетворення завершене зупиняється подальше перетворення та зчитуються дані з регістру даних.
    • void delay (int ms)
    • {
    • int c1, c2;
    • for (c1=0;c1
    • for (c2=0;c2<970;c2++) NOP ();
    • }
    • Вона реалізується на основі двох вкладених циклів, у яких відбувається інкрементування змінних та виклик функції NOP (), що відповідає аналогічній команді контролера, тобто контролер не виконує ніяких дій. Параметр функції визначає тривалість затримки у мілісекундах.
    • Далі розглянемо реалізацію головної функції програми — main.
    • void main ()
    • {
    • int v;
    • float voltage=0;
    • char seg[10]={0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,
    • 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};
    • char vh, vl;
    • init_cpu ();
    • while (1)
    • {
    • v=read_adc (7);
    • voltage=v*5;
    • voltage=voltage/102.3;// 5 V — reference voltage ADC
    • vh=(char)voltage/10;
    • vl=(char)voltage%10;
    • PORTA=1;
    • PORTC=seg[vh];
    • PORTA=2;
    • PORTC=seg[vl];
    • delay (250);
    • }
    • }
    • У головній програмі організується виклик функцій ініціалізації, а також у безкінечному циклі зчитування інформації з АЦП, обробка їх та виведення на семисегментні індикатори.
    • Для затримки використовуємо функцію затримки, яка необхідна для розділення інтервалів часу між двома зчитуваннями даних з регістрів даних АЦП та їх виведенням на індикатори. Також у функції є масив констант, який відповідає значенням цифр у семисегментному коді. Також після зчитування даних виконується їх розділення на 2 цифри, призначені для виводу на дисплеї.
    • Висновок
    • Виконання даної курсової роботи навчило розуміти принцип реалізації програм для різних принципових схем. Зважаючи на те, що необхідно було працювати з АЦП мікроконтролера, ми зрозуміли принцип роботи перетворювача, а також алгоритми, за якими можна працювати з даним внутрішнім пристроєм. Оскільки результат перетворення не можна отримати у явній формі, то нам довелось використовувати формули для знаходження результату. Також важливим є те, що ми навчились виводити отримані дані на індикатори. Також надзвичайно важливим є досвід складання принципових схем для реалізації поставленої задачі, оскільки ми навчились, наприклад, знаходити та використовувати пристрої, які здатні запам’ятовувати подані на них сигнали.
Показати весь текст
Заповнити форму поточною роботою