©2004 Валентин Володин
Сайт Валентина Володина
Главная Статьи Книги и журналы Справочник Программы Ссылки
О себе RytmArc Схемы и описания Резервный форум Разное valvolodin.narod.ru
Калькуляторы Файловый архив Архив форума Форум ГОСТы Измерительные приборы
turbobit mega.co.nz fex.net files.dp.ua ... imageup ... ... ... ...

Power Electronics

Посвящается различным источникам электропитания
Текущее время: 29-04, 10:03

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 184 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 16:18 
Не в сети
Завсегдатай

Зарегистрирован: 06-12, 19:13
Сообщения: 329
Melvin77 писал(а):
Не совсем понятна суть вопроса. Но если об стабильности поджига дуги то на мой взгляд источник должен работать в режиме стабиллизатора тока и на переменке еще есть и осцилятор там не все от источника зависит. Хотя конечно процику может быть тоскливо дуга есть нагрузка динамическая.

Ну не все так просто. Почитай на сайте у Миллера . Там есть отличны хэнд бук для молодого ТИГера :), то что касается адвансед сквэ вэйв. То что тама написано, фактически ихния идеи, я и воплотил в работаюшую канстукцыю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 18:57 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05-10, 23:25
Сообщения: 614
Я тута затеял к сварке прикрутить семисегментный лед на 4 разряда... Сначала думал малость подправить программульку- ввести прерывания от таймера для динамики ледов, а потом подумал и решил всю программу переписать: в прерывании от аппаратного таймера (~920uS) инкриминируется программный счетчик (до 12 и потом сначала), считая прерывания и в switch выбирается соответствующий case, а в этих кэйсах расписаны динамика ледов и все программа... На первый взгляд должно работать... А может это чепуха?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 19:01 
Не в сети
Магистр

Зарегистрирован: 25-12, 20:10
Сообщения: 2568
sam_soft писал(а):
Почитай на сайте у Миллера

это ещё где..?
monos писал(а):
а в этих кэйсах расписаны динамика ледов и все программа

во замутил. а для тупых с примерчиком. шоб понятно было..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 20:22 
Не в сети
Магистр

Зарегистрирован: 25-12, 20:10
Сообщения: 2568
Melvin77 писал(а):
А по правде сказать зачем несколько контролеров?

ну это-то шито белыми нитками. один силой рулит, один картинки кажет, один за питанием приглядывает.
если модуль какой добавили - то самодостаточный тоже.
примитивные конечные автоматы вообщем.
полигамия , одним словом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 20:49 
Не в сети
Активный участник

Зарегистрирован: 22-08, 20:51
Сообщения: 264
Откуда: Украина
не знаю но помоему чет сильно заумно, один бы справился.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 20:55 
Не в сети
Магистр

Зарегистрирован: 25-12, 20:10
Сообщения: 2568
Melvin77 писал(а):
сильно заумно, один бы справился

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 22:16 
Не в сети
Активный участник

Зарегистрирован: 22-08, 20:51
Сообщения: 264
Откуда: Украина
Ну так сделайте блок питания служебный со всеми напряжениями что необходимы и если вы его захотите сменить то напряжение питания контролера от этого не изменится как и остальные напряжения питания.
И незачем менять все на свете, я себе именно так и предполагаю сделать. Только зачем контролер в блоке питания да еще и увязаный в нечто вроде сети непонятно. Может это Вы нечто вроде хайтэка какого решили организовать тогда понятно. А ЖКИ индикаторы в своем составе как правило уже имеют контролер и очень часто именно по I2C подключаются и даже для ЖКИ есть так ненавистные стандартные библиотеки хоть в CVAVR хоть в AVRStudio хоть для сишников хоть для асемблерников. Не вижу ни одной разумной причины городить огород.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 22:21 
Не в сети
Магистр

Зарегистрирован: 25-12, 20:10
Сообщения: 2568
Melvin77 писал(а):
Не вижу ни одной разумной причины городить огород.

