реклама на сайте
подробности

 
 
> AVR-MT-128 и энкодер, сигналы без тормозов
PaulB
сообщение May 7 2010, 12:46
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Есть отладочная плата AVR-MT-128 и подключоный к ней энкодер вращения ЛИР-158 2500имп/мин. Написал прошивку но она неуспевает считать все импульсы и зависает, при установке более простого энкодера прошивка работает исправно. Вопрос: как увеличить быстродействие контроллера?


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
4 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 53)
konstan
сообщение May 7 2010, 13:15
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 16-02-07
Из: Deutschland
Пользователь №: 25 408



Цитата(PaulB @ May 7 2010, 16:46) *
ЛИР-158 2500имп/мин.


может 2500 имп/оборот?
Какова скорость вращения вала энкодера и какова частота импульсов.

А вы устраняли "дребезг"?
Go to the top of the page
 
+Quote Post
x736C
сообщение May 7 2010, 14:31
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



И на чем написана программа, и каким образом она написана? Может можно оптимальней.
Go to the top of the page
 
+Quote Post
PaulB
сообщение May 7 2010, 17:32
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Цитата(konstan @ May 7 2010, 17:15) *
может 2500 имп/оборот?
Какова скорость вращения вала энкодера и какова частота импульсов.

А вы устраняли "дребезг"?


Да, Вы правы2500имп/оборот
В паспорте написано что мах.частота вращения вала 10000об/мин и выходного сигнала 2,5МГц

Пишу в кодвижене
вот часть кода:
CODE
while(PINA.1==1){ //Стоп
if (PINB.2==1) {
while(PINB.2==1){

}
q=q+1;
}}


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
haker_fox
сообщение May 8 2010, 04:10
Сообщение #5


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(PaulB @ May 8 2010, 02:32) *
Да, Вы правы2500имп/оборот

Однако, такие частоты нужно обрабатывать аппаратно, а не программно (ИМХО).
Как вариант, Вы можете использовать специализированные микросхемы, предназначенные для этого, либо (если нет дребезга) что-нибудь на базе D-триггеров и счетчиков из дискретной логики. Но еще лучше, опять же ИМХО, взять CPLD и организовать на ней необходимые функции.
Если нужно программно, то не следует забывать, что частота опроса энкодера должна быть в несколько раз выше максимальной частоты импульсов с энкодера для конкретного случая. Например, если Вы будете вращать вал с максимальной скорость 10 об/сек, то частота опроса может быть 10 * 2500 *4 = 100 кГц. Т.е. в 4 раза больше. А с учетом цифровой фильтрации различных помех и еще выше. Таким образом, все ресурсы МК будут затрачены на обработку энкодера.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
PaulB
сообщение May 8 2010, 14:50
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



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


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
Duhas
сообщение May 9 2010, 02:08
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



не мегу мона на прерывание повесить один канал, второй читать в прерывании..

а вообще для норм энкодеров с приличным разрешением - нужно хардварное считывание... либо как писали выше.. либо менять МК ...
Go to the top of the page
 
+Quote Post
RW9UAO
сообщение May 9 2010, 11:06
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 115
Регистрация: 23-01-07
Пользователь №: 24 688



на INT0 повесить и не париться.
Go to the top of the page
 
+Quote Post
Stas
сообщение May 9 2010, 11:35
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 464
Регистрация: 1-10-04
Из: Челябинск
Пользователь №: 751



Для ЛИР-158 на 5000 дискрет на оборот делал энкодер со счетчиком приращения на max7128s, считывал контроллером уже обработанные данные.
При реализации программы энкодера обратите внимание на следующий нюанс - при неподвижном вале ЛИРА по одной из линий возможно прохождение ложных импульсов, которые вызовут ошибку подсчета перемещения. В принципе видел эту ошибку и при вращении вала ЛИР шаговым приводом. Поэтому инкремент/декремент счетчика положения следует осуществлять при смене состояния на обеих линиях датчика.
Go to the top of the page
 
