Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   154 / 177
(#) sirály12 válasza vargham hozzászólására (») Jan 2, 2021 /
 
A legalapabb stm32F103C8T6 (bluepill)
Az mcu ezen kívül 2 adc-t használ, egyiken az aktuális feszültséget, a másikon az áramot méri, és soros porton 9600bps-en kommunikálna.

Másodpercenként kb 10-50 alkalommal kell csak kiszámolni az új táblát, ha ez a megoldás jó, ettől gyorsabb reagálás nem kell.
A hozzászólás módosítva: Jan 2, 2021
(#) sirály12 válasza icserny hozzászólására (») Jan 2, 2021 /
 
Igaz. Osztani kellene.
De lehet ilyet menet közben?
(#) vargham válasza sirály12 hozzászólására (») Jan 2, 2021 /
 
Tehát szabályzást szeretnél?
(#) sirály12 válasza vargham hozzászólására (») Jan 2, 2021 /
 
Igen, szabályzást akarok vele csinálni. Az stm-el egy h-hidat vezérlek pwm-el, és az ebből kijövő váltakozó feszültséget akarom ezzel a módszerrel szabályozni.
(#) cross51 válasza sirály12 hozzászólására (») Jan 3, 2021 / 1
 
Lehet gyorsabban, tudunk segíteni, ha leírod egybe az egészet ámblokk, hogy lássuk a teljes célt
Mekkora táblákakat használsz és hány amplitúdó érték kell?
Mert lehet felesleges számolgatni, ha van helyed const tömb-be ki pakolod az értékeket és amikor amelyik kell azt állítod be a DMA-hoz.
(#) toto válasza sirály12 hozzászólására (») Jan 3, 2021 / 1
 
PMSM / BLDC motorokat is hajtanak hasonló módszerrel (FOC), 20-80 kHz PWM frekvenciával. Ott ugye 3 fázist számolnak egyszerre, ott is változtatják az amplitudót szorzással, de nem láttam még, hogy DMA-t is használnának.
Szerintem az STM32 DMA nélkül is elviszi sebességben, persze nem tudom, hogy mit akarsz még mellette számolni az inverterben.
(#) lobo67 válasza toto hozzászólására (») Jan 3, 2021 /
 
Az én hálózatra tápláló inverterem, ami nem kis követelmény, 5 kHz-en megy (100 minta hullámonként), és így az IGBT-k is jól bírják (azok nem szeretik a nagy frekit). A procinak pedig ez a sebesség nudli 3 fázison is.
(#) sirály12 válasza cross51 hozzászólására (») Jan 3, 2021 /
 
Ha nem gond egy hozzászólásban válaszolnék.

A teljes cél, egy olyan konverter lenne, ami napelemekről kapja a betápot, így az erőteljesen ingadozik. Ez 230-310V között van, és egy IGBT h-hídat kell vezérelni. Ezt az egyenfeszültséget kellene váltakozófeszültséggé alakítani. Kb 50Hz-re és olyan 5-15 kHz pwm-re gondoltam, ez igazából mindegy, ohmikus terhelés lesz rajta. Kimeneti feszültség igazából ingadozni fog, de az a felhasználást tekintve mindegy is. (Ezt rosszul írtam az előzőekben, mert a bemenetet kell igazából stabilan tartani) Az MPPT kiszámolásán a pwm generálásán, és a soros port kezelésén kívül semmi egyéb dolga nem lenne. Nekem igazából annyi lenne a lényeg, hogy a h-híd vezérlése stabil legyen, mert nem akarok füstöt. Ezért is tetszett meg ez a timer-es DMA-s megoldás.

Köszönöm, hogy próbáltok segíteni.
(#) sirály12 válasza sirály12 hozzászólására (») Jan 3, 2021 /
 
Közben próbálkozom.
Írtam egy olyan verziót, ahol két timerrel oldom meg a dolgot.
A timer4 megszakítása intézi a szinusz táblában a léptetést és a timer 1 intézi a pwm-et. DMA nélkül.

A kérdésem az lenne, hogy ha a soros portot is megszakítással akarom kezelni, akkor elég állítanom a prioritásán?
(#) Lucifer válasza sirály12 hozzászólására (») Jan 5, 2021 /
 
Én egy F0-ssal csináltam hasonló DMA+PWM kombót, ott lehet ISR-t kapni (HC == Half Complete ISR) a félig kitolt DMA buffernél is. Úgy oldottam meg, hogy a buffer hátsó felét a DMA transfer complete ISR után frissítem, az első felé meg a félig kitolt buffer ISR után. Azt, hogy az F103-ban van-e HC ISR azt nem tudom.
(#) benjami válasza Lucifer hozzászólására (») Jan 5, 2021 /
 
Igen, van az f103-ban is fél buffer DMA interrupt lehetőség.
(#) benjami válasza sirály12 hozzászólására (») Jan 5, 2021 / 1
 
Igen, be tudod állítani úgy a timer4 prioritását, hogy a soros port megszakításkiszolgálását is félbeszakítsa. Amúgy nem olyan bonyolult innen már átalakítani körkörös DMA-ra. Úgy kisebb lesz a jitter bár a szabályozási késleltetés meg nagyobb lesz a puffer miatt (minél nagyobb a puffer, annál nagyobb a késleltetés).
(#) sirály12 válasza Lucifer hozzászólására (») Jan 6, 2021 /
 
Ez jó infó nekem, utánanézek, bár lehet ez még nagy falat lenne a jelenlegi tudásommal. Köszönöm.
(#) cimopata hozzászólása Jan 13, 2021 /
 
Sziasztok.

Tudja esetleg valaki hogy az STM32F procik miért ilyen nehezen beszerezhetők manapság?
A 030 as és a 103-as sorozatokat használom de kb a többi tpus is teljesen ki van fogyva minden helyen és horror árfutási időket írnak.

TME Farnel, mouser, digikey ezeket néztem mind üres.
A hozzászólás módosítva: Jan 13, 2021
(#) david10 válasza cimopata hozzászólására (») Jan 13, 2021 /
 
Szia.
Az ST hivatalos oldalán nézted hogy ott találsz-e olyan MCU-t amit keresel? Bővebben: Link
(#) vargham válasza cimopata hozzászólására (») Jan 13, 2021 /
 
Állítólag az az oka, hogy a járvány miatt először mindent bezártak. Az autóipart is. De a sok home officehoz sok számítógép kellett, a chip gyártók PC alkatrészekre álltak rá. Aztán valamiért az autóipar nagyon hamar újra indult, és a PC gyártókkal versengve kötik le a gyárak kapacitását hónapokra előre.
https://www.extremetech.com/computing/318554-a-massive-chip-shortag...dustry
https://www.npr.org/2021/01/12/956097426/lack-of-computer-chips-tri...makers

Mit lehet tenni?
- Ha cég vagy, és terméket gyártasz, akkor terveket kell készíteni, szerződni a beszállítókkal fix darabszámokra.
- Ha prototípus fázisban vagy, esetleg hobbi, akkor keress más MCU-t. Az STM32 sorozat tagjai között szerencsére elég egyszerűen hordozható a kód.
- Ha nagyon hobbi, akkor tedd félre.
(#) vargham válasza cimopata hozzászólására (») Jan 15, 2021 /
 
Sikerült megoldást találni?
(#) vargham válasza vargham hozzászólására (») Jan 15, 2021 /
 
(#) cimopata válasza vargham hozzászólására (») Jan 25, 2021 /
 
Alin akartam venni, de visszamondta az eladó, és rám rt hogy érdekel e teljes helyettrstő megoldás. És belinkelte az IC-t Szerintetek ez tényleg jó lehet?

Idézet:
„Hello, I'm very sorry
STM32F030K6T6, this is out of stock at present, but there are other models that can completely replace STM32F030K6T6
XM1008K6T6 this can perfectly replace STM32F030K6T6
Can you accept it?
Alibaba Translation
Features of XM1008K6T6 chip

1. Full compatibility 1:1 replacement, software need not modify, binary compatibility.

2. The M0 kernel runs at the same speed as ST
2. ESD up to 8KV, SRAM with parity check, reliability index leading in China
3. ADC accuracy can also be replaced”


Bővebben: Link
(#) lobo67 válasza cimopata hozzászólására (») Jan 25, 2021 / 1
 
Én is akartam venni más fajta STM-et, nekem is visszaírt más ürüggyel, de nem küldi.
Nekem nincsenek jó tapasztalataim a klónokkal, csak akkor érheti meg, ha van időd a különbségeket kideríteni. Szerintem 100% kompatibilitás nincs.
Viszont ha sikerült ezt a nyomozósdit végigcsinálnod, akár jobb is lehet mint az eredeti, olcsóbban.
Egy ilyen példa az atmega328 "klón" - nem STM, de én ezt próbáltam. Piszkosul nem az, sok a különbség, viszont akár 32MHz-en is megy, 12 bites az ADC-je, stb.
(#) vargham válasza cimopata hozzászólására (») Jan 25, 2021 / 1
 
Én nem fogadnám el. Bogarászni kell majd a különbségeket. Kínai adatlapból.
(#) Topi válasza cimopata hozzászólására (») Jan 25, 2021 / 2
 
Értekeztem több olyan kínai partnerrel akinek bővebb infói vannak a jelenlegi félvezető hiányról, és a lehetséges megoldásokról.

Tekintettel arra, hogy nem csak 200mm-es wafer probléma, hanem a konténer hiány is van, így nehezebb megoldásokat találni.
Nem csak a mikrovezérlők oldaláról tapasztalható ez a probléma, sima mosfetek, optók, tranzisztorok is hiánycikkek lettek szinte egy pillanat alatt. Mostanra már wafer hiány is lett, megbillent a kereslet kínálat wafer terén ami magával rántott mostanra mindent.

Tavaly még 2200 USD-ért tudott hajón eljönni egy 40-lábas konténer. Most jelenleg 9700 USD felett van az ára, és azt is vadászni kell. Ennek az oka egyszerű, konténer hiány van. Sok gyártás leállt, és teli áruval még elmentek a konténerek a cél országba (például USA), de ott leállt gyártások miatt üres konténereket nem akarják visszahozni, ezért kínában nagyon durva konténer hiány van, már hetek-hónapok óta.
Nagyjából eddig tartott a nyugati világ alkatrész készlete, a legnagyobb disztribútorok is kifogynak lassan mindenből. Ami meg még van, annak az ára az egekbe szökött.

Nem az első shortage van az elektronika iparban valami miatt. Vagy árvíz/tájfun miatt elöntött SRAM/NAND gyár, vagy MLCC hiány, vagy ATMEL krízis, stb. Ha valaki hosszú ideje tevékeny ebben az iparban, már párszor rákényszerült arra, hogy áttervezzen áramkört.
Én óva intek mindenkit a kompatibilis mikrovezérlő használatától éles már futó projektben. Az rendben van, hogy ha alapból GD32-re fejlesztesz valamit, de létező termékben egy sorozatgyártásra cserélni nagyon rizikós. Jóval nagyobb rizikó, mint például az MLCC kríziskor tömegével terveztünk át gyártmányokat low-esr aluelkóra vagy SMD tantálra.

Kínai gyártásban dolgozó partnerünk szerint vélhetően normalizálódni fog a helyzet márciustól. Mind a konténer ár, mind pedig a félvezető hiány elkezd majd csökkenni, de még ők is úgy jósolják, hogy 2022Q1-ig még tartani fog mindenképpen, mert wafer gyártásban fél éves előrendelési listák voltak régen is mindig. Szóval ha csak nem SOS sorozatgyártanod valamiből, akkor érdemes kivárni a kínai újév utáni rendeződést (március első hetei).
A konténer árak is jelen pillanatban úgy elszaladtak, hogy vannak áruk amiket inkább nem hozunk el, mert nem éri meg, repülővel meg szintén.
(#) kiborg hozzászólása Feb 10, 2021 /
 
Sziasztok!

Timer3 és Timer4-et használnám pontos időzítés előállítására.
Timer4 szépen működik, használom mind a 4 csatornát, a várt lábakon megjelenik a várt jel.Lásd Timer4 Settings kódrészlet.
Használnám a Timer3-t, de az nem akar működni, illetve csak részben. A PA6-on levő PWM jel megjelenik, de többi nem. Miért ? A regiszterek tudtommal ugyanazok, értéket adok nekik, mi a hiba?

Arduino-t alatt dolgozom, ha ez számít.

A doksi szerint jó pineket figyelek.(Lásd mellékelt kép)



  1. // Timer4 Settings
  2.   pinMode(PB6, PWM);
  3.   pinMode(PB7, PWM);
  4.   pinMode(PB8, PWM);
  5.   pinMode(PB9, PWM);  
  6.   TIMER4_BASE->CR1 = TIMER_CR1_CEN|TIMER_CR1_ARPE;
  7.   TIMER4_BASE->CR2 = 0;
  8.   TIMER4_BASE->SMCR = 0;
  9.   TIMER4_BASE->DIER = 0;
  10.   TIMER4_BASE->EGR = 0;
  11.   TIMER4_BASE->CCMR1 = (0b110 << 4) | TIMER_CCMR1_OC1PE |(0b110 << 12) | TIMER_CCMR1_OC2PE;   // ez a rész a CH1 és CH2-et engedélyzi
  12.   TIMER4_BASE->CCMR2 = (0b110 << 4) | TIMER_CCMR2_OC3PE |(0b110 << 12) | TIMER_CCMR2_OC4PE;   // ez a rész a CH3 és CH4-et engedélyzi
  13.   TIMER4_BASE->CCER = TIMER_CCER_CC1E | TIMER_CCER_CC2E | TIMER_CCER_CC3E | TIMER_CCER_CC4E;  // ez a rész a CH1 és CH2 és CH3 és CH4-et engedélyzi
  14.   TIMER4_BASE->PSC = 71;
  15.   TIMER4_BASE->ARR = 19999;
  16.   TIMER4_BASE->DCR = 0;
  17.   TIMER4_BASE->CCR1 = 10000;
  18.   TIMER4_BASE->CCR2 = 10000;
  19.   TIMER4_BASE->CCR3 = 10000;
  20.   TIMER4_BASE->CCR4 = 10000;


  1. // Timer3 Settings
  2.   pinMode(PA6, PWM);
  3.   pinMode(PA7, PWM);
  4.   pinMode(PB0, PWM);
  5.   pinMode(PB1, PWM);
  6.   TIMER3_BASE->CR1 = TIMER_CR1_CEN|TIMER_CR1_ARPE;
  7.   TIMER3_BASE->CR2 = 0;
  8.   TIMER3_BASE->SMCR = 0;
  9.   TIMER3_BASE->DIER = 0;
  10.   TIMER3_BASE->EGR = 0;
  11.   TIMER3_BASE->CCMR1 = (0b110 << 4) | TIMER_CCMR1_OC1PE |(0b110 << 12) | TIMER_CCMR1_OC2PE;   // ez a rész a CH1 és CH2-et engedélyzi
  12.   TIMER3_BASE->CCMR2 = (0b110 << 4) | TIMER_CCMR2_OC3PE |(0b110 << 12) | TIMER_CCMR2_OC4PE;   // ez a rész a CH3 és CH4-et engedélyzi
  13.   TIMER3_BASE->CCER = TIMER_CCER_CC1E | TIMER_CCER_CC2E | TIMER_CCER_CC3E | TIMER_CCER_CC4E;  // ez a rész a CH1 és CH2 és CH3 és CH4-et engedélyzi
  14.   TIMER3_BASE->PSC = 71;
  15.   TIMER3_BASE->ARR = 4999;
  16.   TIMER3_BASE->DCR = 0;
  17.   TIMER3_BASE->CCR1 = 2500;
  18.   TIMER3_BASE->CCR2 = 2500;
  19.   TIMER3_BASE->CCR3 = 2500;
  20.   TIMER3_BASE->CCR4 = 2500;
A hozzászólás módosítva: Feb 10, 2021
(#) vargham válasza kiborg hozzászólására (») Feb 10, 2021 /
 
Na, de melyik mikrokontrollerről van szó?
(#) kiborg válasza vargham hozzászólására (») Feb 10, 2021 /
 
A kérdés jogos: STM32F103C8T6 (bluepill).
(#) icserny válasza kiborg hozzászólására (») Feb 10, 2021 /
 
Nem tudom, hogy Arduino alatt hogy megy, de Keil környezetben így inicializáltam Timer3 3. csatornáját (PB0):

  1. /* Program05_6
  2.  *
  3.  * A PB0 kimenetre kötött LED villogtatása
  4.  * kb 1 Hz frekvenciával, Output Compare toggle módban.
  5.  *
  6.  * A Timer3 idözítö 3. csatornáját 500 ms késleltetésre állítjuk,  
  7.  * és Output Compare (digitális komparátor) módban az "update események"
  8.  * bekövetkeztekor átbillentjük a PB0 kimenet állapotát.
  9.  * Timer3 az alapértelmezett 72 MHz-es órajelet számlálja.
  10.  * A 16 bites elöszámlálót úgy állítjuk be, hogy a fö számláló
  11.  * 10 kHz-es órajelet kapjon, így a számláló számlálálási határát
  12.  * közvetlenül tized ms egységekben tudjuk megadni.
  13.  *
  14.  * Felhasznált források:
  15.  * - Mazidi et al., STM32 Arm Programming for Embedded Systems
  16.  * - Alexander Tarasov: Storming STM32 course
  17.  *
  18.  * Tested with Keil MDK-Lite v5.28 and STM32F1 DFP v2.3.0
  19.  */
  20. #include "stm32f10x.h"
  21.  
  22. int main(void) {
  23.   RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;      // TIM3 órajel engedélyezés
  24.   RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;      // AFIO órajel engedélyezés
  25.   RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;      // GPIOB órajel engedélyezés
  26.   AFIO->MAPR &= ~AFIO_MAPR_TIM3_REMAP;     // Törli TIM3 REMAP bitjeit
  27.   //AFIO->MAPR |= AFIO_MAPR_TIM3_REMAP_NOREMAP; // 00: CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1  
  28.   /* PB0 konfigurálása T3C3 digitális kimenetként */
  29.   GPIOB->CRL &= ~(GPIO_CRL_MODE0|GPIO_CRL_CNF0); // PB0 CNF és Mode bitek törlése
  30.   GPIOB->CRL |=  GPIO_CRL_MODE0_0 |        // PB0 pushpull alternate kimenet, max. 50 MHz
  31.                  GPIO_CRL_MODE0_1 |        // CNF: 10  MODE: 11
  32.                  GPIO_CRL_CNF0_1;
  33.   /* Timer3 CH3 Output Compare mód konfigurálása */
  34.   TIM3->PSC = SystemCoreClock/10000 - 1;   // 10 kHz-re osztjuk le az órajelet
  35.   TIM3->ARR = 5000 - 1;                    // 5000-ig számlálunk (1000 ms)
  36.   TIM3->CNT = 0;                           // Számláló nullázása
  37.   TIM3->CCMR2 = TIM_CCMR2_IC3F_1 |
  38.                 TIM_CCMR2_IC3F_0 ;         // IC3F=0011 IC3PSC=00 CC3S=00
  39.   TIM3->CCR3 = 0;                          // Egyezési érték
  40.   TIM3->CCER |= TIM_CCER_CC3E;             // CH3 kimenet engedélyezése
  41.   TIM3->CNT = 0;                           // Számláló törlése
  42.   TIM3->CR1 |= TIM_CR1_CEN;                // Számlálás indítása
  43.  
  44.   while (1) {                              // Nincs mit tenni...
  45.   }
  46. }
(#) kiborg válasza icserny hozzászólására (») Feb 10, 2021 /
 
Köszi, de sajnos sokkal nem lettem előrébb.
CCER-ben engedélyezed, CCMR2-ben Comparálást engedélyezed. GPIOB rész meg a remap-ért felel.
Hasonló,mint nálam. Megy is a Timer 3,mert a PA6-on teszi a dolgát,tehát a timer résznek jónak kellene lennie, de ha az jó, akkor mi a hiba?
(#) kiborg válasza kiborg hozzászólására (») Feb 10, 2021 /
 
Arra varrj gombot, hogy most meg jó lett. Megjavult,de fogalmam sincs, hogy miért és mitől.
(#) don_peter hozzászólása Feb 20, 2021 /
 
Srácok, gondolom van köztetek jó pár olyan felhasználó, aki esetleg foglalkozott USB CDC használatával. Csak említés ként, én is sokszor, de kíváncsi lennék arra hogy ti hogyan vagy miképpen oldálanátok meg a következőt. Adott egy 8-16-32Kbyte vagy akár 1MB adathalom, amelyet PC-ről küldünk. USB CDC-vél fogadná a hardver, de mivel 64byte egy csomag nyilván a folyamatot szinkronizálni kell. Egyrészt kell szólni a hardvernek hogy most adatokat akarok küldeni készüljön fel, másrészt át kell küldeni az aktuális adat hoszt ami nem biztos hogy tökéletesen osztható 64-el, és utána fogaddni kell az adatokat. Érdekelne, hogyan lehetne ezt jól és stabilra megoldani. Gondolok itt olyanra, hogy figyelni kell, hogy érkezett e adat és hogy mennyi, a szinkronizáció miatt kell küldeni egy tovább parancsot a PC-nek... Stb. Köszi előre is.

Ut: STM32F103RF kontroller USB CDC-t használok.
A hozzászólás módosítva: Feb 20, 2021
(#) Topi válasza don_peter hozzászólására (») Feb 20, 2021 / 1
 
Lásd el a kisebb méretű csomagokat header-rel, és abban jelezd hogy mekkora lesz a csomag, mi lesz a teljes CRC a végén, jelöld a headerben azt is hogy kezdő csomag, vagy chunk, stb.

Meghatározod mekkora adatot szeretnél egyszerre átküldeni, az elé beteszed a headert. Nem probléma ha nem 64 és többszöröse.

Szerk: header lehet egy sima struct is, amit egyszerűen csak memcpy-val kezelsz (küldő és fogadó oldalon is).
A hozzászólás módosítva: Feb 20, 2021
Következő: »»   154 / 177
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem