Четверг, 28.03.2024, 14:32
| RSS
Главная | DTMF управление нагрузкой на Atmega - Страница 2 - Форум
Защита, контроль, управление
Форма входа
Логин:
Пароль:
[ Новые сообщения · Участники · Правила форума · Поиск · RSS · Чат

Наш канал в YouTube
]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Форум » ФОРУМ » Общие вопросы » DTMF управление нагрузкой на Atmega
DTMF управление нагрузкой на Atmega
AlexHWДата: Среда, 22.05.2013, 00:10 | Сообщение # 11
Группа: Пользователи
Сообщений: 12
Статус: Offline
На жук слева не обращаем внимания, это кусок моей версии, привожу распиновку в соотв с даташит,
двигателя вращаются всегда в одну сторону.



1) Рассматриваю как вариант прерывание или запитка логического питания драйвера?
"Стоп"  VSS IN16=0 (0V) DTMF №# (на момент включения VCC)
"Старт"        IN16=1 (5V) DTMF №*

2)  "Вперед" - Вращаются оба двигателя по часовой стрелке DTMF №1
IN1=1,IN2=1 M1
IN3=1,IN4=1 M2

3)  "Право" - М1 вращается по часовой, М2 стоит DTMF №2
IN1=1,IN2=1, IN3=0,IN4=0

4)  "Лево"  - М2 вращается по часовой, М1 стоит DTMF №3
IN1=0,IN2=0, IN3=1,IN4=1

L293D:

Представляется так: Допускаю что я ошибся по сигналам  IN пинов,  в активном состоянии IN1 = 1(с нагрузкой), и IN2=1(без нагрузки) wink
Прикрепления: 3599692.jpg (163.1 Kb) · 5857252.jpg (49.5 Kb)


Сообщение отредактировал AlexHW - Среда, 22.05.2013, 00:42
 


AdminДата: Среда, 22.05.2013, 14:50 | Сообщение # 12
Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
AlexHW, во вложении модель в Протеусе и программа с исходником для управления моторами.
Дальше разбирайтесь с исходником, вносите свои правки, переносите на Атмел (если, конечно, это уж столь актуально). Возможно, дополнительно понадобится управление пином EN (в модели Протеуса при установке IN1(3)=IN2(4)=0 двигатель не останавливается, хотя и должен, судя по даташиту), для этого есть свободные выходы порта А. Это уже все можно сделать самостоятельно. Удачи!
Прикрепления: MOTOR.zip (23.2 Kb)
 
AlexHWДата: Среда, 22.05.2013, 16:05 | Сообщение # 13
Группа: Пользователи
Сообщений: 12
Статус: Offline
Бескрайне благодарен, отчитаюсь по  результатам.
В ходе экспериментов пытался в качестве прототипа, применить это решение Ваше http://lock.3dn.ru/index/0-26
Увы исходник закрыт, особо не разгонишься.


Сообщение отредактировал AlexHW - Среда, 22.05.2013, 16:05
 
AdminДата: Среда, 22.05.2013, 21:50 | Сообщение # 14
Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
Цитата (AlexHW)
Увы исходник закрыт, особо не разгонишься.

Я же приложил исходник, он как раз на основе вышеуказанной схемы, только немного упрощен.
 
AlexHWДата: Четверг, 23.05.2013, 11:36 | Сообщение # 15
Группа: Пользователи
Сообщений: 12
Статус: Offline
1. По поводу бага с вращением 1-го двигателя, L293D не нуждается в дополнительной обвязке, он прекрасно работает в соотв. с распиновкой пост#11 в даташит рекомендована именно такая схема, есть 2 источника питания логический 5V и силовой 5...32V. Так же стоковые пины PICa должны программно менять состояние в зависимости от состояния  входных сигналов от (Q1-Q4), и будет Вам песня, но :

2. Как понимаю, предложенный исходник НЕ симулирует  декодированные команды  DTMF:
Изначальная задача :
Команда "Вперед" вращаются двигателя М1, М2  - на входе (U2) PIN10 если (0001) и т.п. то значение PIN17 =1 (5V), PIN18 = (сток), PIN1 = (сток) и т.д. по моим командам.

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

