Генератор пачек импульсов

Автор работы: Пользователь скрыл имя, 14 Августа 2013 в 12:02, курсовая работа

Описание работы

Применение микропроцессорных средств позволяет достаточно легко программно реализовывать генераторы импульсов, в том числе с возможностью на ходу изменять частоту и количество импульсов.
Анализ технического задания показывает, что проектируемое устройство должно выполнять 4 основные задачи
Содержать счетчик со срабатыванием прерывания с частотой 10 Гц
Формировать пачки импульсов с частотой 10 кГц с возможностью задать извне их количество.
Считывать число с переключателей и формировать число, которое будет являться количеством импульсов в пачке.
Осуществлять вывод информации о количестве импульсов на семисегментные индикаторы.

Содержание работы

Введение ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙4
Конкретизация технического задания ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙5
Разработка структурной схемы ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙6
Разработка схемы алгоритма прикладной программы ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙7
Разработка принципиальной схемы ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙8
Разработка управляющей программы ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙9
Заключение ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙11

Список использованных источников ∙∙∙∙∙∙∙∙∙∙∙∙∙

Файлы: 1 файл

kurs.doc

— 328.50 Кб (Скачать файл)

 ТОМСКИЙ ГОСУДАРСТВЕННЫЙ  УНИВЕРСИТЕТ 

СИСТЕМ УПРАВЛЕНИЯ И  РАДИОЭЛЕКТРОНИКИ (ТУСУР)

 

Кафедра промышленной электроники (ПрЭ)

 

ЗАДАНИЕ

на курсовое проектирование по дисциплине

«Микропроцессорные устройства и системы»

 

студенту  

группа ____ ____________ факультет _______ ЗФ________

Тема проекта: Генератор пачек импульсов

Исходные данные к  проекту:

1) Пачки импульсов следуют с частотой 10 Гц

2) Частота импульсов в пачке 10 кГц

3) Число импульсов в пачке от 1 до 100, выбирается переключателем и отображается на цифровых индикаторах

Содержание пояснительной  записки (перечень подлежащих разработке вопросов):

выбор микроконтроллера, обоснование функциональной схемы, разработка полной принципиальной схемы  устройства с перечнем элементов  и листинга управляющей программы .

Перечень графического материала (с точным указанием обязательных

чертежей и схем):

схема электрическая принципиальная — 1 лист

Дата выдачи задания: ________________________________________

Руководитель

профессор кафедры ПрЭ ________________________ А.В.Шарапов (подпись)

Задание принял к исполнению ____________________

(дата)

__________ (подпись студента)

 

 

 

 

 

 

Содержание

 

  1. Введение ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙4
  2. Конкретизация технического задания ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙5
  3. Разработка структурной схемы ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙6
  4. Разработка схемы алгоритма прикладной программы ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙7
  5. Разработка принципиальной схемы ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙8
  6. Разработка управляющей программы ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙9
  7. Заключение ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙11

 

Список использованных источников ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙12

Приложение А. Листинг  управляющей программы ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙13

Приложение Б. Принципиальная схема устройства∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙16

Приложение В. Перечень элементов∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙17

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Введение

 

Применение микропроцессорных  средств позволяет достаточно легко программно реализовывать генераторы импульсов, в том числе с возможностью на ходу изменять частоту и количество импульсов.

Анализ технического задания показывает, что проектируемое  устройство должно выполнять 4 основные задачи

    • Содержать счетчик со срабатыванием прерывания с частотой 10 Гц
    • Формировать пачки импульсов с частотой 10 кГц с возможностью задать извне их количество.
    • Считывать число с переключателей и формировать число, которое будет являться количеством импульсов в пачке.
    • Осуществлять вывод информации о количестве импульсов на семисегментные индикаторы.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Конкретизация технического задания

Одновременное выполнение поставленных задач обеспечивается использованием таймера и режима прерывания программы по его переполнению.

