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


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

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

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

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

РД00

#13680
Штатно по моему на ADC15 и висит, уточню по коду. Если нет, то можно скриптом, меряем любой adc и (override-temp-motor ).

По-моему это называется "не мала баба клопоту - купила порося", при живом 84100.

UPD: нет, в коде на ADC14. Вешаем на 15 по этой схеме.

Paxxa

Продолжаем разговор ;) опять печать на 5 часов B-)

РД00

Цитата: РД00 от Вчера в 12:07Вешаем на 15 по этой схеме.
Стало интересно. Отключил термодатчик, выдал override из консоли.

lilex

Столкнулся с такой проблемой с дисплеем 1602. При подключении без силовых проводов на мотор, работает  совершенно стабильно и выдаёт нормальный экран. После подключения силового разъёма, даже не запуская мотор, дисплей начинает вести непредсказуемо. Подключено по SWD. 5v взял от COMM разъёма.
  Что мог, вроде всё перепроверил.

РД00

Не понял, каких силовых, от батареи ? Как работало раньше и что изменилось в разводке ?

Mike 372

Подключил контроллер к мотору. Нормально крутит. Температуру мотора видит и показывает около 40 гр. При работе мотора показания уменьшаются и на максимальных оборотах показывает 7 гр. Значит вход активен. Надо его на плате найти и подпаяться.

lilex

Три фазных провода. Дисплей и регулировку оборотов вывел одним семижильным кабелем из контейнера. Около 0,7 метра. Может это сказалось?Дисплей в контейнер не получается пристроить.

РД00

Цитата: Mike 372 от Вчера в 16:41найти и подпаяться
Думаю, придется паяться к процессору, а это очень весело. На всех схемах он на 24.

РД00

#13688
Цитата: lilex от Вчера в 16:50Может это сказалось?
Это похоже на земляную петлю или наводки. Попробуйте временно пустить от swd на дисплей четыре провода, скрученных в жгут.

UPD : подтягивающие резисторы scl sda на дисплее нормальные, 4.7к.

UPD2 : можно попробовать снизить частоту i2c. Сейчас в i2c-start стоит 'rate-400k, поставить 200 или 100.

lilex

Отдельным жгутом всё ок. В кабеле 7х0,5 жил туго скрученные между собой. Есть экран, но его я не задействовал. Земля, +3v, +5v, ADC1, RX, DIO, CLK. Земля получлась общая на COMM и SWD. Частоту попробую менять.

РД00

#13690
Экран стоит попробовать на землю со стороны контроллера или дисплея.

Частота меняется прямо на контроллере, в LispBM нажать Read, поправить, Upload.

lilex

Изготовил такой выносной пульт на транец. Но не всё так просто, как хотелось. Дисплею, как оказалось, не очень понравилось работать по одному кабелю вместе с управлением. Вроде и работает, но очень не стабильно. Изменение частоты от 400к до 100к ничего не изменило. После заземления экрана, вроде как стало получше, но всё равно показания непредсказуемо по времени работы, либо сбиваются в кракозябры, либо вообще пропадают с экрана. Два отдельных кабеля тащить в такую коробочку ну как то совсем не кашерно. Управление считаю для себя при таком расположении и компоновке максимально удобным. Если только поискать кабель с отдельно экранированными жилами.

РД00

Можно задействовать Ethernet витую пару или соорудить свою. SCL и SDA должны быть свиты с проводами земли, каждая со своим. Остальные без разницы как.

UPD: хотя возможно свить оба с одной землей тоже хватит.

РД00

Добавил в скрипт инициализацию i2c в каждом цикле, может помочь.

код
(def i2c-addr 0x27)        ; адрес I2C
(def backlight 0x08)       ; подсветка, 0x08 вкл, 0x0 выкл

(def wh-sym [
    0x11; 10001
    0x15; 10101
    0x15; 10101
    0x0a; 01010
    0x00; 00000
;    0x05; 00101
;    0x07; 00111
;    0x05; 00101
    0x09; 00101
    0x0f; 00111
    0x09; 00101
    0x00; 00000
])

(def ah-sym [
    0x0c; 01100
    0x12; 10010
    0x1e; 11110
    0x12; 10010
;    0x00; 00000
;    0x05; 00101
;    0x07; 00111
;    0x05; 00101
    0x00; 00101
    0x09; 00101
    0x0f; 00111
    0x09; 00101
])


(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 create-char(location arr) {
        (send-i2c (bitwise-or 0x40 (shl location 3)) 0)
        (looprange i 0 8
            (send-i2c (bufget-u8 arr i) 1))
})
 
(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
       
        (create-char 0x01 wh-sym)
        (create-char 0x02 ah-sym)
})

(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 (to-byte (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))  ; число пар магнитов

(defun lpf (val sample amount)     ; ФНЧ 1-го порядка
    (- val (* amount (- val sample)))
)

(def curr-flt 0.0)
(def curr-in-flt 0.0)

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

;(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 true {        ; цикл отображения

        ;(i2c-start 'rate-400k)        ; дисплей на UART1, GND 5V SCL SDA
        (i2c-start 'rate-400k 'pin-swdio 'pin-swclk) ; на SWD, SCL=CLK, SDA=DIO
   
            ;    фильтрованные значения токов
        (setq curr-flt (lpf curr-flt (get-current) 0.5)) ; коэффициент фильтра, меньше - плавней   
        (setq curr-in-flt (lpf curr-in-flt (get-current-in) 0.5))

    ;    отображение данных, раскомментарить нужные 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-flt)) "%4.0fW"))  ; мощность

    ; правый столбец
        (put-str-xy 11 0 (str-from-n (abs curr-in-flt)   "%4.1fA"))       ; батарейный ток
;        (put-str-xy 11 0 (str-from-n (get-ah) "%4.1f")) (send-i2c 0x02 1)  ; ампер-часы

        (put-str-xy 11 1 (str-from-n (abs curr-flt)      "%4.1fA"))       ; фазный ток
;        (put-str-xy 11 1 (str-from-n (get-wh) "%4.0f")) (send-i2c 0x01 1)  ; ватт-часы

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