Inverter with a pure sine in 15 minutes or “power electronics for everyone”

 3r369595. 3r3-31. What is power electronics? Without a doubt, this is a whole world! Modern and full of comfort. Many people think of power electronics as something “magical” and distant, but look around - almost everything that surrounds us contains a power converter: a power supply unit for a laptop, an LED lamp, UPS, various regulators, voltage stabilizers, chastotniki (FC ) in ventilation or elevator and more. Most of this equipment makes our lives comfortable and safe. 3r38282.  3r369595. 3r38282.  3r369595. Development of power electronics for several reasons is one of the most difficult areas of electronics - the cost of error here is very high, while the development of power converters has always attracted amateurs, DIY engineers and not only. Surely you wanted to build a powerful power supply for some of your project? Or maybe online UPS for a couple of kW and not go broke? Or maybe chastotnik to the workshop? 3r38282.  3r369595. 3r38282.  3r369595. Today I will talk about my small open project, or rather about its part, which will allow anyone who wants to step into the world of developing power electronics and stay alive. As a demonstration of the possibilities, I will show you how to assemble a voltage inverter from 12V DC to 230V AC with a sine at the output in 15 minutes. Intrigued? Go! 3r38282.  3r369595. 3r38282.  3r369595. 3r314. 3r38282.  3r369595. unexpectedly wrote to me. PCBway , many of them probably ordered the board, and offered to cooperate. They very actively support open-source iron projects, that is, the very initiative of CERN - Open Source Hardware. Cooperation is simple, understandable for both parties - they supply me with free boards for my projects, and I open them, well, I post them on their website, in other places already at will. For me, this has become an additional motivation, and most importantly my conscience is clear, because I have been ordering boards and prototypes from them for several years, and for mass production I have been telling them to my friends and partners. Now I’ve got a bonus for this in the form of free boards for small projects, you can write more often on Habr)) 3r33682.  3r369595. 3r38282.  3r369595. And then the ice started, it was decided to create not just the module described earlier, but a whole set of the developer of power electronics and make it open and accessible to everyone. 3r38282.  3r369595. 3r38282.  3r369595. 3r3666. Project Structure 3r3667. 3r38282.  3r369595. At the beginning of the article, I mentioned that I’ll tell you today about only one part - it is 3r-3593. power module half bridge 3r3r-3594. . He alone allows you to create a converter, simply by screwing a control circuit, for example, debugging STM32-Discovery, Arduino, TMS32? TL494 or what you own there. Binding to any platform or MK is not at all. 3r38282.  3r369595. 3r38282.  3r369595. Only this is not the whole project, but part)) What is the power converter made of? First of all, the power unit, in order for it to work, a certain control module is needed in order to understand what is happening, an indication is needed, and in order to understand what is happening from a safe distance, an interface, for example, Modbus RTU or CAN, is needed. 3r38282.  3r369595. 3r38282.  3r369595. As a result, the overall structure of the project is as follows: 3r33682.  3r369595. 3r38282.  3r369595. 3r3128. 3r38282.  3r369595. 3r38282.  3r369595. Probably in the future I will also write a program for calculating transformers and chokes, both conventional and planar. So far so. Different parts of the diagram in draft form have already been implemented and tested in two projects, after minor improvements, articles will also be written on them and source codes will be available. 3r38282.  3r369595. 3r38282.  3r369595. 3r3666. Power module half bridge
3r38282.  3r369595. Now it's time to take a closer look at today's hero. The module is universal and allows working with Mosfet and IGBT transistors, with both low-voltage and high-voltage switches up to 1200V. 3r38282.  3r369595. 3r38282.  3r369595. 3r3146. Features of the module: 3r3147. 3r38282.  3r369595. 3r3633.  3r369595.
Galvanic isolation of the control (digital) side from the power. Insulation breakdown voltage 3 kV;
 3r369595.
The upper and lower keys are independent, each has its own galvanically isolated driver and galvanically isolated dc /dc;
 3r369595.
