Полезная информация


Начинаем строить электро SUP Bord

Автор ТоргМаг, 08 Март 2021 в 18:24

« назад - далее »

РД00 и 4 гостей просматривают эту тему.

Paxxa

Ну да что ppm  что ppm и uart без разницы.

Видимл нужен сначала сервотестр им настроить через вход ppm, а потом уже скриптом на холлы вешать. Ну или хз.

С  adc канеш такого нет.

РД00

1000...2000 мкс, ошибся.

У тебя стоит Duty Cycle с реверсом, ноль посредине. Пока ppm туда не встанет, движок не запустится, это failsafe. Нужно No reverse.

Отладишь, поставь Current no reverse. На воздухе будет давать сразу полные обороты, в воде работает мягче Duty. Motor Current Max поставить в реальное значение макс тока полного газа.

UPD : Deadband лучше в 5%.

РД00

У меня сейчас на ADC и висит. Здесь в параллель крутилка, диммер и брелок. Код рекомендую просмотреть и понять логику.

код
(gpio-configure 'pin-hall1 'pin-mode-in)    ; Hall С зеленый   на D3 приемника
(gpio-configure 'pin-hall2 'pin-mode-in)    ; Hall B оранжевый на D2
(gpio-configure 'pin-hall3 'pin-mode-in)    ; Hall А синий     на D1
(gpio-configure 'pin-swdio 'pin-mode-in)    ; SWDIO  зеленый   на D0

(def a-state 0)  ; состояния кнопок
(def b-state 0)
(def c-state 0)
(def d-state 0)

(def target     0.0)  ; сколько ставим, 0...1
(def A-target   0.5)  ; средний ход по А
(def target-inc 0.1)  ; инкремент +- по B,C
(def D-target   0.0)  ; стоп по D

(def last-adc 0)
(def last-ppm 0)

(app-adc-detach 1 1)    ; отсоединили ADC  (стоит App Control Type: ADC)