ну :live-14:
МК это всего лиш мелкосхема. такая же как тригер или счетчик. чего его экономить не понятно.
или сэкономленные байты на сдачу дадут?
лет 10 назад я тоже пытался впихнуть всё в один.
времена меняются и мы вместе с ними.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 22:23 
Не в сети
Магистр

Зарегистрирован: 25-12, 20:10
Сообщения: 2568
Melvin77 писал(а):
сделайте блок питания служебный со всеми напряжениями что необходимы и если вы его захотите сменить то напряжение питания контролера от этого не изменится как

подождем, когда 2110 стрельнет с примененного блока питания и обсудим блок питания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 22:30 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05-10, 23:25
Сообщения: 614
MasterCat писал(а):
с примерчиком. шоб понятно было.

Чтоб было понятно. Только в майне будет пустой цикл, а все задачи рассредоточены по кейсам...
Код:
#include <pic.h>
#include  "delay.h"
#include  "main.h"


#define r1     un.bt.d1
#define r2     un.bt.d2
#define r3     un.bt.d3
#define r4     un.bt.d4
#define HOT    un.bt.e1
#define ARK    un.bt.e2
#define RELE   un.bt.e3
#define FAN    un.bt.e4
#define DIG    un.led_port

#define PWM_ARC CCPR1L   // Регистр длит. импульса ШИМа преобразователя.
#define PWM_REF CCPR2L   // Регистр длит. имп. ШИМа опорного напряжения (задания)
#define I_U     RC0      // тумблер индикации "Напряжение/Ток"
#define Lat_LED RC4      // защелка регистров 74HC595
//----------------------------
#define vref_p 4860 // в миливольтах
#define vref_m 0
#define lsb    (vref_p - vref_m)/1024.0
#define k      10
//----------------------------
#define Zmin  10       // Мин.скважность шим ЦАП опоры (0,1).
#define Zmax  85       // Макс.скважность шим ЦАП опоры (0,85).
#define Zfors 100      // Макс. скважность шим ЦАП опоры (1 для форсажа дуги).
#define k_ref (Zmax-Zmin)/254 // Коэфф. для масштабирования результата АЦП задания тока (для опоры).
//----------------------------
#define ind_Imin 50        // Мин. сварочный ток, А.
#define ind_Imax 155       // Макс. сварочный ток, А.
#define k_ind    (ind_Imax-ind_Imin)/254 // Коэфф. для масштабирования результата АЦП задания тока (для индикации).
//-----------------------------------------------------------
__CONFIG(HS & WDTDIS & PWRTDIS & MCLRDIS & BOREN  & LVPDIS & UNPROTECT & DUNPROTECT & IESODIS & FCMDIS & BORV40);
         
//-----------------------------------------------------------
// объявляем используемые функции
        void inttostr(unsigned int tmp);
        void init_(void);
unsigned int adc_Uout(void);
unsigned int adc_setIarc(void);
unsigned int adc_setIfors(void);
unsigned int adc_setIhot_start(void);
unsigned int adc_setUarc(void);
unsigned int adc_Tkey(void);
        void port_leds(void);
//-----------------------------------------------------------
// объявляем глобальные переменные

unsigned char arr[4];
unsigned char PORT;
const unsigned char arr1[16]={63,6,91,79,102,
109,125,7,127,111,119,62,62,62,62,62
};// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, c, U, E, F==общий АНОД
volatile unsigned char count_r;
unsigned int count,count1;
double rez;
unsigned char setIarc;       //регистр  установок задания свар. тока
unsigned char setIfors;      //регистр  установок задания тока форсажа дуги
unsigned char setIhot_start; //регистр  установок задания тока хот старта
unsigned int setUarc;        //регистр  установок задания напряжения дуги
unsigned char Tkey;          //регистр температуры ключей
unsigned char set_ref;           
unsigned char set_ind;
unsigned int Uout;
//-------------------
union{
struct {
      unsigned d1 : 1;
      unsigned d2 : 1;
      unsigned d3 : 1;
      unsigned d4 : 1;
      unsigned e1 : 1;
      unsigned e2 : 1;
      unsigned e3 : 1;
      unsigned e4 : 1;
}bt;
unsigned char led_port;
}un;
 //-----------------
typedef union
{
struct {
      unsigned char lo;
      unsigned char hi;
   }st;
unsigned int all;
}tun;
tun t;
//------------------------------------------------------------- 
interrupt void _tmr0(void)// начало обработки прерывания
{
unsigned char temp,cnt;
   
if (T0IF & T0IE)  // если срабатывание прерывания вызвано таймером
   {
        TMR0=240; //~920uS
      T0IF=0;

   switch (count_r)
         {
case 0:     break;
case 1:      break;   
case 2: // для 1 разряда
            Lat_LED=0; // сбросили клок защелки
         r4=1;  // включили 1 разряд
         r1=0;  // выключили 4 разряд
         cnt=0;
            temp=arr[cnt];
            //temp=arr[count_r]; // получили значение по 0 адресу
            PORT=arr1[temp];   //получили образ числа
            port_leds();       //  и выдали на индикаторы
            Lat_LED=1; // защелкнули регистры 595
         break;             // ушли
case 3:     break;
case 4:     break;
         
case 5:
         
            Lat_LED=0;
            r1=1;
             r2=0;
            cnt=1;
            temp=arr[cnt];
         //temp=arr[count_r];
            PORT=arr1[temp];
            port_leds();
            Lat_LED=1;
           
         break;
case 6:     break;
case 7:     break; 
         
case 8:
         Lat_LED=0;
            r2=1;
            r3=0;
            cnt=2;
            temp=arr[cnt];
         //temp=arr[count_r];
            PORT=arr1[temp];
            port_leds();
            Lat_LED=1;
         break;
case 9:      break;
case 10:     break;

case 11:
         Lat_LED=0;
            r3=1;
            r4=0;
            cnt=3;
            temp=arr[cnt];
           //temp=arr[count_r];
            PORT=119;
            port_leds();
            Lat_LED=1;
         break;
   
      }
         count_r++; // добавили счетчик разрядов
   if (count_r == 12) count_r=0; // если крайнее значение, обнуляем счетчик
   } // выход обработки таймера

}// выход прерывания
//-----------------------------------------------------------

void main(){
init_();
while(1){

adc_setIarc();

set_ref = ((setIarc * k_ref)+Zmin);  // масшабируем результат оцифровки потенциометра задания тока
PWM_REF = set_ref;
                   // и устанавливаем соответственнный К.зап. ШИМа ЦАПа задания тока
set_ind = ((setIarc * k_ind)+ind_Imin);//масшабируем результат оцифровки потенциометра задания тока                      // индицируем задание тока

inttostr(set_ind);

   }// окончание бесконечного цикла
}

