Управление слаботочным приводом

Обсуждение вопросов применения микроконтроллеров и ПЛИС

Куратор темы: MasterCat

Re: Управление слаботочным приводом

Сообщение MasterCat » 15 фев 2013, 03:33

Andr писал(а):при вашем текущем раскладе в качестве хоста могла бы выступить наша последняя плата конвертора.
Там стоит ST32F103, который обчается с компом по усби и имеется изолированный RS-422 выходной интерфейс, т.е.
имеем легкое подключение к компу со всеми его прогами, монитором и прочим и простое исполнительное устройство с минимумом комплектации и обвеса.
плата будет запущена в производство, видимо, во вторник-среду и недели через 3-4 будет готова.
там вообще-то будет целая линейка новых конверторов, с входным RS-232, RS-422 и USB интерфейсами

с общей структурой вида: входной интерфейс- АРМ(ST32F103) - изолированный RS-422
цена пока не считалась, думаю, для самой платы в сборе порядка $15-20

ЗЫ. конечно, если MasterCat пренепременно желает навеить на хост еще и дисплей, эт не ваш путь :)
ЗЫ2. хотя свободных ног, уартов и прочего на АРМе еще хватает :haha:


опять про синенькую девиацию?
как начать делать сложные вещи без понимания базовых простых?
а несчет легкого подключнеия к компу, ну это , как бы, лукавство. ну воткнул разъемчик легко, а дальше то что?
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение Andr » 15 фев 2013, 08:45

MasterCat писал(а):опять про синенькую девиацию?
как начать делать сложные вещи без понимания базовых простых?
а несчет легкого подключнеия к компу, ну это , как бы, лукавство. ну воткнул разъемчик легко, а дальше то что?

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

после предложения строить распределенную систему, отличие моей - "синенькой девиаци", от твоей - розовенькой :) , отличается тока координатами цветового локуса :lol:
"Ничто не стоит так дешево и не ценится так дорого, как вежливость" - Сервантес
Аватара пользователя
Andr
 
Сообщения: 751
Зарегистрирован: 05 фев 2011, 22:30

Re: Управление слаботочным приводом

Сообщение MasterCat » 15 фев 2013, 10:55

Andr писал(а):
MasterCat писал(а):опять про синенькую девиацию?
как начать делать сложные вещи без понимания базовых простых?
а несчет легкого подключнеия к компу, ну это , как бы, лукавство. ну воткнул разъемчик легко, а дальше то что?

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

после предложения строить распределенную систему, отличие моей - "синенькой девиаци", от твоей - розовенькой :) , отличается тока координатами цветового локуса :lol:

так речть про USB. вроде ж прозвучало что вот им лехко.
не так. э\то
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение Andr » 15 фев 2013, 16:07

у ST на странице http://www.st.com/internet/mcu/product/164476.jsp есть драйвер виртуального СОМ порта STM32 Virtual COM Port Driver
"Ничто не стоит так дешево и не ценится так дорого, как вежливость" - Сервантес
Аватара пользователя
Andr
 
Сообщения: 751
Зарегистрирован: 05 фев 2011, 22:30

Re: Управление слаботочным приводом

Сообщение MasterCat » 15 фев 2013, 17:34

Andr писал(а):у ST на странице http://www.st.com/internet/mcu/product/164476.jsp есть драйвер виртуального СОМ порта STM32 Virtual COM Port Driver

я в курсе чего де есть.
исходные данные:
линукс на st линукс на хосте, при этом хост на arm11-55 с mali400.
и куда этот драйверок девать. свой придётся писать. а уж про usb3.0 так и вообще ..., хотя фрискайловский под рукой живой есть, но не под линуха.
ежелиб всё было так просто, то только ленивый бы не вязал из них макромэ. :)
и главное, ситема реального времени. сказки пацаноф, шо можно из системы нарисовать строб в порт и он там будет как вкопаный, оставим пацанам.
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение Dedan » 15 фев 2013, 23:48

Интересный разговор. Одно ясно, что даже спецам еще не все ясно.))
А распределенку я правильно понимаю?.
Наделяем небольшим мозгом каждого силового исполнителя, сейчас их четыре и приказываем им по шине. Ну а они, "отзваниваются" об исполнении и проблемах.
От централизованной схемы отказываемся насовсем? Когда б\у и принимает команды и сам исполняет и сам контролирует? Может все же для тренировки написать прогу для атмеги на 4 канала?
Я хотел приятелю на юбилей подарить управлялку для ворот на актуаторах. Очень уж ему мои ворота нравятся. Если конечно это не отвлечет от основной задачи. Она конечно-же важнее и перспективнее.
PS
Надо взять десяток вместо релюшек, пока недорогие. Ими потом и поШИМить можно.
http://www.megachip.ru/item.php?item_id=612005
Dedan
 