+Quote Post
=GM=
сообщение May 11 2010, 13:04
Сообщение #10


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(PaulB @ May 7 2010, 11:46) *
Есть отладочная плата AVR-MT-128 и подключеный к ней энкодер вращения ЛИР-158 2500имп/об, как увеличить быстродействие контроллера? В паспорте написано что мах. частота вращения вала 10000об/мин и выходного сигнала 2,5МГц


Что если для увеличения быстродействия сигнал канала А подать на int0 и counter1, а сигнал канала B на int1 и counter3? Почти аппаратное решение без всяких затрат :-).

Кстати, откуда 2.5 МГц, если 2500*10000/60=416667=417кГц максимум?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
PaulB
сообщение May 11 2010, 14:22
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Натолкнули меня на идею использовать D-триггер, а в прошивке домножать на коэффициент деления. Что думаете по этому поводу?


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
=GM=
сообщение May 11 2010, 15:28
Сообщение #12


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Ну так, timer/counter1 и есть цепочка D-триггеров.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
PaulB
сообщение May 11 2010, 16:17
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



В паспорте на датчик рекомендуется использовать ИС AM26LS32 и AM26C32, но толком не чего на них найти не могу. Может кто нибудь работал с ними или знает о них что нибудь?


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
SysRq
сообщение May 11 2010, 17:53
Сообщение #14


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(PaulB @ May 11 2010, 20:17) *
..AM26LS32 и AM26C32 ..кто нибудь работал с ними или знает о них что нибудь?
А что конкретно интересует? Это всего лишь приёмники дифференциального сигнала (пара A+\A- в один A), они ничего не считают. Даташиты Google укажет при поиске по названию м\с.
Go to the top of the page
 
+Quote Post
PaulB
сообщение May 12 2010, 05:23
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Да даташиты в основном все на буржуйском. Рас они ничего несчитают, то к чорту их.
Значит надо какуюто схему на логике искать.


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
PaulB
сообщение May 12 2010, 16:37
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



А можно просто сделать на логике счетчик и снимать с него данные с помощью мк?


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
haker_fox
сообщение May 13 2010, 00:00
Сообщение #17


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(PaulB @ May 13 2010, 01:37) *
А можно просто сделать на логике счетчик и снимать с него данные с помощью мк?

Цитата(haker_fox @ May 8 2010, 13:10) *
Как вариант, Вы можете использовать специализированные микросхемы, предназначенные для этого, либо (если нет дребезга) что-нибудь на базе D-триггеров и счетчиков из дискретной логики. Но еще лучше, опять же ИМХО, взять CPLD и организовать на ней необходимые функции.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Vetal-Soft
сообщение May 13 2010, 04:51
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 16-06-05
Пользователь №: 6 074



Вот так я делал на Mega16.
Работает без глюков при частоте импульсов 500 Гц. Тактовая МК 16МГц.
Фаза А сидит, одновременно, на INT0 (нарастание) и INT1 (спад).

Код
#include <avr/io.h>
#include <avr/interrupt.h>
  ...
#define PHASA_B_PORT     PORTD
#define PHASA_B_DDR      DDRD
#define PHASA_B_PIN      PIND
#define PHASA_B_n        1  
  ...
volatile signed char count_temp;
  ...
ISR (INT0_vect)
{
    if (bit_is_clear(PHASA_B, PHASA_B_n))
        count_temp++;    
}

ISR (INT1_vect)
{
    if (bit_is_clear(PHASA_B, PHASA_B_n))
        count_temp--;
}

void int_init ( void )
{
    PHASA_B_DDR  &= ~(1 << PHASA_B_n);
    PHASA_B_PORT &= ~(1 << PHASA_B_n);
    count_temp = 0;
    MCUCR = (1 << ISC01) | (1 << ISC00) | (1 << ISC11) | (0 << ISC10);
    GICR  |= (1 << INT0) | (1 << INT1);    
}

int main ( void )
{
    signed char count_temp2;
    long counter;
    ...
    int0_init();
    sei();
    ...
    while(1)
    {
        ...
        cli();
        count_temp2 = count_temp;
        sei();
        counter += count_temp2;
        cli();
        count_temp -= count_temp2;
        sei();
        ...
    };
    return 0;
}
Go to the top of the page
 
+Quote Post
PaulB
сообщение May 13 2010, 10:18
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



