|
ARM. Энкодеры и акселерометры, Помогите решить задачу |
|
|
|
Jul 29 2009, 20:01
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Всем привет! Нужна помощь. Есть виброплощадка с двумя дебалансными валами, с одной стороны которой через эластические муфты приделаны двигатели, а с другой – инкрементные энкодеры. Площадка крепится через пружины к станине. Двигатели прикручены к станине жестко. Валы площадки не синхронизированы. К площадке крепится датчик ускорения ADXL210 с выходным сигналом ШИМ. Двигатель вращается с частотой 1500 об/мин, следовательно это равно 25об/сек. Энкодер имеет разрешение 1024им/об, это равно 1024*25=25600Гц. Начальное положение определяться перед пуском. Поскольку дебалансный вал имеет эксцентриситет, то соответственно он направлен в низ. Это и есть его начальное положение. Контролер и комп НЕ УПРАВЛЯЕТ ДВИГАТЕЛЯМИ, а они запускаются отдельно через рубильник. Точность измерения: - угловое положение +/-0,4градуса;
- угловую скорость(+/-1.0град/сек);
- угловое ускорение (после интерполяции графика скорости. Зависит от метода);
- линейное ускорение(+/-0,1g);
Нужно периодично опрашивать датчики, чтобы знать его положение, ускорение в каждый момент времени. Данные через USB от датчиков должны заливаться на комп. Нужно измерять положения дебалансных валов и их скорость, ускорение, а также ускорение, скорость, положение площадки. Ловить сдвиг фаз между положениями валов. Здесь нимного обсуждалось и здесьЧто уже есть: изготовлена площадка, на ней стоят энкодеры. Уже запускал, работает. Прикупил ARM отладочную плату AT91SAM7S64_DBoard для ARM микроконтроллеров фирмы ATMEL и программатор J-Link - USB JTAG adapter. Хочу на базе этого дивайса решить эту задачу. Опит программирования только AVR. Знаю немного Си и Delphi. Очень нужно. Помогите пожалуйста.
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
 |
Ответов
Guest_@Ark_*
|
Aug 26 2009, 15:42
|
Guests

|
Это Вам решать как делать. Советы Вы все равно не очень слушаете. Если задача не коммерческая, то можете реализовать оба варианта и сравнить. Думаю, будет полезно для понимания некоторых вещей. Вы сейчас, к сожалению, некоторые проблемы просто не воспринимаете, так как не сталкивались с ними на практике... Желаю удачи.
|
|
|
|
|
Aug 26 2009, 15:58
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
@Ark Спасибо за комментарии! Согласен. Опыта маловато. Для того это и делается, что бы его получить. Поскольку Вы первым написали и предложили свой вариант, ему и жизнь. Думаю делать так. Задействую RTT для генерации прерываний. Коэффициент деления поставлю RTPRES=32, то тогда время генерации прерываний будет составлять 32/32768=0,976563мс. Сейчас вбиваю код. Когда сделаю, отчитаюсь
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 26 2009, 20:03
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Цитата(aaarrr @ Aug 26 2009, 19:20)  Ох. Забудьте про RTT - это самый бесполезный таймер кристалла. Тактируется он от RC-генератора, поэтому 32768 там весьма условные. Кроме того, есть косяк с генерацией прерываний.
Для генерации равномерных временных меток следует использовать PIT. Понял. Тогда как посчитать PIV для частоты 1кГц, при МСК = 47.923200МГц? Что-то у меня не выходит. Верно ли я понял 47 923 200/1000=47923,2 Приблизительно 47923 Цитата(Zliva @ Aug 26 2009, 22:35)  Понял. Тогда как посчитать PIV для частоты 1кГц, при МСК = 47.923200МГц? Что-то у меня не выходит. Верно ли я понял 47 923 200/1000=47923,2 Приблизительно 47923 Сам себе отвечу. Нужно еще поделить на 16 значение 47923, так как PIT тактируется через делитель МСК/16
Сообщение отредактировал Zliva - Aug 26 2009, 19:38
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 30 2009, 14:55
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Цитата(Zliva @ Aug 26 2009, 23:36)  Возникла новая проблема. С PIT вроде разобрался. Теперь появилась новая проблема, связанная с расстановкой приоритетов и пропуском значений энкодера. Буду разбираться. Проблема еще актуальна. Наконец-то спаял датчик ускорения ADXL-210. Теперь в ступоре. Дело в том, что я планировал подключать его к ТС по захвату, но теперь сомневаюсь. Там на выход датчика ШИМ. Как его лучше привязать к прерываниям по PIOA или по таймеру?
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 30 2009, 21:19
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Скопировал пример с ИАР и компильнул его под свою задачу. Что-то он не идет. Прерывания не работают. Где может быть косяк?
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 31 2009, 18:21
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
С прерываниями разобрался. Записал инициализацию так: Код pAIC->AIC_SMR[AT91C_ID_TC0] = AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | TIMER0_INTERRUPT_LEVEL; pAIC->AIC_SVR[AT91C_ID_TC0] = (unsigned long) timer0_c_irq_handler; pAIC->AIC_IECR = (1UL << AT91C_ID_TC0); кажись работает. Помогите разобраться с ТС в режиме захвата. Вот что нашел в интернете (www.analog.com.ru/Public/AN604R.pdf), но как это все привязать для измерения ширины импульсов от датчика ускорения – не могу понять, то есть понимаю, но теоретически. Из документации следует, что с помощью захвата это легко делается, но у меня не получается. Помогите хотя бы получить интервалы Т1 и Т2 для X и Y.
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 31 2009, 20:33
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Zliva @ Aug 31 2009, 22:21)  С прерываниями разобрался. Записал инициализацию так: кажись работает. Кажись, или работает? Нужно было или добавить обертку, или дописать __irq к timer0_c_irq_handler. Цитата(Zliva @ Aug 31 2009, 22:21)  Помогите разобраться с ТС в режиме захвата. Вот что нашел в интернете (www.analog.com.ru/Public/AN604R.pdf), но как это все привязать для измерения ширины импульсов от датчика ускорения – не могу понять, то есть понимаю, но теоретически. Из документации следует, что с помощью захвата это легко делается, но у меня не получается. Помогите хотя бы получить интервалы Т1 и Т2 для X и Y. Ну а что мешает перейти к практике? - сконфигурируйте таймер в режиме capture с внутренним тактированием - подайте сигнал ШИМ на вход TIOA таймера - настройте LDRA на захват по переднему фронту TIOA - настройте LDRB на захват по заднему фронту TIOA В прерывании LDRA считаете период ШИМ, в LDRB - длительность импульса. Вот и все.
|
|
|
|
|
Aug 31 2009, 20:48
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Прерывания работают. Все заделал как Вы писали. Верно ли я понял, замыкаю два входа TIOA1 и TIOВ1. Конфигурирую так как описано выше и измеряю X, затем также и для TIOA0 и TIOВ0 и измеряю Y.
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Sep 1 2009, 10:29
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Цитата(aaarrr @ Sep 1 2009, 00:03)  Нет. И LDRA и LDRB срабатывают по TIOA, TIOB вообще не нужен в данном случае. Настроил захват для измерения ШИМ. Может будут какие-то комментарии. Сейчас на работе, реально залью прошивку дома. Код void AT91F_TC_Open ( AT91PS_TC TC_pt, unsigned int Mode, unsigned int TimerId) { unsigned int dummy; AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<< TimerId ); TC_pt->TC_CCR = AT91C_TC_CLKDIS; TC_pt->TC_IDR = 0xFFFFFFFF; dummy = TC_pt->TC_SR; dummy = dummy; TC_pt->TC_CMR = Mode; TC_pt->TC_CMR = ((unsigned int) 0x0 << 15) | AT91C_TC_CLKI | AT91C_TC_BURST_NONE | AT91C_TC_LDBSTOP | AT91C_TC_LDBDIS | AT91C_TC_ETRGEDG_NONE | AT91C_TC_LDRA_RISING | AT91C_TC_LDRB_FALLING; TC_pt->TC_CCR = AT91C_TC_CLKEN; } В режиме симулятора timer1 работает. Дергаю PIN15 в симуляторе работает. Но когда дергаю PIN0 (смотрите схему), появляется You have tried to modify a port pin which is configured as output! Что делать? И еще глупые вопросы. Как после прерывания сбросить после считывания в 0? Что означает эта запись «dummy = dummy»? p.s. aaarrr – Вам огромное человеческое СПАСИБО. Хоть кто-то поддерживает меня. Не люблю быть должным. Со временем буду это все оформлять в статью. Если Вы не против, могу Вас включить.
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Sep 2 2009, 12:30
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Zliva @ Sep 1 2009, 14:29)  В режиме симулятора timer1 работает. Дергаю PIN15 в симуляторе работает. Но когда дергаю PIN0 (смотрите схему), появляется You have tried to modify a port pin which is configured as output! Что делать? PIN0 - TIOA0, и относится к нулевому таймеру, его сконфигурировать не забыли? Цитата(Zliva @ Sep 1 2009, 14:29)  Как после прерывания сбросить после считывания в 0? Не понял вопрос. Цитата(Zliva @ Sep 1 2009, 14:29)  Что означает эта запись «dummy = dummy»? Это достаточно некрасивый трюк для подавления warning'а компилятора. Код dummy = TC_pt->TC_SR; dummy = dummy; можно заменить на Код TC_pt->TC_SR; Цитата(Zliva @ Sep 1 2009, 14:29)  Если Вы не против, могу Вас включить. Спасибо, конечно, но не стоит
|
|
|
|
Сообщений в этой теме
Zliva ARM. Энкодеры и акселерометры Jul 29 2009, 20:01 _Pasha Я бы все-таки энкодеры обрабатывал простеньким AVR... Jul 30 2009, 08:17 Zliva Цитата(_Pasha @ Jul 30 2009, 11:17) Я бы ... Jul 30 2009, 08:44  Zliva С программированием ARM разобрался. Программируетс... Aug 15 2009, 20:01 aaarrr 1. Первые три - классы устройств USB; usbser.sys -... Aug 15 2009, 20:36 Zliva Цитата(aaarrr @ Aug 15 2009, 23:36) 3. За... Aug 15 2009, 20:47 aaarrr Если гарантия доставки обязательна, то в качестве ... Aug 15 2009, 20:52 Zliva Цитата(aaarrr @ Aug 15 2009, 23:52) Если ... Aug 15 2009, 20:57  aaarrr Цитата(Zliva @ Aug 16 2009, 00:57) А скор... Aug 15 2009, 21:01   Zliva Цитата(aaarrr @ Aug 16 2009, 00:01) Нет, ... Aug 15 2009, 21:30    aaarrr Цитата(Zliva @ Aug 16 2009, 01:30) Так ка... Aug 15 2009, 21:39     Zliva Цитата(aaarrr @ Aug 16 2009, 00:39) Остав... Aug 15 2009, 22:02 aaarrr Возможно. Другое дело, что фрейм USB равен 1 мс, п... Aug 15 2009, 22:08 Zliva Вот код обработки по прерыванию положения первого ... Aug 23 2009, 15:35  aaarrr Цитата(Zliva @ Aug 23 2009, 19:35) Код ... Aug 23 2009, 16:11   Zliva Цитата(aaarrr @ Aug 23 2009, 19:11) Преры... Aug 23 2009, 18:23    aaarrr Цитата(Zliva @ Aug 23 2009, 22:23) Вижу в... Aug 23 2009, 18:46     Zliva Не могу понять, почему когда я удерживаю кнопку (к... Aug 23 2009, 19:41      aaarrr Цитата(Zliva @ Aug 23 2009, 23:41) Может ... Aug 24 2009, 06:17       Zliva Цитата(aaarrr @ Aug 24 2009, 09:17) Что т... Aug 24 2009, 08:15        aaarrr Цитата(Zliva @ Aug 24 2009, 12:15) Вы что... Aug 24 2009, 10:37         Zliva Цитата(aaarrr @ Aug 24 2009, 13:37) Для о... Aug 24 2009, 11:32          aaarrr Цитата(Zliva @ Aug 24 2009, 15:32) Если м... Aug 24 2009, 11:48           Zliva Цитата(aaarrr @ Aug 24 2009, 14:48) Что-т... Aug 24 2009, 12:09            Zliva Решил сделать просто:
Кодvoid irq0_nint (void... Aug 24 2009, 14:09             Zliva Проанализировав все выше упомянутое, склоняюсь к м... Aug 24 2009, 16:20              aaarrr Цитата(Zliva @ Aug 24 2009, 20:20) Проана... Aug 24 2009, 16:35               Zliva Цитата(aaarrr @ Aug 24 2009, 19:35) Так и... Aug 24 2009, 18:17                aaarrr Цитата(Zliva @ Aug 24 2009, 22:17) Это ме... Aug 24 2009, 19:23                 Zliva Цитата(aaarrr @ Aug 24 2009, 22:23) Это п... Aug 24 2009, 19:34                  aaarrr Цитата(Zliva @ Aug 24 2009, 23:34) Как сю... Aug 24 2009, 19:37                   Zliva Цитата(aaarrr @ Aug 24 2009, 22:37) Это ж... Aug 24 2009, 20:25 aaarrr Ну, если даже направление теряется, то это похоже ... Aug 24 2009, 12:15 Zliva Цитата(aaarrr @ Aug 24 2009, 15:15) Ну, е... Aug 24 2009, 12:30 aaarrr Получается, что Вы по заднему фронту сигнала B смо... Aug 24 2009, 12:49 Zliva Цитата(aaarrr @ Aug 24 2009, 15:49) Получ... Aug 24 2009, 12:56  aaarrr Цитата(Zliva @ Aug 24 2009, 16:56) Тыкнит... Aug 24 2009, 13:12   Zliva Цитата(aaarrr @ Aug 24 2009, 16:12) Пардо... Aug 24 2009, 13:27 aaarrr А pPIO правильно проинициализирован?
Пардон, вижу... Aug 24 2009, 13:51 aaarrr Дык __irq уберите. Aug 24 2009, 20:29 Zliva Цитата(aaarrr @ Aug 24 2009, 23:29) Дык _... Aug 24 2009, 20:35  aaarrr Цитата(Zliva @ Aug 25 2009, 00:35) Убрал.... Aug 24 2009, 20:53   Zliva Цитата(aaarrr @ Aug 24 2009, 23:53) AT91C... Aug 24 2009, 20:58    aaarrr Цитата(Zliva @ Aug 25 2009, 00:58) Все ра... Aug 24 2009, 21:13     Zliva Убрал строчку printf ("E1=%d\n",ENC... Aug 24 2009, 21:34 aaarrr Я грешным делом думал, что printf у Вас под прерыв... Aug 24 2009, 21:40 Zliva Попробовал несколько вариантов обработки сигналов ... Aug 25 2009, 19:07 aaarrr У Вас получается одинаковая обработка вне зависимо... Aug 25 2009, 19:45 Zliva Цитата(aaarrr @ Aug 25 2009, 22:45) У Вас... Aug 25 2009, 19:53  aaarrr Цитата(Zliva @ Aug 25 2009, 23:53) Тогда ... Aug 25 2009, 19:54   Zliva aaarrr СПАСИБО. ЗАРАБОТАЛО!!!
Цитата(... Aug 25 2009, 20:22    aaarrr Цитата(Zliva @ Aug 26 2009, 00:22) Не пой... Aug 25 2009, 20:32     Zliva aaarrr СПАСИБО.
Заменил volatile int ENCODER1_Pos... Aug 25 2009, 20:50      aaarrr Цитата(Zliva @ Aug 26 2009, 00:50) Давайт... Aug 25 2009, 21:07       Zliva Цитата(aaarrr @ Aug 26 2009, 00:07) Давай... Aug 26 2009, 05:52        aaarrr Цитата(Zliva @ Aug 26 2009, 09:52) Тут во... Aug 26 2009, 10:55         Zliva Цитата(aaarrr @ Aug 26 2009, 13:55) Ее да... Aug 26 2009, 12:08 @Ark ЦитатаЕе даже не обязательно вводить - можно прост... Aug 26 2009, 13:44 Zliva Спасибо за наставление. Но я как-то другого пути н... Aug 26 2009, 14:24 @Ark ЦитатаНо я как-то другого пути не вижу кроме намеч... Aug 26 2009, 15:18 Zliva Цитата(@Ark @ Aug 26 2009, 18:18) Собстве... Aug 26 2009, 15:30               Zliva Цитата(aaarrr @ Sep 2 2009, 15:30) PIN0 -... Sep 2 2009, 17:41                aaarrr Цитата(Zliva @ Sep 2 2009, 21:41) Как его... Sep 2 2009, 18:23                 Zliva Цитата(aaarrr @ Sep 2 2009, 21:23) Понятн... Sep 2 2009, 19:20                  Zliva Подскажите пожалуйста (код выше). Дело в том что е... Sep 3 2009, 08:37 aaarrr Цитата(Zliva @ Sep 2 2009, 23:20) Вот так... Sep 3 2009, 10:37 Zliva Цитата(aaarrr @ Sep 3 2009, 13:37) Тут то... Sep 3 2009, 15:02  aaarrr Цитата(Zliva @ Sep 3 2009, 19:02) Как это... Sep 3 2009, 15:12   Zliva Цитата(aaarrr @ Sep 3 2009, 18:12) Смотре... Sep 3 2009, 15:51    aaarrr Цитата(Zliva @ Sep 3 2009, 19:51) Посмотр... Sep 3 2009, 16:12 Zliva Вот так инициализирую
Код#define LED1 (1... Sep 3 2009, 19:18 aaarrr Цитата(Zliva @ Sep 3 2009, 23:18) Что дел... Sep 3 2009, 19:25  Zliva Цитата(aaarrr @ Sep 3 2009, 22:25) Плюнут... Sep 3 2009, 19:33   aaarrr Цитата(Zliva @ Sep 3 2009, 23:33) Спасибо... Sep 3 2009, 19:52    Zliva Цитата(aaarrr @ Sep 3 2009, 22:52) Правил... Sep 3 2009, 20:06     aaarrr Цитата(Zliva @ Sep 4 2009, 00:06) Что вы ... Sep 3 2009, 20:13 Zliva Есть проблемка с ADXL210AQC – он не работает. На У... Sep 4 2009, 19:45 Zliva Настало время USB. Пока доставят акселерометры, не... Sep 5 2009, 22:38 head_sk Цитата(Zliva @ Sep 6 2009, 01:38) Может у... Sep 6 2009, 06:47 aaarrr Цитата(Zliva @ Sep 6 2009, 02:38) Впринци... Sep 6 2009, 10:05 head_sk Советую использовать libusb Sep 6 2009, 11:04 Zliva Вот здесь скачал реализацию CDC, в IAR-е получил б... Sep 7 2009, 19:43 aaarrr Здесь можете скачать атмеловские примеры для IAR, ... Sep 8 2009, 08:24 Zliva Может кто-то имеет нормальную, работоспособную вер... Sep 8 2009, 12:17 aaarrr Боюсь, бесплатно будут только "кучерявые... Sep 8 2009, 12:20
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|