Сообщения: 228
Зарегистрирован: 21 май 2012, 18:25
Откуда: СПб

Re: Управление слаботочным приводом

Сообщение Andr » 16 фев 2013, 03:01

Dedan писал(а):Интересный разговор. Одно ясно, что даже спецам еще не все ясно.))

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

Dedan писал(а):А распределенку я правильно понимаю?.
Наделяем небольшим мозгом каждого силового исполнителя, сейчас их четыре и приказываем им по шине. Ну а они, "отзваниваются" об исполнении и проблемах.

в общем так, но степень автономности исполнителей может сильно разниться, в частности, в зависимости от требований по надежности предъявлемых к системе. Сами понимаете, если один хост ведет всю систеу и он рухнет, то накроется не тока хост. но и вся система в целом, и далеко не везде подобное допустимо.

Dedan писал(а):От централизованной схемы отказываемся насовсем? Когда б\у и принимает команды и сам исполняет и сам контролирует?

проект ведет MasterCat ему и решать, просто ваши запросы растут и вынуждают искать качественно иные решения, а не тупое масштабирование, которое обладает свойством достаточно быстро кончаться, либо приводит к несуразно огромному росту длины линий контроля и управления.
Dedan писал(а): Может все же для тренировки написать прогу для атмеги на 4 канала?

вот, вот, сначал было 2 створки ворот, потом калитка, а теперь уже четыре канала :lol:
Dedan писал(а):
Я хотел приятелю на юбилей подарить управлялку для ворот на актуаторах. Очень уж ему мои ворота нравятся. Если конечно это не отвлечет от основной задачи. Она конечно-же важнее и перспективнее.

:lol: с задачей-то и надо, в конце концов и из коныа в конец, наконец определиться, а то успеете на юбилей, но 10 лет спустя....

т.е. по сию пору окончательного ТЗ так еще и не сформировано, собственно по этой причине мы и балагурим, бо последний вариан от MasterCat закрывает сей вопрос кардинально на достаточно долгое время и речь тока о возможных средствах достижеия, более или менее удобных MasterCat .
"Ничто не стоит так дешево и не ценится так дорого, как вежливость" - Сервантес
Аватара пользователя
Andr
 
Сообщения: 751
Зарегистрирован: 05 фев 2011, 22:30

Re: Управление слаботочным приводом

Сообщение Dedan » 16 фев 2013, 03:51

Так я про 4 канала видимо сгоряча. Можно же их и на две идентичных атмеги раскидать? Просто там получается один алгоритм, если всЁ на актуаторах.
По ногам на 4 актуатора = 4 на герконы и 8 на выходы реверсов. Если на два корпуса-вдвое меньше ног.
Поскольку при счете импульсов может набегать ошибка, можно раз в несколько циклов открытия ворот, дать мотору дойти до микриков. Потом скинуть "пару штук" и опять отключать уже по импульсам не доходя до микриков. Тогда не надо доп датчиков контроля положения створок.
Это практически расыпушный вариант в новой обертке, что так не нравится MasterCat.
Так оно и понятно. Помните как в кино профессор картошку перебирал и в пакеты визитку вкладывал?
"Раз уж меня сюда поставили, пусть люди знают, что это сделано качественно!"
Dedan
 
Сообщения: 228
Зарегистрирован: 21 май 2012, 18:25
Откуда: СПб

Re: Управление слаботочным приводом

Сообщение Dedan » 16 фев 2013, 08:15

Данные по ТЗ надо сравнивать с разными вариантами.
Сейчас на каждый актуатор.
Два провода с реверсивными 36в. При токе 2А хватает сечения 1кв.
Со счетом импульсов - еще два провода на геркон. Эти провода замыкают на входе проца низкоомный резистор и помехи нам уже не страшны. Бонус - актуатор можно подключать простым силовым 4х проводным кабелем. На ближний актуатор 2 метра, на дальний пусть будет 6.
Умный актуатор.
Два провода 36в без реверса. + канал связи (сколько то проводов.)
На платке в актуаторе надо: реверс (2 реле или драйвер) + питание проца (дс\дс) + проц..
По силе, как то так.
Dedan
 
Сообщения: 228
Зарегистрирован: 21 май 2012, 18:25
Откуда: СПб

Re: Управление слаботочным приводом

Сообщение MasterCat » 16 фев 2013, 11:37

расстрелять каждого второга.
вообшем так:
принимается валюнтаристкое решение.
на 422м иностранном лице вешеатся нужная куча умных роюшечек.
всё!
если в большой программе, обрабатыювающей кучу всякого дерьма чего- меняешь, то удивительным образом перестает работать то, к чему ни касался.
в умном моторчике, только управление релюшкой(как вариант) и большой ухо, слущающее линию. и всё.
изменился протокол, сменили ухо, но только в части слушания.
изменился релюх на чего другое, только там. больше ничего нету.
свё прозрачно и примитивно.
на домыслы о том что вот оно не услышало, какрул, ответ простой.
пусть в наихудшем варианте время выполения команды самой длинной 100t. тогда таймер через 10щt+2t тупо выключит. а есть ещё и сторожевой таймер, который при правильном задействовании ресет нажмет. солва о том что таймер не сработает безосновательны. такова архитектура. если умудрились написать такую программу, которая повисла, или помеху сумели загнатьь правильную, то прога повиснет, но прерывания никогда.и соответственно параллельное выключение с таймеров.
и вот сколько там моторчиков, лампочек, пикалок и говорилок 'Ку' будет, не важно. ну не 50 же.
теперь про источник команд. сначала пульты, коих как грязи. есть примитив, а есть и зиигби. при этом модули уже копеешные и выход UART. т. бишь, если имеется возможность источник команды повесить на UART, то совсем фиолетово как выглядит командир и тем более исполнитель. при этом исполнителем может быть и упомянутый ICP CON 7000.
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение Dedan » 16 фев 2013, 12:27

Пошел курить словарь. )))
Про вумные релюшки помню по сигналкам домашним. Приятель умными домами занимался. Так они еще и беспроводные. Это то?
Dedan
 
Сообщения: 228
Зарегистрирован: 21 май 2012, 18:25
Откуда: СПб

Re: Управление слаботочным приводом

Сообщение MasterCat » 16 фев 2013, 12:38

Dedan писал(а):Пошел курить словарь. )))
Про вумные релюшки помню по сигналкам домашним. Приятель умными домами занимался. Так они еще и беспроводные. Это то?

не. не то. это я для примера.
мелкосхемы с китая приехали. поеду забирать. теперь вот можно начинать писать.
============
забрал. посылка вскрыта, камеру выдирали за шнур. вообще покойник. CD с ней переломан.
мелкосхемы 20 шт. живые. писать всё ж можно.
ребятам позвонил, говорят не я один. это у них антитеррористческая профилактика называется.
Последний раз редактировалось MasterCat 16 фев 2013, 21:29, всего редактировалось 1 раз.
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение spesso » 16 фев 2013, 21:00

Я так понимаю ПЛК строим? Готовые не устраивают? Ценой?
"A man cannot just sit around" ©
Аватара пользователя
spesso
 
Сообщения: 36
Зарегистрирован: 08 мар 2011, 20:55

Re: Управление слаботочным приводом

Сообщение MasterCat » 16 фев 2013, 21:26

spesso писал(а):Я так понимаю ПЛК строим? Готовые не устраивают? Ценой?

нет. не это. изучаем основы на конкретном примере. как заработает, тогда придет пониманеи, тогда можно строить хоть черта.
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение Dedan » 17 фев 2013, 09:55

spesso писал(а):Я так понимаю ПЛК строим? Готовые не устраивают? Ценой?

Пытаемся научить старого пса, новым трюкам. :help: :D
зы.
Поотрывать бы им органы движения с их антипрофилактикой. :bach: :twisted:
Сами ни производство, ни цевильные поставки наладить не могут, а как в чужом кармане похозяйничать - тут как тут.
Dedan
 
Сообщения: 228
Зарегистрирован: 21 май 2012, 18:25
Откуда: СПб

Re: Управление слаботочным приводом

Сообщение MasterCat » 18 фев 2013, 16:42

таймер, пожалй будет выглядеть вот так. простенько. timer.c
Код: Выделить всё
//==============================================================
//инициализация TIMER0 1 кгц
// прескаллер 64
// WGM: Normal
// кварц 14.7456
// actual value:  1,002KHz (0,2%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x1A; //set count
OCR0  = 0xE6;  //set compare
TCCR0 = 0x03; //start timer
}