//--------------------------------------------------------------
void init_(void){
             
              PORTA = 0;
              PORTB = 0;
              PORTC = 0;
              count = 0;
              PR2 = 100;    // Длительность периода раб. частоты инвертора--20мксек @ 20Мгц ==50кГц.
              PWM_ARC=0;  //регистр длит. импульса ШИМ ключей обнулен
              PWM_REF=0;  //регистр длит. импульса ШИМ опоры компаратора обнулен
              //----------------------------
              CCP2CON=0B00001100; // Модуль ССР2 настроен, как однотактный ШИМ
              CCP1CON=0B00001100; // Модуль ССР1 настроен, как однотактный ШИМ                                         
              //----------------------------
              // настройка PWM1CON
              PRSEN = 1; // Авторестарт модуля ШИМ после пропадания сигнала сброса                         
              //----------------------------
              // настройка ECCPAS
              ECCPASE = 1; // Аппаратный сброс главного шима
              ECCPAS0 = 0; // аппаратный сброс шима
              ECCPAS1 = 1; // по высокому уровню
              ECCPAS2 = 1; // любого из компараторов (С1 или С2)
              PSSAC0 = 0; // В состоянии сброса выходы Р1А и Р1С
              PSSAC1 = 0; // устанавливаются в "0"
              PSSBD0 = 0; // В состоянии сброса выходы Р1B и Р1D
              PSSBD1 = 0; // устанавливаются в "0"
              //----------------------------
              // настройка PSTRCON
              STRA = 1; //Выход Р1А становлен, как выход ШИМ
              //----------------------------
              TRISA = 0;
              TRISA6 = 1;
              TRISA7 = 1;
              TRISA0 = 1;
              TRISB = 0;             
              TRISC = 0;
             
              ANSEL = 0;
              ANSELH = 0;
              ANS0=1;
              //----------------------------
              // настройка ADСON1
              VCFG0  = 0;  //Vss
              VCFG1  = 0;  //Vdd                         
              //----------------------------
              // настройка ADСON0
              // частота на 32
                ADCS1 = 1;
                ADCS0 = 0;
              GODONE = 0;
              ADON   = 1;  // включаем модуль АЦП               
              //----------------------------               
              TMR2ON = 1; // Таймер TMR2 включен
              TMR1ON = 1; // Таймер TMR1 включен             
              // --------------------------
              //таймер TMR0 установки
              TMR0 = 240;
              PSA  = 0;
              T0CS = 0;
              T0SE = 0;// bit 4 TMR0 Source Edge Select bit: 0=low/high                           
              //---------------------------
              //SPI установки
              CKE = 1; //слок в середине бита данных
              CKP = 1; //             
              SSPSTAT = 0;
                SSPM3 = 0; // делитель на 64
                SSPM2 = 0;
                SSPM1 = 0;
                SSPM0 = 0;
              SSPBUF = 0; // буфер очищен
              SSPIF  = 0; // флаг сброщен
              SSPEN = 1;  // SPI вкл
              //---------------------------
              //компараторы настройка             
              C1CH1  = 1; // С1 на C12IN2-
              C1OE   = 1; // C1OUT наружу
              C1R    = 1; // C1VIN+ внутри
              C1RSEL = 1; // С1VIN+ на внутреннй цап VR1
              C1ON   = 1; // С1 вкл
              C2ON   = 1; // С2 вкл
              //---------------------------
              T0IE = 1; // разрешаем прерывания от TMR0
              PEIE = 0; // прерывания от переферии невидимы
              RBIE = 0; // прерывания от портаВ запрещены
              INTE = 0; // прерывания по инт запрещены
              GIE = 1;  // разрешаем прерывания
              PWM_ARC=45;
}
//-----------------------------------------------------------
void port_leds(void){
 
    SSPIF = 0;      // сбрасываем флаг окончания передачи SPI
    SSPBUF = PORT;  // сначала загружаем в буфер порт сегментов
    while(!SSPIF);  // ждем окончания передачи
    SSPIF = 0;
    SSPBUF = DIG;   //  и загружаем в буфер SPI маску нужного разряда
    while(!SSPIF);  //  ждем окончания передачи
   
}
 //------------------------------------------------
void inttostr(unsigned int tmp)
{
const  unsigned int step[4]={100,10,1,1};
unsigned char i;
unsigned int val,temp,atemp;
 
val=tmp;
 for (i=0; i<4; i++)
 {
    temp=step[i];
    atemp=0;
    while(val >= temp)
      {
        atemp++;
        val-=temp;
      }
    arr[i]=atemp;
  }
}
//-------------------------------------------------
unsigned int adc_setIarc(void)
{
   ADFM = 0;  // левое выравнивание
//----канал АN0
   CHS3 = 0;
   CHS2 = 0; 
   CHS1 = 0;
   CHS0 = 0;
//------------
  DelayUs(5);
  GODONE=1;//запускаем преобразование
  while (GODONE);//ждем завершения приобразования
  setIarc = ADRESH;   
}
//-------------------------------------------------
unsigned int adc_setIfors(void)
{
   ADFM = 0;  // левое выравнивание
//----канал АN0
   CHS3 = 0;
   CHS2 = 0; 
   CHS1 = 0;
   CHS0 = 0;
//------------
  DelayUs(5);
  GODONE=1;//запускаем преобразование
  while (GODONE);//ждем завершения приобразования
  setIfors = ADRESH;
}