C вывода каждого триггера счетчика, сигнал идет параллельно счетчику на МК?
На мк снимаем двоичный сигнал и переводим его в десятиричный формат, тем самым узнаём сколько импульсов мы имеем в данный момент?


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
arisov
сообщение May 13 2010, 12:52
Сообщение #20


Частый гость
**

Группа: Свой
Сообщений: 157
Регистрация: 17-02-07
Из: Ульяновск
Пользователь №: 25 455



PaulB вот эту темку http://electronix.ru/forum/index.php?showtopic=60502 посмотрите (если конечно раньше не видели).
Go to the top of the page
 
+Quote Post
PaulB
сообщение May 14 2010, 06:19
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Нашел схемку, думаю выдернуть из неё счетную часть. Что вы об этом думаете?
http://radiokot.ru/circuit/digital/measure/07/index.shtml


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
PaulB
сообщение May 18 2010, 07:26
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



А кто нибудь, что нибудь, о таких микросхемах слыхал?
LS7084
HCTL 2032


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
haker_fox
сообщение May 23 2010, 23:37
Сообщение #23


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(PaulB @ May 18 2010, 16:26) *
А кто нибудь, что нибудь, о таких микросхемах слыхал?
LS7084
HCTL 2032

Да, но не применял.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение May 25 2010, 11:49
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Оба вывода энкодера подаются на 2 прерывания по обоим фронтам. Или (лучше) опрашивать энкодер с частотой, достаточной для ловли его состояний. Обработчик прерывания один и тот же:

Читаем энкодер. При вращении вперёд он проходит значения 1-0-2-3-1-0-2-3..., назад - наоборот. Если считанное состояние 2, предыдущее 0, пред-предыдущее 1 то шаг++. Если текущее 1, предыдущее 0, пред-предыдущее 2 то шаг--. Всё другое - это дрожание вала ака "дребезг". Регистровая переменная "шаг" изменяется в прерывании, переменная "шаги" в основной программе не реже, чем 100 шагов: шаги+= шаг; шаг=0.
Анализ, изменилось ли состояние, занимает 9 циклов контроллера и шаг++/шаг-- ещё 14. Ну и на вход-выход в прерывание ваш С-компилятор накрутит не знаю сколько smile.gif

Сообщение отредактировал Maik-vs - May 25 2010, 11:53
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 11 2010, 13:46
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Сделал счетчик от прерывания, оказалось что такого вполне должно хватить.
Энкодер подключен напрямую к мк без логики т.к. сначало хочется хотябы просто считать импульсы в одном направлении.
Считать то вроде считает, но неправильно. энкодер отключил, после включения питания на дисплее показания сразу добегают до пары тысяч, и изменяются каждую секунду.
значит дело в коде?
Код
#include<mega128.h>
#include <delay.h>
#include <stdlib.h>  
#include <stdio.h>  
#include <lcd.h>

#asm
.equ __lcd_port=0x15;PORTC
#endasm

unsigned long q;        
interrupt [EXT_INT0] void ext_int0_isr(void)   // процедура обработки прерывания
{
  
          q++;             //с каждым прерыванием значение переменной увеличивается на 1
          
}
                
int main()
{
         char w[32];    //для преобразования числа в строку/символы
DDRA=0x00;
PORTA=0x00;
DDRB=0xF0;
PORTB=0x00;
DDRE = 0b00110000;
PORTE = 0b00100000;
lcd_init(16);


  lcd_gotoxy(5,0);
      lcd_putsf("Hello!");
   Privet();    
     delay_ms(3000);
      
       while(1) {
       q=0;
      lcd_clear();
    
      Go();
      lcd_putsf(" ");
      Stop();
       lcd_putsf(" ");
      Reset();
      delay_ms(10);
            
    if  (!(PINA & 0b00000001))  {                //Пуск
    lcd_clear();
      Go();
      delay_ms(1000);
          SREG.7 = 1;
        EIMSK = 0x01;
        EICRA = 0x0C;
        EICRB = 0x0C;  
          
       while(PINA & 0b00000100){                 //Сброс
         lcd_clear();
        sprintf(w,"adc= %d\n",q);
        lcd_puts(w);
         delay_ms(50);
        }
       lcd_clear();          
         Reset();
         delay_ms(2000);
         }
          
      }        
  return 0;

}


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
sKWO
сообщение Aug 11 2010, 15:46
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата
значит дело в коде?