// //инициализация TIMER2 100 гц.
// прескаллер 1024
// WGM: Normal
// кварц 14.7456
// actual value: 100,699Hz (0,7%)
void timer2_init(void)
{
TCCR2 = 0x00; //stop
ASSR  = 0x00; //set async mode
TCNT2 = 0x71; //setup
OCR2  = 0x8F;
TCCR2 = 0x07; //start
}
//==============================================================
// прерывание от таймера 0 по переполнению. досчитал до 0xFF и ....попал сюда
#pragma vector = TIMER0_OVF_vect
__interrupt void Timer0_OVF(void)
{  //1,002 ms 

if(Clocks.count_delay >0)Clocks.count_delay --;
if(Clocks.blk_delay >0)Clocks.blk_delay --; //время блокировки  мС

  if (( byte_StatusKey_1 & Bit(switched_on))!= 0)
  {
 
  }
   
//___________________________________________________
   
  //время ожидания следующего байта.
/// if(Clocks.TimeOut_Rx >0)Clocks.TimeOut_Rx --;
 
  if(Clocks.blink_Sound)Clocks.blink_Sound--; //время звука пищалки
   else{   PORTA |= Bit(6);} //гасим звук
 
  //________________________________________________________                                                       

   ////if( ++ Clocks.millisec > 999 )
   Clocks.millisec ++;
  if( Clocks.millisec > 999 )
  {
    // ledWrk = ~ledWrk;// моргаем, что работает
     if ((PINC & Bit(6))!= 0){  // если бит6 порта C не 0,т.е. ==1
           PORTC &=~Bit(6);     // бит6 присвоить значение 0
      }  else PORTC |=Bit(6);   // иначе присвоить 1
     
      // ledErr = ~ledErr;  // моргаем , что ошибка
    if(byte_ERR){           // тоже по шагам раcпишем
         if ((PINB & Bit(4))!= 0){
           PORTB &=~Bit(4);
         }
         else PORTB |=Bit(4);
    }
   
    Clocks.millisec =0;
             if(timeout_count_key >0)timeout_count_key--;
             else  count_Key =0;

    if(Clocks.TimeOut_dvigenie > 0)  Clocks.TimeOut_dvigenie --;
         
  }                         
TCNT0 = 0x1A; // заряжаем новое значение счетчика от котрого будет счет до 0xFF
}

//________________________________________________________________________

#pragma vector = TIMER2_OVF_vect
__interrupt void Timer2_OVF(void) { //  100 гц
   
 
    TCNT2 = 0x71;
}
//______________________________________________________________________
// общая задержка в мс
void Delay(int SizeDelay)
{
     Clocks.count_delay = SizeDelay;
       while (Clocks.count_delay)
       {
       
          _WDR();
        }
}
   
}

можно в тесст.
струткрка времени
Код: Выделить всё
struct {
int second;             //секунды
int minute;             //минуты
int millisec;           //миллисекунды
int count_delay ;       //счётчик задержки
char TimeOut_Rx;         //таймаут ожидания следующего байта #define timeoutRx    3000;
int blk_delay;        //блокировка   мсек 
unsigned int TimeOut_dvigenie;  // задержка выключения  секунд (1-65000)
int blink_Sound;         //время звука пищалки     
}Clocks = { 0};

ЦАП будет таким.
Код: Выделить всё
//
//

//ADC initialize
// Conversion time: 112uS
void initADC(void){
ADCSRA = 0x00; //disable adc
ADMUX = 0x00; //select adc input 0
ACSR  = 0x80;
ADCSRA = 0x00;
}

/*************************************************************/

#pragma vector = ADC_vect
__interrupt void ADC_vect_ (void){
//ò.ê.   ADLAR, òî áàéòû ñäâèíóòû è ÷èòàåì òîëüêîò âåðõíèé
  ADC_res=0;
  ADC_res = ADCH;//dv 
// ADC_res = ADCL;//svet
  //del = ADCH;//svet
      ADC_flag = 0;
    ADCSRA = 0x00;

}   

//================================