A modern driver from Infineon is used - 1EDC60I12AHXUMA1. Pulse current opening /closing - 6A /10A. The maximum frequency is 1 MHz (tested up to 1.5 MHz is stable);
 3r369595.
Hardware current protection: shunt + op-amp + comparator + optocoupler;
 3r369595.
The maximum current is 20A. Limited not by keys, but by the size of the radiator and the thickness of the copper polygons.
 3r369595.
3r38282.  3r369595. 3r38282.  3r369595. The article features the 1st revision of the module, it is fully working, but there will be a 2nd revision, in which purely constructive shortcomings are eliminated and the connectors are changed to more convenient ones. After completing the creation of the documentation, I threw the gerber into the PCBway and after 6 days the courier knocked on the door and handed me this delight: 3r38282  3r369595. 3r38282.  3r369595. 3r3176. 3r33177.
3r38282.  3r369595. 3r38282.  3r369595. A week later, they finally brought [s] on dogs 3r3184. accessories from one excellent domestic store. As a result, everything was mounted:
 3r369595. 3r38282.  3r369595. 3r3189. 3r3190.
3r38282.  3r369595. 3r38282.  3r369595. 3r3196. 3r3197.
3r38282.  3r369595. 3r38282.  3r369595. Before moving on, let's take a look at the module schematic diagram. You can download it here - 3r3634. PDF
. 3r38282.  3r369595. 3r38282.  3r369595. There is nothing complicated or magical. Normal half bridge: 2 keys at the bottom, 2 at the top, you can solder one by one. The driver as above wrote from the family 1ED, very angry and immortal. Everywhere on the power there is an indication, including + 12V output dc /dc. The protection is implemented on the AND logical element, in case of overcurrent, the comparator will give out + 3.3V, they will light the optocoupler and it will pull one of the AND inputs to the ground, which means establishing log.0 and the PWM signal from the drivers will disappear. AND with 3 inputs is used specially, in the next revision I plan to make also protection against radiator overheating and get the error signal there too. All sources will be at the end of the article. 3r38282.  3r369595. 3r38282.  3r369595. 3r3666. We collect the model of the inverter
3r38282.  3r369595. I thought for a long time on how to demonstrate the work of the module, so that it is not too boring, and useful, and not very difficult, so that anyone could repeat it. Therefore, I stopped at the voltage inverter, they are used to work with solar panels, if something bangs on the low-voltage side, it’s not scary, but on the high-voltage side, just when you turn on, don’t put your hands in there. 3r38282.  3r369595. 3r38282.  3r369595. The inverter itself is outrageously simple, by the way, MAP Energia rivet just such, here's an example of even the commercial realization of this idea. The operation of the inverter is to form from a constant voltage of 12V alternating sinusoidal form with a frequency of 50 Hz, because the usual transformer at 50 Hz is used to work with just that. I use some kind of Soviet, like OSM, 220V factory winding and is used as a secondary, and the primary ~ 8V is wound with a copper bus. It looks like this:
 3r369595. 3r38282.  3r369595. Inverter with a pure sine in 15 minutes or “power electronics for everyone” 3r38282.  3r369595. 3r38282.  3r369595. And this monster is only 400 watts! The weight of the transformer is about 5-7 kg. It feels like, if you drop it on your leg, then you won't be taken to the army for sure. Actually, this is the minus of inverters with "iron" transformers, they are huge and heavy. Plus them is that these inverters are soooo simple, do not require any experience to create and of course are cheap. 3r38282.  3r369595. 3r38282.  3r369595. Now let's connect the modules and the transformer. In fact, the module for the developer should be presented simply as a “black box” which has an input of 2 PWMs and 3 power outputs: VCC, GND and the actual output of the half bridge. 3r38282.  3r369595. 3r38282.  3r369595. 3r38282.  3r369595. 3r38282.  3r369595. Yeah, it took only 3 external elements: a transformer + LC filter. For the latter, I made a choke by winding the wire from the module to the transformer onto a ring of Kool Mu material, size R3? with a permeability of 6? and an inductance of about 10 μH. Of course, the throttle should be calculated, but we need 15 minutes later)) In general, if you drive something like 400 W, then you need a ring of R46 size (this is the outer diameter). Capacity - 1-10 microfarad film, that's enough. In fact, you can not put a capacitor as a saving, because the capacity of the transformer winding is healthy in general, the Chinese and MAP did just that)) The choke looks like this: 3r38282.  3r369595. 3r38282.  3r369595.  3r369595. 3r38282.  3r369595.