Риторический вопрос laughing.gif
Вы дребезг как давите?
Датчик кодируется кодом Грея?
Попробуйте применить RC-цепочку на входе ИНТ0 с постоянной цепи скажем так в 5 раз меньшей максим. частоты импульсов, или примените логику на входе для подавления дребезга например на елементах исключающее ИЛИ.


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 11 2010, 16:04
Сообщение #27


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



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

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

Сообщение отредактировал PaulB - Aug 11 2010, 16:17


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
sKWO
сообщение Aug 11 2010, 17:10
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(PaulB @ Aug 11 2010, 19:04) *
я же вроде указал что датчик от платы совсем отключил, а прошивка в момент работы сама считает не пойми какие прерывания, хотя должна показывать 0 т.к. энкодер отключон и прерываний не происходит.

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

Посмотрите для начала как генерирует код начальной инициализации Ваш помощник встроенный в Вашем компиляторе.
Посмотрите как опрашиваются кнопки.
Что такое Go(); , Stop();, и Reset(); остаётся только догадываться.
Ваши значения счётчика могут так изменятся из-за наводок на входе ИНТ0 или неправильной инициализации МК.
Что в MCUCR и GICR ? ЗачемВам здержки? посмотрите хотябы код предложенный Vetal-Soft. прочитайте ссылку данную выше. Обнлвление на ЖКИ сделайте к примеру по прерыванию таймера а не в цикле


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 12 2010, 08:24
Сообщение #29


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Все заработало. считает нормально smile.gif
теперь незнаю как сделать реверс, чтобы сначало при вращении вала значение увеличивалось, а при в ращении в другую сторону уменьшалось. наверное надо использовать логику?


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
backa
сообщение Aug 12 2010, 08:32
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 15-06-05
Из: Минск
Пользователь №: 6 028



я когда-то делал на асм для старой 8515 - тоже через прерывания - датчики положения для станков ЧПУ по принципу sin-cos - всё работало как часы - в любую сторону - делал по фронту .
Мой коллега сделал на рассыпухе (ИЕ7 и другая логика) а я программно реализовал на аврке
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 12 2010, 08:35
Сообщение #31


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



А поподробнее описать можете, как по фронту ?


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
backa
сообщение Aug 13 2010, 07:20
Сообщение #32


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 15-06-05
Из: Минск
Пользователь №: 6 028



Идея в следующем - там были разнесённыу по фазе 2 сигнала sin и cos - и в зависимости который из них первый по фазе соответственно получаем направление движения(вращения) - я не стал мудрить и повесил оба сигнала на прерывания 8515 - их там как раз 2 вывода и в начальный пуск настраивал сработку прерывания по нарастающему фронту . Как только приходил один из импульсов в обработчике прерывания менял на сработку этого вывода на уже спадающий фронт - дабы дождаться либо окончания импульса или наоборот если пошёл реверс то отмену прибавки в счётчике и уже ожидания окончания импульса для того что-бы его вычесть из текущего числа импульсов
Наверно несколько сумбурно но всё вроде просто и работает - единственно что не устранил - это всегда была погрешность +-1 - тутелька в тютельку не получилось - да и не надо это было - девайс нужен был для проверки датчиков перемещения на станке не снимая их (иногда пол станка для этого нужно было разобрать что-бы снять "линейку" - кто знает меня поймёт)
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 18 2010, 15:04
Сообщение #33


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



А кодом неподелитесь, может легче будет? А то все равно что то недопойму во эту часть:
Цитата(backa @ Aug 13 2010, 11:20) *
Как только приходил один из импульсов в обработчике прерывания менял на сработку этого вывода на уже спадающий фронт - дабы дождаться либо окончания импульса или наоборот если пошёл реверс то отмену прибавки в счётчике и уже ожидания окончания импульса для того что-бы его вычесть из текущего числа импульсов



--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
backa
сообщение Aug 23 2010, 10:39
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 15-06-05
Из: Минск
Пользователь №: 6 028