//int
char  ADC_data(char canal, char V_ref, unsigned char count_cicle){
  // V_ref - âûáîð îïîðû .  áèòû 7á6 ADMUX   REFS1,REFS0
  //  îïîðà îò Vcc   REFS1 = REFS0 = 0
  //   îïîðà ñ âíåøíåãî ïèíà REFS0 = 1
  //   REFS1=REFS0=1  âíóòðåííÿÿ 3,56 V
  // #define Vref_Vcc       0x00
  // #define Vref_Extern    0x01
  // #define Vref_Intenrnal 0x03
  //

  char c=0;
  unsigned   int r=0;
    ADC_res= 0;
    ADC_flag = 1;
     ADMUX=0x00;//  V_ref Vcc
     
          if(V_ref == Vref_Extern) ADMUX |= REFS0;  //âíåøíèé ïèí
         if(V_ref == Vref_Internal) ADMUX |= REFS0|REFS1;  //âíóòðåííÿÿ 2,56V   
   
          //if(canal < 0x03) cicle_ADC = 5;
       
    switch(canal){
    case Up_move:
      ADMUX |= 0x04; //4é êàíàë
      break;
    case Dn_move:
      ADMUX |= 0x03; //3é êàíàë
      break;
    case L_move:
      ADMUX |= 0x01;//1é êàíàë
      break;
    case R_move:
      ADMUX |= 0x02;//2é êàíàë
      break;
    }
     
     for(c=0;c < count_cicle; c++){
      //      for(c=0;c < 10; c++){
           ADMUX |= (1<<REFS0);//ò.ê. ðàáîòàåì ñ ìàëûì ñèãíàëîì òî ADLAR
         // ADMUX |= Bit(7);
           ADMUX |= (1<<ADLAR);
          ADCSRA |= (1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
           ADCSRA |=(1<<ADSC);
                 while (ADC_flag){
                   _NOP();
                   _NOP();
                 
                 };   
                       r+=ADC_res;
    }   
     
     r=r / count_cicle;
       Delay(40);
return  (char)r;

}

 
/************************/

void ConverCifraOut(char x)
{
//char *StrOut;
char j;
char ed=0;
char de=0;
char so=0;

p_TxBuf=TxBuf;
     //StrOut = StrOut_; //StringOut; 
     if (x == 0x7F){ //127             
          *p_TxBuf =' ';   
          *p_TxBuf ='-';   p_TxBuf++;
          *p_TxBuf ='-';   p_TxBuf++;
       }   
       else { 
               ed=de=so=0;   
     
                     
               ed=de=so=0;           
                 for (j=0;j < x;j++) {
                   ed++;
                     if (ed > 9){   ed = 0x00;     de++; }
                     if (de > 9){   de=0x00;       so++; }
                 }
                  //åä, äåñ, ñîòíè ïîñ÷èòàíû , ôîðìèðóåì ñòðîêó îò òðåáóåìîé äëèíû
               
                  so += 0x30; 
                 if(so == 0x30)    so = 0x20;
                      *p_TxBuf  = so;  p_TxBuf++;
               
                     
                      de += 0x30;   
                     // if  (de == 0x30)     de = 0x20;
                      *p_TxBuf  = de;  p_TxBuf++;
                     
                      ed += 0x30;   
                        *p_TxBuf  = ed;  p_TxBuf++;   
             }
    // *p_TxBuf++ =0x0d; *p_TxBuf++=0x0A;
     *p_TxBuf++ =' '; *p_TxBuf++=' ';
     
     *p_TxBuf=0x00;
     
}                     
//=====================


c кодировкой какая-то фигня.
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение Dedan » 19 фев 2013, 11:48

Тест?
Подсунуть в тот проект?
Dedan
 
Сообщения: 228
Зарегистрирован: 21 май 2012, 18:25
Откуда: СПб

Re: Управление слаботочным приводом

Сообщение MasterCat » 19 фев 2013, 11:57

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

есть один момент с ацп. т.к. М16 это кривенький кристалл, то время работы ацп около 100 мкс. т.к. нужна выборка с усреднением, то всё куда медленее.и это 8 бит. 255 значений.
к тому же нет возможности посмотреть в любой момент времени чего там происходит. отсюда вопрос: минимальная достаточная частота измерений тОка, она какая? каковы мнения на этот счет?
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение Dedan » 19 фев 2013, 12:30

Сорри! Скайп мог и пропустить. Буду внимательнее.
Жена там с родней общается и я туда не часто заглядываю.
По току. Актуатор в принципе довольно дубовый и задержку по препятствию выдерживает в несколько секунд. К тому-же я хомут крепления затягиваю не сильно и если куда упирается, то труба скользит в хомуте без фатальных последствий.
Dedan
 
Сообщения: 228
Зарегистрирован: 21 май 2012, 18:25
Откуда: СПб

Re: Управление слаботочным приводом

Сообщение MasterCat » 19 фев 2013, 12:46

товаришчь не понимает.
рыба, котрая сейчас пишется - это базовое средство в кторое потом будут вписываться алгоритмы.
работа с ацп, компаратором, таймерами, портами, интерфейсам (UART, I2C,SPI).
выстраивается ядро с должным порядком обработки.соот-но вопрос о мин. уровне достсточной скорострельности измерений -это вопрос общего плана.
конечно если делеть одно измерение и ему верить (я не верю), то тогда средняя скорость с обработкой будут около 1-5 кгц.
это у :good: silabs сделано красиво, а тут... :cry: atmel, в душу верно сказано.
============================
я в вострге от вида ярлычка в браузере.
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение Dedan » 19 фев 2013, 14:44

Товарищу еще далеко до понимания. На этом этапе, без ангельского терпения не обойтись. Это как с пьяным. Надо долго кричать в ухо... :oops: :cry:
Dedan
 
Сообщения: 228
Зарегистрирован: 21 май 2012, 18:25
Откуда: СПб

Re: Управление слаботочным приводом

Сообщение MasterCat » 19 фев 2013, 16:36

cел вот, чирканул 10 строк текста для компаратора. вроде всё очевидно.
потом задумался как объяснить как всё это работает.
и опа.. на.. присел на хвост..
к этим 10-ти строчка ещё строк 200 придется.
попробую на основе ссылок на даташит. doc2466.pdf
ATmega16L Rev.2466T-AVR-07/10
страницы буду указывать в тексте комментариев со ссылкой на этот жокумент.
у них там всё поразбросано.
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение MasterCat » 19 фев 2013, 18:16

кусочек вот нацарапал. получается примерно так:
надеюсь пончтно написано.
Код: Выделить всё
//ADC initialize
// Conversion time: 112uS
void init_Analog(void){
ADCSRA = 0x00; //disable adc
ADMUX = 0x00; //select adc input 0
  ACSR  = 0x00;//comparator;
//т.к. работаем с малым сигналом то Внутренний 2.56В и ADLAR (выравнивание влево)
ADMUX |= (1<<REFS1) |  (1<<REFS0) | (1<<ADLAR); ///0xe0  | (1<<MUX1);//2canal
//разрешить ацп, прерывание от него, прескаллер клок/127
ADCSRA |= (1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);//0xE7;

//Analog Comparator Control and Status Register – ACSR
  ACSR  |= (1<<ACD);// Analog Comparator Disable (! при уже запрещенном от него прерывании)
//Analog Comparator Bandgap Select
  ACSR  |= (1<<ACBG);//  выбор на AIN0 внутренней опоры 1,23V
  //Analog Comparator Output 
  ACSR  |= (1<<ACO);// AIN0 > AIN1. иначе  наоборот
  //Analog Comparator Interrupt Mode Select
  ACSR  |= (1 << ACIS1) |(1<<ACIS0);//Comparator Interrupt on Rising Output Edge
                                    // прерывание по растущему фронту
//теперь немножко разберемся со входами
// Special Function I/O Register – SFIOR
// биты  ADTS2:ADTS0: выбор источника запуска АЦП. 000 свободный запуск реобразований
  //Бит 3 - ACME: включение мультиплексора аналогового компаратора.
  //Если бит == "0" - вход   AIN1 подключен к ножке MK AIN1,
  //а если "1",   AIN1 может быть подключен к любому входу мультиплекстора 
   // (при условии, что АЦП выключен - бит ADEN=0 регистра ADCSRA).
     
  SFIOR =0x00;
 
   ACSR  |= ~(1<<ACD);// вкл. компаратор
  ACSR  |= (1<<ACIE);//Analog Comparator Interrupt Enable     
}
/*
стр 129. ADC Control and Status Register A – ADCSRA

---
стр.217  ADC Multiplexer Selection Register – ADMUX
ADMUX - регистр мультиплексора АЦП
Биты 7:6 – REFS1:REFS0. Биты выбора опорного напряжения.
Если мы будем менять эти биты во время преобразования,
то изменения вступят в силу только после текущего преобразования.
В качестве опорного напряжения может быть выбран AVcc (напряжение источника питания),
AREF
или внутренний 2.56В источник опорного напряжения.

значения :
REFS1:REFS0
00    AREF
01    AVcc, с внешним конденсатором на AREF
10    Резерв
11    Внутренний 2.56В  источник, с внешним конденсатором на AREF
Бит 5 – ADLAR.
Определяет как результат преобразования запишется в регистры ADCL и ADCH.
по умолчанию ADLAR = 0 (результат размещен в младших 10ти разрядах регистров ADCH, L)
ADLAR =1 результат в старших 10ти разрядах. в итоге читая старший байт, читаем игнорируя
2 младших разряда, снижая точность, но повышая стабильность.
*/

/*************************************************************/

#pragma vector = ADC_vect
__interrupt void ADC_vect_ (void){
//т.к.   ADLAR, то байты сдвинуты и читаем толькот верхний
  ADC_res=0;
  ADC_res = ADCH;//dv 
// ADC_res = ADCL;//svet
  //del = ADCH;//svet
      ADC_flag = 0;
    ADCSRA = 0x00;

}   

//================================

//int
char  ADC_data(char canal, char V_ref, unsigned char count_cicle){
  // V_ref - выбор опоры .  биты 7б6 ADMUX   REFS1,REFS0
  //  опора от Vcc   REFS1 = REFS0 = 0
  //   опора с внешнего пина REFS0 = 1
  //   REFS1=REFS0=1  внутренняя 3,56 V
  // #define Vref_Vcc       0x00
  // #define Vref_Extern    0x01
  // #define Vref_Intenrnal 0x03
  //

  char c=0;
  unsigned   int r=0;
    ADC_res= 0;
    ADC_flag = 1;
     ADMUX=0x00;//  V_ref Vcc
     
          if(V_ref == Vref_Extern) ADMUX |= REFS0;  //внешний пин
         if(V_ref == Vref_Internal) ADMUX |= REFS0|REFS1;  //внутренняя 2,56V   
   
          //if(canal < 0x03) cicle_ADC = 5;
       
    switch(canal){
    case Up_move:
      ADMUX |= 0x04; //4й канал
      break;
    case Dn_move:
      ADMUX |= 0x03; //3й канал
      break;
    case L_move:
      ADMUX |= 0x01;//1й канал
      break;
    case R_move:
      ADMUX |= 0x02;//2й канал
      break;
    }
     /*
     for(c=0;c < count_cicle; c++){
      //      for(c=0;c < 10; c++){
           ADMUX |= (1<<REFS0);//т.к. работаем с малым сигналом то ADLAR
         // ADMUX |= Bit(7);
           ADMUX |= (1<<ADLAR);
          ADCSRA |= (1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
           ADCSRA |=(1<<ADSC);
                 while (ADC_flag){
                   _NOP();
                   _NOP();
                 
                 };   
                       r+=ADC_res;
    }   
     */
     r=r / count_cicle;
       Delay(40);
return  (char)r;

}

 
/************************/

void ConverCifraOut(char x)
{
//char *StrOut;
char j;
char ed=0;
char de=0;
char so=0;

p_TxBuf=TxBuf;
     //StrOut = StrOut_; //StringOut; 
     if (x == 0x7F){ //127             
          *p_TxBuf =' ';   
          *p_TxBuf ='-';   p_TxBuf++;
          *p_TxBuf ='-';   p_TxBuf++;
       }   
       else { 
               ed=de=so=0;   
     
                     
               ed=de=so=0;           
                 for (j=0;j < x;j++) {
                   ed++;
                     if (ed > 9){   ed = 0x00;     de++; }
                     if (de > 9){   de=0x00;       so++; }
                 }
                  //ед, дес, сотни посчитаны , формируем строку от требуемой длины
               
                  so += 0x30; 
                 if(so == 0x30)    so = 0x20;
                      *p_TxBuf  = so;  p_TxBuf++;
               
                     
                      de += 0x30;   
                     // if  (de == 0x30)     de = 0x20;
                      *p_TxBuf  = de;  p_TxBuf++;
                     
                      ed += 0x30;   
                        *p_TxBuf  = ed;  p_TxBuf++;   
             }
    // *p_TxBuf++ =0x0d; *p_TxBuf++=0x0A;
     *p_TxBuf++ =' '; *p_TxBuf++=' ';
     
     *p_TxBuf=0x00;
     
}                     
//=====================
/*

*/
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение Dedan » 19 фев 2013, 21:30

Я для себя блок схемку набросаю в виде кубиков и буду туда вписывать, что какой кубик делает и зачем. Если верно понял про компаратор, проц ему опору устанавливает через мультиплексор?
И похоже он это может делать в динамике?
Если так, то удобная штука, особенно там где надо за балансом нуля следить в операционниках.
===========
PDF закачал. Основная проблема, язык.
Буду искать онлайн переводчик пдф.
==========
Проект опять запустился без ошибок.! :good:
Пока учусь тапочки приносить. Где взять, куда поставить. :)
Dedan
 
