- Hamarosan megkezdődik a nubia 2,8K-s táblagépének szállítása
- Barátokká váltak az eddig rivális AI-óriások
- ASUS blog: Ideális olcsó utazós gép lett az új Vivobook S14
- Az Aura Displays hordozható monitorhármasa jól felturbózhatja a produktivitást
- Dual Mode-os IPS monitorral adott magáról életjelet a Gigabyte
- Nem indul és mi a baja a gépemnek topik
- Melyik tápegységet vegyem?
- Milyen széket vegyek?
- Szünetmentes tápegységek (UPS)
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Vezetékes FEJhallgatók
- Milyen billentyűzetet vegyek?
- Azonnali alaplapos kérdések órája
- Teljesen az AI-ra fókuszál az új AMD Instinct sorozat
- NVIDIA GeForce RTX 3080 / 3090 / Ti (GA102)
-
PROHARDVER!
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
bagarol
tag
válasz
norbert1998 #23334 üzenetére
Mondom, hardveres pwm kell.
Összedobtam egyet, van I2C,delay, ki kell próbálni.
Késik 8 usecet, valszeg a kiíratás miatt. Serial.print(usec())
Később törölni kell.
/****************************************************************************************************************************
ISR_16_PWMs_Array.ino
For ESP8266 boards
Written by Khoi Hoang
Built by Khoi Hoang https://github.com/khoih-prog/ESP8266_PWM
Licensed under MIT license
The ESP8266 timers are badly designed, using only 23-bit counter along with maximum 256 prescaler. They're only better than UNO / Mega.
The ESP8266 has two hardware timers, but timer0 has been used for WiFi and it's not advisable to use. Only timer1 is available.
The timer1's 23-bit counter terribly can count only up to 8,388,607. So the timer1 maximum interval is very short.
Using 256 prescaler, maximum timer1 interval is only 26.843542 seconds !!!
Now with these new 16 ISR-based timers, the maximum interval is practically unlimited (limited only by unsigned long miliseconds)
The accuracy is nearly perfect compared to software timers. The most important feature is they're ISR-based timers
Therefore, their executions are not blocked by bad-behaving functions / tasks.
This important feature is absolutely necessary for mission-critical tasks.
*****************************************************************************************************************************/
#if !defined(ESP8266)
#error This code is designed to run on ESP8266 and ESP8266-based boards! Please check your Tools->Board setting.
#endif
// These define's must be placed at the beginning before #include "ESP8266_PWM.h"
// _PWM_LOGLEVEL_ from 0 to 4
// Don't define _PWM_LOGLEVEL_ > 0. Only for special ISR debugging only. Can hang the system.
#define _PWM_LOGLEVEL_ 3
#define USING_MICROS_RESOLUTION true //false
// Default is true, uncomment to false
//#define CHANGING_PWM_END_OF_CYCLE false
// Select a Timer Clock
#define USING_TIM_DIV1 true // for shortest and most accurate timer
#define USING_TIM_DIV16 false // for medium time and medium accurate timer
#define USING_TIM_DIV256 false // for longest timer but least accurate. Default
// To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error
#include "ESP8266_PWM.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#ifndef LED_BUILTIN
#define LED_BUILTIN 2
#endif
#define HW_TIMER_INTERVAL_US 20L
uint32_t startMicros = 0;
// Init ESP8266Timer
ESP8266Timer ITimer;
// Init ESP8266_ISR_PWM
ESP8266_PWM ISR_PWM;
void IRAM_ATTR TimerHandler()
{
ISR_PWM.run();
}
/////////////////////////////////////////////////
#define NUMBER_ISR_PWMS 1
//PIN_D0 can't be used for PWM/I2C
#define PIN_D0 16 // Pin D0 mapped to pin GPIO16/USER/WAKE of ESP8266. This pin is also used for Onboard-Blue LED. PIN_D0 = 0 => LED ON
#define PIN_D1 5 // Pin D1 mapped to pin GPIO5 of ESP8266
#define PIN_D2 4 // Pin D2 mapped to pin GPIO4 of ESP8266
#define PIN_D3 0 // Pin D3 mapped to pin GPIO0/FLASH of ESP8266
#define PIN_D4 2 // Pin D4 mapped to pin GPIO2/TXD1 of ESP8266
//#define PIN_LED 2 // Pin D4 mapped to pin GPIO2/TXD1 of ESP8266, NodeMCU and WeMoS, control on-board LED
#define PIN_D5 14 // Pin D5 mapped to pin GPIO14/HSCLK of ESP8266
#define PIN_D6 12 // Pin D6 mapped to pin GPIO12/HMISO of ESP8266
#define PIN_D7 13 // Pin D7 mapped to pin GPIO13/RXD2/HMOSI of ESP8266
#define PIN_D8 15 // Pin D8 mapped to pin GPIO15/TXD2/HCS of ESP8266
#define PIN_D9 3 // Pin D9 /RX mapped to pin GPIO3/RXD0 of ESP8266
#define PIN_D10 1 // Pin D10/TX mapped to pin GPIO1/TXD0 of ESP8266
//Don't use pins GPIO6 to GPIO11 as already connected to flash, etc. Use them can crash the program
//GPIO9(D11/SD2) and GPIO11 can be used only if flash in DIO mode ( not the default QIO mode)
#define PIN_D11 9 // Pin D11/SD2 mapped to pin GPIO9/SDD2 of ESP8266
#define PIN_D12 10 // Pin D12/SD3 mapped to pin GPIO10/SDD3 of ESP8266
//////////////////////////////////////////////////////
#define USING_PWM_FREQUENCY true
//////////////////////////////////////////////////////
// You can assign pins here. Be carefull to select good pin to use or crash
uint32_t PWM_Pin[] = {PIN_D1};
// You can assign any interval for any timer here, in microseconds
uint32_t PWM_Period[] = {28650};
// You can assign any interval for any timer here, in Hz
float PWM_Freq[] =
{
34.90401396160558
};
// You can assign any interval for any timer here, in Microseconds
float PWM_DutyCycle[] = {50};
typedef void (*irqCallback) ();
// In ESP8266, avoid doing something fancy in ISR, for example complex Serial.print with String() argument
// The pure simple Serial.prints here are just for demonstration and testing. Must be eliminate in working environment
// Or you can get this run-time error / crash
void doingSomething0()
{
Serial.println(micros());
}
/*
void doingSomething1()
{
}
void doingSomething2()
{
}
void doingSomething3()
{
}
void doingSomething4()
{
}
void doingSomething5()
{
}
void doingSomething6()
{
}
void doingSomething7()
{
}
*/
irqCallback irqCallbackStartFunc[] =
{
doingSomething0
};
////////////////////////////////////////////////
void setup()
{
pinMode(PIN_D1, OUTPUT);
Serial.begin(115200);
while (!Serial);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
delay(2000);
Serial.print(F("\nStarting ISR_16_PWMs_Array on ")); Serial.println(ARDUINO_BOARD);
Serial.println(ESP8266_PWM_VERSION);
Serial.print(F("CPU Frequency = ")); Serial.print(F_CPU / 1000000); Serial.println(F(" MHz"));
// Interval in microsecs
if (ITimer.attachInterruptInterval(HW_TIMER_INTERVAL_US, TimerHandler))
{
startMicros = micros();
Serial.print(F("Starting ITimer OK, micros() = ")); Serial.println(startMicros);
}
else
Serial.println(F("Can't set ITimer. Select another freq. or timer"));
// Just to demonstrate, don't use too many ISR Timers if not absolutely necessary
// You can use up to 16 timer for each ISR_PWM
for (uint16_t i = 0; i < NUMBER_ISR_PWMS; i++)
{
//void setPWM(uint32_t pin, float frequency, float dutycycle
// , timer_callback_p StartCallback = nullptr, timer_callback_p StopCallback = nullptr)
#if USING_PWM_FREQUENCY
// You can use this with PWM_Freq in Hz
ISR_PWM.setPWM(PWM_Pin[i], PWM_Freq[i], PWM_DutyCycle[i], irqCallbackStartFunc[i]);
#else
#if USING_MICROS_RESOLUTION
// Or using period in microsecs resolution
ISR_PWM.setPWM_Period(PWM_Pin[i], PWM_Period[i], PWM_DutyCycle[i], irqCallbackStartFunc[i]);
#else
// Or using period in millisecs resolution
ISR_PWM.setPWM_Period(PWM_Pin[i], PWM_Period[i] / 1000, PWM_DutyCycle[i], irqCallbackStartFunc[i]);
#endif
#endif
}
}
void loop()
{
display.clearDisplay();
display.setTextSize(1); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,1);
display.println(F(" ESP8266 PWM"));
delay(1000);
} -
JulianSinulf
őstag
válasz
norbert1998 #23325 üzenetére
Szia!
Ezt nem nézted még?
Én egy Ardunio Mega-val hajtok egy TMC2209-et. Abból is elvileg a legutolsó BTT verziót, ami 1.3.
Semmit nem kell rajta forrasztani, hogy menjen az UART. -
bagarol
tag
válasz
norbert1998 #23329 üzenetére
Hardveres pwm github. [link]
-
Tankblock
aktív tag
válasz
norbert1998 #23329 üzenetére
Anno az egész lakás kapcsolói ESP826X uC alapultak SonoFFtól, amiről a gyári FirmWare-t kiírtottam.
Amit nem szerettem benne, hogy
yield()
kellett sűrűn mert random tudott fagyni is ha a Wifi vezérlő nem kapta meg a tokent és ez random tudott jelentkezni.A weblapot hogy oldottad meg? Abban lévő kommunikáció is okozhat.
-
Tankblock
aktív tag
válasz
norbert1998 #23327 üzenetére
Szia
Mivel 1 db Core fut a Wifi, webserver és PWM generátorod mindig lesz zavar az erőben.
Ha teheted akkor külső HW-es PWM vezérlővel old meg mondjuk I2C-n keresztül.
Egyszerűbb kód biztos időzítés....
-
Janos250
őstag
válasz
norbert1998 #23325 üzenetére
Ha esetleg úgy döntesz, hogy átállsz ESP32-re, mert ma már gyakorlatilag az sem drágább, és vannak mini boardok is, akkor:
RMT: 12.5 ns felbontású, és elég pontos, mivel hardver.
Például az alap ESP32, az S2, S3, C3 verziókban van RMT, H2-ben nincs, a P4-et nem tudni, mert még kevés róla az info.
Ha nem, hanem maradsz a 8266-nál, akkor megpróbálnám a váltás környékén a megszakításokat letiltani.
Vagy megpróbálnám a TMC programot külön szálra tenni, és delay a szálon. -
soldi3r
veterán
válasz
norbert1998 #3241 üzenetére
Arrol lehet a legegyszerubben vezerelni a motorokat, pl. De ettol olcsobban is kaphato levalasztokartya.
-
soldi3r
veterán
válasz
norbert1998 #3239 üzenetére
Azt lehet direkt a controllelre kotni, STEP/DIR-es.
(Meg 1 lepes es eljutunk a nyomtatoportig)
-
soldi3r
veterán
válasz
norbert1998 #3233 üzenetére
A vezerlorol.
-
soldi3r
veterán
válasz
norbert1998 #3222 üzenetére
Mekkora sebessegre es gyursulasra kepes? Max jittert lehet nezni? Mekkora frekin dolgozik?
-
tvamos
nagyúr
válasz
norbert1998 #3228 üzenetére
Pontosan hogy taplalod? Ugye az Arduinot usb-rol!
-
tvamos
nagyúr
válasz
norbert1998 #3222 üzenetére
Mi az a cnc pajzs?
-
soldi3r
veterán
válasz
norbert1998 #3101 üzenetére
Nem tudom, a CNC-t nem bizom az Arduinora, arra szerintem nem ez a legjobb megoldas.
-
soldi3r
veterán
válasz
norbert1998 #3098 üzenetére
Ilyen elb@tt mertekegysegekkel altalaban elzavarom az angol kollegakat
Igen, 2Nm-rel mar akar marni is lehet. -
soldi3r
veterán
válasz
norbert1998 #3093 üzenetére
Golyosorsonak hivjak ezt a valtozatot.
Nagy kerdes, hogy mire kell a szerkezet, mekkora sebessegek kellenek, dinamika stb... -
norbert1998
nagyúr
válasz
norbert1998 #3093 üzenetére
Méretét mondjuk nem tudom. Olyan 8-10 mm átmérőjű lehet, ahhoz mért átlag emelkedéssel. Holnapra le lesz mérve.
-
soldi3r
veterán
válasz
norbert1998 #3089 üzenetére
Maradjunk az SI mertekegysegeknel
Kb 3-400-as fordulatig tervezz a motorral es a tartonyomatekkal szamolhatsz. -
soldi3r
veterán
válasz
norbert1998 #3084 üzenetére
Szamolas nelkul mondom, hogy nem. Ez a motor nem valo erre. 3D nyomtatonak esetleg, de 1.2-1.5Nm alatti lepteto alatt ne tervezz semmilyen megmunkalast.
-
norbert1998
nagyúr
válasz
norbert1998 #3089 üzenetére
a link lemaradt
[link] -
Janos250
őstag
válasz
norbert1998 #3084 üzenetére
Bocs, most látom, nem tárcsával emeled. Akkor munka képlettel lehet kiszámolni.
0.3 Nm-el egy fordulat mennyi munka. Leméred, 1 fordulattal mennyit emelkedik, az mennyi munka. Melyik a kevesebb. -
Janos250
őstag
válasz
norbert1998 #3084 üzenetére
Ha jól emlékszem még a fizikára, akkor 20 N * 0.015 m = 0,3 Nm , tehát másfél centis sugarú tárcsával tudja felemelni.
Elvileg, és ha jól számoltam :-) -
Teasüti
nagyúr
válasz
norbert1998 #3084 üzenetére
Ránézésre ezt nem lehet megmondani.
Ez egy sokváltozós képlet, kezdve a motor nyomatékával, a jellemző áttétellel, ennek az orsónak a menetemelkedésével és így tovább minden egyes alkatrész jellemzőivel a hajtásláncban. És akkor a súrlódási tényezőket megállapítani még külön fejvakarás.
Hacsak nem vmi nevetségesen hosszú áttételt használsz, akkor az a 0,32 Nm elég viccesen hangzik szerintem.
De ne hallgass rám, csak hasraütöttem, ahogy a kérdés is csak hasraütésszerű.
Ez így már bőven gépészmérnöki feladat, általában ezt már tervezni szokás. -
Janos250
őstag
válasz
norbert1998 #3070 üzenetére
Én ócskapiacon szoktam venni régi nyomtatók tápját, ami nem az a nehéz trafós. 500 Ft alatt meg lehet venni őket általában. Ezek 20-30 V körüli feszültséget adnak. Vettem hozzá ebayen szabályozható DC-DC konvertereket szintén párszáz Ft-ért, és príma, bármilyen feszültségre beállítható tápjaim vannak. Kissé több pénzért már feszültségkorlátozható áramgenerátoros (akku töltés, LED meghajtás), sőt akár kijelzős átalakító is kapható.
-
Gergosz2
veterán
válasz
norbert1998 #3073 üzenetére
Szerintem igen.
-
Gergosz2
veterán
válasz
norbert1998 #3070 üzenetére
működő codegány tápot
Ezek nagyon jó megoldások szoktak lenni, mert a régebbi de jó minőségű, most nem codagenre gondolok, tápokat 1-2k-ért megkapja az ember. Én is ilyeneket szoktam használni, felesleges kivezetéseket meg leszoktam vágni és szépen lekötni.
-
tvamos
nagyúr
válasz
norbert1998 #3070 üzenetére
Simán. Mármint jó.
-
fpeter84
senior tag
válasz
norbert1998 #3059 üzenetére
Feltéve hogy egy időben csak 1 motor mozog... A 12V 1.5-2A (18-24W/db) azért rendesen meg tud már rántani egy kicentizett tápot, hát még ha ez 3x... És itt nyilván fontos a precíz kiszámítható mozgás aminek elengedhetetlen feltétele a stabil táp... A PC táp szerintem teljesen jó kiindulási alap hozzá - megfelelő lábait összecsukva be lehet indítani alaplap nélkül - én is ilyet használnék első körben, aztán maximum ha később a kompaktabb kivitel lenne a cél akkor néznék hozzá kínából valamit...
-
tvamos
nagyúr
válasz
norbert1998 #3048 üzenetére
Ott az van, hogy 6.6W, 1.5A. A Voltok meg attol fuggnek, mennyire gyorsan akarod hajtani. En eloszor lbor taprol hajtanam, mennyire melegszik, vagy mondjuk egy 12V 1.5-2A-es tappal probalnek egy motort hajtani, ha van. (Ha nincs, akkor nem tudom mit csinalnek...) Vegul is, szerintem 3 motorhoz, en vennek egy 24V 5A tapot, jobb a bekesseg alapon, bar nem fog az tobbet felvenni, mint 30W, amugy leeg a francba, hosszu tavon.(Szoval elvileg, egy 24V 2A tap + egy nagyobb kondenzator pakk eleg lehet. ki kell probalni, ha van otthon.)
-
tvamos
nagyúr
válasz
norbert1998 #3046 üzenetére
A drivernek eleg 8V, es nem vesz fel 12mA-nel tobbet.
Az a kerdes, milyen motort kotnel ra. Max 2A lehet, ha jol latom.
Új hozzászólás Aktív témák
Hirdetés
- ÚJ PS5 Slim - FW 8.40 - Lemezolvasó - Lua Loader - Lua játék - Lapse
- új, bontatlan, iPhone 16E gyárilag kártya-független, apple világgaranciával
- Üzletből, garanciával, Macbook Pro Retina 16" 2019, Gray i9 64GB RAM 1TB SSD Radeon Pro 5500M
- Üzletből, garanciával, Macbook Pro Retina 16" 2019, Gray i9 64GB RAM 2TB SSD Radeon Pro 5600M 8GB
- MacBook Pro 14" M1 MAX - 32GB / 1TB (2021) - 1 év garancia
- LG 55C4 - 48" OLED evo - 4K 144Hz - 0.1ms - NVIDIA G-Sync - FreeSync - HDMI 2.1 - A9 Gen7 CPU
- Bomba ár! Dell Latitude E5570 - i5-6300U I 8GB I 256GB SSD I 15,6" FHD I HDMI I CAM I W10 I Gari!
- ÁRGARANCIA!Épített KomPhone i7 14700KF 32/64GB RAM RX 9070 XT 16GB GAMER PC termékbeszámítással
- Xiaomi Redmi Note 11 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! AOC 24P1 24 FHD 60Hz 5ms monitor garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest