[ cukovanny @ 24.02.2018. 20:23 ] @
ukoliko ima dokonih gurua ARM-a, molio bih za jednu brzu pomoć.

nemam vremena (kratak je život) za iščitavanje brojnih funkcija registara bluepill-a, a treba pomoć i objašnjenje šta čovek ovde u ovom kodu radi da bi dobio PUSH PULL PWM sa dva kanala stm32f103 ?
ukratko koment za svaku liniju da bih svojeručno mogao preneti kod u arduino okruženje iz koga programiram stm32.
kod je sledeći:

Code:

#include "stm32f10x.h"
#include "stm32_ports.h"

#define TIM1_CH1N_PB        13
#define TIM1_CH1_PA         8
#define TIM1_CH2_PA         9

#define LED1_G_PC           9
#define LED2_B_PC           8

#define PWM_VALUE           20
#define TMR_T               200
#define DEADTIME            20

#define PP_MODE
//#define COMPL_MODE

void main(void)
{
    RCC->APB2ENR|=RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN | RCC_APB2ENR_TIM1EN;

    GPIOA->CRH=SET_CRH(TIM1_CH1_PA,M_OUT_50M,OUT_AF_PP) | SET_CRH(TIM1_CH2_PA,M_OUT_50M,OUT_AF_PP);
    GPIOB->CRH=SET_CRH(TIM1_CH1N_PB,M_OUT_50M,OUT_AF_PP);
    GPIOC->CRH=SET_CRH(LED1_G_PC,M_OUT_50M,OUT_GP_PP) | SET_CRH(LED2_B_PC,M_OUT_50M,OUT_GP_PP);

#ifdef PP_MODE
    //CH1: PWM mode 2, CH2: PWM mode 1, preload enabled on all channels
    TIM1->CCMR1=TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0 | TIM_CCMR1_OC1PE | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2PE;
    TIM1->CCER=TIM_CCER_CC1E | TIM_CCER_CC2E;
    TIM1->BDTR=TIM_BDTR_MOE;
    TIM1->CCR1=TMR_T - PWM_VALUE;
    TIM1->CCR2=PWM_VALUE;
    TIM1->ARR=TMR_T;
    TIM1->CR1=TIM_CR1_ARPE | TIM_CR1_CMS_1 | TIM_CR1_CMS_0;
    TIM1->CR1|=TIM_CR1_CEN;
    TIM1->EGR=TIM_EGR_UG;
#endif


zašto bi mi pomogli ?
zato što ću ovde dati moj kod za istu stvar na atmega168 kontrolerima.
možda nekome bude trebalo.
sigurno će trebati.
pozdrav svima.
[ bogdan.kecman @ 25.02.2018. 01:04 ] @
ne kontam pitanje, pa copy / paste ovoga u stm32duino okruzenje ce da radi ne mora menjas nista ako se ja dobro secam? ... nema bas niko dovoljno dokon al evo nesto na brzaka

Code:

RCC->APB2ENR|=RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN | RCC_APB2ENR_TIM1EN;


podesava rcc paraetre (Reset and Clock Control System) - pali klok na APB2 periferiji IOPA, IOPB, IOPC i TIMER1

Code:

    GPIOA->CRH=SET_CRH(TIM1_CH1_PA,M_OUT_50M,OUT_AF_PP) | SET_CRH(TIM1_CH2_PA,M_OUT_50M,OUT_AF_PP);
    GPIOB->CRH=SET_CRH(TIM1_CH1N_PB,M_OUT_50M,OUT_AF_PP);
    GPIOC->CRH=SET_CRH(LED1_G_PC,M_OUT_50M,OUT_GP_PP) | SET_CRH(LED2_B_PC,M_OUT_50M,OUT_GP_PP);

CRH je "gornjih 16 bitova", znaci postavlja za portove A, B i C pinove (gore su ti definisani koji su pinovi u #define delu) na 1
(source: http://embedded-lab.com/blog/stm32-gpio-ports-insights/ )

ovo ti je crh registar


ovo ti je objasnjenje sadrzaja registra


Code:

   //CH1: PWM mode 2, CH2: PWM mode 1, preload enabled on all channels
   TIM1->CCMR1=TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0 | TIM_CCMR1_OC1PE | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2PE;
   TIM1->CCER=TIM_CCER_CC1E | TIM_CCER_CC2E;
   TIM1->BDTR=TIM_BDTR_MOE;
   TIM1->CCR1=TMR_T - PWM_VALUE;
   TIM1->CCR2=PWM_VALUE;
   TIM1->ARR=TMR_T;
   TIM1->CR1=TIM_CR1_ARPE | TIM_CR1_CMS_1 | TIM_CR1_CMS_0;
   TIM1->CR1|=TIM_CR1_CEN;
   TIM1->EGR=TIM_EGR_UG; 

pise gore u komentaru, pali pwm1 na mode 2, pwm2 na mode1 pali u pokrece iste


imas ovde semu tajmera ( source: http://embedded-lab.com/blog/stm32-timers/ )


inace iz http://www.st.com/content/ccc/...translations/en.DM00042534.pdf
Citat:


The timer is able to generate PWM in edge-aligned mode or in center-aligned mode with a frequency determined by the value of the TIMx_ARR register, and a duty cycle determined by the value of the TIMx_CCRx register.

PWM mode 1
• In up-counting, channelx is active as long as CNT< CCRx, otherwise it is inactive.
• In down-counting, channelx is inactive as long as CNT> CCRx, otherwise it is active.

PWM mode 2
• In up-counting, channelx is inactive as long as CNT < CCRx, otherwise it is active.
• In down-counting, channelx is active as long as CNT > CCRx, otherwise it is inactive.

Note:
Active when OCREF = 1, inactive when OCREF = 0.
To configure the timer in this mode:
1. Configure the output pin:
a) Select the output mode by writ ing CCS bits in CCMRx register.
b) Select the polarity by writing the CCxP bit in CCER register.
2. Select the PWM mode (PWM1 or PWM2) by writing OCxM bits in CCMRx register.
3. Program the period and the duty cycle respectively in ARR and CCRx registers.
4. Set the preload bit in CCMRx register and the ARPE bit in the CR1 register.
5. Select the counting mode:
a) PWM edge-aligned mode: the counter must be configured up-counting or down-counting.
b) PWM center aligned mode: the counter mode must be center aligned counting mode (CMS bits different from '00').
6. Enable the capture compare.
7. Enable the counter.