Сообщения: 228
Зарегистрирован: 21 май 2012, 18:25
Откуда: СПб

Re: Управление слаботочным приводом

Сообщение MasterCat » 20 фев 2013, 05:10

у меги16 опору программно не поменять. увы. есть только возможность второй вход переключать. с опорой только пара вариантов фиксированных и... внешний резистор. можно изгальнуться, конечно, шИмом пошустрить, но это мерзость будет, совсем запутаетесь.
вот у silabs да, там такая возможность есть, но выбрана М16. есть, конечно маневр. ...
у at90pwm316 выход DAC (аналоговый выход ЦАП) есть и есть возвожность динамически управлять опорой. проц же, таже мега 16.
отсюда вопрос: а оно надо?
покрутил опору отверткой на резисторе и забыл, чего умничать то?
а так будет дополнительная возможность, зудить будет. захочется использовать. подумайте 7 раз. мне-то всё одинаково. Ваша головная боль, не моя.. Ну и на M16 купить кучу китов не есть проблема , а в другом варианте придется плату делать. а оно опять же надо? pwm, конечно на асинхронные привода ориентИрована, для того и делалась, ну собствено и для источников с корректором, но всё резко усложнится, хоть архитектура и среда та же. И всё ради программной опоры, пусть и хорошей. Я б сначала в зеркало глянул, об стенку постучался, опять глянул, может и пройдет.
как говорит один знакомец:"думай шо говоришь, когда говоришь не думая" :roll:
==========
скачал pdf это ххорошо. причем тут язык? его НЕ надо переводить. он есть переведенный. есть книжки разные.
например <микроконтроллеры семейства AVR фирмы ATMEL> В.В, Гребнев РадиоСофт Москва 2002.
и куча ресурсов в сети. вот на вскидку.: http://samou4ka.net/category/beginners/next/2
http://www.gaw.ru/html.cgi/txt/ic/Atmel ... /index.htm
вообщем, как у дурака махорки.
есть де-то (точнее был ) переведенный шиит на M103. всё одно и тоже за малыми различиаями. посмотрю, может найду
-
да, нарыл какую-то. 2 мб. подвешу в скайпе. заберете.
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение Dedan » 20 фев 2013, 06:57