(loopwhile t (trap {
        (var pin (gpio-read 'pin-hall1))  ; читаем кнопку А
        (if (!= a-state pin)              ; изменилась ?
            {
                (setq a-state pin)
                (if (= 1 pin)             ; нажата ?
                    {
                        (print "A pressed")
                        (setq target A-target)  ; средний ход
                })
        })
       
        (setq pin (gpio-read 'pin-hall2))  ; читаем кнопку B
        (if (!= b-state pin)
            {
                (setq b-state pin)
                (if (= 1 pin)              ; нажата ?
                    {
                        (print "B pressed")
                        (setq target (+ target target-inc)) ; target = target + increment
                        (if (> target 1.0) (setq target 1.0)) ; за 1 не вышли ?
                })
        })
       
        (setq pin (gpio-read 'pin-hall3))  ; читаем кнопку C
        (if (!= c-state pin)
            {
                (setq c-state pin)
                (if (= 1 pin)              ; нажата ?
                    {
                        (print "C pressed")
                        (setq target (- target target-inc)) ; target = target - increment
                        (if (< target 0.0) (setq target 0.0)) ; за 0 не вышли ?
                })
        })
       
        (setq pin (gpio-read 'pin-swdio))  ; читаем кнопку D
        (if (!= d-state pin)
            {
                (setq d-state pin)
                (if (= 1 pin)              ; нажата ?
                    {
                        (print "D pressed")
                        (setq target D-target)  ; стоп
                })
        })
 
        (var ppm (+ (/ (get-ppm) 2.0   ) 0.5)) ; PPM масштабируем с -1..1 на 0..1
        (var adc (/ (get-adc 0) 3.40))  ;        ADC с 0...3.40В на 0..1
        (if (< adc 0.12) (setq adc 0))  ; кнопку 10% делаем нулем
       
        (if (> (abs (- adc last-adc)) 0.05) {(setq target adc) (setq last-adc adc)})  ; если ADC изменился на 0.05, ставим его
        (if (> (abs (- ppm last-ppm)) 0.02) {(setq target ppm) (setq last-ppm ppm)})  ; если PPM изменился на 0.02, ставим его
       
        ;(print (list 'PPM ppm 'ADC adc 'target target))

        (app-adc-override 0 (* target 3.40))    ; ставим ADC 0..3.40 из target 0..1
        (sleep 0.1)
       
        (override-speed 1 (gnss-speed))    ; заменяем скорость в RT Data
}))


Paxxa

Цитата: РД00 от 06 Июнь 2026 в 12:271000...2000 мкс, ошибся.

У тебя стоит Duty Cycle с реверсом, ноль посредине. Пока ppm туда не встанет, движок не запустится, это failsafe. Нужно No reverse.

Отладишь, поставь Current no reverse. На воздухе будет давать сразу полные обороты, в воде работает мягче Duty. Motor Current Max поставить в реальное значение макс тока полного газа.

UPD : Deadband лучше в 5%.

Это значения поумолчанию 1.000 и 2.000 . С ними не работает.

Ноуреверс и реверс по разному пробовал не работает.

Кстати сегодня глюк случился с 7070 первый раз такое. Двиг стартовал в обратную сторону сап потянуло к берегу, далее все норм запустился правильно. Никогда такого не было с другими движками.

Paxxa

Код я немного допилил до 2х кнопок + и -. С адс кода не видел, позже посмотрю может че пропустил. Просто гдянул что полоса растет,.значит норм, а нетут то было.

Когдаьвключен adc вход и без двига видно как уровень растет duty при нажатии кнопок. А тут только полоса в mapping.

РД00

А. Без сервотестера ppm висит в 0.5, пока не встанет в 0, движок не стартует. Кнопку стоп надо сохранить, и вначале жать ее.

Paxxa

Цитата: РД00 от 06 Июнь 2026 в 13:23А. Без сервотестера ppm висит в 0.5, пока не встанет в 0, движок не стартует. Кнопку стоп надо сохранить, и вначале жать ее.

Кароч вернулся домой подключил опять. Перевел вместо режима ppm в adc. Ниче больше не подключал. Т.е. adc к земле не подтянут.

Залил скрипт 3мя сообщениями выше. Все работает.

Ну я поправил только для 2х кнопок. Вверх duty растет, но вниз уже не растет. Хотя в adc шкала и туда и сюда работает


РД00

В общем на этом коде без правок я езжу, чего и всем желаю.

Незаземленный ADC выдаст полный газ в любой момент. Убери хотя бы строку

   (if (> (abs (- adc last-adc)) 0.05) {(setq target adc) (setq last-adc adc)})  ; если ADC изменился на 0.05, ставим его

Paxxa

Далее подключил к входу adc, хорошо что разъем не снял. 10кОм резистор между gnd и adc1.

Нулевое значение упало в 0. Ну и в остальном стало нормально работать. Т.е. + нажимаешь растет, - убавляется. И шкала duty тоже. Поменя шаг на 0.15 чтобы стало 7 ступеней.

Вроде ага работает. Подключаю двиг. Работает и + и -, набираю максималку и тут на те, не убавляет скорость. И шкала в vesctool тоже не убавляется  :-D

Смешно когда это дома.




РД00

Раскомментарь строку

  ;(print (list 'PPM ppm 'ADC adc 'target target))

, будешь видеть значения.

Paxxa

Так я и вижу значения. Вольты туда сюда от 0 до 3.3 ходят

РД00

Target в консоли я имею в виду.

Paxxa

#14052
Цитата: РД00 от 06 Июнь 2026 в 14:08Target в консоли я имею в виду.

Короч пришел разобрался. Positive и negative ramping. По умолчанию в adc стоят 0.3 и 0.1с. Этого мало. Если хотябы 1сек поставить то все работает и в плюс нормально и в минус. Резистор в adc1 ненужен.

А первночально в ppm режиме я другой скрипт использовал мне его je вроде скинул, видимо из первых версий. Там про adc ничего не было. Будет время закину его посмотрю почему по ppm то не работал.

От консоли это не зависит, видимо в adc ему нехватает времени чтобы сигнал прошел.

А вот duty или current режимы я чет тестил тестил так и не пришел к знаменателю, под нагрузкой вроде вообще одинаково, но в воздухе current мне ненравится. Duty как то понятней. Да и руки себе не отхватишь случайно :)

Paxxa

#14053
Сразу внимание необратил. В + тоже duty не шла с первого нажатия, вольтаж 0.5В а duty 0, второй раз жму пошла вверх. А вот когда positive ramping поднял до 2с сразу пошло. По итогу поставил 3сек там и там

Это экспериментальным путем для 6374 в прошлом сезоне определил, чтобы стоя ездить и не падать.

Paxxa

#14054
Все же че я никак не пойму в 6.06 прошивке. Че надо сделать чтобы двиг не шипел на низких оборотах

На 5.02 вообще беззвучно стартует и останавливается.


https://youtube.com/shorts/VEhqW8K5pR4?si=FsY65iS7Nj1QH-82

РД00

#14055
Ramping да, увеличивать. По ppm понятно почему не стартует, пару строк добавить. Но раз используешь adc, то незачем.

5 строк с (var ppm ...) до (print ...) лучше убрать совсем, закомментарить. Это чтение внешних adc и ppm, которых у тебя нет.

На adc видны шумы, любая наводка крутанет движок.


Mike 372

Спаял разъемы в верхней коробке, подключил Блютус NRF51822, пульт. Все работает кроме датчика влажности. Он похоже сдох.  :~-(  Когда работал, выдавал 2,7 В на сухую, Если потрогать пальцами, напряжение уменьшалось. Начал выдавать 3,5 В и на палец не реагирует. В старом пульте стоит кулонометр и на пине разъема, куда я припаял выход датчика влажности, сидело питание выносного датчика тока на Холле. Кулонометр был отключен, напряжения там не было. Возможно  он просто перегрузил выход. От напряжения на выходе кулонометр завелся и на дисплее появились символы. Потом я этот провод отрезал от пина, но ничего не изменилось. Либо датчик сгорел от наводок с фазных проводов. Я сначала несколько раз покрутил мотор и только потом стал проверять датчик. У него сенсор имеет большую площадь, и очень близко проходят фазные провода. Мог сработать как антенна. Еще почему-то на реверсе при одном и том же уровне газа обороты сильно меньше, чем при вращении вперед. И только на максимальном газе вроде выравниваются.

РД00

Throttle Curve в App симметрична ? Какой App стоит и чем управляется ?