Jump to content
Михаил N

Трехфазный блок питания на АВР

Recommended Posts

Задался целью собрать преобразователь трехфазного напряжения из однофазного. Делать решил на контроллере АтМега88 (я его слепила из того что было). Знаю что готовых решений в сети много, многие из них с различными регулировками и примочками в виде дисплеев, датчиков и т.п. Моей целью было по большей части разобраться с принципом работы самого контроллера и хотя бы немного научится программированию. Генератор реализован на таймерах, задействованы сразу три таймера и все их выхода (OC0A,OC0B, OC1A,OC1B,OC2A,OC2B). Частота и скважность не регулируется но при желании запилить можно. Вот сама работа:

#ifndef MAIN_H_
#define MAIN_H_
#define F_CPU 20000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#endif

void timer_ini(void)
 {
     TCNT0=0;
     TCNT1=85;
     TCNT2=170;
     ASSR |=0x00;
     TIMSK0, TIMSK1,TIMSK2 |=0x00;
     
     TCCR0A =0b11100001;
     TCCR0B =0b00000100; \\ последними тремя цифрами можно настроить нужную частоту
     OCR0A |=(1<<COM0A1),(1<<COM0A1);
     OCR0B |=(1<<COM0B1);
     OCR0B=OCR0A;
     
     TCCR2A =0b11100001;
     TCCR2B =0b00000110 ; \\ последними тремя цифрами можно настроить нужную частоту
     OCR2A |= (1<<COM2A1);
     OCR2B |= (1<<COM2B1),(1<<COM2B0);
     OCR2B=OCR2A;
      
     TCCR1A =0b11100001;
     TCCR1B =0b00000100; \\ последними тремя цифрами можно настроить нужную частоту
     OCR1A |= (1<<COM1A1);
     OCR1B |= (1<<COM1B1),(1<<COM1B0);
     OCR1B=OCR1A;
     
    GTCCR &=~(1<<TSM);
    GTCCR |= (1<<PSRASY);    
 }

void port_ini(void) 
{
       DDRD = 0b01101000;
      PORTD = 0b00000000;
      DDRB = 0b00001110;
      PORTB = 0b00000000;                
}

int main(void)
{
port_ini();
timer_ini();
      
    while(1)
    {
    }
}

Делал в Атмел студио 6.1. Для многих занимающихся этим профессионально может покажется смешным сие творение, но для человека который занимается этим всего неделю думаю весьма не плохо. По факту тут всего лишь настройка таймеров и их сдвиг относительно друг друга. При моделировании в протеусе показала 3 меадра. Рассчитано под схему трехфазного транзисторного моста, с управление последними через драйвера типа IR2110 - 13. Критика приветствуется, помощь в прикручивании сюда регулировки частоты тоже.

Новый рисунок.bmp

Схемы мостов и включения контроллера не привожу, в сети таких схем полно любая схема полумоста собранная 3 раза думаю будет неплохо работать, DIED TIME нет к сожалению, но насколько мне известно у драйверов есть время задержки включения и отключения транзисторов думаю его должно хватить. для совсем привередливых достаточно будет после каждого таймера  добавить строчку:

OСRnA=125; OCRnB=~125; где n - это номер таймера. Может это и не правильно но ступенька появляется и её должно хватить для избежания сквозных токов.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...