Про об стену в самую точку. Буду комменты не касающиеся темы, в кавычки брать.
Или лучше вообще промолчу. Просто вспомнилось, как делали управу для производственной зарядки. Там и нужно было рулить опорой. Была идея отдать процу даже начальную настройку девайса. Минуя нафиг всех наладчиков.
Dedan
 
Сообщения: 228
Зарегистрирован: 21 май 2012, 18:25
Откуда: СПб

Re: Управление слаботочным приводом

Сообщение MasterCat » 20 фев 2013, 09:11

на названном таракане выход цапа выглядит так.
Код: Выделить всё
/*
п.п. формирования уровня токового компаратора
PFC с выхода DAC.
для разных режимов работы - разные значения опоры.

----------
gv_V_SetUrovenUI - напряжение с резистора задания. из Interrupt от ADC
*/

void DAC_set(void){

unsigned int DAC_value = 0;



// далее устанавливаем опору с выхода DAC для компаратора0 (current sens)
// с коэффициентом опережения опоры  в зависимости от текщего режима
   /*
switch (Work_Regim){

   case Wrk_reg_IGNITION : //!<  поджиг
    DAC_value = DAC_value * DAC_Coefficient_Correction_IGNITION ;
  break;
   case Wrk_reg_SMALL_POWER: //!<  малая мощность
    DAC_value = DAC_value * DAC_Coefficient_Correction_SMALL_POWER ;
  break;
  case Wrk_reg_NORMAL_POWER: //!<  нормальный рабочий режим
    DAC_value = DAC_value * DAC_Coefficient_Correction_NORMAL_POWER;
  break;
  case Wrk_reg_ERROR:  //авария
  case Wrk_reg_STOP :  //!<  остановлен
  default:  //шорох у соседей
        DAC_value =0x00; //  т.е. прерывание по любому шороху у соседей
  break;

}
*/

       DAC_value = Set__params._set__midle_current_ / 2; //С каким-то коэффициентом. ПОКА ТАК
                       //DAC_value =<< 1;// /2;       //сдвинем на полную амплитуду   
                       //  if(DAC_value < 20)DAC_value =20;         //50 50
  //и заприсываем полученное значение в DAC
     Set_dac_10_bits( DAC_value ) ;  //не обновляй в прерываниях. будут выбросы

}
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение MasterCat » 20 фев 2013, 11:24

?вопрос?
плата с китом заказана или ещё думаете? или как или что?
к стати
http://ru.farnell.com/olimex/avr-io-m16 ... dp/1701520
с любой карточки оплата.
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение MasterCat » 20 фев 2013, 18:18

Dedan, а отчего вопросов нет? c этой рыбой можно уже реально работать. алгоритмом её чистить. с головы.
на мой вопрос тоже тишина. под горячую лапу просимся :rtfm:
Аватара пользователя
MasterCat
 
Сообщения: 1281
Зарегистрирован: 02 фев 2011, 17:18

Re: Управление слаботочным приводом

Сообщение Dedan » 21 фев 2013, 03:28

Выпадал. Комп пароли теряет. Еще и винт был угрохан, все время последствия устраняю. Да еще режим сна съехал, отрубаюсь прямо за компом. Поправим.
AVR IO m16 заказал в Питере. Сегодня оплачу счет, принимают только безнал. Все? Берем ее?
Будет через 2-3 недели.
=======
Что делать с приведенным текстом? Куда его вписывать?
Dedan
 
Сообщения: 228
Зарегистрирован: 21 май 2012, 18:25
Откуда: СПб

Пред.След.

Вернуться в Микроконтроллеры и ПЛИС

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

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

cron