Хотелось бы видеть исходник  с  методом управления нагрузкой MT8870 поинты Q1 - Q4 на принципе распознавания ШИМ сигнала STD (PIN15)
Внешний визуальный эффект для меня второстепенно.
Возможно в случае с симуляцией на Протеусе такая задача здесь неподъемна, у вас ведь все проекты основаны на MT8877?
Поправьте меня если я не прав. wink

Добавлено (23.05.2013, 11:36)
---------------------------------------------
Цитата (AlexHW)
AlexHW, во вложении модель в Протеусе и программа с исходником для управления моторами.Дальше разбирайтесь с исходником, вносите свои правки, переносите на Атмел (если, конечно, это уж столь актуально). Возможно, дополнительно понадобится управление пином EN (в модели Протеуса при установке IN1(3)=IN2(4)=0 двигатель не останавливается, хотя и должен, судя по даташиту), для этого есть свободные выходы порта А. Это уже все можно сделать самостоятельно. Удачи!

И как мне с ним разбираться, если исходник не *.с а *.hex B), на худой конец просто текст скрипт вариант,  скомпилировать не проблема.


Сообщение отредактировал AlexHW - Четверг, 23.05.2013, 11:39
 
AdminДата: Четверг, 23.05.2013, 11:55 | Сообщение # 16
Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
Цитата (AlexHW)
2. Как понимаю, предложенный исходник НЕ симулирует  декодированные команды  DTMF: Изначальная задача : Команда "Вперед" вращаются двигателя М1, М2  - на входе (U2) PIN10 если (0001) и т.п. то значение PIN17 =1 (5V), PIN18 = (сток), PIN1 = (сток) и т.д. по моим командам. В Вашем примере не совсем ясно назначение кнопки строб, которая никакой погоды в управлении не строит, больше похоже на имитацию.


Я же уже объяснял - при приеме тональной посылки на выходах Q1 - Q4 устанавливается 4-х разрядный код, соотвествующий принятой команде (0-9, A-D, *, #). Этот код и симулируют кнопки 1-4. Кнопка постоянно замкнута - 1, постоянно разомкнута - 0. Во время приема посылки на выходе STD появляется импульс, именно его мы и симулируем кратковременным нажатием кнопки 5. Без этого импульса выходы микроконтроллера, управляющие двигателями, не переключаться никогда. Потому что программа написана именно так, что изменение на выходах уровней происходит только после приема и завершения импульса STD.

Т.е. что бы переключить выходы микрконтроллера, управляющие драйвером двигателей, необходимо сначала кнопками 1-4 выставить нужные уровни. Допустим, нужно двигатель №1 включить для вращения по часовой стрелке. Это код DTMF 1 = 1000 (кнопка 1 замкнута постоянно, остальные постоянно разомкнуты). Затем "щелкнуть" по кнопке 5 (т.е замкнуть её и сразу разомкнуть). Только в этом случае на выводе В0 появиться высокий уровень и двигатель №1 начнет вращаться по часовой стрелке.

А вы мне тут толкуете про какую-то "иммитацию" кнопки 5 и что она никакой погоды не делает... Ещё как делает!

Цитата (AlexHW)
Хотелось бы видеть исходник  с  методом управления нагрузкой MT8870 поинты Q1 - Q4 на принципе распознавания ШИМ сигнала STD(PIN15)

А каким боком тут вообще ШИМ на выводе STD??? Какое отношение он имеет к этому пину?

Цитата (AlexHW)
И как мне с ним разбираться, если исходник не *.с а *.hex B), на худой конец просто текст скрипт вариант

Там же в архиве есть файл motor.asm, открываем его в блокноте (F4) и смотрим исходник. На Ассемблере программа (исходник) пишется в обычном блокноте (или другом текстовом редакторе) и сохраняется в файл с расширением *asm. Затем этот файл компилируется и получаем hex.
 
AlexHWДата: Четверг, 23.05.2013, 12:11 | Сообщение # 17
Группа: Пользователи
Сообщений: 12
Статус: Offline
Сильно помидорами не закидывайте, я больше аналоговый железячник и процесс представляется так:

Применяем DDRx регистры на ввод. PORTx позволяют задать состояние ног DDRx регистров на ввод - логическая единица или логический
ноль, по ходу в случае подключения нагрузки, включать подтягивающий резистор. Регистры PINx рассчитаны
только на чтение и позволяют определить уровень на ноге PORTx, когда она
работает на ввод. С момента возникновения сигнала одном из PINx, активизируется соответствующая стоковая нога (их по плану 8) PINy, котрые открывают нагрузку (Двигатель).

Что касается команд под ассемблером, я изначально к ним не приучил себя, больше как то Си.


Сообщение отредактировал AlexHW - Четверг, 23.05.2013, 12:36
 
AdminДата: Четверг, 23.05.2013, 12:24 | Сообщение # 18
Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
Цитата (AlexHW)
Регистры PINx рассчитаны только на чтение и позволяют определить уровень на ноге PORTx, когда она работает на ввод. С момента возникновения сигнала одном из PINx, активизируется соответствующая стоковая нога (их по плану 8) PINy, котрые открывают нагрузку (Двигатель).

Все правильно, но для реализации этой функции нужно в программе задействовать прерывания по изменению сигналов на входах. В нашем микроконтроллере (16F628A) такую функцию можно включить только для PORTB 4-7. Да, это можно сделать. Но зачем??? Хочется сэкономить 1 вывод? Ведь намного проще отслеживать процесс приема новой DTMF посылки по стробирующему выходу МТ8870 (15 пин). Этот вывод именно и предназначен для таких целей.

Кроме того, это дополнительная помехозащищенность - где вероятность больше, что проскочит помеха, которая будет воспринята микроконтроллером как изменение входного сигнала - на одном входе или на четырех? smile
 
AlexHWДата: Четверг, 23.05.2013, 13:38 | Сообщение # 19
Группа: Пользователи
Сообщений: 12
Статус: Offline
Цитата (Admin)
Т.е. что бы переключить выходы микрконтроллера, управляющие драйвером двигателей, необходимо сначала кнопками 1-4 выставить нужные уровни. Допустим, нужно двигатель №1 включить для вращения по часовой стрелке. Это код DTMF 1 = 1000 (кнопка 1 замкнута постоянно, остальные постоянно разомкнуты). Затем "щелкнуть" по кнопке 5 (т.е замкнуть её и сразу разомкнуть). Только в этом случае на выводе В0 появиться высокий уровень и двигатель №1 начнет вращаться по часовой стрелке.

Отлично!
1. Как оказалось маршрутизация команд на активизацию стоковых ног не упорядочена.

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

4. По ходу интересуюсь, какой  толеранс  частотного делителя на чипе ?

5. Каким образом происходит управление включением стробирующего сигнала со стороны STD MT8870?

6. Как понимаю, стробирующий сигнал заложен программно для симуляции, хотелось бы иметь версию исходника для сборки прототипа с подключением внешнего  сигнала от STD MT8870.

Выкладываю аппаратную часть, пред пусковое состояние:

Прикрепления: 3795400.jpg (568.2 Kb)


Сообщение отредактировал AlexHW - Четверг, 23.05.2013, 13:51
 
AdminДата: Четверг, 23.05.2013, 14:49 | Сообщение # 20
Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
Ну а кварц зачем в Протеусе рисовать? Там достаточно в свойствах микроконтроллера установить частоту 4 МГц.

Цитата (AlexHW)
2. M1 действительно после повторного нажатия строба продолжает вращение, не происходит возвращение состояния стоковых пинов в начальное состояние, мое предположение, возможно есть смысл сделать на стробе дополнительную задержку на размыкание?

А почему Вы уверены что Протеус стопроцентно моделирует ситуацию?

Цитата (AlexHW)
4. По ходу интересуюсь, какой  толеранс  частотного делителя на чипе ?

Я не понимаю, о чем идет речь.

Цитата (AlexHW)
5. Каким образом происходит управление включением стробирующего сигнала со стороны STD MT8870?

А даташит на МТ8870 почитать?

Цитата (AlexHW)
6. Как понимаю, стробирующий сигнал заложен программно для симуляции, хотелось бы иметь версию исходника для сборки прототипа с подключением внешнего  сигнала от STD MT8870

Исходник я прикладывал. Изучайте, там все предельно просто.
 
Форум » ФОРУМ » Общие вопросы » DTMF управление нагрузкой на Atmega
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:



T2M © 2024
Сайт управляется системой uCoz