Вторник, 23.04.2024, 19:40
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | Пропорциональное управление на МК с нуля - Страница 24 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » Пропорциональное управление на МК с нуля (пошаговое строительство пропорционального управления с нуля)
Пропорциональное управление на МК с нуля
ВитГоДата: Четверг, 09.05.2013, 12:34 | Сообщение # 346
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
сначала наверное стоит сделать захват сигнала, а потом уже генерацию сигнала для сервы... и уже потом - думать что делать с двигателями :--)

Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 09.05.2013, 20:48 | Сообщение # 347
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
для того что бы измерить длительность канала нужно взять какой ни будь таймер и запустить его в режиме счетчика ( режим Normal )
для этой цели вполне подойдет Таймер_1 ( таймер_0 нам не подходит )
// кварц у меня стоит на 16 мгц, внутренний делитель на 8 отключен, тактовый сигнал = CK 1:8 (16МГц/8=2Мгц) 1 тик таймера = 0,5 мкс (все как в передатчике )

остается таймер_0 ( а он восьмибитный sad )
для сервопривода тангажа придется использовать таймер_0 - не знаю хватит ли его...... ?? wacko

а вот для моторов решили использовать BAM, но ему то-же нужен таймер, а у тини2313 таймеров больше нету ! wacko
И самое главное, для реализации BAM нужно использовать прерывания!
А если наступит такой случай, что должно произойти два прерывания в одно время ( прерывание по захвату входящего сигнала и прерывание BAM )
Как же быть тогда ? ( тут либо не правильно измерится длина входящего канала либо BAM выдаст не правильное значение ) wacko

Я совсем теперь запутался...


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Четверг, 09.05.2013, 22:53
 
ВитГоДата: Пятница, 10.05.2013, 08:58 | Сообщение # 348
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну для этого прерывания должны быть максимально короткими, тем более ты на асме пишешь :-)

в принципе по захвату ICP не сильно важно вовремя входить в прерывание (значение счетчика уже в ICP скопировано ведь аппаратно)..

ну и по BAM - плюс минус копейка - уверяю моторы разницы не заметят


Виталий (аka ВитГо)
 
uwrteyДата: Пятница, 10.05.2013, 23:16 | Сообщение # 349
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
А ни чего, что у нас всего один таймер ( таймер_1 ) на ICP и на BAM ???
если я правильно понял, то при входе в прерывание_BAM таймер обнуляется, а если таймер обнулится, то как я замерю длину входящего канала?


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Суббота, 11.05.2013, 13:35
 
ВитГоДата: Суббота, 11.05.2013, 10:00 | Сообщение # 350
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну ты можешь не обнулять таймер, а загонять в регистр сравнение значение на 32, 64, 128, 256 большее чем текущее значение TCNT

в принципе сбрасывать таймер только в ICP прерывании при обнаружении фронта импульса... с одновременным сбросом BAM модуляции в ноль

далее, прерывание по захвату (ICP) работает параллельно с прерываниями по совпадению OCR для генерации BAM
поскольку для BAM нам нужно отмерять периоды времени- просто читаем значение TCNT и прибавляем к нему значение периода (те самые 2 4 8 16 32 64 128 256 и так далее) - и записываем в OCR НЕ СБРАСЫВАЯ TCNT ! - в итоге получим прерывание в нужный момент не сбрасывая счетчик T1


Виталий (аka ВитГо)
 
uwrteyДата: Суббота, 11.05.2013, 19:55 | Сообщение # 351
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Цитата (ВитГо)
далее, прерывание по захвату (ICP) работает параллельно с прерываниями по совпадению OCR для генерации BAM

как это ? параллельно ? если честно, то ни чего не понял... sad


не успеваю за своими мыслями......
 
ВитГоДата: Суббота, 11.05.2013, 20:34 | Сообщение # 352
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
а ты настраивай прерывания и все !!

на одном таймере может генерироваться и ICP и OCR и OVF прерывания !!!


Виталий (аka ВитГо)
 
uwrteyДата: Суббота, 11.05.2013, 22:15 | Сообщение # 353
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Перед тем, как начать что-то делать мне хочется понять как это делать... wacko А я что-то совсем тут затупил.... surprised

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

сначала я настраиваю таймер_1
настраиваю вход в прерывание ICP - по спадающему фронту
настраиваю аппаратный ШИМ на таймере_0 для управления сервоприводом тангажа

