Ребят. Помогите. Готов оплатить
- Войдите на сайт для отправки комментариев
Втр, 01/04/2014 - 15:08
1)Включился, считал из EEPROM положения конденсаторов и частоту сигнала, номер антенны(1)
2)Получили сигнал "старт тюнер":
1.определяем частоту
2.номер антенны
3.ищем в памяти
4.ставим если нашли из памяти
4.1.проверяем, если плохо, то дальше.
5.Ищем минимум КСВ
6.Записываем в память частоту, положения, номер антенны
Не могу дописать
// Подключаем библиотеку дисплея: #include <LiquidCrystal.h> // Подключаем библиотеку шагового двигателя: #include <AccelStepper.h> // Создает класс шагового двигателя и объявляет какими ножками: AccelStepper stepper(AccelStepper::FULL4WIRE, 8, 9, 10, 11); AccelStepper stepper2(AccelStepper::FULL4WIRE, 2, 3, 4, 5); // Подключаем EEPROM - запоминать лучшее положение: #include <EEPROM.h> // Подключаем математические функции: #include "math.h" // Объявляем переменные и приводим их в порядок: float f = 0; float SWRpad = 0; float SWRotr = 0; float SWR = 0; // Прописываем пины индикатора: LiquidCrystal lcd(10, 11, 12, 13, 14, 15); void setup () { analogReference(DEFAULT); // Стандартное опорное напряжение 5 В. lcd.begin(16, 2); // Задаем размерность экрана, 2 строки по 16 символов. // Установление скорости оборотов двигателя в оборотах в минуту (RPM). stepper.setMaxSpeed(300.0); stepper.setAcceleration(100.0); stepper.moveTo(1000000); stepper2.setMaxSpeed(300.0); stepper2.setAcceleration(100.0); stepper2.moveTo(1000000); // Указываем скорость работы с портом: Serial.begin(9600); } void loop () { value = EEPROM.read(a); f = analogRead(A0); // Читаем частоту сигнала. SWRpad = analogRead(A2); // Читаем напряжение падающей волны. SWRotr = analogRead(A1); // Читаем напряжение отраженной волны. // Расчет и вывод КСВ: SWR = (SWRpad + SWRotr)/(SWRpad - SWRotr); // Определяем номер шага и значение SWR - сравниваем, что запомнили вначале, если новое значение лучше, то запоминаем новое и номер шага. // После полного оборота выбираем лучшее. lcd.setCursor(0, 0); lcd.print("SWR"); if (SWR < 1.3) { lcd.setCursor(4, 0); lcd.print("<1.3"); } else if (SWR > 3) { // Read new position int f = analogRead(A0); stepper.moveTo(f); stepper.setSpeed(100); stepper.runSpeedToPosition(); if (SWR < 1.3) { lcd.setCursor(4, 0); lcd.print(SWR) { delay(1000); // Задержка и очистка экрана: delay (100); lcd.clear(); }
2 мотора
вам не кажется странным что вы собираетесь измерять частоту выше тактовой ардуины?
ставьте делитель обязательно перед ардуиной
мотора вроде 2 объявлено, а нарисовано 3. если я конечно правильно понял что это моторы. если это антенны где моторы?
или моторы на антеннах (читайте последний пункт)
почему ардуина названа устрйоством согласования. странно звучит
тестируете подавая напряжения с потерциометров, а в реальных услових такие напряжения будут? просто если сигнал будет любой всегда слабый не есть гуд. ацп всего 10бит + шум
по аналоговым входам лучше бы фильтр поставить
и самое главное. если хотите чтобы вам помогли рисуйте хоть аккуратнее. хоть в пайнте. а то выглядит что вам еще больше пофигу чем всем остальным
Помогите разобратся с кодом, я могу заплатить
до этого хоть какая-то картинка была, теперь вообще нет
а вообще задание неполное
1. из какого принципа выбирается антенна?
2. двигатели управляют антеннами или чем то другим? может подстраивают фильтры или регулируют мощность
3. крутить нужно обе антенны одновременно или по другому принципу?
4. что ищем и что вставляем из памяти?
просто подойдите к заданию серьезнее и вам тогда смогут помочь. никто же не знает что у вас собрано и как именно должно работать
+ не понял, а как вы частоту через analogRead измеряете? у вас стоит преобразователь частота-напряжение или на варикапе измеряете?
1) Определяем частоту
2) Измеряем КСВ - если ксв > 1.3, то отображаем и записываем в память частоту, положения. Если ксв < 3, то крутим шаговые двигатели с конденсаторами до тех пор, пока не найдем минимум ксв. Нашли, отображаем, записываем в память(Определяем номер шага и значение SWR - сравниваем, что запомнили вначале, если новое значение лучше, то запоминаем новое и номер шага. После полного оборота выбираем лучшее.)
Давайте я вам объясню, у вас есть skype?
да напишите просто
опеределяем частоту что значит? измеряем или из памяти считываем? предполагаю что измеряем
я не говорил что буду это делать. да и задание неполное. зачем выбирать антенну? каким образом измеряется частота?
я задал несколько вопросов. вы не ответили на все
p.s. а картинку так и не переделали. что же вы так ленитесь
Подскажите, как после полного шага, и найденного минимума ксв, запомнить позицию двигателя
тут лучше мне кажется делать ручное управление двигателем, а не через библиотеку (хотя может библиотека считает сколько шагов сделала, нужно с мотреть в код, но врядли).
сделать переменную типа long (или меньше. смотря сколько шагов требуется для полного поворота конденсатора) и с каждым шагом управления шаговым двигателем прибавлять к переменной 1, если в обратную сторону отнимать 1. это и будет текущее положение шаговика. только каждый раз в начале нужно калибровать. выставлять в нулевое положение мотор с конденсатором (от которого начинается движение) и обнулить переменную
только если вы конденсаторами управляете частотой, не проще измерить частоту и ее записывать. это если нужна частота при минимуме ксв
с другой стороны если вам нужна емкость конденсатора определить при минимуме ксв, тут другое дело и нужно конечно знать положение двигателя
а если и частоту и емкость, то делать и то и другое
Да, библиотека должна считывать сколько шагов, да, конденсаторами управляю частотой, а как ее записать? Помогите с кодом
скажите вам нужна частота или емкость конденсаторов при минимуме ксв?
если частота ее надо либо измерить, либо расчитать из емкости зная характеристику генератора. первый путь точнее и проще.
как вы измеряете частоту? спрашиваю снова
прежде чем помочь с кодом опишите как должно работать, нужно получить и как вы предполагаете что должно происходить? только подробно
блин я не телепат
Будет подключен частотомер, SWR meter ( SWRrefl = analogRead(A2); SWRinc = analogRead(A1);)
1) Считываем из ЭПЗУ частоту, положения двигателей.
2) Опредеяем частоту. Ищем в памяти. Ставим, если нашли, если нет, то дальше.
3) Определяем номер шага и значение SWR - сравниваем, что запомнили вначале, если новое значение лучше, то запоминаем новое и номер шага. После полного оборота выбираем лучшее. Выводим на дисплей. Записываем в память.
StartTxCw; // вкл.передачу
f=get+frec;
SWRrefl = analogRead(A2);
SWRinc = analogRead(A1);)
SWR = // Формула.
if SWR<1.3 - STOP;
posxx=GetPos(f);
swrxx=GetSWR(f);
Getpos(int f) - по 6 значений на диапозоне
if ((f > 180) & ( f < 200))
f = 180;
case 160: pos = EEPROM:read()
break;
1. ардуина как из частотомера возьмет текущее значение частоты?
2. зачем считывать частоту и положение двигателей из памяти?
3. определили частоту. что ищем в памяти и зачем? что ставим если нашли? что значит ставим? записываем значение в память?
что вам нужно в итоге получить????
минимальное ксв и частоту при этом? для этого проверяете ксв во всем диапазоне и находите минимальное ксв и соответстующую частоту и записываете в память. так или не так?
вы как партизан который скрывает тайну. если хотите что то скрыть так так и напишите не могу сказать. а так как будто половину вопросов игнорируете, или сами целиком не представляете что и как делаете
нужно получить минимальный КСВ
а частота неважна? насколько помню ксв минимально только в каком то узком диапазоне частот. и нужно знать ксв и частоту. а точнее минимальное ксв, и начало и конец диапазона частот при уровне 0,7 ксв (по памяти пишу, не помню точно. давненько это было)
а на остальные вопросы кто отвечать будет? вы не отвечаете - я ничего не пишу
1) Текущее значение частоты - RF - сигнал.
2) Нет, считывать не надо.
3) Определили частоту, и находим ксв.
Помогите пожалуйста
ну уже ближе к реальности.
1. что сигнал это понятно. но вы же измеряете частотомером. ардуина с частотомером связь имеет? данные может считать?
или арудина только минимальное ксв находит, но не знает на какой частоте это было, поэтому вам нужно знать положение мотора чтобы перегнать мотор в эту точку, где было минимальное ксв, и по прибору вручную записать частоту. так или нет?
2. зачем выбирать антенну так и не ответили? у вас несколько измерительных установок, а плата ардуина одна на всех?
и что значит выбрать антенну? ардуина будет чем то управлять что будет переключать антенны?
Да, все правильно. Ардуино только минимально ксв находит.
Несколько, а плата ардуина одна. Переключать не будет.
а вот изначально вы это могли написать? прочтите первое сообщение. разве догадаешься?
итак. тут нужна информация по вашим двигателям и конденсаторам. сколько оборотов у конденсатора от начала и до конца. сколько шагов на оборот у шаговика
+ и тип двигателя униполярный или биполярный (биполярный 4 вывода, униполярный 5 и выше)
Извините:(
У конденсатора 180
Количество шагов на оборот шаговика 48.
биполярный
и того получается при 180градусах 24 шага полевика.
судя по картинке частота меняется от 1,8 до 30мгц
полоса 28,2мгц, шаг при этом шаговике 1,175мгц. вам не кажется что шаг крупный? или у вас еще редуктор стоит?
и еще непонятно зачем 2 шаговика? получается 2 конденсатора. зачем? тонкая и грубая настройка?
Будет подключено три мотора. Три конденсатора
Будет подключено три мотора. Три конденсатора. Даа:(
зачем три? прицип объясняйте
Извините, грубая настройка.
все грубая настройка? на один генератор 3 конденсатора? кто что регулирует? или они все просто в паралель?
Прошу прощения, да, все в параллель
отлично. значит можно тонко регулировать
получается 24*24*24=13824 шага
28,2мгц/3824 шага=20,4кгц перестройка. это уже приемлимая точноть
а у вас ног арудуины под все хватит? 12 ног под шаговик, 6 под дисплей, 2 под измерения
итого 20 ног. в уно например как раз 20. ничего не забыл? а то больше ног нет. придется расширитель прицеплять
Да, хватит. Все правильно.
а драйверы для шаговых двигателей купили?
установка с шаговыми двигателями собрана или еще нет? если да то к каким пинам подключено для всех 3 двигателей (в вашем коде только 2)
можно конечно управлять по 2 проводам на мотор. но я лично не проверял, поэтому по 4 чтобы наверняка. а там можно и по 2 попробовать
Да, драйверы есть. Еще не собрана. Давайте по 4 проводам, а там посмотрим.
дисплей и измерительные осталось написать куда и можно писать код
Дисплей и измерительные - напишите любые пины. Я там разберусь
хорошо. только наверно не сегодня. до завтра подождет?
Да, конечно. А во сколько примерно зайдете?
я тут с 9 часов по москве. иногда раньше
Хорошо, я тогда с 9 вас буду ждать
Здраствуйте, вы про меня не забыли?
попробуйте для начала запустить моторы
вот код
код фактически из примера. тут нужно просто проверить ваши подключения.
ваша задача в следующем: посмотреть на ваши конденсаторы. в какую сторону надо крутить для увеличения частоты.
например по часовой стрелке. теперь нужно чтобы моторы все крутились по часовой стрелке
если какой то мотор крутится не в ту сторону либо номера пинов для этого!!! мотора поменять в коде местами
например
или не менять код а поменять местами провода подключения. выберите сами что удобнее
но это при условии что вы подключаете таким образом
http://arduino.cc/en/Reference/StepperBipolarCircuit
последняя картика. выводы которые между собой звонятся свить первыми, вторые звонящиеся 3 и 4 соответственно
Извините, не могу проверить в данный момент. Конденсаторы крутить по часовой стрелке. Я выберу, что удобнее
Здравствуйте. хорошо пропустим этот момент, но это нужно обязательно сделать
следующий вопрос: вы не проверяли емкость конденсатора линейно увеличивается при повороте или нет? или вы не знаете?
проверить просто. разбить на несколько участков .например 5
и замерить в этих точках частоту генератора и дать мне эти данные. любой 1 конденсатор крутить, остальные не трогать
было бы проще если шаговики уже были подключены к конденсаторам
Прошу прощения, устройства нет рядом. Но емкость конденсатора увеличивается при повороте.
ну если будет возможность узнайте. можно будет добавить одну функцию
Да, хорошо
вот тестовый стетч. прогоняет весь диапазон. измеряет минимальный ксв и выводит его в uart. в терминале увидите
да и еще возвращает конденсаторы в положение с минимальным ксв
без железа мы тут глюки не отловим
да и еще. под дисплей осталось 4 пина всего. или использовать пины 0 и 1 (но могут возникнуть проблемы с программированием)
или дисплей подключать через i2c расширитель pcf8574 (что наиболее оптимально)
Большое спасибо вам. Вы молодец. Сколько я вам должен?
Извините, а можно все записать в EEPROM?
8 бит
10 бит
10 бит
4 бит
Частота
Положение C1
Положение C2
NANT
1 байт
2 байта
2 байта
это еще не все. нужно еще калибровку изначальную делать, точнее выставить в 0 конденсаторы
это делать или руками,
или программа сама переведет в ноль. но тут условие чтобы моторы не были сликом мощные и не свернули конденсатор (шагов на двигатель дадим немного больше чем нужно). или добавить концевые выключатели
и еще нужно определить практически сколько шагов нужно для полного поворота конденсатора (а то программа будет или меньше или больше чем нужно считать)
связаться со мной можете по почте jeka_tm@mail.ru
записать в еепром можно, но зачем?
и еще как ардуина узнает частоту? вводить как то хотите?
да и вашей картинке всего 2 конденсатора указано, а их 3 как вы говорили ранее
если дадите мне характеристику зависимости частоты от положения конденсатора можно сделать программный расчет примерной частоты, точную нужно смотреть по прибору
нашел в коде ошибку. сейчас исправлю
Извините, нужно идти. Я с вами свяжусь через 2-3 часа
Еще раз спасибо, но любой труд оплачивается