u svakom slucaju savet je mani se arduina, skini atolic true studio (sad se zove valjda stm32 true studio), full je ide i free je i radi do jaja sa stm32, skini cubemx, tamo lepo nacrtas sta oces i on ti izgenerise sve ovo ... ako vec neces da citas sta je koji registar onda klikci i zaobidji stm32duino

[ cukovanny @ 25.02.2018. 06:54 ] @
bogdane, pa ovo je najbolja indirektna pomoć u svetskoj konkurenciji na olimpijadi indirektnih pomoći :)

Citat:
ne kontam pitanje, pa copy / paste ovoga u stm32duino okruzenje ce da radi ne mora menjas nista ako se ja dobro secam?


ne radi u stm32duino okruženju sa copy/paste ni iz daleka. onaj koji je portovao funkcije , promenio je nomenklaturu, tako da klasa npr. TIM1 iz originalnog koda, u stm32duino okruženju dobija ime TIMER1_BASE..... e sad, logika kaže ajde jedan od članova te klase je CCMR - to prolazi, ali bitset, odnosno maska TIM_CCMR1_OC1M_2 ili TIM_CCMR1_OC1M_1 ili TIM_CCMR1_OC1M_0 nema nikakve šanse ... a dokumentacija za stm32duino je štura ...

arduinov kompajler vraća: error , TIM_CCMR1_OC1M_2 was not declared in this scope !



enivej, ostaje mi da iščitavam za sada stm32duino dokumentaciju, uz veliku prednost koju mi ti dade...


Citat:
u svakom slucaju savet je mani se arduina, skini atolic true studio (sad se zove valjda stm32 true studio), full je ide i free je i radi do jaja sa stm32, skini cubemx, tamo lepo nacrtas sta oces i on ti izgenerise sve ovo


to je sjajno! treba li neki hw specijalan za upucavanje koda ili ?
[ MilanCeNS @ 25.02.2018. 07:06 ] @
Ja već godinama čitam Bogdanove odgovore na mnoga pitanja i oduševljavam se
koliko ima volje i želje da pomogne. Svaka čast.
[ cukovanny @ 25.02.2018. 08:34 ] @
istina.

da objasnim šta radim i zbog čega pokrenuo temu :

radim (meni) zanimljiv projekat MCU kontrolisanog smps buck/bust tipa.
to treba da bude integrisano okruženje sa LCD info na prvu ruku U(in) / U(out), I(in) / I (out) , remote ethernet parametri, digitalna štela izlaza, ogr. struje itd itd. sve to na FN sistemima... Integrisani invertor monofazni/dvofazni/trofazni ... itd itd


ovakva rešenja da se kupe gotova, cenovna kategorija zavisno od snage ide od 500eur do 20k eur.


avr sam pretresao insideout. dspic mi nije ciljana platforma, ali stm32f10X je logična.
mali ima snage za sve što mi treba.
na žalost, atmega ima snage samo toliko da radi korekciju pwm , ma koja topologija smps-a bila ...
ima, doduše, malo preko snage da se poneki potrošač uklj isklj , i to samo ako se radi sa kompariranjem, nikako A/D ulazima.

brzina korekcije napona izlaza smps u sledećem kodu AVR-a (obećao sam) je oko 20.000 puta u sekundi.
stvar radi lepo i sa velikim snagama. ali to nije tema ovog posta i foruma.
pwm je 100Khz, "phase correct pwm" , deathtime propisan. H most zadovoljan.

Code:
// 03.02.2018       100kHz
// Pin 9 i 10 su izlazi PWM
// A0 piše kec ili 0 u zavisnosti kako si podesio v.divider ili tl431 ako hoćeš opto razdvajanje

#define Kristal 16000000            // kristal arduina 16mhz
#define Frekvencija 100000            // ovde ide frekv pwm koja ti treba

#define VrednostICR1 Kristal/Frekvencija/2
#define VrednostOCR1A (VrednostICR1 / 2) + 10
#define VrednostOCR1B (VrednostICR1 / 2) - 10

//-----------------------------------------------------------------------
//
//-----------------------------------------------------------------------
void setup() {
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);

  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;

  TCCR1B |= _BV(CS10);


  ICR1 = VrednostICR1;

  OCR1A = VrednostOCR1A;
  TCCR1A |= _BV(COM1A1) | _BV(COM1A0);

  OCR1B = VrednostOCR1B;
  TCCR1A |= _BV(COM1B1);

  TCCR1B |= _BV(WGM13);
  TCCR1A |= _BV(WGM11);
}
//-----------------------------------------------------------------------
// pin A0 komparator 2.2V valjda, ili je 1.1V ?!?, proveri koji je nivo bapona jedinica u atmega168 ???
//-----------------------------------------------------------------------
void loop()
{
  if (PINC & 1)            // arduino A0 pin atmega168
  {
    OCR1A = VrednostICR1;
    OCR1B = 0;
  }
  else
  {
    OCR1A = VrednostOCR1A;
    OCR1B = VrednostOCR1B;
  }
}


UPDATE : referentni nivo jedinice u atmega je okolo 2.2-2.3VDC

[ goran_68 @ 25.02.2018. 09:29 ] @
Mislim da ti je bolja platforma STM32F4 ili čak STM32F7. Imaš familije sa LCD i ethernet kontrolerom na čipu, imaš DSP i FPU, moćniji sistem tajmera za PWM... Takođe, što bi se uopšte zezao sa xxxduino. Uzmi lepo Atollic, CubeMX, STM32Cube_FW_F4 ili STM32Cube_FW_F7 i neki STM32_Discovery i vozi.
[ bogdan.kecman @ 25.02.2018. 13:29 ] @
Citat:
cukovanny:
ne radi u stm32duino okruženju sa copy/paste ni iz daleka.

pih bre, na prvi pogled je delovalo da je 1/1

Citat:
cukovanny:
Citat:
u svakom slucaju savet je mani se arduina, skini atolic true studio (sad se zove valjda stm32 true studio), full je ide i free je i radi do jaja sa stm32, skini cubemx, tamo lepo nacrtas sta oces i on ti izgenerise sve ovo

to je sjajno! treba li neki hw specijalan za upucavanje koda ili ?


pa vidi ti u svaki ARM mozes da upucas sw preko seriskog porta to si do sada valjda skontao.. truestudio sigurno nece raditi kroz arduino bootloader na bluepill-u ili sta vec od stm32duino hw-a koristis ali taj bootloader je svakako uzas tako da ga savetujem zaobilaziti svakako...

ne znam sta od hw-a trosis ali obzirom da pises o F103 kontam da si verovatno kupio par bluepill-a ili redpill-a posto je to najjeftinija plocka sa 103 koju mozes da nadjes :D (obrati paznju na bluiepill R10 je 10k umesto 1k5 usb pullup i zbog toga usb ne radi svuda kako treba, zamenis taj otpornik sa 1k5 i radi usb mnogo bolje) ... elem, ako imas bluepill nekoliko komada mozes jedan da promovises u black magic probe - odlican debuger i programer alat... ili, sto je idealna varijanta, uzmes ovako nesto za 3-4$:
https://www.ebay.com/itm/Mini-...M32-w-Metal-Shell/122929448536
https://www.ebay.com/itm/Mini-...STM32-Metal-Shell/152216586407
to ti je stlink v2 klon podrzava ga skoro sve sto radi sa armovima direkt debagiras iz truestudia ili keila ili ...

tako da.. stm32cubemx prvo, u njemu naklikas i konfigurises svu periferiju, on ti izgenerise projekat za truestudio (ili keil ili ..) i onda ucitas projekat u truestudio i vozi misko
https://pasteboard.co/H9hkLYi.png

https://pasteboard.co/H9hlo12.png

https://pasteboard.co/H9hlLYX.png

[ bogdan.kecman @ 25.02.2018. 13:47 ] @
inace slazem se sa kolegom da ti je F4 ili F7 bolje resenje, ne samo zbog dsp i fpu vec ako hoces da imas eternet i lcd onda ti je F1 malecan ...

pogledaj razne discovery plocke ovde: http://www.st.com/en/evaluatio...querycriteria=productId=LN1848
http://www.st.com/content/st_c...ery-kits/32f746gdiscovery.html
http://www.st.com/content/st_c...ery-kits/32f429idiscovery.html

malo vise kosta nego bluepill ali kad pogledas sta sve dobijes isplati se
[ goran_68 @ 25.02.2018. 16:20 ] @
Treba ti žešća matematika za konvertor koji misliš uraditi. Neće moći STM32F1xx a dsPIC je mnogo bolje rešenje nego taj STM. U praznom hodu i nekako ali zamisli šta se dešava pri naglim promenama opterećenja. Moraš da imaš regulaciju a za to ti treba matematika. LCD ima da ti bude najmanja briga. Evo ti jedan AN od ST baš na tu temu "Buck-boost converter using the STM32F334 Discovery kit":

http://www.st.com/content/ccc/...translations/en.DM00108726.pdf
[ cukovanny @ 25.02.2018. 19:17 ] @
hvala kraljevi na savetima, ali ja sam samo obična amaterčina koji uživam u smps-u, konverzijama energija itd....
volim i mikrokontrolere i to mi je sve deo hobija koji jako volim i "gubim" mnogo vremena .... samim tim sam daleko od nivoa znanja koji se zahteva za ono što mi preporučujete.

sve što sam radio oko MCU su 8pin/8bit atmel i sada arduino/atmega...
u elektronici sam isto tako početnik.

kad vidim koliko toga moram savladati u stm32 familiji kontrolera, dođe mi da odem na neki odmor od 5 meseci samo da mu povatam registre i flow :)

mada, iz iskustva znam da će to sve doći radom i trudom....

Citat:
goran_68: Treba ti žešća matematika za konvertor koji misliš uraditi. Neće moći STM32F1xx a dsPIC je mnogo bolje rešenje nego taj STM. U praznom hodu i nekako ali zamisli šta se dešava pri naglim promenama opterećenja. Moraš da imaš regulaciju a za to ti treba matematika. LCD ima da ti bude najmanja briga. Evo ti jedan AN od ST baš na tu temu "Buck-boost converter using the STM32F334 Discovery kit":

http://www.st.com/content/ccc/...translations/en.DM00108726.pdf


za sada sam hteo da ono parče koda sa početka teme "preteram" u arduino ide, i da mi to proradi, pa da vidim kakav će tranzijentni odziv imati smps kojeg pogoni stm32f103 i kojeg simultano mori upravljanje lcd i ethernetom.... međutim dokumentacija i primeri na netu su gotovo nepostojeći .... nigde ne mogu da nađem kako je dasa koji je portovao librarije nazvao delove registra i maske kad ih je preneo u arduino ide...


vidim ja, učiće se taj stm32cubemx i da se kupuje st-link....

Citat:
bogdan.kecman:
ne znam sta od hw-a trosis ali obzirom da pises o F103 kontam da si verovatno kupio par bluepill-a ili redpill-a posto je to najjeftinija plocka sa 103 koju mozes da nadjes :D (obrati paznju na bluiepill R10 je 10k umesto 1k5 usb pullup i zbog toga usb ne radi svuda kako treba, zamenis taj otpornik sa 1k5 i radi usb mnogo bolje) ... elem, ako imas bluepill nekoliko komada mozes jedan da promovises u black magic probe - odlican debuger i programer alat... ili, sto je idealna varijanta, uzmes ovako nesto za 3-4$:
https://www.ebay.com/itm/Mini-...M32-w-Metal-Shell/122929448536
https://www.ebay.com/itm/Mini-...STM32-Metal-Shell/152216586407
to ti je stlink v2 klon podrzava ga skoro sve sto radi sa armovima direkt debagiras iz truestudia ili keila ili ...



trošim STM32F103C8T6, to je valjda bluepill. nabavio 10 komada za sitne pare. privukao me je snagom , cenom , jednostavnošću (khm, khm) ...
jes jednostavan kad hoćeš nešto jednostavno, ali složeni poslovi zahtevaju ozb posvećenost. vidim da je loše portovan čitav i2c i wire i da ne radi (kažu radi).
pročitaću sve što si mi napisao detaljno. volim ekstrakte znanja , ali isto tako svestan da prečica nema ....

[ goran_68 @ 25.02.2018. 20:13 ] @
Ako ti treba postovaću ovde par primera za blue pill i CUbeMX
[ mikikg @ 25.02.2018. 21:40 ] @
Pogledaj ovo za pocetak:
http://www.elitesecurity.org/p3794487

Preporucujem ti da uzmes Keil MDK ARM, Arduino IDE "posle" ... : )

Tajmere od STM32 bi valjalo da savladas, mora se cita dokumentacija, evo cookbook sta sve rade sa njima:
http://www.st.com/content/ccc/...translations/en.DM00236305.pdf

Taj PWM u STM32F103 je "onako", prosecan, ima ovakvu rezoluciju naspram generisane frekvencije:

16bit @~1kHz,
15bit @2k,
14bit @4k,
13bit @8k,
12bit @16k,
11bit @32k,
10bit @64k
9bit @128k
8bit @256k

Recimo dsPIC33EP64MC202 tuce ove rezultate 3-4x bolje i ako je 16bitni kontroler (DSC), famozni Texas Instruments isto 16bit DSC Piccolo tuce te rezultate 10x, dok njihov Delfino tuce jedno 15x !!!
Piccolo ima 150ps rezoluciju PWM-a, Delfino 70ps (piko sekunde)!
Drugi ST ARM kontroleri imaju HRPWM, pogledaj malo oko toga, cisto da znas kakve su mogucnosti i sta mozes da ocekujes ...

ST-LinkV2 nabavi, to je stalno potrebna stvarcica a to ce ti ustedeti gomilu muka sa USB i bootloaderima i cudima raznim, uzmes Keil i taj programator, nabodes na Blue Pill i vozi Misko, imas odlican debug i teraj, snalazi se, to je to :)
[ mikikg @ 25.02.2018. 22:24 ] @
Jos malo dokumentacije oko STM32 tajmera:
http://homepage.cem.itesm.mx/c...rs/SLIDES/STM32F3%20Timers.pdf
http://mazsola.iit.uni-miskolc...4/DM00042534_stm32f4_timer.pdf

Ovo je za F7 tajmere, imaju neke jos dodatne opcije koje nemaju druge serije:
http://www.st.com/content/ccc/...n.STM32F7_WDG_TIMERS_GPTIM.pdf

Dithering za poboljsanje rezolucije:
http://www.st.com/content/ccc/...translations/en.DM00119042.pdf

Tajmeru su im generalno vrlo "mocni" ali i kompleksni, srz je skontati kako oni interno rade i kako se to moze iskoristi za neku konkretnu potrebu, ima gomila mogucih kombinacija resenja sa tajmerima, uvezu se medjusobno ovako-onako, preko DMA sa A/D konverterom i tako dalje, krenes lagano od pocetka samo da pokrenes PWM na nekoj ucestanosti u open-loop postavci pa posle dalje redom jedno po jedno resavas, tu ne pomaze ni Arduino ni CubeMX, jednostavno mora da se poznaje interna struktura tajmer modula da bi mogao da odradis ono sto hoces. Cak tu postoje vrlo specificne funkcije bas predvidjene za SMPS, postoje break-inputi (fault) i dead-time generator, to je bas za to predvidjeno ali moras da skontas tacno kako to interno funkcionise da bi mogtao da iskoristis.

Kad ti se to malo "zavrti" onda predji na A/D konverter pa probaj da stavis to u kontrolnu petlju ... tu pocinje veselje ali dok dodjes dotle neke stvari ce ti biti jasnije ili pitaj ovde sta nije jasno ...



[Ovu poruku je menjao mikikg dana 26.02.2018. u 00:40 GMT+1]
[ mikikg @ 25.02.2018. 22:51 ] @
PS: Keil je super zgodan jer mu je KOMPLETNA definicija svih registra i flagova u jednom heder fajlu stm32f10x.h, 98% svih naziva se uglavnom poklapa sa oficialnom dokumentacijom a i ako nesto se ne poklapa, caskom moze da se skoci u taj fajl i pronadje tacna definicija tako da nema previse lutanja kao sa ostalim StdLib-ovima i gomilom overhead krsha koji dodaju Arduino i CubeMX, tu se vrte prakticno 4-5 neka registra koja zavrsavaju posao koje prozivas u po jednoj C instrukciji, prosto ...
[ mikikg @ 25.02.2018. 23:11 ] @
Pitanje za iskusnije STM-ovce, sto ne moze onda da se Blue Pull pretvori u ST-LinkV2 (ne u Black Magic Probe) ?

Jel ima HEX negde za ST-LinkV2? (mora da ga ima negde cim kinezi to stancuju na tone)

Kako isprogramirati to ako korisnik na lageru ima samo Blue Pill(ove) i seriske adaptere? : )

Da se prvo napravi BMP od Blue Pill preko BOOT1-USART, pa sa njim da se upuca HEX za St-LinkV2, ili moze da se preskoci BMP korak?
[ bogdan.kecman @ 26.02.2018. 01:43 ] @
- sto bre keil koji kosta ko bubreg kad je truestudio sada bedza, a u
kombinaciji sa cubemx i jedan i drugi koriste potpuno iste hedere (te su
definicije portova, registara i slicno absolutno identicne)... pri tome
je truestudio sada u vlasnistvu stm-a i radi besno sa svim stm32 cipovima?

- moze bluepill u st-link v2 direktno, upucas mu direkt hex od st-linkv2
sa nekim drugim programatorom (drugim stiinkom) .. mada su vec gotovi
stlinkovi toliko bedza da se ne isplati :D (nisam otvarao da vidim dal
je unutra st32 ili gd32, gd32 je brza kopija pogledaj sta je sjaak pisao
kod njega na blogu https://smdprutser.nl/blog/category/gd32/ )
[ bogdan.kecman @ 26.02.2018. 01:47 ] @
inace trenutno no1 ide po meni je https://www.embitz.org/ ... em je
free, em je mali, em je sumanuto brz em su uspeli da nabudze svoj
debuger koji izvlaci kroz stlinkv2 stvari koje nijedan drugi debuger ne
moze, tj za koje svi debugeri zahtevaju one 500eur+ jtag adaptere... tj.
ima "live variables" i "EBmonitor" (i nije vezan za stm radi sa svima)
... mada ja za pocetnike poput kolege op-a savetujem stm32cubemx +
truestudio .. mnogo bolji ide od keila, dzaba, potpuno podrzan od strane
stm-a, isprobano dobar i stabilan..
[ cukovanny @ 26.02.2018. 06:47 ] @
Citat:
goran_68: Ako ti treba postovaću ovde par primera za blue pill i CUbeMX


ajde goran_68
idi u detalje koliko ti vreme i obaveze dozvoljavaju.
ja sam trenutno u hendikepu jer nemam taj mali Mini ST-Link V2 Stlink Emulator Downloader Programming STM8 STM32 w/ Metal Shell.
ali ide jedan iz kine i jedan iz bg, "paćmo gubit zimskoga vremena" :)


kolega mikikg, neka si se uključio, znam da voliš dsPic :)
ima u ovom projektu tvojih zasluga , ali i direktnih komponenti, ali o tome tamo u podforumu elektronika :)
reduciri footprintova koje si mi poklonio su mi bili presudni da počnem da se bavim sa integralcima veličine kapljice kalaja na lemilu :)
odoh sad na posao pa te čitam posle.
pozdrav svima.
[ bogdan.kecman @ 26.02.2018. 06:53 ] @
za pocetak instaliraj stm32cubemx i probaj ga, klikci po njemu
[ bogdan.kecman @ 26.02.2018. 07:57 ] @
prva dva videa za startup

https://www.youtube.com/watch?v=YZjnCOun1wU

https://www.youtube.com/watch?v=JnmjmP2Xchg
[ mikikg @ 27.02.2018. 02:58 ] @
Kad se malo zadje dublje u te tajmere i PWM, onda vidis da je isto tako jednostavno uraditi i full-bridge i jos preko toga dodati jedan PWM za neku "ZVS/ZCS Macolijadu" i sa onim Si8233 drajverima mozes da napravis kilovatni pretvarac za koje hoces napone i struje : ) ... Inace mi fali jedan od 200+A ... :D
Samo se sloze tajmeri i konfigurisu da tacno to rade i to je opako dobra tehnika. Naravno neophodno je prvo poznavanje topologije pretvaraca pa tek onda to sprovesti u ARM code sto sve zajedno nije bas lako, ali tu smo pa pitaj sve sto ti nije jasno.

Moguce je praviti trofazne pretvarace, moguce je uraditi isto jako zanimljive polifazne-buck-ove, moze isto Ćuk konverter da se napravi sa istovremenom buck/bust funkcijom!
Pa su tu jos i LLC, pa onda sve vise potrebna stvar za sinhrone ispravljace u sekundaru i tako dalje.

Jedan MCU moze da odradi prakticno celu logiku pretvaraca za bilo koju topologiju, iskoriste se skoro svi resursi u MCU i samo to radi, tako da LCD/Display/Touch, mreza WiFi, LAN ovo-ono to taj MCU ne moze da radi niti treba to taj MCU da radi : ) Odvoji jeda USART (opciono galvanski razdvojen) pa pricaj sa nekim drugim MCU koji se bavi tim stvarima.

[Ovu poruku je menjao mikikg dana 27.02.2018. u 04:17 GMT+1]
[ cukovanny @ 27.02.2018. 09:19 ] @
Citat:
mikikg: Kad se malo zadje dublje u te tajmere i PWM, onda vidis da je isto tako jednostavno uraditi i full-bridge i jos preko toga dodati jedan PWM za neku "ZVS/ZCS Macolijadu" i sa onim Si8233 drajverima mozes da napravis kilovatni pretvarac za koje hoces napone i struje : ) ... Inace mi fali jedan od 200+A ... :D
Samo se sloze tajmeri i konfigurisu da tacno to rade i to je opako dobra tehnika. Naravno neophodno je prvo poznavanje topologije pretvaraca pa tek onda to sprovesti u ARM code sto sve zajedno nije bas lako, ali tu smo pa pitaj sve sto ti nije jasno.

Moguce je praviti trofazne pretvarace, moguce je uraditi isto jako zanimljive polifazne-buck-ove, moze isto Ćuk konverter da se napravi sa istovremenom buck/bust funkcijom!
Pa su tu jos i LLC, pa onda sve vise potrebna stvar za sinhrone ispravljace u sekundaru i tako dalje.

Jedan MCU moze da odradi prakticno celu logiku pretvaraca za bilo koju topologiju, iskoriste se skoro svi resursi u MCU i samo to radi, tako da LCD/Display/Touch, mreza WiFi, LAN ovo-ono to taj MCU ne moze da radi niti treba to taj MCU da radi : ) Odvoji jeda USART (opciono galvanski razdvojen) pa pricaj sa nekim drugim MCU koji se bavi tim stvarima.

[Ovu poruku je menjao mikikg dana 27.02.2018. u 04:17 GMT+1]


što se tiče zvs/zcs, daleko smo od toga ... tek smo provalili malo topologije i zagrebali ispod površine onoga što svaki laik vidi kao "trafo brale" :)
tek smo (persiram sebi) savladali malo topologije half bridge, full bridge ... ma i to nismo dobro baš savladali ...
si8233 mi stoje, nisam ih proučavao zbog nedostatka životnoga vremena, a dizajn koji radim se zasniva baš na "macolijadi 2000" :) malo je to izmenjeno , ali u suštini lepo radi, čak i sa atmega168 kontrolom. planiram kobogda u 62.oj godini :) da počnem da se bavim i invertorima, za početak monofaznim.

dok se proučava literatura od goran_68 i bogdan_kecman, sinoć sam uradio izmenjeni i dopunjeni kod kvalitetnog push pulla za atmega168/328.
MCU sada koriguje pwm ispunu od zadatog do zadatog, a ciklusi kontrole su na 30Khz bukvalno "pulse to pulse". ja radim na 100Khz pa mi ne smeta kontrola na svako tri pulsa. kod je konačan i dobro radi.

Code:
// 26.02.2018
// Pin 9 i 10 su izlazi PWM
// A0 pin meri napon

#define Kristal 16000000            // Kristal Atmega168 NE MENJAJ
#define Frekvencija 100000                                            // PODESI FREKV . DOZVOLJENO JE DO 300kHz

#define VrednostICR1 Kristal/Frekvencija/2
// 47.5% duty cycle

#define PeriodICR1 VrednostICR1 / 2

#define DeadTime 5                              // PODESAVANJE DEADTIME-A. OD 1 DO 10 JE OK.
#define VrednostOCR1A PeriodICR1 + DeadTime
#define VrednostOCR1B PeriodICR1 - DeadTime

unsigned int OstvareniDuty=0,Duty=0;

//-----------------------------------------------------------------------
//
//-----------------------------------------------------------------------
void setup()
{
    pinMode(9, OUTPUT);
    pinMode(10, OUTPUT);

    TCCR1A = 0;
    TCCR1B = 0;
    TCNT1 = 0;

    TCCR1B |= _BV(CS10);


    ICR1 = VrednostICR1;

    OCR1A = VrednostICR1;
    TCCR1A |= _BV(COM1A1) | _BV(COM1A0);

    OCR1B = 0;
    TCCR1A |= _BV(COM1B1);

    TCCR1B |= _BV(WGM13);
    TCCR1A |= _BV(WGM11);
}
//-----------------------------------------------------------------------
//
//-----------------------------------------------------------------------
void loop()
{
    if(PINC & 1)                                  // Arduino A0 pin atmega168&328. Maska je &2 za pin 1, &4 za pin2 itd ...
        {
        OCR1A = VrednostICR1;
        OCR1B = 0;
        OstvareniDuty /= 2;
        }
    else
        {
        if(OstvareniDuty < 50)                // PODESITI MAX DUTY PREMA PRORACUNU SMPS. MAX JE 90%
            OstvareniDuty++;

        Duty = OstvareniDuty;
        Duty *=PeriodICR1;
        Duty /=100;
  
        OCR1A = VrednostICR1-Duty;
        OCR1B = Duty;
        }
}


[Ovu poruku je menjao cukovanny dana 27.02.2018. u 11:39 GMT+1]
[ cukovanny @ 08.03.2018. 12:20 ] @
dopuna:

važna stvar: atmegaXXX ima watchdog koji je poseban oscilator na chipu.
naravski, treba za ovakav projekat koristiti istoga:


u include delu koda ide:
Code:
#include <avr/wdt.h>




u setup() delu koda:
Code:
wdt_enable(WDTO_15MS);




na kraju loop() petlje ide:
Code:
wdt_reset();




pade mi na pamet , jer će ovaj smps da ide na 1700m nadmorske đe će da pucaju gromovi letos fino.
videćemo da li će , i koliko preživeti ...



[ cukovanny @ 17.03.2018. 21:23 ] @
hehe osećam se kao da vodim unutrašnji monolog, elem, još uvek dok se proučava CubeMX i Atollic i čeka STLink...
proučavam stm32f10x.h i našao sam vrednosti bitova registra TIM_CCER

/******************* Bit definition for TIM_CCER register *******************/
#define TIM_CCER_CC1E ((uint16_t)0x0001) /*!<Capture/Compare 1 output enable */
#define TIM_CCER_CC1P ((uint16_t)0x0002) /*!<Capture/Compare 1 output Polarity */
#define TIM_CCER_CC1NE ((uint16_t)0x0004) /*!<Capture/Compare 1 Complementary output enable */
#define TIM_CCER_CC1NP ((uint16_t)0x0008) /*!<Capture/Compare 1 Complementary output Polarity */
#define TIM_CCER_CC2E ((uint16_t)0x0010) /*!<Capture/Compare 2 output enable */
#define TIM_CCER_CC2P ((uint16_t)0x0020) /*!<Capture/Compare 2 output Polarity */
#define TIM_CCER_CC2NE ((uint16_t)0x0040) /*!<Capture/Compare 2 Complementary output enable */
#define TIM_CCER_CC2NP ((uint16_t)0x0080) /*!<Capture/Compare 2 Complementary output Polarity */
#define TIM_CCER_CC3E ((uint16_t)0x0100) /*!<Capture/Compare 3 output enable */
#define TIM_CCER_CC3P ((uint16_t)0x0200) /*!<Capture/Compare 3 output Polarity */
#define TIM_CCER_CC3NE ((uint16_t)0x0400) /*!<Capture/Compare 3 Complementary output enable */
#define TIM_CCER_CC3NP ((uint16_t)0x0800) /*!<Capture/Compare 3 Complementary output Polarity */
#define TIM_CCER_CC4E ((uint16_t)0x1000) /*!<Capture/Compare 4 output enable */
#define TIM_CCER_CC4P ((uint16_t)0x2000) /*!<Capture/Compare 4 output Polarity */
#define TIM_CCER_CC4NP ((uint16_t)0x8000) /*!<Capture/Compare 4 Complementary output Polarity */



nađem nekog zemljaka koji iz nekog razloga sa par redova iz stm32duino okruženja lako podešava dva komplementarna PWM sledećim linijama koda:

Code:
#define PWM_OUT PA8                                       //prvi PWM
#define PWM_OUT_COMP PB13                            //invertovani PWM

HardwareTimer timer1 = HardwareTimer(1);
timer1.setPrescaleFactor(1);
timer1.setPeriod(10);                                         //period 10 je 100kHz... 

  
  pinMode(PWM_OUT, PWM);                              // podesimo da je prvi izlaz tipa pwm
 pinMode(PWM_OUT_COMP, PWM);                     // isto drugi izlaz pwm

  
  timer_dev *t = TIMER1;                                //refers t to Timer 8 memory location, how to read back?
  timer_reg_map r = t->regs;
   

  bitSet(r.adv->CCER,0);                                //this should enable complimentary outputs
  bitSet(r.adv->CCER,2);


.... te se uz pomoć gornjih redova koda sada lako podešava ispuna pwm funkcijom na pinu PWM_OUT što automatski prati komplementarna vrednost na pinu PWM_OUT_COMP. funkcija koja se koristi je pwmWrite(gpioPIN,duty);

pitanje> da li se izmenom vrednosti CCER registra na druge vrednosti može lako dobiti push pull na PA8 i PB13 umesto komplementarnog, i ako da koje vrednosti da stavim umesto 0 i 2 ?
[ bogdan.kecman @ 17.03.2018. 22:23 ] @
Citat:
da li se izmenom vrednosti CCER registra na druge vrednosti
može lako dobiti push pull na PA8 i PB13 umesto komplementarnog,
i ako da koje vrednosti da stavim umesto 0 i 2 ?


cek, ne razumem, kako mislis push/pull na pa8 i pb13 umesto komplementarnog?

to su dve potpuno razlicite stvari o kojima pricas, push/pull je tip
izlaza pina, hardwerski tip izlaza, da li je pin push/pull (forsirano
vcc za high i forsirano vss za low) ili je open drain (forsirano vss za
low, hiz za high), pa dodatno moze da ima pull-up i pull-down otpornik...

to nema nikakve veze sa logicki sta se nalazi na tom pinu (ako je na pwm
pinu izlaz high na pwm komplementarnom je low - uz eventualnu neku dead
time kalkulaciju)

tako da na sta mislis kada kazes push pull izlaz iz pwm-a ?

znam da to postoji kao "push pull pwm" arhitektura smps uredjaja ali bas
zbog toga valjda i imas taj komplementarni izlaz, da bi jedan vezao na
push tradnzu a drugi na pull trandzu
[ mikikg @ 18.03.2018. 11:58 ] @
Mozda ovo pomogne:
http://we.easyelectronics.ru/_...mere-1-kontrollerov-stm32.html

U push-pull pwm modu Duty mora bit manji od 50% ...