Транзисторний перетворювач з дроселем в первинному ланцюзі
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
?ожливість оцінити даний пристрій. Можна говорити про високу надійність приладу, тому що підібрані елементи із сучасної бази, рівень безвідмовної роботи яких високий, погрішність перетворення мала.
7. Література
- Довідник. Джерела електроживлення РЕА. Г. Найвельт, Москва, 1958.
- Додік С.Д. Джерела електроживлення на напівпровідникових пристроях.
- Дроселі. Довідник Міністерства електронної промисловості СРСР.
- Конденсатори. Довідник Міністерства електронної промисловості СРСР.
- Білопольський І.І. Розрахунок трансформаторів і дроселів. М.: Енергія, 1973.
- Довідник. Напівпровідникові пристрої. Голомедова, М.: 1988.
180В,50Гц
Подпрограмма установок и инициализации
//Watchdog initialize
// prescale: 2048K
void watchdog_init(void)
{
WDR(); //this prevents a timout on enabling
WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}
void port_init(void) //инициализация портов
{
DDRA = 0b00110100;
PORTA = 0b000000000;
DDRD = 0b11111111;
PORTD = 0b00000000;
DDRB =0b11111111;
PORTB = 0b00000000;
}
void timer1_init(void) //инициализация таймера на время 18мкс
{
TCCR1B = 0x00; //stop
TCNT1H = 0x3C; //setup
TCNT1L = 0xB0;
OCR1AH = 0xC3;
OCR1AL = 0x50;
OCR1BH = 0xC3;
OCR1BL = 0x50;
ICR1H = 0xC3;
ICR1L = 0x50;
TCCR1A = 0x00;
}
void init_devices(void) //инициализация устройств
{
CLI();
watchdog_init();
port_init();
timer1_init();
SREG = 0b10000000;
ADCSRA = 0b10000110; //инициализация АЦП (режим)
ADMUX = 0b11100011; // инициализация АЦП (выбор РА3)
MCUCR = 0x00;
TIMSK = 0x04; //прерывание по таймеру 1
GICR = 0x00;
SEI();
}
Подпрограмма функций
unsigned int out,set ,Ton;
int high,low,b,tint1,des,edi;
int mas_code[10]={0b01000000,0b01111001,0b00100100,0b00110000,
0b00011001,0b00010010,0b00000010,0b01111000,0b00000000,0b00010000};
void BCD(int b) //BCD-преобразование
{
des=((b0)/10);
edi=((b0));
}
void delay_mcs(unsigned int tmp) //задержка
{
unsigned int tmp1;
tmp1=tmp*10;
while(tmp1>0)
{tmp1--;}
}
void start(void) //функция запуска стабилизатора
{
ADCSRA = 0b11000110; //запуск АЦП
delay_mcs(10);
low=ADCL; high=ADCH;
ADCSRA = 0b01000110; //остановка АЦП
Uin = high;
while(Uin != 0)
{delay_mcs (100);}
PORTA = 0b000000100; //VT1
}
void vol(void) //определение напряжения нагрузки и необходимого тока за 2мкс, индикация
{
ADMUX = 0b11110000; // инициализация АЦП (выбор РА0,РА1)
ADCSRA = 0b11000110; //запуск АЦП
low=ADCL; high=ADCH; //считывание напряжения
out = high; //запись в регистр
ADCSRA = 0b01000110; //остановка АЦП
ADMUX = 0b11100110; // инициализация АЦП (выбор РА6)
ADCSRA = 0b11000110; //запуск АЦП
low=ADCL; high=ADCH; //считывание напряжения
set = high; //запись в регистр
ADCSRA = 0b01000110; //остановка АЦП
if(out<set) {Ton++;}
if(out>set) {Ton--;}
BCD(set);
PORTB= mas_code[edi];
PORTD= mas_code[des];
}
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void) //подпрограмма прерывания по таймеру 1
{
tint1 = 1;
TCNT1H = 0x3C;
TCNT1L = 0xB0;
}
Основная программа:
// Target : M16
// Crystal: 10.000Mhz
#include
#include
#include
#include
#include
unsigned int T;
void main(void)
{
init_devices();
start();
PORTA&0b001000000 = 0;
PORTA&0b000100000 = 0;
Ton = 10;
while(1)
{
vol();
tint1=0;
TCCR1B = 0x01; //запуск таймера
T = 0;
while (T<=Ton){ PORTA&0b001000000 = 1;T++}
else { PORTA&0b001000000 = 0; PORTA&0b000100000 = 0;} //VT2
while(tint1 != 1)delay_mcs(0);
vol();
tint1=0;
TCCR1B = 0x01; //запуск таймера
T = 0;
while (T<=Ton){ PORTA&0b000100000 = 1;T++}
else { PORTA&0b001000000 = 0; PORTA&0b000100000 = 0;} //VT3
while(tint1 != 1)delay_mcs(0);
}
}