//-------------------------------------------------
unsigned int adc_setIhot_start(void)
{
   ADFM = 0;  // левое выравнивание
//----канал АN0
   CHS3 = 0;
   CHS2 = 0; 
   CHS1 = 0;
   CHS0 = 0;
//------------
  DelayUs(5);
  GODONE=1;//запускаем преобразование
  while (GODONE);//ждем завершения приобразования
  setIfors = ADRESH;
}
//-------------------------------------------------
unsigned int adc_Tkey(void)
{
   ADFM = 1;  // правое выравнивание
//----канал АN0
   CHS3 = 0;
   CHS2 = 0; 
   CHS1 = 0;
   CHS0 = 0;
//------------
  DelayUs(5);
  GODONE=1;//запускаем преобразование
  while (GODONE);//ждем завершения приобразования
  Tkey = ADRESH;
}
//-------------------------------------------------
unsigned int adc_Uout(void)
{
   ADFM = 1;  // правое выравнивание
//----канал АN0
   CHS3 = 0;
   CHS2 = 0; 
   CHS1 = 0;
   CHS0 = 0;
//------------
  DelayUs(5);
  GODONE=1;//запускаем преобразование
  while (GODONE);//ждем завершения приобразования
  Uout = ADRESH;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 22:47 
Не в сети
Активный участник

Зарегистрирован: 22-08, 20:51
Сообщения: 264
Откуда: Украина
Извиняюсь, я конечно не пиковод, но вот здается мне что в программах где есть прерывания не желательно использовать "delay" иногда априводит к непредсказуемым результатам.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 23:28 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05-10, 23:25
Сообщения: 614
Melvin77 писал(а):
... не желательно использовать "delay"

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25-08, 23:39 
Не в сети
Активный участник

Зарегистрирован: 22-08, 20:51
Сообщения: 264
Откуда: Украина
monos
Нет это ничего не даст. Дело в том что в хидере #include "delay.h" и есть эти асемблерные вставки, я не асемблерник но помоему cli могу ошибаться. Я вам не смогу професионально объяснить как мне объясняли но что будет если во время выполнения DelayUs(5); случится прерывание особенно не желательно вставлять "делаи" в обработчики прерываний. Я не хочу сказать что именно в этом случае случатся грабли но мне лично когда я Си только начинал ковырять рекомендовали без особой нужды "делаи" не использовать. Да и в книжке так написано. Лучше переменную инкременировать и при достижении события чтото выполнять и обнулять переменную.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 00:23 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05-10, 23:25
Сообщения: 614
Melvin77 писал(а):
Лучше переменную инкременировать и при достижении события чтото выполнять и обнулять переменную.

Так она и инкриминируется, только не теле программы, а в макросе. Тут без задержки ни как не обойтись, и чего-то городить, чтобы выиграть 5 микросек (это 100 тактов фрц или 25 машинных циклов) смысла нет. Единственно, можно тело этого макроса вставлять каждый раз, вместо вызова функции дэлай (чтоб не занимать стэк)... А вообще, все прерывания у меня приходят в определенное время (по тику таймера) и между ними код должен быть уложен в эти временные рамки в обработчике прерывания, а в самом майне ничего не далается...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26-08, 00:44 
Не в сети
Активный участник

Зарегистрирован: 22-08, 20:51
Сообщения: 264
Откуда: Украина
monos
Я свое мнение сказал сколько людей столько имнений. Меня так научили в книге так написано, я этому верю. Вы считаете по другому может и так тоже правильно.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 184 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Перейти:  
Powered by Forumenko © 2006–2014
Русская поддержка phpBB
turbobit mega.co.nz fex.net files.dp.ua ... imageup ... ... ... ...
Рейтинг@Mail.ru