Ви не увійшли.
Сторінки 1
РЕШЕНО!!!! напротив пина 26 есть перемычка для опорного напряжения. Её просто надо было закоротить!!!!!!!!!!!!!!
Я уже смирился, что придётся навешивть внешний АЦП. Тоже думаю, проблема в платах. Спасибо за участие.
первоначально подавал с делителя напряжения приблизительно 1в.На пин 26. Это была плата с обвязкой. на ней же пробовал другие незадействованные пины АЦП. При этом пробовал и[ закорачивать на землю. Пробовал соединять землю АЦП с другими"землями" . Всё равно -1023. Потом взял другую голую плату. С ней прбовал просто закорачивать АЦП на землю. Результат Тот же. Прбовал SDK.параллельно с Ардуино командами. Пины подклюючённые по SDK выдают 4095. Естественно пробовал всё закорачивать на землю. Платы куплены в разное время и у разных продавцов. Платы чёрные с RGB светодиодом.
АЦП не работает. По всем трём каналам выдаёт максимальное значение 1023( или 4095). Пробовал использовать SDK - тот же результат.
После некоторой длительной и устойсчивой работы STM32F103 под Ардуино ИД начались глюки.
1 Перестал прошиваться скетч. Хотя комп плату видит. При этом плата стала появляться в разных портах при том, что включаю в тот же слот.Танцы с бубнами - заменял ядро, сносил файл настроек. Менял ИД с 1.6.9 на 1.8.12. Перепрошивал закрузчик.Всё пробовал на двух таблетках.Переодически работа возобновлялась , но старый скетч стал работать с глюками. В конце концов конкретизировал глюк. Прявление следующее.
На примере доработанного Блинка.
long Tloop;
void setup() {
pinMode(PB1, OUTPUT);
}
void loop() {
Tloop=millis();
digitalWrite(PB1, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(PB1, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
Serial.print("t1=");Serial.println(millis()-Tloop);
Serial.print("t2=");Serial.println(millis()-Tloop);
Serial.print("t3================================================================");Serial.println(millis()-Tloop);
}
Для контроля хода программы вставляю временные метки t1,t2. итд. Так вот стало так работать, что интервал между выводами t1,t2.t3 стал составлять 6 миллисекунд. Т.е. время включения оператора Serial.print 6 сек. В оператор t3 специально загнал множество "=", чтоб откинуть зависимость скорости от количества символов.
На мониторе выдаёт
t1=2000
t2=2005
t3==========..... ==2013
От чего такая задержка. И стало иногда выскакивать сообщение красное -ошибка открытия порта. Снимается закрытием-открытием монитора порта. Обычно во втором окне ИД работает параллельное сопряжённое устройство на Nano. Там всё нормально.
???
Ну вот ещё инфа. Хоть не пойму как связано или нет. Всё началось после того, как на Гугл-диске нашёл какие то файлы с расширениями .с, .h ну в общем ссвязанные с темой Ардуино. Откуда они взялись в папке "последние", не знаю. Там их как блох. Удалял, удалял, надоело. Конкретно мульён.Все так и не удалил.
ну как всегда ломаешь голову три дня, потом озвучишь вопрос и тут же в голове рождается ответ. Ну вот по поводу удалённых файлов -А возможно это от мульки Гугла -Кодебиндера? Я его когда то пробовал. Было такое приложение в меню Гугла.
следующий день -добавлю результат новых экспериментов. При попытке таких же испытаний порта Serial1 через TTL--USB на другой порт компа всё проходит адекватно. За 1-2 мсек параметр выводится 6 раз. При этом такое же задание на порт Mapl Mini требует 4-6 мс на строку.
Может это кому поможет разобраться
==========================================
Resetting to bootloader via DTR pulse
Searching for DFU device [1EAF:0003]...
Found it!
Opening USB Device 0x1eaf:0x0003...
Found Runtime: [0x1eaf:0x0003] devnum=1, cfg=0, intf=0, alt=2, name="STM32duino bootloader v1.0 Upload to Flash 0x8002000"
Setting Configuration 1...
Claiming USB DFU Interface...
Setting Alternate Setting ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
Transfer Size = 0x0400
bytes_per_hash=423
Starting download: [##################################################] finished!
state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present
Done!
Resetting USB to switch back to runtime mode
processing.app.SerialException: Ошибка открытия последовательного порта "COM9"
at processing.app.Serial.<init>(Serial.java:125)
at processing.app.Serial.<init>(Serial.java:66)
at processing.app.SerialMonitor$3.<init>(SerialMonitor.java:93)
at processing.app.SerialMonitor.open(SerialMonitor.java:93)
at processing.app.AbstractMonitor.resume(AbstractMonitor.java:110)
at processing.app.Editor.resumeOrCloseSerialMonitor(Editor.java:2459)
at processing.app.Editor.access$2900(Editor.java:90)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2437)
at java.lang.Thread.run(Thread.java:745)
Caused by: jssc.SerialPortException: Port name - COM9; Method name - openPort(); Exception type - Port not found.
at jssc.SerialPort.openPort(SerialPort.java:167)
at processing.app.Serial.<init>(Serial.java:114)
... 8 more
Ошибка открытия последовательного порта "COM9"
====================================================
а про дёргание от питпния вы правы. ибо запитка потенциометров на передатчике происходитот напряжения питания, так же как и запитка линейки R-2R в АЦП
Я не прав, и не будем вносить сумятицу в головы другим.
По этой причине дёрганья не будет
.
ВАлерий99 пише:Я вообще начинающий, делаю первый прект.
Для прикола создал свою программу управления сервами на беспилотник
Может кому интересно, а дрожания не было
Смысл в том, что все импульсы на сервы стартуют сразу, потом до 700мкс я вычисляю требуемые длительности импульсов с учётом перегрузок, угловых скоростей и тд, в цикле считываю время и сравниваю с требуемым для каждого импульса.После того как счётчик посчитал прекращение всех 4 импульсов программа идёт дальше.
Если я отключал коррекции по параметрам движения самолёта, то сервы практичеси не дёргались
А в стандартном варианте самолёт должен парировать резкие движения неопытного пилота, коим я и являюсь
Стабилизатор дифференциальный, ибо нет элеронов на крыльяхvoid servoAUT() {
volatile unsigned long TG, Tr;
// Serial.print("R=");Serial.println(srvR);///ЭТО ОТ ПРЕДИДУЩЕГО ЦИКЛА
// Serial.print("K=");Serial.println(srvK);
// Serial.print("L=");Serial.println(srvL);
TG=micros();
byte s1=1,s2=1,s3=1,s4=1;
digitalWrite(8, HIGH);// установили 1 -начало импульса
digitalWrite(7, HIGH);//
digitalWrite(6, HIGH);//
digitalWrite(5, HIGH);//srvR=3000-pals[2]-GY/9+GX/10-80*AY -100*AX;
srvR=constrain(srvR,830,2100);
srvK=pals[3]+GZ/20;
srvK=constrain(srvK,830,2100);
srvL=pals[2]+GY/9+GX/10-80*AY+100*AX;
srvL=constrain(srvL,830,2100);
unsigned long Tp1=TG+srvK;// руль !!! от крена!!!
unsigned long Tp2=TG+pals[1];// газ
unsigned long Tp3=TG+srvR; // тангаж прав
unsigned long Tp4=TG+srvL;// тангаж лев !!!
do{
Tr=micros();
if(Tr>Tp1 && s1==1) {digitalWrite(6, LOW);s1=0;} // руль, ножка 6
if(Tr>Tp2 && s2==1) {digitalWrite(8, LOW);s2=0;} // газ,
if(Tr>Tp3 && s3==1) {digitalWrite(5, LOW);s3=0;}//
if(Tr>Tp4 && s4==1) {digitalWrite(7, LOW);s4=0;}// левый, ножка 7
}
while((s1+s2+s3+s4)>0);
}А может сервы дёргаются из-за нестабильного питания на передатчике и соответственно опорного напряжения на потенциометрах джойстиков?
Осциллографом я наблюдал импульсные помехи в питании до 0,3 вольта.Наврядли из-за питания, скорее из-за неправильных вычислений и/или формирования управляющих сигналов. Почитайте ТАУ, может поможет.
читал, читал...
Мне кажется, Вы меня спутали с инициатором темы, но моя система работает нормально, если выключаю ОС,метания рулей нет нет.
Включаю-на земле стоящий самолёт начинает качать, как и положено, от дёрганья рулей, которое передаётся всему самолёту
Ибо ОС, собственная частота, моменты инерции продольный поперечный и тд и тп
Я вообще начинающий, делаю первый прект.
Для прикола создал свою программу управления сервами на беспилотник
Может кому интересно, а дрожания не было
Смысл в том, что все импульсы на сервы стартуют сразу, потом до 700мкс я вычисляю требуемые длительности импульсов с учётом перегрузок, угловых скоростей и тд, в цикле считываю время и сравниваю с требуемым для каждого импульса.После того как счётчик посчитал прекращение всех 4 импульсов программа идёт дальше.
Если я отключал коррекции по параметрам движения самолёта, то сервы практичеси не дёргались
А в стандартном варианте самолёт должен парировать резкие движения неопытного пилота, коим я и являюсь
Стабилизатор дифференциальный, ибо нет элеронов на крыльях
void servoAUT() {
volatile unsigned long TG, Tr;
// Serial.print("R=");Serial.println(srvR);///ЭТО ОТ ПРЕДИДУЩЕГО ЦИКЛА
// Serial.print("K=");Serial.println(srvK);
// Serial.print("L=");Serial.println(srvL);
TG=micros();
byte s1=1,s2=1,s3=1,s4=1;
digitalWrite(8, HIGH);// установили 1 -начало импульса
digitalWrite(7, HIGH);//
digitalWrite(6, HIGH);//
digitalWrite(5, HIGH);//
srvR=3000-pals[2]-GY/9+GX/10-80*AY -100*AX;
srvR=constrain(srvR,830,2100);
srvK=pals[3]+GZ/20;
srvK=constrain(srvK,830,2100);
srvL=pals[2]+GY/9+GX/10-80*AY+100*AX;
srvL=constrain(srvL,830,2100);
unsigned long Tp1=TG+srvK;// руль !!! от крена!!!
unsigned long Tp2=TG+pals[1];// газ
unsigned long Tp3=TG+srvR; // тангаж прав
unsigned long Tp4=TG+srvL;// тангаж лев !!!
do{
Tr=micros();
if(Tr>Tp1 && s1==1) {digitalWrite(6, LOW);s1=0;} // руль, ножка 6
if(Tr>Tp2 && s2==1) {digitalWrite(8, LOW);s2=0;} // газ,
if(Tr>Tp3 && s3==1) {digitalWrite(5, LOW);s3=0;}//
if(Tr>Tp4 && s4==1) {digitalWrite(7, LOW);s4=0;}// левый, ножка 7
}
while((s1+s2+s3+s4)>0);
}
А может сервы дёргаются из-за нестабильного питания на передатчике и соответственно опорного напряжения на потенциометрах джойстиков?
Осциллографом я наблюдал импульсные помехи в питании до 0,3 вольта.
Сторінки 1