roboforum.ru

Технический форум по робототехнике.
Текущее время: 26 ноя 2024, 17:32

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 51 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 14 май 2013, 01:10 
Не в сети

Зарегистрирован: 02 ноя 2012, 23:46
Сообщения: 152
Откуда: SPB
да едут уже магниты.. когда только приедут с нашей почтой - хз.. микрухи заказывал в штаты - за три (3 !) дня приехали туда !
видать таки слабый магнит..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 15 май 2013, 16:15 
Не в сети

Зарегистрирован: 02 ноя 2012, 23:46
Сообщения: 152
Откуда: SPB
понял какая проблема с магнитом - нужен с диаметральным намагничиванием. я же купил видимо с аксиальным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 17 май 2013, 23:41 
Не в сети

Зарегистрирован: 02 ноя 2012, 23:46
Сообщения: 152
Откуда: SPB
за три для приехали халявные магниты и новые энкодеры AS5055
до этого успел найти в Питере диаметрально намагниченные магниты.
теперь у меня куча разного хлама..

итак, сегодня удалось все таки прикрепить магнит на задний конец вала.
и оно таки крутится и угол меняется ) наконецто !
но есть свои глюки..
когда вал стоит - угол все равно меняется +-2 градуса. какойто шум чтоли.. надо какото побороть.
и еще - нужно както оптимизировать алгоритм работы скетча.
прошу советов на этот счет.
по идее нужно делать проверку энкодера очень часто, чтобы при максимальной скорости прокрутки вала, код успевал отработать и выдавать результат о положении вала.
то есть наверное за каждый шаг вала (их всего 200 за полный оборот) нужно высчитывать данные датчика.. это нужно както синхронизировать, чтобы не было пропусков..
пока код выглядит так, намиксовал найденной в инете.
правда чето мотор сильно греется..

Цитата:
#define enablePin 3
#define MicroStep1Pin 4
#define MicroStep2Pin 5
#define MicroStep3Pin 6

#define setupTimeInMicroSec 1
int dirPin = 8;
int stepperPin = 7;

void setFullStep() {
digitalWrite(MicroStep1Pin, LOW);
digitalWrite(MicroStep2Pin, LOW);
digitalWrite(MicroStep3Pin, LOW);
delayMicroseconds(setupTimeInMicroSec);
}

void step(boolean dir,int steps) {
digitalWrite(dirPin,dir);
delay(500);
for(int i=0;i<steps;i++) {
digitalWrite(stepperPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepperPin, LOW);
delayMicroseconds(1000);
}
}

//###########################

const int ledPin = 13; // LED connected to digital pin 13, used as a heartbeat
const int clockPin = 9; // output to clock
const int CSnPin = 10; // output to chip select
const int inputPin = 11; // read AS5045

int inputstream = 0; // one bit read from pin
long packeddata = 0; // two bytes concatenated from inputstream
long angle = 0; // holds processed angle value
long anglemask = 262080; // 0x111111111111000000: mask to obtain first 12 digits with position info
long statusmask = 63; // 0x000000000000111111; mask to obtain last 6 digits containing status info
long statusbits; // holds status/error information
int DECn; // bit holding decreasing magnet field error data
int INCn; // bit holding increasing magnet field error data
int OCF; // bit holding startup-valid bit
int COF; // bit holding cordic DSP processing error data
int LIN; // bit holding magnet field displacement error data
int debug = 1; // SET THIS TO 0 TO DISABLE PRINTING OF ERROR CODES

void setup() {

pinMode(dirPin, OUTPUT);
pinMode(stepperPin, OUTPUT);
setFullStep();

//#########################

Serial.begin(9600);
pinMode(ledPin, OUTPUT); // visual signal of I/O to chip: heartbeat
pinMode(clockPin, OUTPUT); // SCK
pinMode(CSnPin, OUTPUT); // CSn -- has to toggle high and low to signal chip to start data transfer
pinMode(inputPin, INPUT); // SDA
}

