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


Контроллер VESC, FLIPSKY

Автор Said, 14 Дек. 2018 в 21:21

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

0 Пользователи и 4 гостей просматривают эту тему.

Blik86

Цитата: RommT от 23 Март 2026 в 21:36Заказал на той неделе, на днях должен приехать. Там тот же 75100, только на 130в транзисторах? Или есть ещё отличия?
Это и интересно.

edw123

Цитата: denon480 от 24 Март 2026 в 07:39О каких шумах речь?
Цифровые наводки на аналоговые блоки.

РД00

Управляем Vesc с 4х кнопочного брелка, приемник  на пинах Hall и SWD читается через LispBM Scripting. A - средний ход, В - больше, С - меньше, D - стоп.

https://youtu.be/wmhj9bgPjZQ?si=Z4SJ4Gh7yVo7fTxZ

Спойлер
(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-ppm  -1.0)  ; какой ставим ppm
(def A-button-ppm -0.5)  ; средний ход по А
(def ppm-increment 0.1)  ; ppm +- по B,C
(def D-button-ppm  -1.0)  ; стоп по D


(app-ppm-detach 1)    ; отсоединили PPM

(loopwhile t {
        (var pin (gpio-read 'pin-hall1))  ; читаем кнопку А
        (if (!= a-state pin)              ; изменилась ?
            {
                (setq a-state pin)
                (if (= 1 pin)            ; нажата ?
                {
                (print "A pressed")
                (setq target-ppm A-button-ppm)  ; средний ход
                })
        })

        (setq pin (gpio-read 'pin-hall2))  ; читаем кнопку B
        (if (!= b-state pin)
            {
                (setq b-state pin)
                (if (= 1 pin)              ; нажата ?
                {
                (print "B pressed")
                (setq target-ppm (+ target-ppm ppm-increment)) ; PPM + increment
                (if (> target-ppm 1.0) (setq target-ppm 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-ppm (- target-ppm ppm-increment))  ; PPM - increment
                (if (< target-ppm -1.0) (setq target-ppm -1.0))  ; за -1 не вышли ?
                })
        })

        (setq pin (gpio-read 'pin-swdio))  ; читаем кнопку D
        (if (!= d-state pin)
            {
                (setq d-state pin)
                (if (= 1 pin)              ; нажата ?
                {
                (print "D pressed")
                (setq target-ppm D-button-ppm)  ; стоп
                })
        })

        (app-ppm-override target-ppm)    ; ставим PPM
        (sleep 0.1)
    })


Максим581

Добрый всем ! а нет ли у кого прошивки микроконтроллера (STM32F405RGT6)я понимаю шансов мало но вдруг ! а то хозяин контроллера спалил его

flipsky 75100 pro v2.0 

РД00

Цитата: Максим581 от 08 Апр. 2026 в 09:21шансов мало но вдруг
https://github.com/vedderb/vesc_fw_archive

Полный архив всех прошивок всех контроллеров. Заливать st-link'ом.

Максим581

Цитата: РД00 от 08 Апр. 2026 в 09:34https://github.com/vedderb/vesc_fw_archive

Полный архив всех прошивок всех контроллеров. Заливать st-link'ом.

Спасибо большое st-link есть !

РД00

#3642
Кто хочет разобраться в скриптах на Vesc - толковый краткий референс.

https://www.mintlify.com/vedderb/bldc/lispbm/introduction

Полный VESC API здесь - https://github.com/vedderb/bldc/blob/master/lispBM/README.md

РД00

#3643
Цитата: РД00 от 05 Фев. 2026 в 13:04Народный 1602 I2C
Финальный код скрипта для дисплея 1602 I2C.
Код
(def i2c-addr 0x27)        ; адрес I2C
(def backlight 0x08)       ; подсветка, 0x08 вкл, 0x0 выкл

(defun expanderWrite(data){                                         
        (i2c-tx-rx i2c-addr (list (bitwise-or (to-byte data) backlight)))
})

(defun pulseEnable(data) {
(sleep 0.001)
(expanderWrite (bitwise-or data 0x04))  ; En high
(sleep 0.001)
(expanderWrite (bitwise-and data 0xfc)) ; En low
})

(defun write4bits(value) {
(expanderWrite value)
         (pulseEnable value)
})

(defun send-i2c(value mode) {
        (write4bits (bitwise-or (bitwise-and value 0xf0) mode))
(write4bits (bitwise-or (bitwise-and (shl value 4) 0xf0) mode))
})


(defun display-init() {
        (i2c-tx-rx i2c-addr (list 0))
       
        (sleep 0.01)
        (write4bits 0x30)
        (sleep 0.01)
        (write4bits 0x30)
        (sleep 0.01)
        (write4bits 0x30)
        (sleep 0.01)
        (write4bits 0x20)
       
        (send-i2c 0x2f 0)
        (send-i2c 0x0c 0)
        (send-i2c 0x1 0)   ; CLEARDISPLAY
        (send-i2c 0x06 0)  ; LCD_ENTRYMODESET | LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT);
        (send-i2c 0x02 0)  ; LCD_RETURNHOME
})

(defun set-cursor(x y)
        (send-i2c (bitwise-or 0x80 (+ x (* 0x40 y))) 0)
)

(defun put-str(str) {
        (looprange i 0 (str-len str)
            (send-i2c (bufget-u8 str i) 1))
})

(defun put-str-xy(x y str) {
        (set-cursor x y)
        (put-str str)
})

(def poles (/ (conf-get 'si-motor-poles) 2))  ; число пар магнитов

(def curr-filtered 0.0)            ; фильтрованные значения токов
(def curr-in-filtered 0.0)         
(def filter-coeff 0.4)            ; коэффициент фильтра, меньше - плавней

;---------------------------------------------------
;          Редактируемая часть кода
;          раскомментарить нужное

;(i2c-start 'rate-400k)        ; дисплей на UART1, GND 5V SCL SDA
(i2c-start 'rate-400k 'pin-swdio 'pin-swclk) ; на SWD, SCL=CLK, SDA=DIO

(display-init)        ; инициализация дисплея     

(loopwhile t {        ; цикл отображения

        (setq curr-filtered (+ (* curr-filtered (- 1 filter-coeff)) (* (get-current) filter-coeff)))
        (setq curr-in-filtered (+ (* curr-in-filtered (- 1 filter-coeff)) (* (get-current-in) filter-coeff)))

    ;    отображение данных, раскомментарить нужные 6 шт
    ;    (put-str-xy  X Y (str-from-n (что-выводим) "формат printf"))       
               
    ; левый столбец
        (put-str-xy  0 0 (str-from-n (/ (abs (get-rpm)) poles) "%4.0f"))      ; RPM
        (put-str-xy  0 1 (str-from-n (* (get-duty) 100)        "%3.0f%%"))    ; Duty

    ; средний столбец
        (put-str-xy  5 0 (str-from-n (abs (get-vin))          "%4.1fV"))       ; напряжение
;        (put-str-xy  5 0 (str-from-n (* (get-batt) 100)      "  %2.0f%%"))     ; процент батареи
        (put-str-xy  5 1 (str-from-n (abs (* (get-vin) curr-in-filtered)) "%4.0fW"))  ; мощность

    ; правый столбец
        (put-str-xy 11 0 (str-from-n (abs curr-in-filtered)   "%4.1fA"))       ; батарейный ток
;        (put-str-xy 11 0 (str-from-n (get-ah)                  "%3.1fAh"))     ; ампер-часы
;        (put-str-xy 11 0 (str-from-n (get-ah)                  "%3.0fAh"))     ; ампер-часы без десятых
        (put-str-xy 11 1 (str-from-n (abs curr-filtered)      "%4.1fA"))       ; фазный ток
;        (put-str-xy 11 1 (str-from-n (get-wh)                  "%3.0fWh"))     ; ватт-часы

        (sleep 0.25)        ; период отображения 0.25с 
})