Пропорциональное управление на МК с нуля
| |
ВитГо | Дата: Четверг, 09.05.2013, 12:34 | Сообщение # 346 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| сначала наверное стоит сделать захват сигнала, а потом уже генерацию сигнала для сервы... и уже потом - думать что делать с двигателями :--)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 09.05.2013, 20:48 | Сообщение # 347 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| для того что бы измерить длительность канала нужно взять какой ни будь таймер и запустить его в режиме счетчика ( режим Normal ) для этой цели вполне подойдет Таймер_1 ( таймер_0 нам не подходит ) // кварц у меня стоит на 16 мгц, внутренний делитель на 8 отключен, тактовый сигнал = CK 1:8 (16МГц/8=2Мгц) 1 тик таймера = 0,5 мкс (все как в передатчике )
остается таймер_0 ( а он восьмибитный ) для сервопривода тангажа придется использовать таймер_0 - не знаю хватит ли его...... ?? а вот для моторов решили использовать BAM, но ему то-же нужен таймер, а у тини2313 таймеров больше нету ! И самое главное, для реализации BAM нужно использовать прерывания! А если наступит такой случай, что должно произойти два прерывания в одно время ( прерывание по захвату входящего сигнала и прерывание BAM ) Как же быть тогда ? ( тут либо не правильно измерится длина входящего канала либо BAM выдаст не правильное значение )
Я совсем теперь запутался...
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Четверг, 09.05.2013, 22:53 |
|
| |
ВитГо | Дата: Пятница, 10.05.2013, 08:58 | Сообщение # 348 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну для этого прерывания должны быть максимально короткими, тем более ты на асме пишешь :-)
в принципе по захвату ICP не сильно важно вовремя входить в прерывание (значение счетчика уже в ICP скопировано ведь аппаратно)..
ну и по BAM - плюс минус копейка - уверяю моторы разницы не заметят
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Пятница, 10.05.2013, 23:16 | Сообщение # 349 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| А ни чего, что у нас всего один таймер ( таймер_1 ) на ICP и на BAM ??? если я правильно понял, то при входе в прерывание_BAM таймер обнуляется, а если таймер обнулится, то как я замерю длину входящего канала?
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Суббота, 11.05.2013, 13:35 |
|
| |
ВитГо | Дата: Суббота, 11.05.2013, 10:00 | Сообщение # 350 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: 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
Статус: Offline
| Цитата (ВитГо) далее, прерывание по захвату (ICP) работает параллельно с прерываниями по совпадению OCR для генерации BAM как это ? параллельно ? если честно, то ни чего не понял...
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Суббота, 11.05.2013, 20:34 | Сообщение # 352 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| а ты настраивай прерывания и все !!
на одном таймере может генерироваться и ICP и OCR и OVF прерывания !!!
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 11.05.2013, 22:15 | Сообщение # 353 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Перед тем, как начать что-то делать мне хочется понять как это делать... А я что-то совсем тут затупил....
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
сначала я настраиваю таймер_1 настраиваю вход в прерывание ICP - по спадающему фронту настраиваю аппаратный ШИМ на таймере_0 для управления сервоприводом тангажа
Главный цикл: выводим данные на моторы с помощью BAM ( чем тут отсчитывать временные интервалы ?) прерывание ICP скинуло таймер аппаратно ! выводим данные в аппаратный ШИМ - сервопривода тангажа циклимся в главном цикле
Прерывание ICP: аппаратно копируется значение счетчика, и счетчик сбрасывается в нуль. если это канал_0 ( газ ), то сохраняем значение и выходим в главный цикл если это канал_1 ( курс), то микшируем курс и газ и сохраняем значение если это канал_2 (тангаж), то сохраняем данные если это Синхроимпульс то синхронизирумся выход из прерывания
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
короче, туплю....
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Суббота, 11.05.2013, 22:46 |
|
| |
ВитГо | Дата: Воскресенье, 12.05.2013, 13:52 | Сообщение # 354 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: 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
Статус: 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
Статус: 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
Статус: Offline
| сейчас попробую что ни будь соорудить...
таймер_0 не подходит для сервопривода!!! Значит будет так:
таймер_0 для программного BAM
таймер_1 для сервопривода тангажа и для ICP
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Вторник, 14.05.2013, 23:56 |
|
| |
uwrtey | Дата: Вторник, 14.05.2013, 21:39 | Сообщение # 358 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| начну со схемы
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Вторник, 14.05.2013, 23:55 |
|
| |
uwrtey | Дата: Вторник, 14.05.2013, 21:57 | Сообщение # 359 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Я задался вопросом: " в каком режиме запускать таймер_0 для управления двигателями ? "
и тут-же подумал : " а что мне мешает на таймере_0 сделать два аппаратных ШИМ для управления двигателями ???? "
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Вторник, 14.05.2013, 23:59 |
|
| |
ВитГо | Дата: Среда, 15.05.2013, 05:25 | Сообщение # 360 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну кстати да !
Виталий (аka ВитГо)
|
|
| |
|