Главный цикл:
выводим данные на моторы с помощью BAM ( чем тут отсчитывать временные интервалы ?) прерывание ICP скинуло таймер аппаратно !
выводим данные в аппаратный ШИМ - сервопривода тангажа
циклимся в главном цикле

Прерывание ICP:
аппаратно копируется значение счетчика, и счетчик сбрасывается в нуль.
если это канал_0 ( газ ), то сохраняем значение и выходим в главный цикл
если это канал_1 ( курс), то микшируем курс и газ и сохраняем значение
если это канал_2 (тангаж), то сохраняем данные
если это Синхроимпульс то синхронизирумся
выход из прерывания

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

короче, туплю.... wacko


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Суббота, 11.05.2013, 22:46
 
ВитГоДата: Воскресенье, 12.05.2013, 13:52 | Сообщение # 354
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Цитата (uwrtey)
выводим данные на моторы с помощью BAM ( чем тут отсчитывать временные интервалы ?) прерывание ICP скинуло таймер аппаратно !

ну смотри, в ICP сбросили таймер (TCNT=0) и Т1 будет считать до максимального интервала TCNT=20000 мкс (если у нас тактирование счетчика от 2 мгц (16\8) то TCNT=40000)

ряд значений для BAM: 91 181 362 625 1250 2500 5000 10000 мкс

теперь по BAM заряжаем первое значение для генерации PWM: OCR1A = 91 и где BIT0=1 выставляем единицу в пин управления двигателем
то есть когда TCNT будет равно 91 - мы получим первое прерывание по совпадению OCR - и это будет значить что длительность для BIT0 мы уже отмерили..

потом по BAM заряжаем второе значение для генерации PWM: OCR1A=181 и где BIT1=1 выставляем единицу в пин управления двигателем - в итоге по прерыванию OCR получим второе прерывание

и так далее пока не обработаем все 8 бит задающих модуляцию сигнала двигателя

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


Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 13.05.2013, 23:13 | Сообщение # 355
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
1)
Цитата
ряд значений для BAM: 91 181 362 625 1250 2500 5000 10000 мкс

может так ? 78 156 312 625 1250 2500 5000 10000

2) то есть прерывание по OCR делаем, но при этом счетчик не скидываем ???

3)
Цитата (ВитГо)
Параллельно работаем в прерывании ICP для захвата, сбрасывая счетчик TCNT только при захвате фронта импульса первого канала сигнала...

А как же я буду измерять остальные длительности ???


не успеваю за своими мыслями......
 
ВитГоДата: Вторник, 14.05.2013, 12:51 | Сообщение # 356
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Цитата (uwrtey)
может так ? 78 156 312 625 1250 2500 5000 10000

можно и так

Цитата (uwrtey)
2) то есть прерывание по OCR делаем, но при этом счетчик не скидываем ???

именно !
Цитата (uwrtey)
3)
Цитата (ВитГо)
Параллельно работаем в прерывании ICP для захвата, сбрасывая счетчик TCNT только при захвате фронта импульса первого канала сигнала...

А как же я буду измерять остальные длительности ???


сохраняй входное значение счетчика при регистрации фронта импульса ! на самом деле звучит страшнее чем на самом деле будет выглядеть :-)


Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 14.05.2013, 13:02 | Сообщение # 357
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
сейчас попробую что ни будь соорудить... dry

таймер_0 не подходит для сервопривода!!! Значит будет так:

таймер_0 для программного BAM

таймер_1 для сервопривода тангажа и для ICP


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Вторник, 14.05.2013, 23:56
 
uwrteyДата: Вторник, 14.05.2013, 21:39 | Сообщение # 358
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
начну со схемы
Прикрепления: 8616121.gif (21.2 Kb) · 0632384.dch (24.0 Kb)


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Вторник, 14.05.2013, 23:55
 
uwrteyДата: Вторник, 14.05.2013, 21:57 | Сообщение # 359
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Я задался вопросом: " в каком режиме запускать таймер_0 для управления двигателями ? "

и тут-же подумал : " а что мне мешает на таймере_0 сделать два аппаратных ШИМ для управления двигателями ???? "
Прикрепления: 7174481.asm (7.3 Kb)


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Вторник, 14.05.2013, 23:59
 
ВитГоДата: Среда, 15.05.2013, 05:25 | Сообщение # 360
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну кстати да !

Виталий (аka ВитГо)
 
Форум » Разработка электронных устройств » Разрабатываю ! » Пропорциональное управление на МК с нуля (пошаговое строительство пропорционального управления с нуля)
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz