- •Курсовой проект
- •«Микропроцессорное устройство управления»
- •1. Функциональная схема
- •2. Описание принципиальной схемы
- •2.1. Микроконтроллер Atmel at90usb1286
- •2.1.1. Карта памяти
- •2.1.2. Реализация интерфейса usb
- •2.2. Блок ацп
- •2.3. Блок цап
- •2.4. Клавиатура и дисплей
- •3. Разработка блока питания
- •4. Программная часть. Программа опроса клавиатуры
- •5. Список использованных источников
3. Разработка блока питания
Для нормального функционирования устройство требует три напряжения питания: +5 В для питания цифровых микросхем, индикации и АЦП/ЦАП и ±12 В для питания операционных усилителей и ИОН. Для выбора элементов блока питания необходимо предварительно определить потребляемые схемой токи.
Ток, потребляемый от источника +5 В:
Ток, потребляемый от источников ±12 В равен сумме токов покоя ОУ, т.е. 0,5 мА на один канал усилителя, т.е. суммарно 0,5·10 = 5 мА.
Используется трансформатор с обмотками на напряжения 8 В и 2*15 В, интегральные стабилизаторы напряжения типов LM7805 (+5 В),LM7812 (+12 В),LM7912 (–12 В), с минимальной разностью напряжений вход-выход, равной 2,5 В. Исходя из этих условий, определим допустимые амплитуды пульсаций на выходе С-фильтров выпрямителей.
Исходя из этого, определяем емкости фильтров:
Ввиду малого расчетного значения емкостей фильтров в каналах ±12 В целесообразно увеличить требования к амплитуде пульсаций и выбрать C10,C11 100 мкФ.
Определим номинальные напряжения конденсаторов фильтров:
Конденсаторы С12-С14, С17-С19 выбираются по рекомендациям в документации на стабилизаторы DA3-DA5 равными 0,1 мкФ, аналогично конденсаторыC21-C23 выбираются 47 мкФ*16 В.
4. Программная часть. Программа опроса клавиатуры
4.1. Блок-схема алгоритма
4.2. Листинг программы (CodeVisionAVRC)
#define dig1 PORTC.0
#define dig2 PORTC.1
#define dig3 PORTC.2
#define dig4 PORTC.3
#define dig5 PORTC.4
#define dig6 PORTC.5
#define COMA PORTF.0
#define COMB PORTF.1
#define COMC PORTF.2
#define COMD PORTF.3
#define COME PORTF.4
#define COMF PORTF.5
#define COMG PORTF.6
#define COMPT PORTF.7
#define KBR0 PORTD.4
#define KBR1 PORTD.5
#define KBR2 PORTD.6
#define KBR3 PORTD.7
unsigned char const decode[16]={
0b00111111, 0b00000110, 0b01011011, 0b01001111,
0b01100110, 0b01101101, 0b01111101, 0b00000111,
0b01111111, 0b01101111, 0b01110111, 0b01111100,
0b00111001, 0b01011110, 0b01111001, 0b01110001
};
unsigned char digits[8]={1,2,3,4,5,6,7,8};
unsigned char place_count=1;
unsigned char key_buff=0;
unsigned char key=0;
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xFB;
TCNT1L=0x1D;
set_place(place_count);
PORTC=dec_7seg(digits[place_count]);
key_buff=PORTD & 0xF0;
switch(key_buff)
{
case 0x10:
key=0x10;
break;
case 0x20:
key=0x20;
break;
case 0x40:
key=0x30;
break;
case 0x80:
dig4=0x40;
break;
default:
key=0;
}
key+=place_count;
if (place_count != 6)
{
place_count++;
}
else
{
place_count=1;
}
}
void set_place(unsigned int place)
{
PORTA=0xFF;
switch(place)
{
case 1:
dig1=0;
break;
case 2:
dig2=0;
break;
case 3:
dig3=0;
break;
case 4:
dig4=0;
break;
case 5:
dig5=0;
break;
case 6:
dig6=0;
break;
}
}
unsigned char dec_7seg(unsigned char val_hex)
{
val_hex=decode[val_hex];
return val_hex;
}