3r38282.  3r369595. 3r38282.  3r369595. Also in the layout is used battery Delta HR12-1? respectively, at 12V and a capacity of 17 Ah. We will control the converter from the STM32F469-Discovery debug board. 3r38282.  3r369595. 3r38282.  3r369595. 3r3666. Code
3r38282.  3r369595. Initially, the control was supposed to use my STM32VL-Disco, obtained at the exhibition back in 201? but it so happened that it was on this layout that she was destined to die when all the code was written and the layout was launched. I forgot about oscilloscope probes and combined 2 lands, amen. As a result, everything was rewritten on the STM32F469NIH? it was this debugging that was at hand, so there will be 2 projects: for the F100 and for the F46? both are checked. Project compiled for TrueSTUDIO, version of the Eclipse from ST. 3r38282.  3r369595. 3r38282.  3r369595.
Footcloth code [/b]
#include "main.h"
3r369595. /********************************************* Sinus table ** ************************************************** ****** /
3r369595. uint16_t sinData[240]= 3r39595. {?1?2?3?5?6?7?9?10?11?13?14?15?16?18?19?20?22?23?24?25?27?28?29?30?32?33?34?35?37? ???. 38?39?40?41?43?44?45?46?47?48?50?51?52?53?54?55?56?57?58?59?60?61?62?63?64?65?66?67?68?69? ???. 70?71?72?73?74?75?76?76?77?78?79?80?80?81?82?83?83?84?85?85?86?87?87?88?89?89?90?90?91?91? 3 r363695. 92?92?93?93?94?94?95?95?95?96?96?96?97?97?97?98?98?98?98?98?99?99?99?99?99?99?99?99?99?99? 3r36959. 99?99?99?99?99?99?99?99?99?99?98?98?98?98?98?97?97?97?96?96?96?95?95?95?94?94?93?93?92?92? 3 r363695. 91?91?90?90?89?89?88?87?87?86?85?85?84?83?83?82?81?80?80?79?78?77?76?76?75?74?73?72?71?70? 3r369595. 69?68?67?66?65?64?63?62?61?60?59?58?57?56?55?54?53?52?51?50?48?47?46?45?44?43?41?40?39?38? ???. 37?35?34?33?32?30?29?28?27?25?24?23?22?20?19?18?16?15?14?13?11?10?9?7?6?5?3?2?1?0}; 3r369595. 3r369595. uint16_t sinStep; 3r369595. uint8_t sinStatus; 3r369595. 3r369595. /******************************************** Used functions *** ***************************************************** /3r39595. 3r369595. void StartInitClock (void) {3r369595. 3r369595. RCC-> CR | = RCC_CR_HSEON; //Enable HSE
while (! (RCC-> CR & RCC_CR_HSERDY)); 3r369595. 3r369595. FLASH-> ACR | = FLASH_ACR_LATENCY_5WS; 3r369595. 3r369595. RCC-> PLLCFGR = 0x00; 3r369595. RCC-> PLLCFGR | = RCC_PLLCFGR_PLLM_3; //Div for HSE = 8
RCC-> PLLCFGR | = RCC_PLLCFGR_PLLN_4 | RCC_PLLCFGR_PLLN_5 | RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_7; //PLL mult x240
RCC-> PLLCFGR | = RCC_PLLCFGR_PLLSRC; //Source HSE 3r3-3695. 3r369595. RCC-> CR | = RCC_CR_PLLON; 3r369595. while ((RCC-> CR & RCC_CR_PLLRDY) == 0) {} 3r363695. 3r369595. RCC-> CFGR & = ~ RCC_CFGR_SW; 3r369595. RCC-> CFGR | = RCC_CFGR_SW_PLL; //Select source SYSCLK = PLL
while ((RCC-> CFGR & RCC_CFGR_SWS)! = RCC_CFGR_SWS_1) {} //Wait till PLL is used 3r3369595. 3r369595. 3r369595. RCC-> CR | = RCC_CR_PLLSAION; 3r369595. while ((RCC-> CR & RCC_CR_PLLSAIRDY) == 0) {} 3r369595. 3r369595.} 3r39595. 3r369595. void EnableOutputMCO (void) {3r3369595. 3r369595. RCC-> AHB1ENR | = RCC_AHB1ENR_GPIOAEN; //Enable clock port A
3r369595. GPIOA-> MODER & = ~ GPIO_MODER_MODER8; 3r369595. GPIOA-> MODER | = GPIO_MODER_MODER8_1; //Alternative PP
GPIOA-> OSPEEDR | = GPIO_OSPEEDER_OSPEEDR8; //Very high speed
3r369595. RCC-> CFGR | = RCC_CFGR_MCO1; //Source PLL
RCC-> CFGR & = ~ RCC_CFGR_MCO1PRE; //Div = 1r3r3695. 3r369595.} 3r39595. 3r369595. void InitIndicatorLED (void) {3r3369595. 3r369595. /* 3r39595. * LED1 - PG6 3r39595. * LED2 - PD4
* LED3 - PD5
* LED4 - PK3
* /3r39595. 3r369595. RCC-> AHB1ENR | = RCC_AHB1ENR_GPIOGEN; 3r369595. RCC-> AHB1ENR | = RCC_AHB1ENR_GPIODEN; 3r369595. RCC-> AHB1ENR | = RCC_AHB1ENR_GPIOKEN; 3r369595. 3r369595. GPIOG-> MODER & = ~ GPIO_MODER_MODER6; 3r369595. GPIOG-> MODER | = GPIO_MODER_MODER6_0; //Output PP 3r33695. 3r369595. GPIOD-> MODER & = ~ GPIO_MODER_MODER4; 3r369595. GPIOD-> MODER | = GPIO_MODER_MODER4_0; //Output PP 3r33695. 3r369595. GPIOD-> MODER & = ~ GPIO_MODER_MODER5; 3r369595. GPIOD-> MODER | = GPIO_MODER_MODER5_0; //Output PP 3r33695. 3r369595. GPIOK-> MODER & = ~ GPIO_MODER_MODER3; 3r369595. GPIOK-> MODER | = GPIO_MODER_MODER3_0; //Output PP 3r33695. 3r369595.} 3r39595. 3r369595. void EnableIndicatorLED (void) {
3r369595. GPIOG-> BSRR | = GPIO_BSRR_BR_6; 3r369595. GPIOD-> BSRR | = GPIO_BSRR_BR_4; 3r369595. GPIOD-> BSRR | = GPIO_BSRR_BR_5; 3r369595. GPIOK-> BSRR | = GPIO_BSRR_BR_3; 3r369595. 3r369595.} 3r39595. 3r369595. void InitLowPWM (void) {3r3369595. 3r369595. /* 3r39595. * TIM1-CH1 - PA8
* TIM1-CH1N - PB13
* /3r39595. 3r369595. RCC-> APB2ENR | = RCC_APB2ENR_TIM1EN; 3r369595. RCC-> AHB1ENR | = RCC_AHB1ENR_GPIOAEN; 3r369595. RCC-> AHB1ENR | = RCC_AHB1ENR_GPIOBEN; 3r369595. 3r369595. /*********** GPIO ********** /
3r369595. GPIOA-> MODER & = ~ GPIO_MODER_MODER8; 3r369595. GPIOA-> MODER | = GPIO_MODER_MODER8_1; //Alternative output PP
3r369595. GPIOA-> AFR[1]| = GPIO_AFRH_AFRH0_0; //Select TIM1-CH1
3r369595. GPIOB-> MODER & = ~ GPIO_MODER_MODER13; 3r369595. GPIOB-> MODER | = GPIO_MODER_MODER13_1; //Alternative output PP
3r369595. GPIOB-> AFR[1]| = GPIO_AFRH_AFRH5_0; //Select TIM1-CH1N
3r369595. 3r369595. /*********** Timer ********* /
3r369595. TIM1-> PSC = 2400-1; //div for clock: F = SYSCLK /[PSC + 1]3r369595. TIM1-> ARR = 1000; //count to 1000
TIM1-> CR1 & = ~ TIM_CR1_CKD; //div for dead-time: Tdts = 1 /Fosc = 41.6 ns
TIM1-> CCR1 = 500; //duty cycle 50%
3r369595. TIM1-> CCER | = TIM_CCER_CC1E | TIM_CCER_CC1NE; //enable PWM complementary to PB15 and to PA10
TIM1-> CCER & = ~ TIM_CCER_CC1NP; //active high level: 0 - high, 1 - low
3r369595. TIM1-> CCMR1 & = ~ TIM_CCMR1_OC1M; 3r369595. TIM1-> CCMR1 | = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; //positiv PWM1_CH3 and PWM1_CH3N 3r3-3695. 3r369595. TIM1-> BDTR & = ~ TIM_BDTR_DTG; //clear register
TIM1-> BDTR | = TIM_BDTR_DTG_2 | TIM_BDTR_DTG_1 | TIM_BDTR_DTG_0; //value dead-time: = 31 * Tdts = 32 * 4?6ns = ???us
3r369595. TIM1-> BDTR | = TIM_BDTR_MOE | TIM_BDTR_AOE; //enable generation output and dead-time
3r369595. 3r369595. TIM1-> CR1 & = ~ TIM_CR1_DIR; //count up: 0 - up, 1 - down 3r336956. TIM1-> CR1 & = ~ TIM_CR1_CMS; //aligned on the front signal: 00 - front; 0? 1? 11 - center
TIM1-> CR1 | = TIM_CR1_CEN; //start count
3r369595.} 3r39595. 3r369595. void InitSinusPWM (void) {3r-33695. 3r369595. /* 3r39595. * TIM3-CH1 - PB4
* TIM3-CH2 - PC7 3r369595. * /3r39595. 3r369595. RCC-> APB1ENR | = RCC_APB1ENR_TIM3EN; 3r369595. RCC-> AHB1ENR | = RCC_AHB1ENR_GPIOBEN; 3r369595. RCC-> AHB1ENR | = RCC_AHB1ENR_GPIOCEN; 3r369595. 3r369595. 3r369595. /*********** GPIO ********** /
3r369595. GPIOB-> MODER & = ~ GPIO_MODER_MODER4; 3r369595. GPIOB-> MODER | = GPIO_MODER_MODER4_1; //Alternative output PP
3r369595. GPIOB-> AFR[0]| = GPIO_AFRL_AFRL4_1; //Select TIM3-CH1
3r369595. GPIOC-> MODER & = ~ GPIO_MODER_MODER7; 3r369595. GPIOC-> MODER | = GPIO_MODER_MODER7_1; //Alternative output PP
3r369595. GPIOC-> AFR[0]| = GPIO_AFRL_AFRL7_1; //Select TIM3-CH2
3r369595. /*********** Timer ********* /
3r369595. TIM3-> PSC = 5-1; //div for clock: F = SYSCLK /[PSC + 1]3r369595. TIM3-> ARR = 1000; //count to 1000
TIM3-> CCR1 = 0; //duty cycle 0%
TIM3-> CCR2 = 0; //duty cycle 0%
3r369595. TIM3-> CCER | = TIM_CCER_CC1E; //enable PWM out to PA8
TIM3-> CCER & = ~ TIM_CCER_CC1P; //active high level: 0 - high, 1 - low
3r369595. TIM3-> CCER | = TIM_CCER_CC2E; //enable PWM complementary out to PA9
TIM3-> CCER & = ~ TIM_CCER_CC1P; //active high level: 0 - high, 1 - low
3r369595. TIM3-> CCMR1 & = ~ (TIM_CCMR1_OC1M | TIM_CCMR1_OC2M); 3r369595. TIM3-> CCMR1 | = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1; //positiv PWM1_CH1 and PWM1_CH2 3r3-3695. 3r369595. 3r369595. TIM3-> CR1 & = ~ TIM_CR1_DIR; //count up: 0 - up, 1 - down 3r336956. TIM3-> CR1 & = ~ TIM_CR1_CMS; //aligned on the front signal: 00 - front; 0? 1? 11 - center
TIM3-> CR1 | = TIM_CR1_CEN; //start count
3r369595.} 3r39595. 3r369595. void InitStepSinus (void) {3r3369595. 3r369595. RCC-> APB1ENR | = RCC_APB1ENR_TIM6EN; //enable clock for basic TIM6
3r369595. TIM6-> PSC = 5-1; //div, frequency 24 kHz
TIM6-> ARR = 1000; //count to 1000
TIM6-> DIER | = TIM_DIER_UIE; //enable interrupt for timer
TIM6-> CR1 | = TIM_CR1_CEN; //start count
NVIC_EnableIRQ (TIM6_DAC_IRQn); //enable interrupt TIM6_DAC_IRQn
3r369595.} 3r39595. 3r369595. /************************************* Main code ********** ************************************ /
3r369595. int main (void) {
3r369595. StartInitClock (); 3r369595. //EnableOutputMCO (); 3r369595. InitIndicatorLED (); 3r369595. 3r369595. InitLowPWM (); 3r369595. InitSinusPWM (); 3r369595. InitStepSinus (); 3r369595. 3r369595. EnableIndicatorLED (); 3r369595. 3r369595. while (1) 3r39595. {3r39595. 3r369595.} 3r39595.} 3r39595. 3r369595. /****************************** Interrupts ****************** ************************************* /
3r369595. void TIM6_DAC_IRQHandler (void) {3r-33695. 3r369595. TIM6-> SR & = ~ TIM_SR_UIF; 3r369595. 3r369595. if (sinStatus == 0) {TIM3-> CCR1 = sinData[sinStep];} 3r39595. if (sinStatus == 1) {TIM3-> CCR2 = sinData[sinStep];} 3r39595. 3r369595. sinStep ++; 3r369595. 3r369595. if (sinStep> = 240) {3r369595. 3r369595. sinStep = 0; 3r369595. sinStatus = sinStatus? 0: 1; 3r369595. 3r369595.} 3r39595. 3r369595.} 3r39595. 3r369595. 3r33333. 3r? 3534. 3r38282.  3r369595.
3r38282.  3r369595. In general, in his other article he sooo described in detail and clearly how to form a sinusoidal signal, how to write code, and so on. You can read -
here 3r3679. . 3r38282.  3r369595. 3r38282.  3r369595. Read? Want to collect? Keep the project:
 3r369595. 3r38282.  3r369595. 3r3633.  3r369595.
3r33554. Project for F469

 3r369595.
3r3-3559. Project for the F100
 3r369595.
3r38282.  3r369595. Run the code, arm yourself with an oscilloscope and go on. First of all, we check the presence of a signal at the input of the drivers, it should be like this:
 3r369595. 3r38282.  3r369595. 3r33570. 3r38282.  3r369595. 3r38282.  3r369595. It should be noted that I am sending two signals to one half-bridge (module), drawing a sine, and to the other 2 signals defining 50 Hz. Moreover, one diagonal is “red + yellow” and the other is “blue + green”. The article that gave above about this is written in detail, if you suddenly do not understand. Now, as we have given signals, we throw on both half-bridges + 12V and GND from the laboratory power supply unit. Immediately I do not advise the battery, if something is mistaken, it can burn something. The protection on the board saves from overcurrent, but not from obvious jambs, when plus and minus are mixed up, but the lab is saving. 12V and 1A for tests is enough. We take the oscilloscope probe, its earth wire to the output of the first half bridge, and the probe itself to the output of the other half bridge should be this picture:
 3r369595. 3r38282.  3r369595. 3r???. 3r38282.  3r369595. 3r38282.  3r369595. Where is the sine you ask? The fact is that the resistance of the oscilloscope input is large and it does not constitute a load, so the current does not flow and the sine does not come from. Add the load, I made a resistor of 10 ohms load of 90 ohmsostro having included in series 9 pieces. We cling to the outputs of the half-bridges and see the following picture: 3r33682.  3r369595. 3r38282.  3r369595. 3r33588. 3r38282.  3r369595. 3r38282.  3r369595. Do you have the same? So it's time to connect the choke, transformer, load and try to start. 3r? 3593. Achtung! You can not include this model without load, because at idle at the exit can be up to 350 380V. So that this does not need a load or OS. 3r? 3594. We will not have the last one; this is a separate topic; you can fasten the simplest P-controller as an elective, you already have a project template. 3r38282.  3r369595. 3r38282.  3r369595. 3r3666. Inclusion of 3r3667. 3r38282.  3r369595. After switching on, we get about 230V at the output, the output is of course not stabilized and will float 230V + -30V, it will go for tests, in another article we will finalize the layout as I decide to tell you about P and PI controllers and their implementation. 3r38282.  3r369595. 3r38282.  3r369595. Now you can enjoy the result of the work, and if necessary, pack everything in a box and even apply it on the farm or in the country to provide yourself with light and other amenities. 3r38282.  3r369595. 3r38282.  3r369595. 3r3611. 3r3612. 3r33613. 3r31414. 3r3615.
3r38282.  3r369595. 3r38282.  3r369595. You probably noticed a delay between the “click”, that is, the power supply to the Discovery and the switching on of the lamps - this is the time that MK spent on initialization. This delay can be reduced by writing one digit to the register at once, and not splitting the register entry into a bunch of lines. I shattered solely for clarity. Although it is not scary, with the code on HAL the delay is 3 times longer and the people somehow live with it)) 3r3682.  3r369595. 3r38282.  3r369595. Until I forgot, the source code of the project:
 3r369595. 3r38282.  3r369595. 3r3633.  3r369595.
The concept is 3r3634. PDF
 3r369595.
BOM - 3r3639. Excel 3r3679.
 3r369595.
Gerber-files - RAR
 3r369595.
3r38282.  3r369595. 3r38282.  3r369595. It remains to see how there are temperatures on the board, whether there are any particularly hot places. 5-6A is of course not enough, but if the through current goes on or some serious error, then that will be enough to turn the board into a kettle:
 3r369595. 3r38282.  3r369595. 3r38282.  3r369595. In the near future, I plan to write about the DSP board and will not be managing from the discovery debugging, but from the “specialized” module. The 2nd revision boards have already come to it from the same PCBway, I am waiting for the components and immediately writing. 3r38282.  3r369595. 3r38282.  3r369595. I hope you liked the article and the idea itself. In the future, on the same modules, I will show how to assemble the frequency counter, the mppt controller, and maybe something else interesting. If you have questions, feel free to ask them in the comments or in a personal, if you suddenly do not have a full account, I will try to answer all the questions. 3r38282.  3r369595. 3r38282.  3r369595. Now a few thanks to the company PCBway It is actually very good that they support open source development. Zheleznyachniki may even catch up with the software on the number and quality of open source projects. 3r38282.  3r369595. 3r38282.  3r369595. 3r369595. 3r369595. 3r3688. ! function (e) {function t (t, n) {if (! (n in e)) {for (var r, a = e.document, i = a.scripts, o = i.length; o-- ;) if (-1! == i[o].src.indexOf (t)) {r = i[o]; break} if (! r) {r = a.createElement ("script"), r.type = "text /jаvascript", r.async =! ? r.defer =! ? r.src = t, r.charset = "UTF-8"; var d = function () {var e = a.getElementsByTagName ("script")[0]; e.parentNode.insertBefore (r, e)}; "[object Opera]" == e.opera? a.addEventListener? a.addEventListener ("DOMContentLoaded", d,! 1): e.attachEvent ("onload", d ): d ()}}} t ("//mediator.mail.ru/script/2820404/"""_mediator") () ();
3r369595.
3r369595. 3r369595. 3r369595. 3r369595.
+ 0 -

Add comment