roboforum.ru

Технический форум по робототехнике.

Как правильно считывать PWM?

Как правильно считывать PWM?

bod » 12 сен 2011, 22:10

Добрый день!

Требуется помощь! Не считываются показания цифрового компаса.

Имеется:

Arduino Uno SMD
IO Expansion Shield For Arduino(V5)
Цифровой компас CMPS-03
Компас может отдавать значения по интерфейсам l2c и PWM.

Пытаюсь считать значения PWM.

Из документации:

The PWM signal is a pulse width modulated signal with the positive width of the pulse representing the angle.
The pulse width varies from 1mS (0° ) to 36.99mS (359.9° ) – in other words 100uS/° with a +1mS offset. The
signal goes low for 65mS between pulses, so the cycle time is 65mS + the pulse width - ie. 66ms-102ms. The
pulse is generated by a 16 bit timer in the processor giving a 1uS resolution, however I would not recommend
measuring this to anything better than 0.1° (10uS). Make sure you connect the I2C pins, SCL and SDA, to the
5v supply if you are using the PWM, as there are no pull-up resistors on these pins.



Компас подлключен на цифровой порт 3. Проблема в том , что на вход всегда идет "1".

Проверял следующим кодом:

const int pwm_pin = 3;
int pwm_val = 0;
int pwm_val_t = 0;

void setup()
{
Serial.begin(9600);
pinMode(pwm_pin, INPUT);

}

void loop() {

pwm_val=digitalRead(pwm_pin);

//if (pwm_val=0) pwm_val_t= pulseIn(pwm_pin, HIGH ) ;
if ( pwm_val=0) Serial.print(0); ;

//Serial.println();

//delay(200);

}



Что я не так делаю ?

Re: Как правильно считывать PWM?

=DeaD= » 12 сен 2011, 22:29

Через PulseIn вроде надо читать PWM...

Re: Как правильно считывать PWM?

bod » 12 сен 2011, 22:33

через PulseIn не получилось, см. закомментареный код.
Мне кажется все из-за того, что на вход постоянно идет "1"

Re: Как правильно считывать PWM?

=DeaD= » 12 сен 2011, 22:40

Кстати, а вы зачем вот тут:

if ( pwm_val=0) Serial.print(0); ;


Грохаете переменную pwm_val, устанавливая её в ноль?

Это же Си, тут надо писать:
if ( pwm_val==0) Serial.print(0); ;

Re: Как правильно считывать PWM?

bod » 12 сен 2011, 22:54

с "=" вместо "==" поправил, это конечно ошибна.
Но все равно не пашет.
Вот такой код:
Код: Выделить всёРазвернуть
const int pwm_pin    = 3;   
int pwm_val    = 0;
int pwm_val_t    = 0;

void setup() {
  Serial.begin(9600);
  pinMode(pwm_pin, INPUT);     
}

void loop() {
  pwm_val_t= pulseIn(pwm_pin, HIGH ) ;
  Serial.print(pwm_val_t);
  //pwm_val=digitalRead(pwm_pin); 
  //if (pwm_val==0)   pwm_val_t= pulseIn(pwm_pin, HIGH ) ; 
  // if ( pwm_val==0)   Serial.print(0); ;     
  //Serial.println();
  delay(200);                     
}


pwm_val_t всегда "0"

А вот такой код:
Код: Выделить всёРазвернуть
const int pwm_pin    = 3;   
int pwm_val    = 0;
int pwm_val_t    = 0;

void setup() {
  Serial.begin(9600);
  pinMode(pwm_pin, INPUT);     
}

void loop() {
  //pwm_val_t= pulseIn(pwm_pin, HIGH ) ;
  //Serial.print(pwm_val_t);
  pwm_val=digitalRead(pwm_pin); 
  //if (pwm_val==0)   pwm_val_t= pulseIn(pwm_pin, HIGH ) ; 
  if ( pwm_val==0)   Serial.print(0); ;     
  //Serial.println();
  //delay(200);                     
}

вообще ничего в serial не пишет

Re: Как правильно считывать PWM?

=DeaD= » 12 сен 2011, 22:57

Компас то правильно подключили? 4 пином к PWM-IN ? линии SCL,SDA и 5V зацепили на 5 вольт? Земля подцеплена?

По поводу SCL,SDA:
Make sure you connect the I2C pins, SCL and SDA, to the 5v supply if you are using the PWM, as there are no pull-up resistors on these pins.

Re: Как правильно считывать PWM?

bod » 12 сен 2011, 23:31

шилд распаяный уже
http://www.inexglobal.com/products.php?type=addon&cat=app_sensors&model=cmps03
трудно ошибиться, разъемы стандартные

Кроме варианта с кривыми руками , у меня еще есть следующие варианты:

Грешу все же на IO Expansion Shield For Arduino(V5), т.к. если подключаю кнопку http://www.megachip.ru/item.php?item_id=2466000 то в нажатом состоянии с нее приходит сигнал "0", а в состоянии покоя "1".

Добавлено спустя 9 минут 44 секунды:
SCL,SDA еще не подключал, т.к. в соответствии с докой сигнал можно снимать как с l2c, так и с pwm

Re: Как правильно считывать PWM?

Vooon » 13 сен 2011, 10:27

Хм, есть нормальный цифровой интерфейс, зачем с шимом мучаться то?

Re: Как правильно считывать PWM?

avr123.nm.ru » 13 сен 2011, 11:06

У вас ножка назначена входом?

Re: Как правильно считывать PWM?

=DeaD= » 13 сен 2011, 11:12

Вроде да: pinMode(pwm_pin, INPUT);

Я думаю у него просто SCL и SDA не подтянуты к 5В, как требуется по даташиту.

Re: Как правильно считывать PWM?

avr123.nm.ru » 13 сен 2011, 11:28

т.е. сам модуль не снижает ШИМ - тогда использовать ФНЧ - резистор 10 кОм и конденсатор подключить и померить мультиметром напряжение.

Re: Как правильно считывать PWM?

bod » 14 сен 2011, 00:15

Vooon писал(а):Хм, есть нормальный цифровой интерфейс, зачем с шимом мучаться то?

Сейчас под рукой нет соответствующих проводочков, да и хотел разобраться как считывать PWM

Добавлено спустя 1 минуту 13 секунд:
вот как все подключено, см. вложение

Добавлено спустя 1 минуту 59 секунд:
=DeaD= писал(а):Я думаю у него просто SCL и SDA не подтянуты к 5В, как требуется по даташиту.


А разве это обязательно, в документации написано, что SCL и SDA можно вообще не использовать при снятии сигнала.
Вложения
IMAG0164_1.jpg

Re: Как правильно считывать PWM?

=DeaD= » 14 сен 2011, 00:53

bod писал(а):А разве это обязательно, в документации написано, что SCL и SDA можно вообще не использовать при снятии сигнала.

В документации написано:
Make sure you connect the I2C pins, SCL and SDA, to the 5v supply if you are using the PWM, as there are no pull-up resistors on these pins.

Re: Как правильно считывать PWM?

bod » 14 сен 2011, 10:52

=DeaD= писал(а):
bod писал(а):А разве это обязательно, в документации написано, что SCL и SDA можно вообще не использовать при снятии сигнала.

В документации написано:
Make sure you connect the I2C pins, SCL and SDA, to the 5v supply if you are using the PWM, as there are no pull-up resistors on these pins.


На основании вот этой инфы из доки:
There are two ways of getting the bearing from the module. A PWM signal is available on pin 4, or an I2C interface is provided on pins 2,3.
я делаю вывод , что можно использовать только pwm

Re: Как правильно считывать PWM?

=DeaD= » 14 сен 2011, 11:10

Так и питание тогда не подавайте, в приведенном вами предложении про питание ведь тоже не слова! 8)


Rambler\'s Top100 Mail.ru counter