Наиболее оптимальным  решением, на мой взгляд, является использование контроллера Atmega8, так как это позволяет с минимальными затратами на разработку подключить на один порт индикацию, переключатели на второй и частично третий порт, и остальные выводы третьего порта для вывода сигнала, плюс свободные выходы, которые можно использовать, например, для генерации второго сигнала. А также в нем имеется все необходимое для выполнения поставленной задачи – программируемые таймеры с программируемыми выходами, сторожевой таймер, ПЗУ и ОЗУ. Алгоритм работы: таймер постоянно считает, на переключателях выставляется число, которое приплюсовывается к единице (изначальное число импульсов в пачке - один). Программа считает количество выданных импульсов. По достижении заданного числа импульсов  меняются настройки таймера и он выключается. Для динамического изменения времени задержки выключения выхода, в зависимости от того сколько останется времени до момента выдачи следующей пачки импульсов, введен параметр, рассчитывающий эту задержку используя число импульсов.

 

 

 

 

 

 

 

 

 

 

 

  1. Структурная схема устройства.

Устройство ввода представляет собой два десятипозиционных  переключателя. Десятичное число, поступающее  на узел обработки ввода, преобразуется  шифраторами в двоично-десятичное 8ми-битное число и поступает на порт контроллера. В обработке ввода также используются резисторы подтяжки, для создания на входах шифраторов логической единицы при отключенном состоянии.

Далее на выходе контроллера  РВ2(ОС1В) появляется заданный сигнал, и  на устройство индикации выводится  число, набранное на переключателях. В устройстве индикации также используются резисторы подтяжки.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Схема алгоритма прикладной программы

*Происходит изменение  частоты переполнения счетчика, для вывода импульсов с частотой 10 кГц. (Вывод одного импульса  за прерывание).

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Принципиальная схема устройства приведена в приложении Б.

Для ввода числа используются десятипозиционные переключатели  МПН-1 (Можно использовать любые другие 10и-позиционные). Для преобразования входного сигнала используются шифраторы 74HC147. В качестве микроконтроллера выбран контроллер ATmega8 как наиболее подходящий по количеству выводов и, как следствие, упрощающий разработку. В качестве индикатора используется светодиодный индикатор с общим катодом Kingbright CC56-12SRWA. Подтягивающие резисторы должны иметь достаточно большое сопротивление, желательно не менее 100кОм. Выбраны резисторы С1-4 номиналом 120 кОм 5%. Для подключения выводов микроконтроллера к светодиодному индикатору используются резисторы С1-4 номиналом 470 Ом  5 %. Что обеспечивает ток через один светодиод порядка 5 мА и при этом нормальную яркость свечения. В итоге ток через общий выход не будет превышать максимальное значение для этих микроконтроллеров.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Разработка управляющей программы.

    Программа рассчитана на работу от тактовых сигналов частотой 1 МГц

     Объявление переменных

char count=0;

int imp,part1,part2,decbin,decbin2;

unsigned int delay;

char temp1,temp2,impdes,imped,hundr;

flash char numInd[11]={63,6,91,79,102,109,125,7,127,111,63};

 

Массив  numInd[11] – кодировка чисел для семисегментного индикатора.

После инициализации  портов – настройка счетчиков

TCCR1A=0b00110011;

TCCR1B=0b00011010;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x27;

OCR1BH=0x00;

OCR1BL=0x23; 

TIMSK=0x04;

 

В основном цикле программы:

Преобразование двоично-десятичного  числа в двоичное и создание числа, обозначающего количество импульсов  на выходе.

      decbin=~PIND;

decbin2=decbin;

part1=((decbin&0b11110000)>>4)*10;

part2=decbin2&0b00001111;

imp=part1+part2+1;

 

И далее следует вывод  числа на светодиодные индикаторы

Программа, осуществляющая вывод заданного количества импульсов  в определенные промежутки запускается  через прерывание по переполнению счетчика.

interrupt [TIM1_OVF] void timer1_ovf_isr(void)

{

// Place your code here

count++;

OCR1AH=0x00;

OCR1AL=0x27;

OCR1BH=0x00;

OCR1BL=0x23;

TCCR1A|=0b00110000;

     if (count>(imp+1)){

delay=(40000-(imp*40));

TCCR1A&=0b11001111;

OCR1BH=((delay>>8)&0xFF);

OCR1BL=((delay)&0xFF);

OCR1AH=((delay>>8)&0xFF);

OCR1AL=((delay)&0xFF);

 

count=0;

}

Здесь происходит перенастройка  счетчика на частоту 10 кГц и осуществляется вывод импульса. При следующем  прерывании выводится следующий  импульс. Переменная count считает количество импульсов. При превышении необходимого количества импульсов формируется задержка до следующей пачки, перенастраивается счетчик и сбрасывается переменная count.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение.

Для выполнения этой задачи можно использовать любые контроллеры  семейства Mega, так как здесь выбран один из самых простых данного семейства. При использовании более мощного контроллера возможно расширение функций устройства, добавление связи с внешними приборами. Переделка данной программы под другую частоту не требует особенных усилий, так что возможно снижение энергопотребления устройства, либо добавление новых функций, требующих высокого быстродействия

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список использованных источников.

  1. Шарапов А.В. Микропроцессорные устройства и системы. Учебное пособие – Томск ТМЦДО 2008г.
  2. Белов А.В. Самоучитель разработчика устройств на микроконтроллерах AVR. Санкт-Петербьург, издательство «Наука и техника» 2010г.
  3. Джон Мортон. Микроконтроллеры AVR. Вводный курс. Москва, издательский дом «Додэка-XXI» 2006г.
  4. http://www.avr123.nm.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение  А

Листинг управляющей  программы

#include <mega8.h>

#include <delay.h>

char count=0;

int imp,part1,part2,decbin,decbin2;

unsigned int delay;

char temp1,temp2,impdes,imped,hundr;

flash char numInd[11]={63,6,91,79,102,109,125,7,127,111,63};

// Timer 1 overflow interrupt service routine

interrupt [TIM1_OVF] void timer1_ovf_isr(void)

{

// Place your code here

count++;

OCR1AH=0x00;

OCR1AL=0x27;

OCR1BH=0x00;

OCR1BL=0x23;

TCCR1A|=0b00110000;

     if (count>(imp+1)){

delay=(40000-(imp*40));

TCCR1A&=0b11001111;

OCR1BH=((delay>>8)&0xFF);

OCR1BL=((delay)&0xFF);

OCR1AH=((delay>>8)&0xFF);

OCR1AL=((delay)&0xFF);

 

count=0;

}

}

void main(void)

{

// Port B initialization

// Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=In Func0=In

// State7=T State6=T State5=0 State4=0 State3=0 State2=0 State1=T State0=T

PORTB=0x00;

DDRB=0x3C;

 

// Port C initialization

// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTC=0x00;

DDRC=0x7F;

 

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P

PORTD=0xFF;

DDRD=0x00;

 

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

TCCR0=0x00;

TCNT0=0x00;

 

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: 400,000 kHz

// Mode: Fast PWM top=OCR1A

// OC1A output: Discon.

// OC1B output: Inverted

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: On

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0b00110011;

TCCR1B=0b00011010;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x27;

OCR1BH=0x00;

OCR1BL=0x23;

 

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

 

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

MCUCR=0x00;

 

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x04;

 

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

 

// Watchdog Timer initialization

// Watchdog Timer Prescaler: OSC/2048k

#pragma optsize-

WDTCR=0x1F;

WDTCR=0x0F;

#ifdef _OPTIMIZE_SIZE_

#pragma optsize+

#endif

 

// Global enable interrupts

#asm("sei")

 

while (1)

      { #asm ("wdr");

        decbin=~PIND;

        decbin2=decbin;

        part1=((decbin&0b11110000)>>4)*10;

        part2=decbin2&0b00001111;

        imp=part1+part2+1;

       

        temp1=imp;

        temp2=imp;

        hundr=0;

        impdes=temp1/10;

        imped=(temp2-(impdes*10));

        PORTC=numInd[imped];

        PORTB&=0b11011111;

        delay_ms(5);

        PORTB|=0b00111000;

        delay_ms(5);

        PORTC=numInd[impdes];

        PORTB&=0b11101111;

        delay_ms(5);

        PORTB|=0b00111000;

        delay_ms(5);

        if (imp==100) {

                hundr=1;

                }

        PORTC=numInd[hundr];

        PORTB&=0b11110111;

        delay_ms(5);

        PORTB|=0b00111000;

        delay_ms(5);

              

       

      // Place your code here

 

      };

}

 

Приложение  Б

 

Приложение  В

 


Информация о работе Генератор пачек импульсов