код надо искать - давно было и разово делась - про реверс - датчик может двигаться в противоположные стороны поэтому импульсы прибавляются в счётчике или отнимаются - когда импульс отсчёта прошёл то всё просто а если во время действия импульса отсчёта произошёл реверс движения то тут только по фронтам можно отследить с точностью до +-1 ....Если по-простому - настраиваем изначально на сработку прерывания по нарастающему фронту... как только произошло прерывание то запоминаем что импульс начался и в теле прерывания меняем срабатывание прерывания на спадающий - т.е. ждём завершения импульса ...всё .
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 23 2010, 21:08
Сообщение #35


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



получилось и вроде работает! smile.gif


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
backa
сообщение Aug 24 2010, 06:47
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 15-06-05
Из: Минск
Пользователь №: 6 028



если с помощью моих не очень "понятных разъяснений" то я рад ....
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 24 2010, 08:17
Сообщение #37


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Разяснения то были понятны, вот только программно это реализовать не мог до недавнего времени.
СПАСИБО!!!!!!


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
PaulB
сообщение Sep 9 2010, 17:05
Сообщение #38


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Возникла очередная проблемка, да бы не создавать новую тему и не захламлять форум, задам вопрос тут: Данные с датчика требуется отправлять на комп - с этой задачей с горем на пополам справился. Так же требуется кое какие данные отправлять на внешнее устройство, обмен данными ведется через интерфейс 232 по USART, но вот эту задачу почему то не удается реализовать.При использовании процедуры getchar() программа виснет. помогите плиз.


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
Vetal-Soft
сообщение Sep 10 2010, 06:02
Сообщение #39


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 16-06-05
Пользователь №: 6 074



Видимо ждет данных ))
Прочиайте это: http://chipenable.ru/index.php/programming...uart-queue.html
Go to the top of the page
 
+Quote Post
PaulB
сообщение Sep 10 2010, 13:06
Сообщение #40


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Сделал вот таким образом, виснуть перестало, но и непринимает нечего:
if (rx_counter1 !=0){
a=getchar1();
putchar1(a);
}
else putchar1('a') ;


Сообщение отредактировал PaulB - Sep 10 2010, 16:08


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
PaulB
сообщение Nov 27 2010, 19:41
Сообщение #41


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Продоржаю тему подключения энкодера ЛИР к контроллеру.
Немного истории: предидущее подключение энкодера было "прямым", датчик напрямую подключался к контроллеру и сигналы считались от прерывания (счетчик был реверсивным), однако счет был неверным так как в датчике наблюдался дребизг.
параметры:
мах. частота вращения вала на который закреплен датчик: 5000 об/мин
датчик: 2500 имп. на оборот
частота работы мк: 16МГц

Что хочется сделать теперь:
1. Избавиться от дребизга и осуществить реверс
2. Использовать Для счета таймер/счетчик
3. Исбользовать в качестве контроллера Xmega c частотой работы в 32МГц, так как помимо счета надо выполнять еще и другие операции.

==================================
начнем с пункта №1.
Для избежания дребизга планируется использовать оптопары, то есть каждый сигнал канала будет проходить через свою оптопару. Кто что об этом думает? Как лучше избавиться от дребезга? Аппаратно или программно?

Реверс планирую осушествить добаврением к схеме двух корпусов логики триггера и элемента "И".

Жду коментариев, предложений?


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 27 2010, 20:41
Сообщение #42


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
5000 об/мин

Это 83,33.... об/сек - зачем Xmega с 32 000 000 операций за секунду , на что может не хватить 16 000 000 оп/сек?
А от датчика придёт только ~ 42 импульса за секунду.

Цитата
Для избежания дребЕзга планируется использовать оптопары
и чем это должно помочь?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
PaulB
сообщение Nov 27 2010, 22:17
Сообщение #43


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



это как это вы водсчитали что 42 импульса в секунду?
В секунду с датчика придет: 83.33*2500=300имп в сек

оптопара: зглаживание пульсаций


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 27 2010, 22:32
Сообщение #44


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(PaulB @ Nov 28 2010, 01:17) *
В секунду с датчика придет: 83.33*2500=300имп в сек


Да, правильно, посмотрел в этот момент на об.мин, правильно 300 . И что это меняет из 16 000000?

Цитата
оптопара: зглаживание пульсаций

За счёт чего , ёмкости самой оптопары, ну очень острые пички он уберёт , остальное пропустит


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
PaulB
сообщение Nov 27 2010, 22:43
Сообщение #45


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Да, чисто для счета 16 МГц хватит, но мне надо будет еще проделать несколько операцай помимо счета, для которых может и нехватить такой скорости. А если и хватит то впритык.

И как же посоветуете избавиться от дребезга?


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
Vasily_
сообщение Nov 27 2010, 23:29
Сообщение #46


Знающий
****

Группа: Модераторы
Сообщений: 925
Регистрация: 25-01-09
Из: Рига
Пользователь №: 43 909



Цитата
как же посоветуете избавиться от дребезга?


У вас энкодер уже оптический, откуда там дребезг?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 28 2010, 07:03
Сообщение #47


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Ну, ребята, вы и жжете!
Темы по форуму бродят аки призраки. Поиск рулит.
Блин, на что может не хватать 16Мгц? cranky.gif
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 28 2010, 09:48
Сообщение #48


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
Да, чисто для счета 16 МГц хватит, но мне надо будет еще проделать несколько операцай помимо счета, для которых может и нехватить такой скорости. А если и хватит то впритык.

Цитата
_Pasha Блин, на что может не хватать 16Мгц?

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

Цитата
Vasily_ У вас энкодер уже оптический, откуда там дребезг?

Цитата
PaulB однако счет был неверным так как в датчике наблюдался дребизг


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Duhas
сообщение Nov 28 2010, 11:03
Сообщение #49


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



83.33*2500=300имп в сек

это очень интересно... как при 83 оборотах в секунду при 2500 импульсов на оборот получается 300 импульсов в секунду ? может 207500?

а теперь глядим.. на 1 импульс с обычной мегой надо - войти в прерывание, прочитать пин, по условию уменьшить или увеличить счетчик. выйти.. повыполнять основную прогу.. ну тактов в 20 могет прерывание обойдется по минимуму.. в принципе тянет.. могет еще успеть чота чуток поделать.. по грубым прикидкам..
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 28 2010, 12:52
Сообщение #50


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Duhas @ Nov 28 2010, 14:03) *
83.33*2500=300имп в сек

это очень интересно... как при 83 оборотах в секунду при 2500 импульсов на оборот получается 300 импульсов в секунду ? может 207500?

Помоему запутались совсем и начнём считать с этих данных
Цитата
Есть отладочная плата AVR-MT-128 и подключоный к ней энкодер вращения ЛИР-158 2500имп/мин

Отсюда 41,66666.... импульсов в секунду, которые по идее и надо считать, а сколько их будет за N- ое количество оборотов , не столь важно


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
khach
сообщение Nov 28 2010, 15:43
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Радикально - выкинуть атмегу, взять STM32 или LPC1700 - у них встроенный аппаратный интерфейс квадратурного энкодера. Попытка реализовать интерфейс квадратурного энкодера на CPLD+ атмега выигрыша по финансам по сравнению с переходом на ARMы не дает.
Go to the top of the page
 
+Quote Post
Duhas
сообщение Nov 30 2010, 14:16
Сообщение #52


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



вы сами придумали параметр энкодера импульсы в минуту ? трава у вас отменная

написано было :
мах. частота вращения вала на который закреплен датчик: 5000 об/мин
датчик: 2500 имп. на оборот

армы армы.. Хмега есть... и там есть все что нужно ТС
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 30 2010, 14:31
Сообщение #53


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Duhas @ Nov 30 2010, 17:16) *
вы сами придумали параметр энкодера импульсы в минуту ? трава у вас отменная

Вы первый пост прочтите всей темы


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Duhas
сообщение Nov 30 2010, 15:34
Сообщение #54


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



повторяю свой вопрос..

3-4 пост темы

"Да, Вы правы2500имп/оборот
В паспорте написано что мах.частота вращения вала 10000об/мин и выходного сигнала 2,5МГц"
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 00:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.02001 секунд с 7
ELECTRONIX ©2004-2016