void loop() {

step(true,1);
delay(1000);
//##########################

// CSn needs to cycle from high to low to initiate transfer. Then clock cycles. As it goes high
// again, data will appear on sda
digitalWrite(CSnPin, HIGH); // CSn high
digitalWrite(clockPin, HIGH); // CLK high
delay(1000); // wait for 1 second for no particular reason
digitalWrite(ledPin, HIGH); // signal start of transfer with LED
digitalWrite(CSnPin, LOW); // CSn low: start of transfer
delay(100); // delay for chip -- 1000x as long as it needs to be
digitalWrite(clockPin, LOW); // CLK goes low: start clocking
delay(10); // hold low for 10 ms
for (int x=0; x < 18; x++) // clock signal, 18 transitions, output to clock pin
{
digitalWrite(clockPin, HIGH); // clock goes high
delay(10); // wait 10ms
inputstream = digitalRead(inputPin); // read one bit of data from pin
//Serial.print(inputstream, DEC); // useful if you want to see the actual bits
packeddata = ((packeddata << 1) + inputstream); // left-shift summing variable, add pin value
digitalWrite(clockPin, LOW);
delay(10); // end of one clock cycle
} // end of entire clock cycle
//Serial.println(" ");
digitalWrite(ledPin, LOW); // signal end of transmission
// lots of diagnostics for verifying bitwise operations
//Serial.print("packed:");
//Serial.println(packeddata,DEC);
//Serial.print("pack bin: ");
// Serial.println(packeddata,BIN);
angle = packeddata & anglemask; // mask rightmost 6 digits of packeddata to zero, into angle.
//Serial.print("mask: ");
//Serial.println(anglemask, BIN);
//Serial.print("bin angle:");
//Serial.println(angle, BIN);
//Serial.print("angle: ");
//Serial.println(angle, DEC);
angle = (angle >> 6); // shift 18-digit angle right 6 digits to form 12-digit value
//Serial.print("angleshft:");
//Serial.println(angle, BIN);
//Serial.print("angledec: ");
//Serial.println(angle, DEC);
angle = angle * 0.08789; // angle * (360/4096) == actual degrees
Serial.print("angle: "); // and, finally, print it.
Serial.println(angle, DEC);
//Serial.println("--------------------");
//Serial.print("raw: "); // this was the prefix for the bit-by-bit diag output inside the loop.
if (debug)
{
statusbits = packeddata & statusmask;
DECn = statusbits & 2; // goes high if magnet moved away from IC
INCn = statusbits & 4; // goes high if magnet moved towards IC
LIN = statusbits & 8; // goes high for linearity alarm
COF = statusbits & 16; // goes high for cordic overflow: data invalid
OCF = statusbits & 32; // this is 1 when the chip startup is finished.
if (DECn && INCn) { Serial.println("magnet moved out of range"); }
else
{
if (DECn) { Serial.println("magnet moved away from chip"); }
if (INCn) { Serial.println("magnet moved towards chip"); }
}
if (LIN) { Serial.println("linearity alarm: magnet misaligned? Data questionable."); }
if (COF) { Serial.println("cordic overflow: magnet misaligned? Data invalid."); }
}

packeddata = 0; // reset both variables to zero so they don't just accumulate
angle = 0;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 18 май 2013, 00:01 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
+- 2 градуса??? или +-2 единицы в результате?
вообще-то этот датчик может фигачить данные с такой скоростью, что никаким шаговиком ты за ним не угонишься


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 18 май 2013, 00:04 
Не в сети

Зарегистрирован: 02 ноя 2012, 23:46
Сообщения: 152
Откуда: SPB
даже +-5 единиц в результате.
но я думаю это и есть градусы, так в коде написано ж..

еще обнаружил неприятность - при сбросе питания он обнуляет позицию.
например, выключаю питания когда вал на 50 градусов. то есть код выводит 50.
выключаю ардуину и мотор. включаю и на вывод отображается 360 (+-5, то есть то 0, то 358 и т.д.) - это фигня.. я думал там абсолютный отсчет..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 18 май 2013, 00:23 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
ищи косяки. Точность этой штуки 0.06 град, и это абсолютный энкодер

Добавлено спустя 4 минуты 16 секунд:
что там со светодиодами индикации поля?
что идет в служебных битах?
Осцил есть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 18 май 2013, 00:24 
Не в сети

Зарегистрирован: 02 ноя 2012, 23:46
Сообщения: 152
Откуда: SPB
то есть не должно быть таких "шумов" и если вал не крутится, то значение не должно меняться ?

а как быть насчет сброса значения ? я чтото читал об установке zero position.. может стоит туда копнуть ?

upd:
они не горят. я так пониммаю это значит, что магнит установлен правильно.

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

осцила нету. я и не умею им пользоваться..
Вложение:
IMG_20130518_003111.jpg
IMG_20130518_003111.jpg [ 1.95 МиБ | Просмотров: 3142 ]

Вложение:
IMG_20130518_003219.jpg
IMG_20130518_003219.jpg [ 2.41 МиБ | Просмотров: 3130 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 18 май 2013, 00:51 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
d00m писал(а):
то есть не должно быть таких "шумов" и если вал не крутится, то значение не должно меняться ?

а как быть насчет сброса значения ? я чтото читал об установке zero position.. может стоит туда копнуть ?

upd:
они не горят. я так пониммаю это значит, что магнит установлен правильно.

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

осцила нету. я и не умею им пользоваться..
Вложение:
IMG_20130518_003111.jpg

Вложение:
IMG_20130518_003219.jpg


Не должно быть. Не стоит туда копать. Установка Zero position - это и есть тот самый режим програмиирования PROG.

Если сместить плату, то загораются светодиоды?

Полную схему в студию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 18 май 2013, 00:55 
Не в сети

Зарегистрирован: 02 ноя 2012, 23:46
Сообщения: 152
Откуда: SPB
если сместить плату то оба загораются
magnet moved out of range
angle: 338
magnet moved out of range
angle: 225
magnet moved out of range
angle: 9
magnet moved out of range
angle: 117
magnet moved out of range
angle: 152
magnet moved out of range

схему счас сделаю..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 18 май 2013, 00:58 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
еще можно воспроизвести схему из раздела 10 и померять напряжение.

и да, не вижу на схеме конденсаторов.


ЗЫ учи англ, чтобы не спрашивать всякую фигню, которая написана в ДШ прямым текстом.

Добавлено спустя 2 минуты 58 секунд:
magnet moved out of range - это значит, что магнит вне диапазона, схема выдает фигню. почему не горят светики - не знаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 18 май 2013, 01:16 
Не в сети

Зарегистрирован: 02 ноя 2012, 23:46
Сообщения: 152
Откуда: SPB
я не понял коментария насчет инглиша.. канеш не особо знаю, но доку прочесть могу вроде.. на какой странице в ДШ написано чтото, на что я должен сейчас обратить внимание ?

как переводится "magnet moved out of range" я знаю. это вывод после того как я снял плату. оба диода зажглись. если плата установлена - они НЕ горят. я думаю так и надо.

кондер там в схеме подключен к выводу 3.3 вольта. я питаю от ардуины 5 вольтами.. думаю кондер не нужен..
Вложение:
IMG_20130518_005821.jpg
IMG_20130518_005821.jpg [ 2.22 МиБ | Просмотров: 3138 ]

Вложение:
IMG_20130518_005947.jpg
IMG_20130518_005947.jpg [ 2.42 МиБ | Просмотров: 3116 ]


схему готовлю..

Добавлено спустя 9 минут 34 секунды:
собрано по такой схеме:

Вложение:
as5045-2.JPG
as5045-2.JPG [ 64.65 КиБ | Просмотров: 3180 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 18 май 2013, 02:39 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
насчеткондеров -см даташит. по-моему они его предписывают.
судя повсему датчик работает, а с дуиной что-то криво. ищи косяк


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 18 май 2013, 12:32 
Не в сети

Зарегистрирован: 02 ноя 2012, 23:46
Сообщения: 152
Откуда: SPB
да есть такое в ДШ

For 5V operation, the 5V supply is connected to pin VDD5V, while VDD3V3 (LDO output) must be buffered by a
2.2...10µF capacitor, which is supposed to be placed close to the supply pin (see Figure 16).

Добавлено спустя 1 час 44 минуты 9 секунд:
а есть какито ограничения на конструтив кондеров ? или можно купить в чип (SMD) формате ?
прийдется ехать опять в микронику - нету дома кондеров нужных..
я вот хотел еще спросить
download/file.php?id=24010&mode=view
зачем там у вас еще пара микрух и такой большой желтый кондер или что это такое..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 18 май 2013, 19:38 
Не в сети

Зарегистрирован: 02 ноя 2012, 23:46
Сообщения: 152
Откуда: SPB
так.. чет опять не пойму..
припаял два кондера.
Вложение:
as5045-2.JPG
as5045-2.JPG [ 68.62 КиБ | Просмотров: 3157 ]

вроде стало без шума работать..

но при этом исчезла проблема, когда обнулялся счетчик энкодера ) теперь после сброса питания он показывает тот угол на котором остался до этого )
кажется у меня все начинает получаться )

Добавлено спустя 1 час 48 минут 44 секунды:
мда.. кажется я лоханулся с драйвером для шаговика - Stepper Motor: Bipolar, 200 Steps/Rev, 28×45mm, 4.5V, 0.67 A/Phase
http://www.pololu.com/catalog/product/1206

а драйвер купил такой

http://www.pololu.com/catalog/product/1182
и он рассчитан на напряжение от 8 волт.. и шаговик греется как утюг.
надо было такой брать
http://www.pololu.com/catalog/product/2134
или можно както помочь беде ?
счас подаю на драйвер 7.5V - бп с регулятором..
если выставлю <=5V - вобще не крутится..
а на при 6V мотор свистит - издает очень похожий звук. даже когда не крутится )) и этот свист прекратился при 7.5V.. но стало греться..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Плата для сенсора AS5045.
СообщениеДобавлено: 19 май 2013, 22:17 
Не в сети

Зарегистрирован: 02 ноя 2012, 23:46
Сообщения: 152
Откуда: SPB
как правильно калибровать энкодер ?
так как сейчас он не сбрасывает показания угла после выключения питания, то мне нужно сейчас выставить 0.. не магнитом же его выставлять ? это не очень просто..


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 51 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO