Стабилизация Активная - часть II

 
1 66 67 68 69 70 88
RU GOGI #13.02.2012 20:39  @Non-conformist#13.02.2012 20:35
+
-
edit
 

GOGI

координатор
★★★★
Non-conformist> Урезать-то можно, только как двадцатью точками описать период, содержащий ВЧ-гармоники - основной интерес виброметрического прогнозирования? Я не спорю и не утверждаю, ибо не знаю ровным счётом ничего. Именно что спрашиваю. Имхо форма сигнала получается довольно кучерявая - справятся ли двадцать точек?
Если тебе нужны ВЧ гармоники, то это не 50 Гц сигнал, и соответственно 30-40 точек на период нужно той частоты, которая тебе интересна, а все что выше - отфильтровывать.
А вообще задача тривиальна, разумеется не с I2C EEPROM :) но для ваших целей её хватит с запасом.
1  10.010.0
UA Non-conformist #13.02.2012 21:06  @GOGI#13.02.2012 20:39
+
-
edit
 

Non-conformist

аксакал

GOGI> Если тебе нужны ВЧ гармоники, то это не 50 Гц сигнал, и соответственно 30-40 точек на период нужно той частоты, которая тебе интересна, а все что выше - отфильтровывать.
Нет, именно основная частота вращения 3000 об/мин. А ВЧ-гармоники - от износа подшипников, дефектов, разбалансировки - там целая наука. Так что интересна именно 50 Гц синусоида, изрядно искажённая ВЧ-гармониками. Какая память (скорость, тип) нужна, чтобы с достаточной точностью описать полупериод сложной формы?

Текущие задачи топика я не имею в виду - просто к слову пришлось.
Skype: a_schabanow  
UA Non-conformist #13.02.2012 21:45  @Non-conformist#13.02.2012 21:06
+
-
edit
 

Non-conformist

аксакал

Хотя, наверное, действительно эту задачу решают несколько полосовых фильтров на входе.
Skype: a_schabanow  
UA Non-conformist #14.02.2012 16:31  @Non-conformist#13.02.2012 21:45
+
-
edit
 

Non-conformist

аксакал

Запаял оставшиеся компоненты: пищалку, один PBD-10, два PLD-10, две кнопки и два светодиода. Промыл от флюса спиртобензином, высушил на батарее. На предмет соплей-коротух проверил сначала визуально, потом прозвонил. Всё штатно.

Включил УСБ. Светятся два свежезапаянных светодиода - на D0 и D1. Нехорошо светятся. На D0 - в четверть накала, на D1 - чуть ярче и помаргивает (примерно как светодиоды на коробке сетевого хаба). Скетчи не грузятся. Скетч компилится, потом начинается заливка, и процесс заливки продолжается до тех пор, пока не нажмёшь RESET. Тогда появляется сообщение об успешном завершении загрузки и монитор начинает показывать данные с датчиков - как было до этого.

Отстыковал шилд от Ардуины, ещё раз внимательно всё осмотрел. Обратил внимание, что на Ардуине, напротив D0, есть надпись Rx, а напротив D1 - Tx. Т.е. это порты двойного назначения, по совместительству - UART (или как там его). Рассудил, что светодиоды вроде как могли помешать нормальному общению сабжа с ПК. Выпаял. Практически ничего не изменилось.

Пластмасски (разъёмы-гребёнки) в расчёт не берём - всё прозвонено и проверено многократно. Пищалка работает нормально (проверил скетчем "BLINK", изменив номер ноги). Кнопка RESET (на шилде) работает нормально. Вторую кнопку на шилде (MODE) не проверял - не знаю как. Ограничился прозвонкой. Силовые ключи были запаяны ранее, я к ним не касался и ничего там не паял - пока нет нужного разъёма. Запал не проверял, только впаял и прозвонил его PBD-10. Остаются светодиоды, которые уже выпаяны, а их площадки проверены на сопли-коротухи.

***
Текущая картина следующая.

Ардуина состыкована с шилдом; в МК предварительно загружен скетч акселерометра. Втыкаю УСБ. Включаются светодиоды питания и D13, оба светятся постоянно. Открываю ксанов монитор - к двум светящимся светодиодам добавляется моргающий Tx, а монитор кажет данные (время и три оси). Закрываю монитор.

Не вынимая УСБ открываю ардуинскую среду, открываю скетч ГИРОСА и нажимаю кнопку "Залить". Процесс доходит до заливки, и продолжается сколько угодно времени - до тех пор, пока не нажму RESET. Практически сразу появляется сообщение об успешном завершении процесса, а в строчке ксанова монитора начинают плясать числа с осей гироскопа. На Ардуине всё то же - два светодиода светятся постоянно, а Tx моргает. Закрываю ксанов монитор.

Открываю скетч "BLINK" - всё повторяется точно как описано в предыдущем абзаце, только вместо чисел в мониторе наблюдаю мигание светодиода на D13.

А теперь - фокус. В ардуинской среде ОПЯТЬ открываю скетч гироскопа (или акселерометра - без разницы), и нажимаю "Залить". Компилится, начинает заливаться, и через секунд пять-семь появляется следующее сообщение: avrdude: stk500_getsync(): not in sync: resp=0x00

И всё. Теперь что ни делай, что ни грузи (хоть BLINK, хоть аксель-гирос) - "нет синхронизации" и капец. В "Диспетчере устройств" всё нормально - Ардуина видна на своём виртуальном порте. Единственный выход - вынуть УСБ, РАССТЫКОВАТЬ шилд с Ардуиной, воткнуть УСБ и залить скетч гироса или акселя. Тогда, в расстыкованном состоянии, всё грузится прекрасно - миг-морг - и готово.

Всё, круг замкнулся, см. начало первого абзаца: вынимаем УСБ, стыкуем с шилдом, втыкаем УСБ - и по кругу.

В чём проблема - не могу понять... А есть ли она вообще?
Skype: a_schabanow  
RU GOGI #14.02.2012 17:43  @Non-conformist#14.02.2012 16:31
+
-
edit
 

GOGI

координатор
★★★★
Из того что я вижу - твой шилд занимает D11, это линия MOSI SPI интерфейса и он нужен для программирования, лучше его вообще не использовать или через большое сопротивление.
1  10.010.0
UA Ckona #14.02.2012 17:53  @Non-conformist#14.02.2012 16:31
+
-
edit
 

Ckona

опытный
★☆
Non-conformist> В чём проблема - не могу понять... А есть ли она вообще?

Проблема какая-то есть.
Все скетчи "по идее" должны заменять ранее загруженные без вской кнопки RESET.
Может ли так быть, что подключенный "шилд" влияет на заливку программы из компьютера в память Ардуина/Контроллера ?

А, вот пока думал, GOGI уже конкретнее сказал.
 
UA Non-conformist #14.02.2012 18:41  @Ckona#14.02.2012 17:53
+
-
edit
 

Non-conformist

аксакал

Да, но до сегодняшнего дня я подобных проблем не испытывал... Разве что-то такое проскакивало (вроде ошибки похожие выскакивали иногда), но я склонен списывать их появление на какие-то лёгкие глюки (незакрытый монитор, несколько открытых окон среды, етс.)

Единственное электрическое изменение, которое мне на данный момент удалось обнаружить - впаяв кнопку, я через одну из её ног (пропаяв её с обеих сторон платы) подключил к земле антидребезговую цепочку. В этой дырке я не поставил пистон, т.е. пока кнопки не было, антидребезг не был подключён к земле.

D11 сейчас подключен к земле через резистор 10К.
Skype: a_schabanow  
UA Non-conformist #14.02.2012 18:53  @Non-conformist#14.02.2012 18:41
+
-
edit
 

Non-conformist

аксакал

Non-conformist> Единственное электрическое изменение, которое мне на данный момент удалось обнаружить - впаяв кнопку, я через одну из её ног (пропаяв её с обеих сторон платы) подключил к земле антидребезговую цепочку.
Да, в этом и была проблема. Выпаял дублирующую кнопку RESET - всё стало грузиться как положено, без плясок с бубенчиком. Вопрос закрыт - день потерян. ))

***
Проверил ключи клапанов автомобильной лампочкой (ШИМ-мигалкой) - всё ОК. Тоже побегал по кругу, пока не вспомнил, что у меня отдельные земли, и чтобы всё замигало, неплохо бы их соединить вместе.

***
Остались непроверенными кнопка MODE и запальный предохранитель. И PBD-14 запаять.
Skype: a_schabanow  
UA Non-conformist #14.02.2012 23:20  @Non-conformist#14.02.2012 18:53
+
-
edit
 

Non-conformist

аксакал

Вопрос по светодиодам на D0 и D1: что с ними делать? Можно ли заставить их моргать так как надо и когда надо, а не так как хочется Rx и Tx? Другими словами - как сконфигурировать D0 и D1 под свои задачи? И возможно ли это вообще?
Skype: a_schabanow  
+
-
edit
 

shadowjack

втянувшийся
GOGI> Из того что я вижу - твой шилд занимает D11, это линия MOSI SPI интерфейса и он нужен для программирования, лучше его вообще не использовать или через большое сопротивление.
Ардуино программируется через UART с помощью загрузчика.
 5.0.15.0.1
RU shadowjack #15.02.2012 11:25  @Non-conformist#14.02.2012 23:20
+
-
edit
 

shadowjack

втянувшийся
Non-conformist> Вопрос по светодиодам на D0 и D1: что с ними делать? Можно ли заставить их моргать так как надо и когда надо, а не так как хочется Rx и Tx? Другими словами - как сконфигурировать D0 и D1 под свои задачи? И возможно ли это вообще?
Можно, но (естественно) не получится использовать одновременно UART и светодиоды.
С антидребезговой цепочкой (теперь) понятно - ардуино ресетится через USB. Т.е. при прошивке подается ресет, через бутлоадер заливается новая прошивка, снова ресет - новая прошивка работает. С антидребезговой цепочкой ресет не проходил.
 5.0.15.0.1
UA Non-conformist #15.02.2012 11:55  @shadowjack#15.02.2012 11:25
+
-
edit
 

Non-conformist

аксакал

shadowjack> Можно, но (естественно) не получится использовать одновременно UART и светодиоды.
Но когда шилд состыкован с Ардуиной, UART и так недоступен, чисто механически. Т.е. светодиоды можно запаять на свои места и своими Rx-Tx морганиями они не будут мешать общению сабжа с ПК по USB? Но как сделать так, чтобы сигналы, подаваемые ими, были бы полезны и информативны? Как проверить кнопку MODE?
Skype: a_schabanow  
UA Non-conformist #15.02.2012 16:11  @Non-conformist#15.02.2012 11:55
+
-
edit
 

Non-conformist

аксакал

Хan, помоги проверить твой запальный предохранитель!

Вот мигалка из ардуинских сэмплов:

void loop() {
digitalWrite(9, HIGH); // set the LED on
delay(1); // wait for a second
digitalWrite(9, LOW); // set the LED off
delay(1); // wait for a second
}

Это миллисекунды. При одной миллисекунде полупериода на затворе ключа всего +0,09 В постоянки. Осциллографом видно, что выпрямитель работает - на затворе ключа наблюдаю пилообразную пульсацию разрядки накопительной ёмкости на шунтирующий затвор резистор 51К, наложенную на постоянную составляющую. Проходной конденсатор предохранителя 1n, накопительный (параллельно затвору) 100n.

Вопрос: как увеличить частоту импульсов в этой программе? Одна миллисекунда полупериода - это очень много для 1n, как я понимаю.
Skype: a_schabanow  
RU GOGI #15.02.2012 16:19  @Non-conformist#15.02.2012 16:11
+
-
edit
 

GOGI

координатор
★★★★
Используй вместо Delay() delayMicroseconds()
1  10.010.0
UA Non-conformist #15.02.2012 16:21  @GOGI#15.02.2012 16:19
+
-
edit
 

Non-conformist

аксакал

Спасибо, пробую...
Skype: a_schabanow  
RU shadowjack #15.02.2012 16:23  @Non-conformist#15.02.2012 16:11
+
-
edit
 

shadowjack

втянувшийся
Non-conformist> Вопрос: как увеличить частоту импульсов в этой программе? Одна миллисекунда полупериода - это очень много для 1n, как я понимаю.
Попробуй delayMicroseconds(10);
 3.6.133.6.13
UA Non-conformist #15.02.2012 16:29  @Non-conformist#15.02.2012 16:21
+
-
edit
 

Non-conformist

аксакал

При одной микросекунде (период получается две микросекунды) постоянное напряжение на затворе +3,6 В. Маловато. Надо, наверное, проходной конденсатор увеличить до 10n...

зы: Напряжение на затворе повышается монотонно - пробовал 500, 100, 10, 5.
Skype: a_schabanow  
RU shadowjack #15.02.2012 16:33  @Non-conformist#15.02.2012 16:29
+
-
edit
 

