Skocz do zawartości

FlyingDutch

Użytkownicy
  • Zawartość

    801
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    32

FlyingDutch wygrał w ostatnim dniu 7 stycznia

FlyingDutch ma najbardziej lubianą zawartość!

Reputacja

416 Mistrz

O FlyingDutch

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Bydgoszcz
  • Języki programowania
    C/C++
  • Zainteresowania
    informatyka
  • Zawód
    Programista

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Da się, ale i tak musisz napisać równania dla tego regulatora i je zrozumieć, w podanych linkach znajdziesz dane jak te równania wyglądają. pozdrawiam BTW: to są dość skomplikowane równania, zawierają całki i różniczki (o ile wiem takie równania można rozwiązywać w Excelu) - patrz artykuł: https://automatykaonline.pl/Aplikacje/Energetyka/metoda-symulacji-procesow-dynamicznych-finn-excel-2007 ale dużo łatwiej zrobić to w MATLAB/Simulink. Możesz też zrobić fizyczny regulator (sprzętowy) z użyciem Arduino i biblioteki PID i opisać wyniki korzystając np. z "Arduino processing".
  2. Cześć, Podstawowy algorytm i równania regulatora PID są ogólnodostępne - patrz link: https://pl.wikipedia.org/wiki/Regulator_PID A tu np. masz kod MATLAB regulatora PID do pobrania (musisz mieć założone konto w Mathworks): https://uk.mathworks.com/matlabcentral/fileexchange/22150-pid-controller-matlab-code https://uk.mathworks.com/matlabcentral/fileexchange/35163-matlab-based-pid-controller https://uk.mathworks.com/discovery/pid-control.html A tutaj trochę wi\ecej teorii: https://eia.pg.edu.pl/documents/184139/28374603/LAB_3_Material_pomocniczy_Czesc_1.pdf https://www.mathworks.com/videos/pid-control-in-matlab-simulink-117949.html https://uk.mathworks.com/videos/getting-started-with-simulink-part-4-tuning-a-pid-controller-1508444927396.html https://www.researchgate.net/post/How_could_I_make_a_MATLAB_code_to_design_a_PID_controller
  3. Cześć, mały update: oryginalnie ATMega103 nie miała interfejsu programowania JTAG, więc ten soft-procesor najprawdopodobniej trzeba programować jako ATMega128 (ATMega103 i ATMega128 są do siebie bardzo podobne i ATMege128 można za pomocą fuse-bits ustawić w trybie zgodności z ATMega103). Niestety obowiązki w pracy i brak czasu nie pozwoliły mi jeszcze tego sprawdzić. Pozdrawiam
  4. Cześć, najłatwiej jest to zasymulować korzystając z Arduino i biblioteki PID. Chba, że masz Matlab'a i Simulinka i chcesz w tych narzędziach zrobić symulację jako model matematyczny. Pozdrawiam
  5. Cześć @Treker, to dobry pomysł, aby wykorzystać te materiały, lecz niektóre z ćwiczeń dadzą się uruchomić tylko na płytce Mimas V.2 (ze Spartanem6), ale postaram się to jakoś podzielić miedzy dwie płytki ?Mimas/Elbert. Pozdrawiam
  6. Cześć, ja miałbym dwa pomysły na artykuły dotyczące tematów, które są dla mnie interesujące ze względu na technologie z którymi pracuję na co dzień: 1) Symulacje w LTSpice - chodzi mi o bardziej zaawansowane symulacje z użyciem wzmacniaczy operacyjnych. Interesowałyby mnie filtry wyższego rzędu oraz np. wzmacniacze izolacyjne (z izlolacją opto-galwaniczną). Ostatnio pracowałem nad wzmacniaczem izolacyjnym (unipolarne zasilanie napięcia dodatnie) o liniowej charakterystyce( Uin 0-10V, Uwy 0-3V) w oparciu o transoptror IL300 i wzmacniacze op. TLC272. Dosyć dużo czasu zajęło mi ustalenie odpowiedniego punktu pracy, gdybym to wcześniej przesymulował za pomocą LTSpice skończyłbym dużo szybciej to zadanie. 2) Programowanie procesorów STM32MP1 - chodzi mi głównie o komunikację miedzy rdzeniami Cortex-A7 i Cortex-M4. Oraz programowanie pod Linuxem w języku C\C++ (rdzenie Cortex-A7) dla tych CPU (np. framework GTK).. Sam mam kilka tematów opanowanych dla STM32MP1 np "CAN FD" i jego współpraca w jednej magistrali z CAN 2.0.(zarówno rdzenie A7 jak i M4), Dotychczas bazowałem na artykułach użytkownika @Elvis dotyczących tego tematu - niestety na innym forum Mam nadzieję, że @Elvis nie obrazi się na mnie za ujawnienie tego faktu? Sam mógłbym napisać artykuł na temat wstępu do języka HDL Verilog (ostatnio używam go coraz częściej), nie wiem tylko, czy miałby to być wstęp do omówienia składni, czy też bardziej bazować na serii prostych przykładów - eksperymentów? Pozdrawiam
  7. Cześć, pomyliłem się, powinno być: /*##-4- Put UART peripheral in reception process ###########################*/ if(HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK) { Error_Handler(); } gdzie RXBUFFERSIZE możesz podstawić dyrektywą preprocesora #define. Reszta uwag pozostaje w mocy Pozdrawiam
  8. Cześć, spróbuj wczytać do bufora więcej niż jeden bajt: /*##-3- Put UART peripheral in reception process ###########################*/ if(HAL_UART_Receive(&UartHandle, (uint8_t *)aRxBuffer, RXBUFFERSIZE, 5000) != HAL_OK) { Error_Handler(); } Dobrze jest też przerzutować bufer na (uint8_t *)aRxBuffer Przykład z CubeMX repository.. Pozdrawiam
  9. Cześć, rozwiązałem problem z pinem zegara dla programatora JTAG. Przeniosłem pin TCK z lokalizacji : set_property -dict { PACKAGE_PIN W2 IOSTANDARD LVCMOS33 } [get_ports { TCK }]; #IO_L5N_T0_34 Sch=pio[32] na pin W5 Artix'a (pin 36 GPIO) - jest to pin typu MRCC i ma odpowiedni routing pomiędzy zegarem a portem I/O: set_property -dict { PACKAGE_PIN W5 IOSTANDARD LVCMOS33 } [get_ports { TCK }]; #IO_L12P_T1_MRCC_34 Sch=pio[36] Teraz mogłem z pliku 'user constraints" xdc usunąć dyrektywę: #set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets TCK_IBUF] i nie ma żadnych ostrzeżeń związanych z pinem zegara dla programatora JTAG. Tak więc poprawny plik "user constraints" xdc dla mojej płytki FPGA jest następujący: ## Clock signal 12 MHz set_property -dict { PACKAGE_PIN L17 IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L12P_T1_MRCC_14 Sch=gclk create_clock -add -name sys_clk_pin -period 83.33 -waveform {0 41.66} [get_ports {clk}]; ## Buttons set_property -dict { PACKAGE_PIN A18 IOSTANDARD LVCMOS33 } [get_ports { nrst }]; #IO_L19N_T3_VREF_16 Sch=btn[0] ## GPIO Pins ## Pins 15 and 16 should remain commented if using them as analog inputs set_property -dict { PACKAGE_PIN M3 IOSTANDARD LVCMOS33 } [get_ports { rxd }]; #IO_L8N_T1_AD14N_35 Sch=pio[01] set_property -dict { PACKAGE_PIN L3 IOSTANDARD LVCMOS33 } [get_ports { txd }]; #IO_L8P_T1_AD14P_35 Sch=pio[02] set_property -dict { PACKAGE_PIN A16 IOSTANDARD LVCMOS33 } [get_ports { porta[7] }]; #IO_L12P_T1_MRCC_16 Sch=pio[03] set_property -dict { PACKAGE_PIN K3 IOSTANDARD LVCMOS33 } [get_ports { porta[6] }]; #IO_L7N_T1_AD6N_35 Sch=pio[04] set_property -dict { PACKAGE_PIN C15 IOSTANDARD LVCMOS33 } [get_ports { porta[5] }]; #IO_L11P_T1_SRCC_16 Sch=pio[05] set_property -dict { PACKAGE_PIN H1 IOSTANDARD LVCMOS33 } [get_ports { porta[4] }]; #IO_L3P_T0_DQS_AD5P_35 Sch=pio[06] set_property -dict { PACKAGE_PIN A15 IOSTANDARD LVCMOS33 } [get_ports { porta[3] }]; #IO_L6N_T0_VREF_16 Sch=pio[07] set_property -dict { PACKAGE_PIN B15 IOSTANDARD LVCMOS33 } [get_ports { porta[2] }]; #IO_L11N_T1_SRCC_16 Sch=pio[08] set_property -dict { PACKAGE_PIN A14 IOSTANDARD LVCMOS33 } [get_ports { porta[1] }]; #IO_L6P_T0_16 Sch=pio[09] set_property -dict { PACKAGE_PIN J3 IOSTANDARD LVCMOS33 } [get_ports { porta[0] }]; #IO_L7P_T1_AD6P_35 Sch=pio[10] set_property -dict { PACKAGE_PIN J1 IOSTANDARD LVCMOS33 } [get_ports { portb[7] }]; #IO_L3N_T0_DQS_AD5N_35 Sch=pio[11] set_property -dict { PACKAGE_PIN K2 IOSTANDARD LVCMOS33 } [get_ports { portb[6] }]; #IO_L5P_T0_AD13P_35 Sch=pio[12] set_property -dict { PACKAGE_PIN L1 IOSTANDARD LVCMOS33 } [get_ports { portb[5] }]; #IO_L6N_T0_VREF_35 Sch=pio[13] set_property -dict { PACKAGE_PIN L2 IOSTANDARD LVCMOS33 } [get_ports { portb[4] }]; #IO_L5N_T0_AD13N_35 Sch=pio[14] set_property -dict { PACKAGE_PIN M1 IOSTANDARD LVCMOS33 } [get_ports { portb[3] }]; #IO_L9N_T1_DQS_AD7N_35 Sch=pio[17] set_property -dict { PACKAGE_PIN N3 IOSTANDARD LVCMOS33 } [get_ports { portb[2] }]; #IO_L12P_T1_MRCC_35 Sch=pio[18] set_property -dict { PACKAGE_PIN P3 IOSTANDARD LVCMOS33 } [get_ports { portb[1] }]; #IO_L12N_T1_MRCC_35 Sch=pio[19] set_property -dict { PACKAGE_PIN M2 IOSTANDARD LVCMOS33 } [get_ports { portb[0] }]; #IO_L9P_T1_DQS_AD7P_35 Sch=pio[20] set_property -dict { PACKAGE_PIN N1 IOSTANDARD LVCMOS33 } [get_ports { INTx[7] }]; #IO_L10N_T1_AD15N_35 Sch=pio[21] set_property -dict { PACKAGE_PIN N2 IOSTANDARD LVCMOS33 } [get_ports { INTx[6] }]; #IO_L10P_T1_AD15P_35 Sch=pio[22] set_property -dict { PACKAGE_PIN P1 IOSTANDARD LVCMOS33 } [get_ports { INTx[5] }]; #IO_L19N_T3_VREF_35 Sch=pio[23] set_property -dict { PACKAGE_PIN R3 IOSTANDARD LVCMOS33 } [get_ports { INTx[4] }]; #IO_L2P_T0_34 Sch=pio[26] set_property -dict { PACKAGE_PIN T3 IOSTANDARD LVCMOS33 } [get_ports { INTx[3] }]; #IO_L2N_T0_34 Sch=pio[27] set_property -dict { PACKAGE_PIN R2 IOSTANDARD LVCMOS33 } [get_ports { INTx[2] }]; #IO_L1P_T0_34 Sch=pio[28] set_property -dict { PACKAGE_PIN T1 IOSTANDARD LVCMOS33 } [get_ports { INTx[1] }]; #IO_L3P_T0_DQS_34 Sch=pio[29] set_property -dict { PACKAGE_PIN T2 IOSTANDARD LVCMOS33 } [get_ports { INTx[0] }]; #IO_L1N_T0_34 Sch=pio[30] set_property -dict { PACKAGE_PIN U1 IOSTANDARD LVCMOS33 } [get_ports { TMS }]; #IO_L3N_T0_DQS_34 Sch=pio[31] set_property -dict { PACKAGE_PIN W5 IOSTANDARD LVCMOS33 } [get_ports { TCK }]; #IO_L12P_T1_MRCC_34 Sch=pio[36] set_property -dict { PACKAGE_PIN V2 IOSTANDARD LVCMOS33 } [get_ports { TDI }]; #IO_L5P_T0_34 Sch=pio[33] set_property -dict { PACKAGE_PIN W3 IOSTANDARD LVCMOS33 } [get_ports { TDO }]; #IO_L6N_T0_VREF_34 Sch=pio[34] set_property -dict { PACKAGE_PIN V3 IOSTANDARD LVCMOS33 } [get_ports { TRSTn }]; #IO_L6P_T0_34 Sch=pio[35] Pozdrawiam
  10. Tak, zgadzam się w pełni - zewnętrzny interfejs do debugowania CPU i bootloade r(działający np. na UART'cie) umożliwiający wczytanie programu dla procesora to bardzo pomocne i ważne części projektu CPU. TMS9900 niestety nie znam i nie miałem z nim do czynienia. Pozdrawiam
  11. Cześć, z tych wymienionych znam Z80 i PDP11 (dokładnie zwalona jednostka centralna z PDP [rosyjski układ scalony] była w sterownikach dysków twardych z krajów RWPG - chyba bułgarskich). PDP-11 miał bardzo ciekawą listę rozkazów, szczególnie rozkazy dwu-adresowe to było coś fajnego (gdzie rozkaz mógł działać nawet na dwóch lokalizacjach w pamięci). Co do reszty przemyśleń to się zgadzam, miło powspominać tamte czasy Kto wie może masz rację, że Rafał napisze kiedyś jakiś assembler lub kompilator dla swojego CPU. Pozdrawiam
  12. Hej, tutaj masz np. ten największy silnik: https://www.ebmia.pl/silniki-krokowe/214562-silnik-krokowy-86cm120-12nm.html a pod tym linkiem sterownik z dokładnym opisem działania sterownika ( w trybie "Pulse and direction"): https://www.ebmia.pl/sterowniki-silnikow-krokowych/626-sterownik-silnika-krokowego-ssk-b04-m880a-78a.html Przeczytaj sobie dokładnie działanie sterownika (odezwę się jutro - na dzisiaj muszę już kończyć). Pozdrawiam
  13. Cześć, łatwiej by było, gdybyś podał typy silników, wtedy mielibyśmy pod ręką wszystkie ich parametry i można by było dobrać jakieś sterowniki. Pozdrawiam
×
×
  • Utwórz nowe...