Перейти к содержанию
    

раскажите пожалуста про энкодер, что это такое? какие они бывают? как с ними быть?

Простейший энкодер -- внутри мыши такое колёсико с дырочками + две детальки на плате :) . А если серьёзно, то задай Google вопрос и найдешь кучу информации на руском языке. Множество русских фирм продаёт энкодеры любых видов для разных целей и у них есть техдокументация. Самому сделать -- тоже просто берём диск сверлим по контуру отверстия или нарезаем полосочки, ставим оптопару (их тоже много продают готовых) устанавливаем на вал, вывод фотодатчка подключаем к мп и имеем обратную связь. Програмно считаем импульсы и конкретно тормозим в нужный момент.

 

Ниже естьобсуждение подключения энкодера. Удачи! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а если просто поставить какой нить индуктивный датчик? я вот просто алгоритм до конца не пойму. Допустим после включения насоса ждать пока сигнал с датчика появится на ноге, пока его не будет цикл не продолжать? можно так поступить? а после того как на ноге появилась "1" продолжить цикл

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а если просто поставить какой нить индуктивный датчик? я вот просто алгоритм до конца не пойму. Допустим после включения насоса ждать пока сигнал с датчика появится на ноге, пока его не будет цикл не продолжать? можно так поступить? а после того как на ноге появилась "1" продолжить цикл

Какой датчик поставить это тебе решать. Главное чтобы он выдавал импульсы, ну скажем 5В. Количество импульсов зависит от дотчика. Главное что при вращении вала шли импульсы, а когда вал стоит -- нет. Ведь ты включаешь двигатель, кажется "доза", на какое-то время. За это время двигатель делает какое-то количество оборотов, скажем N. Пусть датчик на валу за один оборот формирует M импульсов (зависит от количества "дырочек" :) в диске). Теперь мы можем посчитать на "сколько" импульсов нам надо включать двигатель для получения "правильной" дозы (N*M). Поэтому мы можем просто включать двигатель и теперь считать импульсы от датчика (не на время). По приходе нужного количества импульсов (N*M), выключаем двигатель и включаем тормоз. Эти мы исключаем всякие внешние факторы на количество оборотов -- количество "дозы". Ведь от времени включения двигателя зависит "доза"? Или я не прав?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Выход датчика заводишь на любой вход INT0 или INT1, организуешь пп обработки прерывания, настраиваешь прерывание на фронты или уровни срабатывания, и, в пп обработки прерывания, делаешь INC Rd. Конечно всё зависит от количества импульсов, но это уже програмные штучки :) .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я тут подумал и решил сделать так: взять диск и просверлить в нем дырки, и поставить его на вал двигателя, импульсы фиксировать индуктивным датчиком, т.е. если он попадает на "дырку" на выходе "0". Подключать его буду к PD3. Посмотрите пожалуста программную реализацию

в начале я добавляю регистр

.def cntdat=r19

и переменную для порта D

.equ dat=3 ; вход индуктивного датчика

 

В начале главного цикла

 

ldi Ttemp,0b00001000 ; прерывание по спадающему фронту

out mcucr,Ttemp

ldi Ttemp,0b10000000 ; разрешение прерывания INT1

out gicr,Ttemp

 

sbi ddrd,3 ; установить PD3 как выход

 

вот у меня возникли вопросы :

 

что записать в PORTD (высокий уровень или низкий) ?

и как посчитать кол-во импульсов которые пройдут за один оборот вала? может оно будет равно кол-ву дырок?

и как подобрать кол-во импульсов за которые наберется литр? просто подобрать "методом тыка"? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

sbi ddrd,3 ; установить PD3 как выход

Почему PD3 выход он же ВХОД ПРЕРЫВАНИЯ

вот у меня возникли вопросы :

что записать в PORTD (высокий уровень или низкий) ?

Если пин порта вход, то запись в регистр PORTD 1 подключает внутренний пулап резистор

и как посчитать кол-во импульсов которые пройдут за один оборот вала? может оно будет равно кол-ву дырок?

Конечно. Но в твоём случае можно просверлить и одно отверстие. Т.к. один регистр может "считать" импульсы только до 255. Для большего количества придется испозовать всё боьше и больше регстров :) . Эксперементируй и считай, считай, считай :)

и как подобрать кол-во импульсов за которые наберется литр? просто подобрать "методом тыка"? :)

Можно померять сколко наберётся за один оборот. Но для большей точности мерять сколько оборотов надо на один литр.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я вот сделал п/п обработки прерывания

INT1:

in rin1,sreg ; запомнить регистр состояния

push rin1

 

 

inc cntdat

cpi cntdat,$8

brne NNN

 

ldi radr,doza_0

rcall decod

 

 

NNN:

pop rin1

out sreg,rin1

 

reti

 

я планирую сделать 8 дырок. Как вы думаете нормально ли будет работать эта п/п? вроде на мой взляд должна. У меня почему то АВРстудио ругается при компиляции, говорит:

C:\avr\inddat\inddat.asm(830): error: Illegal attempt to re-use 'INT1' as label

почему так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ессесно

C:\avr\inddat\inddat.asm(830): error: Illegal attempt to re-use 'INT1' as label

Низзя использовать "зарегестрированные" слова. Измени INT1 на что-то вроде: CNT_INT1. :)

Изменено пользователем Wild007

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подключил я сегодня индуктивный датчик к контроллеру к ноге PD3,

А порт правильно настроил?

inc cntdat
cpi cntdat,$8
brne NNN

Почему сравнивается с 8?

ldi radr,doza_0
rcall decod

А кто обнулять CNTDAT будет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот я в начале проги где инициализация таймеров идет поставил

ldi Ttemp,0b10000000 ; разрешение прерывания INT1

out gicr,Ttemp

 

потом в начале рабочего цикла:

 

ldi Ttemp,0b00000100

out mcucr,Ttemp

cbi ddrd,3

sbi portd,3

а п/п обработки прерывания:

 

CNT_INT1:

in rin,sreg

push rin

 

inc cntdat

cpi cntdat,$01

brne NNN

 

ldi radr,doza_0

rcall decod

sbr reg_flgs,0b00000001 ;

clr cntdat

NNN:

 

pop rin

out sreg,rin

 

reti

сравнивал с "8" это типа симуляция одного поворота :) я щас просто поставил "1" чтоб посмотреть будет срабатывать или нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во первых :

ldi Ttemp,0b00000100
out mcucr,Ttemp

должно стоять в инициализации МК, а

ldi Ttemp,0b10000000; разрешение прерывания INT1
out gicr,Ttemp

после включения двигателя.

И (в обработке прерывания), когда выключил двигатель, запрещать прерывание INT1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сейчас сделал как вы сказали, теперь плата индикации не гаснет, но насос не отключается, видимо прерывание не работает.....с чем это может быть связано?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сейчас сделал как вы сказали, теперь плата индикации не гаснет, но насос не отключается, видимо прерывание не работает.....с чем это может быть связано?

Поиграйся с

cpi cntdat,$01

А может опять где-то CLI стоит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...