shadowjack

втянувшийся
Non-conformist> При одной микросекунде (период получается две микросекунды) постоянное напряжение на затворе +3,6 В. Маловато. Надо, наверное, проходной конденсатор увеличить до 10n...
Не факт, что период именно такой - на задержках меньше 3мс возможно неточная отработка задержек, так что может реально больше.
Попробуй вообще убрать задержку.
 3.6.133.6.13
UA Non-conformist #15.02.2012 16:57  @shadowjack#15.02.2012 16:33
+
-
edit
 

Non-conformist

аксакал

А, так если такая неоднозначность, мне проще 10n поставить. Надёжнее будет.
Skype: a_schabanow  
RU shadowjack #15.02.2012 17:02  @shadowjack#15.02.2012 16:33
+
-
edit
 

shadowjack

втянувшийся
shadowjack> Не факт, что период именно такой - на задержках меньше 3мс возможно неточная отработка задержек, так что может реально больше.
Конечно, не 3мс, а 3мкс
 3.6.133.6.13
RU GOGI #15.02.2012 17:02  @Non-conformist#15.02.2012 16:57
+
-
edit
 

GOGI

координатор
★★★★
Non-conformist> А, так если такая неоднозначность, мне проще 10n поставить. Надёжнее будет.
Можешь еще использовать функцию GCC _delay_loop_1() задержка задается в тактах*3
1  10.010.0
UA Non-conformist #15.02.2012 17:29  @GOGI#15.02.2012 17:02
+
-
edit
 

Non-conformist

аксакал

Поставил 10n. При задержках 20 мкс постоянное напряжение на затворе силового ключа составило + 4,2 В, что вполне меня устраивает. С хорошим запасом. При 1 мкс постоянка на затворе + 4,5 В.

Напряжение пульсаций основной частоты не превышает 20 мВ. Картина, однако, изрядно портится хаотическими короткими всплесками амплитудой до 100 мВ в обеих полярностях, которые хорошо видны на частоте развёртки осциллографа 20 мс (миллисекунд).

Думаю, что в первом приближении запальный предохранитель можно считать испытанным и проверенным.
Skype: a_schabanow  
KZ Xan #15.02.2012 18:02  @Non-conformist#15.02.2012 16:11
+
-
edit
 

Xan

координатор

Non-conformist> на шунтирующий затвор резистор 51К,
Non-conformist> Проходной конденсатор предохранителя 1n,

R * C = 51k * 1n = 51 us

Очень маленькое время по сравнению с миллисекундой.

R можно поставить хоть 1 МОм. С кондюром 100 нФ будет выключаться менее чем за 0.1 секунды.
 9.09.0
RU GOGI #15.02.2012 19:56  @Non-conformist#14.02.2012 23:20
+
-
edit
 

GOGI

координатор
★★★★
Non-conformist>Другими словами - как сконфигурировать D0 и D1 под свои задачи? И возможно ли это вообще?
Я не знаю, есть ли специальные функции Ардуино для этого, но вообще если тебе в данный конкретный момент не нужен ком-порт, ты просто отключаешь его одной строчкой
UCSRB^=(1<<RXEN)|(1<<TXEN); //Отключает D0 и D1 от ком-порта, если был включен и наоборот.
и можешь использовать D0 и D1 для своих целей, после этого ты можешь этой же строчкой включить и снова работать с ком-портом.
P.S.- я с битовыми операциями постоянно путаюсь, так что строчку нужно проверить на работоспособность
1  10.010.0
UA Non-conformist #15.02.2012 22:32  @GOGI#15.02.2012 19:56
+
-
edit
 

Non-conformist

аксакал

У, завтра попробую.

***
Перед уходом с работы попытался проверить кнопку MODE. Для этого загрузил скетч DIGITAL/BUTTON, который включает светодиод на D13 нажатием кнопки (у меня D4), и гасит её отпусканием. Но поскольку моя кнопка снабжена антидребезговой цепочкой (схемку прилагаю), то этот скетч не работает:

const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin

// variables will change:
int buttonState = 0; // variable for reading the pushbutton status

void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}

Не мог бы кто-нибудь написать программку, которая первым кликом включала бы означенный светодиод, а повторным - выключала, и так далее?
Прикреплённые файлы:
 
Skype: a_schabanow  
1 66 67 68 69 70 88

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru