Fórum témák
- • Vezetéknélküli termosztát
- • Audiofil, High End Audio
- • Gáz fogyasztás monitorozása
- • Induktivitásban tárolt energia
- • Kapcsolási rajzot keresek
- • Mosógép vezérlők és általános problémáik
- • Oszcilloszkóp, avagy hogyan kell használni?
- • Kapcsolóüzemű táp 230V-ról
- • Rádióamatőrök topikja
- • Vicces - mókás történetek
- • Villanyszerelés
- • Hűtőgép probléma
- • Analóg oszcilloszkóp javítása
- • Elfogadnám, ha ingyen elvihető
- • A műhely (bemutató topik, ahol az alkotások készülnek)
- • Opel Astra elektromos hibák
- • Számítógép hiba, de mi a probléma?
- • Arduino
- • Felajánlás, azaz ingyen elvihető
- • Rádió áthangolása, OIRT - CCIR konverter
- • Kazettás magnó (deck) javítása
- • Hűtőgép kompresszor
- • Kombikazán működési hiba
- • Klíma szervizelés, javítás
- • Klíma beszerelése, fűtés-hűtés házilag
- • Tápegységgel kapcsolatos kérdések
- • Fejhallgató erősítő
- • Labortáp javítás
- • MOSFET-ek
- • Sprint-Layout NYÁK-tervező
- • Tápegység
- • Androidos okos telefonok
- • Tervezzünk nyákot EasyEDA-val
- • Hegesztő inverter javítás
- • Videomagnó problémák
- • Ellenállás
- • Szobatermosztát bekötése
- • HESTORE.hu
- • Multiméter - miért, milyet?
- • Érdekességek
- • Villanymotor bekötése
- • Dióda helyettesítés
- • Transzformátor készítés, méretezés
- • Menetszámolós tekercselőgép házilag
- • Leválasztó transzformátor
- • Szigetelésvizsgáló
- • USB 3.2 HUB modul
- • Kamerás megfigyelőrendszer
- • Tranzisztorok helyettesítése
- • Borhűtő vezérlő panel
- • CNC építése házi alkatrészekből az alapoktól
- • Sütő javítás
- • Kondenzátor
- • Eberspacher állófűtés javítása
- • Dobozolási technikák, műszerdobozok
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Szia!
Fel hívom a figyelmed néhány dologra, ami nekem a rajzon nem tetszik:
-Már Bakman is írta a túl nagy gate köri ellenállást
-nagyon lassú optocsatolót választottál, és a sebességet illetően előnytelen a bekötése, akár 20-30usec is lehet bármely irányú kapcsolás
-A félhídmeghajtó felső oldali táp szűrőnek nem lesz elég csak egy elkó, kerámia kondi is kellene mellé
-hiányoznak a hidegítő kondenzátorok is
A gate meghajtás jó rajzolat tervezése legalább olyan fontos, mint a jó kapcsolási rajz
Szia,
Ezzel a kapcsolással és programmal azért elég sok gond van szerintem.
A kapcsolásban IRF2101 van, aminek HIN és LIN bementete van, a 2109-nek meg IN és -SD, azaz a kettő nem lábkompalibitis. A 2109 egyébként jobb választás, mert ott a IRF-en belül meg van oldva a holtidő kezelés, ezért nem kell Bakman által említett holtidő kezelése kódból. 2101-nél ez mindenképpen kellene (a lassú optók miatt valószínűleg elég nagy).
Bakman által is említett gate ellenállás nagyon nagy. Itt valami 22 ... 100 Ohm körül gondolkodj, mert egyébként nagyon lassan nyitnak zárnak az IGBT-k.
1N4004 helyett mindenképpen 600V-os és ultra gyors diódát kell berakni. UF4007 vagy HER108. Ez az utánozós táp része, ezen keresztül töltődik fel a 10µF kondi a felső IGBT meghajtás lebegő tápfeszültségének, akkor, amikor az alsó IGBT nyitva van. Lassú diódánál az alsó IGBT lezárása után a dióda lassan zár le, még kicsit nyitva marad ellenirányban is. Ekkor a 320V fele van a a kondi egyik végén és egy még nem lezárt dióda keresztül a 12V_2 a kondi másik végén. Csak egy pillanat, de ugye max 25V-os kondid lesz ott, amit ezzel éppen kisütsz valamennyire. Szoktak még egy mondjuk 10 Ohm-ot sorba tenni a diódával, hogy az áramot korlátozza.
Hidegítő kondi sehol nincs. Minden IRF tápfesz lábához 1-4 közé 100..220nF kerámia. Ugyanez a utánozós táp 10µF-jával párhuzamosan. De még a 320V-ra is kellene az IGBT-khez minél közelebb 100 ... 470nF 1000V impulzus tűrő fólia kondi (MKP).
Az IGBT meghajtásra a 12V OK, de jobb választás a 15V. AZ IFRxxx-en belül van undervoltage lockout, ami 9,8V felett engedi bekapcsolni a kimenetet. a Felső oldalon a 12V - dióda fesz esésről nem teljesen feltöltődő kondi az még éppen benne lehet, de a 15V tápfesz emiatt inkább ajánlott.
IGBT-k G-E közé is érdemes berakni egy 18V-os zénert a kapu védelme miatt.
Nincs biztosíték, zavarszűrés, túláram védelem.
A programban mindig az alsó oldali IGBT-t kell először kinyitni, mert akkor töltődik fel a felső oldali IGBT meghajtás kondija. Fordítva az első periódusban az az undervoltage lockout miatt nem nyílik. Igaz a második periódustól már menni fog.
A programban a potméter állásától függően változik a kimeneti négyszög frekvenciája. Ennyi.
Ezzel több gond is van. A motorok nem szeretnek négyszögről üzemelni. Az ilyen négyszög effektív értéke nagyobb mint a hasonló csúcsfeszültségű szinuszé, túl nagy feszültség jut a motorra. Ha ilyen meghajtást akarsz akkor szinuszt közelítő négyszög kell. (Nagyon hosszú holtidő a pozitív és negatív váltás között, úgy hogy a négyszög effektív értéke megegyezzen a szinusz effektív értékével.) De a szinuszosan modulát PWM lenne a tuti megoldás.
A másik gond, hogy a frekvenciával arányosan a kimeneti feszültség effektív értékét is csökkenteni kellene.
Nincs lassú felfutás sem.
Huhh, hát igen sejtettem az elején több sebből is vérzik a kapcsolás (a védelmek hiánya úgy kb mindenhol, túláram, hőmérséklet,zavarszűrés és még sorolhatnám).
Így ez a kapcsolás ebben a formájában arra lesz jó hogy maximum tanuljak belőle a lentebb említett törpefeszültség környékén, aztán óvatosan fejlesztem.
Igazából csak tanulás céljával, maximum elkészítek egy komolyabb modellt ha sikerül és annyi, csak meg szeretném ismeri ennek a szabályozástechnikának ezt az oldalát is.
Egyébként nagyon köszönöm mindenkinek hogy ilyen részletesen leírta mi az amire oda kell figyelnem, így még az alkatrészek megérkezte előtt áttervezem a kapcsolást hogy valamivel jobb védelmet adjon az alkatrészeknek.
Valaki help please
Gyakorlatoztam ,hogy kiváltom a delay-t millis-el de nem azt csinálja amit kéne. Csak 1 lednek kéne lassan elhalványulnia meg visszaerősödnie de az csak világít meg néha vibrál egy kicsit (ki tudtok javítani?) const int ledPin = 10; // LED connected to digital pin 3
int ledState = LOW; // ledState változó tárolja a LED állapotának értékét
long previousMillis = 0; // a LED frissítésének utolsó időértékét tárolja
long interval = 5000; // a következő változónk egy long less, mivel az érték gyorsan akkorára nő hogy integerben nem tudjuk tárolni
// villogáshoz intervalluma (milliszekundumban
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop() {
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
analogWrite(ledPin, fadeValue);
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) { // elmenti a LED felvillanás utolsó időértékét
previousMillis = currentMillis;
if (ledState == LOW) // ha a LED ki van kapcsolva, akkor bekapcsolja és fordítva:
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState); // a ledState változóval beállítjuk a 13 pin állapotát:
}
}
for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
analogWrite(ledPin, fadeValue);
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) { // elmenti a LED felvillanás utolsó időértékét
previousMillis = currentMillis;
if (ledState == LOW) // ha a LED ki van kapcsolva, akkor bekapcsolja és fordítva:
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState); // a ledState változóval beállítjuk a 13 pin állapotát:
}
}
}
A 13 pin nem megy az analogwrite
Uno, Nano, Mini
3, 5, 6, 9, 10, 11
490 Hz (pins 5 and 6: 980 Hz)
Tedd a ledet ezek közül az egyikre az if (ledState... meg törölni kell.
Ide nem kell for ciklus csak mikor elérted az időpontot, egy számláló: fadeValue += 5
Van egy magyon egyszerű megoldás:
if(millis() % 100 == 0){
fadeValue += 5;
analogWrite(ledPin, fadeValue);
}
A hozzászólás módosítva: Nov 22, 2020
10-es pinen van a led. Pontosan mit kell törölni?
Valamit nagyon nem jól csináltam. Nem tudnád a tejes kódot visszaküldeni lécci
const int ledPin = 10; // LED connected
byte fadeValue = 0 ;
bool dir = false;
const unsigned long sebesseg = 100;
void setup() {
// put your setup code here, to run once:
pinMode(ledPin, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if(millis() % sebesseg == 0){
if(fadeValue==255){
if (dir == false )dir = true;
}
if(fadeValue==0){
if (dir == true )dir = false;
}
if(dir == false){
fadeValue++;
}
else
{
fadeValue--;
}
analogWrite(ledPin, fadeValue);
}
}
Ez nagyon szuper!!! Müködik!!!
Köszi szépen
Még egyszerűsítettem
const int ledPin = 10; // LED connected
byte fadeValue = 0 ;
bool dir = false;
const unsigned long sebesseg = 100;
byte minl = 1;
byte maxl = 250;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
if(millis() % sebesseg == 0){
if(fadeValue>=maxl){
dir = true;
}
if(fadeValue <= minl){
dir = false;
}
if(dir == false){
fadeValue++;
}
else
{
fadeValue--;
}
analogWrite(ledPin, fadeValue);
}
}
A hozzászólás módosítva: Nov 22, 2020
Köszi! Ez is teljesen jól működik
if(dir == false){
fadeValue++;
}
else
{
fadeValue--;
}
helyett lehet rövidíteni:
dir ? fadeValue-- : fadeValue++;
Van mikor az elterjettebb previousMillis megoldás jó csak, mert ez ha valami mással van elfoglalva a kontroller akkor később de végtehajtja, próbáld ezt megírni azzal a megoldással
OK. Próbálkozok vele.
Írtam egy 3 fázisú futófényt, érdemes nem három hanem több ledből összerakni:
const int ledPin1 = 3; // LED connected
const int ledPin2 = 6; // LED connected
const int ledPin3 = 10; // LED connected
int interval = 1000;
long previousMillis = 0;
byte stepp = 0;
byte stepp0 = 0;
byte stepp1 = 0;
byte stepp2 = 0;
byte sintable[] = {
128,131,134,137,140,143,146,149,
152,156,159,162,165,168,171,174,
176,179,182,185,188,191,193,196,
199,201,204,206,209,211,213,216,
218,220,222,224,226,228,230,232,
234,235,237,239,240,242,243,244,
246,247,248,249,250,251,251,252,
253,253,254,254,254,255,255,255,
255,255,255,255,254,254,253,253,
252,252,251,250,249,248,247,246,
245,244,242,241,239,238,236,235,
233,231,229,227,225,223,221,219,
217,215,212,210,207,205,202,200,
197,195,192,189,186,184,181,178,
175,172,169,166,163,160,157,154,
151,148,145,142,138,135,132,129,
126,123,120,117,113,110,107,104,
101,98,95,92,89,86,83,80,
77,74,71,69,66,63,60,58,
55,53,50,48,45,43,40,38,
36,34,32,30,28,26,24,22,
20,19,17,16,14,13,11,10,
9,8,7,6,5,4,3,3,
2,2,1,1,0,0,0,0,
0,0,0,1,1,1,2,2,
3,4,4,5,6,7,8,9,
11,12,13,15,16,18,20,21,
23,25,27,29,31,33,35,37,
39,42,44,46,49,51,54,56,
59,62,64,67,70,73,76,79,
81,84,87,90,93,96,99,103,
106,109,112,115,118,121,124,128
};
void setup() {
Serial.begin(115200);
analogWrite(ledPin1, 128);
analogWrite(ledPin3,128);
analogWrite(ledPin2,128);
delay(100);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin2, OUTPUT);
delay(100);
}
void loop() {
if(millis() % 50 == 0) {
int val = analogRead(1);
interval = map(val, 0, 1023, 1000, 10000);
}
unsigned long currentMillis = micros();
if(currentMillis - previousMillis > interval){
analogWrite(ledPin1, sintable[stepp1]);
analogWrite(ledPin3, sintable[stepp2]);
analogWrite(ledPin2, sintable[stepp0]);
stepp++;
stepp0 = (stepp);
stepp1 = (stepp+85);
stepp2 = (stepp-85);
previousMillis = currentMillis;
}
}
Egyszer én is próbálkoztam ilyennel , de az nem lett ilyen jó és a loop tele volt delay-al.
Találtam az arduino nano-hoz "hasonló" hardvert de nem ismerem . A neve STM32F103C8T6 fejlesztő modul. Ismeri valaki? Nagyba eltér a nanó-tól ? Mik a különbségek?
32 bites ARM magos 72MHz-es processzor van benne, "kicsit" nagyobb teljesítményű mint a 8 bites AVR-ek. Van saját topikja is a ennek a modulnak.
Megpróbálom az egyszerübb utat...
Virtuino-t használnám a <VirtuinoCM.h> erre már össze ollóztam
az arduino Mega + ESP01-serial1 módosítást AP módba. így az működik.
Viszont nem világos hogy mit kell még beírkálnom hogy a T0 T1... szőveges üzenetek is szinkronizálódjanak. Erre nem találtam példát. Csak Ethernetest de az annyira más volt hogy nem tudom mi kell.
Kérlek csak olyan írjon akinek van működő kódja.
Kezdőként nekem napok míre kitalálom hogy kell.
A sallang mentesített kódomat ami T0, T1.. nélküli azt mellékelm ebbe kérnék egy működő kiegészítést.
Köszönöm
#define APkey "1234";
#include "VirtuinoCM.h"
VirtuinoCM virtuino;
#define V_memory_count 16 // the size of V memory. You can change it to a number <=255)
float V[V_memory_count]; // This array is synchronized with Virtuino V memory. You can .
void setup() {
Serial1.begin(115200);
Serial1.setTimeout(50);
virtuino.begin(onReceived,onRequested,256);
virtuino.key=APkey;
connectToWiFiNetwork();
}
void loop() {
virtuinoRun();
}
void connectToWiFiNetwork(){
// Serial.println("Server init...");
while (Serial1.available()) Serial1.read();
Serial1.println("AT+GMR"); // print firmware info
waitForResponse("OK",1000);
Serial1.println("AT+CWMODE=2"); // configure as client
waitForResponse("OK",1000);
Serial1.println("AT+CIFSR"); // IP lekérdezés
waitForResponse("OK",1000);
Serial1.print("AT+CWSAP=\""); // szerver ap adatok
Serial1.print("valtoAA");
Serial1.print("\",\"");
Serial1.print("aabb1234");
Serial1.println("\",2,3"); // 2. csatorna 3-as kódolás
waitForResponse("OK",5000);
// Serial1.print("AT+CWJAP=\""); // connect to your WiFi network
// Serial1.print("valtoAA");
// Serial1.print("\",\"");
// Serial1.print("aabb1234");
// Serial1.println("\"");
// waitForResponse("OK",10000);
// Serial1.print("AT+CIPSTA=\""); // set IP
// Serial1.print(serverIP);
// Serial1.println("\"");
// waitForResponse("OK",5000);
// Serial1.println("AT+CIPSTA?");
// waitForResponse("OK",3000);
// Serial1.println("AT+CIFSR"); // get ip address
// waitForResponse("OK",1000);
Serial1.println("AT+CIPMUX=1"); // configure for multiple connections
waitForResponse("OK",2000);
Serial1.print("AT+CIPSERVER=1,");
Serial1.println(8000);
waitForResponse("OK",1000);
}
//============================================================== onCommandReceived
//==============================================================
/* This function is called every time Virtuino app sends a request to server to change a Pin value
* The 'variableType' can be a character like V, T, O V=Virtual pin T=Text Pin O=PWM Pin
* The 'variableIndex' is the pin number index of Virtuino app
* The 'valueAsText' is the value that has sent from the app */
void onReceived(char variableType, uint8_t variableIndex, String valueAsText){
if (variableType=='V'){
float value = valueAsText.toFloat(); // convert the value to float. The valueAsText have to be numerical
if (variableIndex<V_memory_count) V[variableIndex]=value; // copy the received value to arduino V memory array
}
}
//==============================================================
/* This function is called every time Virtuino app requests to read a pin value*/
String onRequested(char variableType, uint8_t variableIndex){
if (variableType=='V') {
if (variableIndex<V_memory_count) return String(V[variableIndex]); // return the value of the arduino V memory array
}
return "";
}
//==============================================================
void virtuinoRun(){
if(Serial1.available()){
virtuino.readBuffer = Serial1.readStringUntil('\n');
// if (debug) Serial.print('\n'+virtuino.readBuffer);
int pos=virtuino.readBuffer.indexOf("+IPD,");
if (pos!=-1){
int connectionId = virtuino.readBuffer.charAt(pos+5)-48; // get connection ID
int startVirtuinoCommandPos = 1+virtuino.readBuffer.indexOf(":");
virtuino.readBuffer.remove(0,startVirtuinoCommandPos);
String* response= virtuino.getResponse(); // get the text that has to be sent to Virtuino as reply. The library will check the inptuBuffer and it will create the response text
// if (debug) Serial.println("\nResponse : "+*response);
if (response->length()>0) {
String cipSend = "AT+CIPSEND=";
cipSend += connectionId;
cipSend += ",";
cipSend += response->length();
cipSend += "\r\n";
while(Serial1.available()) Serial1.read(); // clear Serial1 buffer
for (int i=0;i<cipSend.length();i++) Serial1.write(cipSend.charAt(i));
if (waitForResponse(">",1000)) Serial1.print(*response);
waitForResponse("OK",1000);
}
Serial1.print("AT+CIPCLOSE=");Serial1.println(connectionId);
}// (pos!=-1)
} // if Serial1.available
}
//=================================================== waitForResponse
boolean waitForResponse(String target1, int timeout){
String data="";
char a;
unsigned long startTime = millis();
boolean rValue=false;
while (millis() - startTime < timeout) {
while(Serial1.available() > 0) {
a = Serial1.read();
// if (debug) Serial.print(a);
if(a == '\0') continue;
data += a;
}
if (data.indexOf(target1) != -1) {
rValue=true;
break;
}
}
return rValue;
}
//============================================================== vDelay
void vDelay(int delayInMillis){long t=millis()+delayInMillis;while (millis()<t) virtuinoRun();}
Hogyan tudnék 20 Khz-es TTL jelet adni a kimenetre. Egy vezérléshez ekkora kellene.
digitalWrite(pin,HIGH);
delay(1);
digitalWrite(pin,LOW);
megoldás kevés. Ez csak 1 kHz. J
Vedd ki a delay-t.
Gondolom van egy while ciklus, vagy valami kívül.
void setup() {
DDRB |= _BV (1);
TCCR1A = 0;
TCCR1B = 0;
TCCR1A = _BV(WGM11) | _BV(COM1A1);
TCCR1B = _BV(WGM13) | _BV(CS10) | _BV(WGM12);
OCR1A = 399;
}
void loop() {
}
Ez 20 kHz a 9-es lábon, 50-50% kitöltéssel.
Mondjuk erre van lib ami kulturáltan konfigurálható... pwm A hozzászólás módosítva: Nov 26, 2020
Rendeltem egy ilyent. Csak az a baj , hogy senki nem mondta, hogy ezt nem lehet simán csak usb-n programozni , kell hozzá valami st-link programozó kiegészítő. A kérdésem az volt , hogy
" Mik a különbségek? " Gondolom az st-link nélkül kirakhatom egy kiállításra, hogy jól meg lehessen csodálni
Jobban jársz EGY esp8266-TAL. tTöbb platform és lib van hozzá , 160 _MHz-ENmhz tudod tornázni , ÉS 32 _bit -ES szintén . müxik MŰKÖDIK ideIDE alatt is fejlesztés!
Ha még több kell : esp32....
Stm32 nehéz platform lesz , ha AZ atmegáATMEGA-val is elakadsz! A hozzászólás módosítva: Nov 27, 2020
Moderátor által szerkesztve
Lehet azt USB->Soros Port átalakítóval is programozni!
Találsz rá több példát is a netten, ha keresel!
Pl.: STM32 Arduino IDE Tutorial Getting started with stm32
Bővebben: Link
Köszi a választ. Amúgy vannak nano-im meg egy mega is csak gondoltam megnézem ez milyen.
Köszi. Nem akarok programozót venni mert nem használnám minden nap. Na meg sokat kell bajlódni a jumperekkel meg ide oda kötözgetni meg bootloaderekkel bajlódni stb nincs kedvem. A hozzászólás módosítva: Nov 27, 2020
Akkor nem nézted végig a linkelt bemutatót!
A STM32 beépített botloader használatához, csak soros port kel!
Az felhasználhatod debugolásra is.
Bővebben: USB to TTL
Valamit kel választanod mert különben nem tudod használni.
|
|