<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Corrtexx</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Corrtexx"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Corrtexx"/>
	<updated>2026-04-11T08:40:39Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=101015</id>
		<title>STM32</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=101015"/>
		<updated>2019-09-19T05:40:30Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Weblinks, Foren, Communities, Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STM32 ist eine Mikrocontroller-Familie von [http://www.st.com/mcu/inchtml-pages-stm32.html ST] mit einer 32-Bit [[ARM]] Cortex-M0/M3/M4 CPU. Diese Architektur ist speziell für den Einsatz in Mikrocontrollern neu entwickelt und löst damit die bisherigen ARM7-basierten Controller weitestgehend ab. Den STM32 gibt es von ST in unzähligen Varianten mit variabler Peripherie und verschiedenen Gehäusegrößen und -formen. Durch die geringe Chipfläche des Cores ist es ST möglich, eine 32 Bit-CPU für weniger als 1&amp;amp;nbsp;€ anzubieten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:stm32F103xc.png|thumb|right|340px|Blockdiagramm STM32F103xC/D/E]]&lt;br /&gt;
&lt;br /&gt;
== STM32-Familien ==&lt;br /&gt;
&lt;br /&gt;
Bisher gibt es elf STM32-Familien:&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f0-series.html STM32F0]&lt;br /&gt;
** Cortex M0&lt;br /&gt;
** Mikrocontroller zum Einstieg&lt;br /&gt;
** Bis 48MHz (38 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series.html STM32F1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 72MHz (61 DMIPS)&lt;br /&gt;
**Verschiedene Unterfamilien:&lt;br /&gt;
*** Connectivity line&lt;br /&gt;
*** Performance line&lt;br /&gt;
*** USB Access line&lt;br /&gt;
*** Access Line&lt;br /&gt;
*** Value line&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f2-series.html STM32F2]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 120MHz (150 DMIPS)&lt;br /&gt;
** Wie die STM32F1 Serie, Camera-Interface, 32-Bit Timer, Crypto-Engine...&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f3-series.html STM32F3]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 72MHz (90 DMIPS)&lt;br /&gt;
** Fast 12-bit 5 MSPS and precise 16-bit sigma-delta ADCs&lt;br /&gt;
** Touch sensing controller (TSC)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series.html STM32F4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 180MHz (225 DMIPS)&lt;br /&gt;
** Bis zu 2MB Flash&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f7-series.html STM32F7]&lt;br /&gt;
** Cortex M7&lt;br /&gt;
** DSP und FPU (Single/Double Precision)&lt;br /&gt;
** Bis 216MHz (462 DMIPS)&lt;br /&gt;
** Mehr Peripherie: SPDIF-IN/OUT, SAI, HDMI-CEC, Dual Quad SPI&lt;br /&gt;
** On-Chip Grafik-LCD-Controller&lt;br /&gt;
** DMAs auch für Ethernet, USB und Chrom-ART&lt;br /&gt;
* [http://www.st.com/en/microcontrollers/stm32h7-series.html STM32H7]&lt;br /&gt;
** Cortex M7&lt;br /&gt;
** Bis 400MHz (856 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l0-series.html STM32L0]&lt;br /&gt;
** Cortex M0+&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
** Bis 32MHz (26 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l1-series.html STM32L1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
** Bis 32MHz (33 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l4-series.html STM32L4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU (Single Precision)&lt;br /&gt;
** Ultra Low Power (bis zu 8nA mit I/O Wake-Up)&lt;br /&gt;
** Bis 80MHz (100 DMIPS)&lt;br /&gt;
** 128KB...1MB Flash, 64/128KB SRAM&lt;br /&gt;
** optional Segment-LCD Treiber&lt;br /&gt;
** Quarzloser Betrieb auch mit CAN (1% ab Werk) oder USB (Synch über Host) möglich&lt;br /&gt;
** Digital-Filter für ΣΔ-Modulatoren&lt;br /&gt;
* [https://www.st.com/en/microcontrollers-microprocessors/stm32g0-series.html STM32G0]&lt;br /&gt;
** Cortex M0+&lt;br /&gt;
** Bis 64MHz (ca. 60MIPS)&lt;br /&gt;
** 16KB...512KB Flash, bis 128KB SRAM&lt;br /&gt;
** 8-100 Pins&lt;br /&gt;
** SO-8, QFP TW im 0.8mm Raster&lt;br /&gt;
** Noch nicht alle gelisteten Varianten in Produktion (8.2019)&lt;br /&gt;
* [https://www.st.com/en/microcontrollers-microprocessors/stm32g4-series.html STM32G4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** FPU und DSP&lt;br /&gt;
** &amp;quot;Math Accelerator&amp;quot; Für Trigonometrische Funktionen, FIR, IIR&lt;br /&gt;
** Bis 170MHz (213 DMIPS)&lt;br /&gt;
** bis 512KB Flash, 128KB SRAM&lt;br /&gt;
** 48-128Pins&lt;br /&gt;
** &amp;quot;Mixed Signal MCU&amp;quot;&lt;br /&gt;
** Noch nicht alle gelisteten Varianten in Produktion (8.2019)&lt;br /&gt;
&lt;br /&gt;
* STM32T - nicht mehr in Produktion&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** 72MHz&lt;br /&gt;
** Touch Sensing&lt;br /&gt;
* STM32W - nicht mehr in Produktion&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** BIS 24MHz&lt;br /&gt;
** RF-MCU &lt;br /&gt;
[http://www.st.com/web/en/catalog/mmc/FM141/SC1169 Hier eine Übersicht zum Auswählen eines STM32Fxxx]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* Cortex-M0(+) / Cortex-M3 / Cortex-M4(F) / Cortex-M7 Kern (mit FPU)&lt;br /&gt;
* 16KB ... 2MB  [[Flash-ROM]]&lt;br /&gt;
* 4KB ... 512KB [[Speicher#SRAM|SRAM]]&lt;br /&gt;
* 2KB ... 16KB [[Speicher#EEPROM|EEPROM]] (STM32L)&lt;br /&gt;
* SDRAM-Controller bei den [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1577/LN1806 STM32F42xxx und STM32F43xxx], bis 512 MByte externer SDRAM addressierbar&lt;br /&gt;
* 512 one-time programmable Bytes(STM32F2/4)&lt;br /&gt;
* [[IC-Gehäuseformen | Gehäuse]] 8 ... 216 Pins als SO, LCSP, TSSOP, QFN, QFP und BGA&lt;br /&gt;
* Derzeit sind &#039;&#039;&#039;über 700&#039;&#039;&#039; [http://www.st.com/web/en/catalog/mmc/FM141/SC1169 STM32 Derivate/Varianten verfügbar]&lt;br /&gt;
* Bis 72MHz CPU-Takt, bis 120MHz beim STM32F2xx, bis 168/180 MHz beim STM32F4xx, wobei eine spezielle Prefetch-Hardware bis 120/168 MHz eine Geschwindigkeit erzielt, die 0 Wait-States entspricht. Der CPU-Takt wird über einen Multiplikator aus dem internen RC-Takt oder einem externen Quarz-Takt abgeleitet. Bis 216MHz CPU-Takt bei STM32F7xx.&lt;br /&gt;
* Zusätzliche FPU &amp;quot;Math Accelerator&amp;quot; Für Trigonom. Funktionen (CORDIC), FIR, IIR(FMAC) (STM32G4)&lt;br /&gt;
* Externes Businterface (nur bei Gehäusen ab 100 Pin und nur bei STM32F4, STM32F2 und STM32F1 Performance line)&lt;br /&gt;
* LCD Treiber für bis zu 8x40 Segmente (nicht beim STM32F2xx)&lt;br /&gt;
* TFT Treiber bei [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series/stm32f429-439.html STM32F429/STM32F439] [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series/stm32f469-479.html STM32F469/STM32F479]&lt;br /&gt;
* Spannungsbereich 1,65 ... 3,6V, nur eine Betriebsspannung nötig&lt;br /&gt;
* Temperaturbereich bis 125 °C&lt;br /&gt;
* Bis zu 168 IOs, viele davon [[Pegelwandler|5V-tolerant]]&lt;br /&gt;
* Interner, kalibrierter RC-Oszillator mit 8MHz (16MHz bei STM32F2/F4xx)&lt;br /&gt;
* Externer Quarz&lt;br /&gt;
* Real Time Clock mit eigenem Quarz und separater Stromversorgung&lt;br /&gt;
* Bis zu 16 [[Timer]], je Timer bis zu 4 IC/OC/PWM Ausgänge. Davon 2x Motion Control Timer (bei STM32F103xF/G), (bis zu 32 PWM Ausgänge)&lt;br /&gt;
* Systick Counter&lt;br /&gt;
* Bis zu 3 12-Bit [[AD-Wandler]] mit insgesamt 24 AD-Eingängen, integrierter [[Temperatursensor]], Referenzspannung Vrefint und VBatt Spannungsmessung (STM32F4xx)&lt;br /&gt;
* Bis zu 2 12-Bit [[DA-Wandler]] (bis zu 3 beim STM32F3xx)&lt;br /&gt;
* Bis zu 2 [[DMA]] Controller mit bis zu 12 Kanälen (16 beim STM32F2/4xx)&lt;br /&gt;
* Bis zu 2x [[I2C|I²C]]&lt;br /&gt;
* Bis zu 5x [[UART|USART]] mit LIN, IrDA und Modem Control (bis zu 8 beim STM32F2/F4xx)&lt;br /&gt;
* Bis zu 3x [[SPI]] (bis zu 6 beim STM32F4xx)&lt;br /&gt;
* Bis zu 2x [[I2S|I²S]]&lt;br /&gt;
* Bis zu 3x [[CAN#STMicroelectronics STM32 (Cortex M3/M4)|CAN]]&lt;br /&gt;
* Hardware [[CRC]] Unit, bei der STM32F3xx Serie mit einem einstellbaren Polynom &lt;br /&gt;
* Unique device ID register (96 Bits)&lt;br /&gt;
* TRNG - True Random Number Generator (STM32F2/4xx), basierend auf analoger Schaltung&lt;br /&gt;
* Cryptographic Processor (CRYP) (STM32F2/4xx)&lt;br /&gt;
* Hash Processor (HASH) (STM32F2/4xx)&lt;br /&gt;
* Kamera-Interface (DCMI) (STM32F2/4xx)&lt;br /&gt;
* [[USB]] 2.0 Full Speed / OTG&lt;br /&gt;
* [[USB]] 2.0 Hi Speed OTG mit extra PHY-Chip (STM32F2/4xx)&lt;br /&gt;
* USB Type-C™ Power Delivery controller (STM32G0/G4)&lt;br /&gt;
* HDMI CEC interface (STM32G0)&lt;br /&gt;
* SDIO Interface (z.B. SD-Card Reader)&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Watchdog mit Window-Mode&lt;br /&gt;
* Jedes Peripheriemodul ist separat einschaltbar, wodurch sich erheblich [[Ultra low power|Strom sparen]] lässt&lt;br /&gt;
* [[JTAG]] und SWD (Serial Wire Debug) Interface&lt;br /&gt;
* Bis zu 6 Hardware-Breakpoints für Debuggen&lt;br /&gt;
* und vieles mehr ...&lt;br /&gt;
&lt;br /&gt;
== Struktur der Dokumentation ==&lt;br /&gt;
Die Dokumentation der STM32 ist im Vergleich zur [[AVR]]-Familie umfangreicher und komplexer. Sie teilt sich in mehrere Dokumente auf.&lt;br /&gt;
Als Beispiel der Dokumentation soll stellvertretend der [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32-mainstream-mcus/stm32f1-series/stm32f103/stm32f103rc.html STM32F103RC] genannt werden. Die Seite von ST beinhaltet alle nötigen Informationen passend zu diesem Prozessor.&lt;br /&gt;
&lt;br /&gt;
Diese Dokumente von ST beschreiben den Controller:&lt;br /&gt;
&lt;br /&gt;
* Im [http://www.st.com/resource/en/datasheet/stm32f103rc.pdf STM32F103xC/D/E Datasheet] sind die speziellen Eigenschaften einer bestimmten Modellreihe beschrieben und die exakten Daten und Pinouts aufgeführt, sowie die Zuordnung Chipname - Flash/RAM-Größe. Die Peripheriemodule werden nur aufgeführt, nicht detailliert beschrieben.&lt;br /&gt;
* Im [http://www.st.com/resource/en/reference_manual/cd00171190.pdf Reference Manual (RM0008)] sind alle Peripheriemodule der jeweiligen STM32-Controllerfamilie im Detail beschrieben.&lt;br /&gt;
* Das [https://static.docs.arm.com/ddi0403/e/DDI0403E_c_armv7m_arm.pdf ARMv7M Architecture Reference Manual] beschreibt detailliert die abstrakte ARMv7M-Architektur, wie das Exception Model, die CPU Instruktionen inklusive Encoding, etc.&lt;br /&gt;
* Das [https://static.docs.arm.com/100166/0001/arm_cortexm4_processor_trm_100166_0001_00_en.pdf Cortex-M4 Technical Reference Manual] bzw. das [https://static.docs.arm.com/100165/0201/arm_cortexm3_processor_trm_100165_0201_00_en.pdf Cortex-M3 Technical Reference Manual] beschreibt Eigenschaften der Cortex-M3/4 Implementierung der Architektur, insbesondere die Geschwindigkeit der einzelnen Prozessor-Instruktionen.&lt;br /&gt;
* Das [http://www.st.com/resource/en/programming_manual/cd00228163.pdf STM32 Cortex-M3 Programming Manual] ist eine Zusammenfassung des ARMv7M Architecture Reference Manual bezogen auf die STM32.&lt;br /&gt;
* Wer nicht die ST Firmware-Library verwendet, der benötigt zusätzlich das [http://www.st.com/resource/en/programming_manual/cd00283419.pdf Flash Programming Manual] für die Betriebsart des Flash-ROMs, d.h. die frequenzabhängige Konfiguration der Waitstates.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sollten auch die [http://www.st.com/resource/en/errata_sheet/cd00197763.pdf Errata Sheets] beachtet werden. Empfohlen sei auch die Appnote &amp;quot;[http://www.st.com/resource/en/application_note/cd00164185.pdf AN2586 Getting started with STM32F10xxx hardware development]&amp;quot;.&lt;br /&gt;
Die jeweiligen Dokumentations-PDFs sind auf der Produktseite von ST eines jeden Mikrocontrollers verlinkt.&lt;br /&gt;
&lt;br /&gt;
== Hardware Zugriffs-Libraries ==&lt;br /&gt;
=== CMSIS ===&lt;br /&gt;
&lt;br /&gt;
Die CMSIS (ARM® &#039;&#039;&#039;C&#039;&#039;&#039;ortex™ &#039;&#039;&#039;M&#039;&#039;&#039;icrocontroller &#039;&#039;&#039;S&#039;&#039;&#039;oftware &#039;&#039;&#039;I&#039;&#039;&#039;nterface &#039;&#039;&#039;S&#039;&#039;&#039;tandard) ist eine Library von ARM für den Zugriff auf die herstellerübergreifenden Funktionen des ARM-Cores. Hierzu gehört bei den Cortex-M4F-Cores auch die DSP und Floating-Point Funktionalität. Weiterhin existieren eine Zahl von Helferfunktionen für den NVIC, den Sys-Tick-Counter, sowie eine SystemInit-Funktion, welche sich um die PLL kümmert. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen des CMSIS-Standards ([http://www.onARM.com www.onARM.com]) wurden die Headerdateien standardisiert, der Zugriff auf die Register erfolgt per &#039;&#039;&#039;Peripheral-&amp;gt;Register&#039;&#039;&#039;. Die CMSIS C-Dateien bzw. Header enthalten auch Anpassungen für die verschiedenen Compiler. Die Portierung eines Real-Time-Betriebsystems sollte unter Verwendung der CMSIS, für Chips der verschiedenen Hersteller, stark vereinfacht möglich sein (z.B. einheitliche Adressen für Core-Hardware/Sys-Tick-Counter).&lt;br /&gt;
&lt;br /&gt;
Die CMSIS ist im Download der ‎STM32 Standard Peripheral Library enthalten. Die Compiler-Hersteller liefern eine jeweils zur ihrer Tool-Version passende bzw. geprüfte Library (incl. CMSIS) aus. Diese Libs können, gegenüber den Downloads beim Chip-Hersteller, auch ältere Version beinhalten.&lt;br /&gt;
&lt;br /&gt;
=== ‎STM32 Standard Peripheral Library (SPL) ===&lt;br /&gt;
&lt;br /&gt;
ST bietet für jede Controller-Familie eine umfangreiche zur CMSIS passende Peripherie-Bibliothek. Alle Funktionen um die Peripherie zu benutzen sind gekapselt in einfache Strukturen und Funktionsaufrufe. Somit muss man sich nicht selbst um die Peripherie-Register kümmern. Diese Library und ihre Dokumentation setzen das grundlegende Verständnis der Funktion des jeweiligen Peripheriemoduls voraus, wie es die o.a. Referenz und diverse Appnotes vermitteln. Die Library beinhaltet außerdem für fast jede Peripherie mehrere Beispiele.&lt;br /&gt;
Für die USB Schnittstelle gibt es noch eine extra Library, genauso wie für Ethernet.&lt;br /&gt;
&lt;br /&gt;
Die Standard Peripheral Library ist inzwischen veraltet, ST empfiehlt, sie nicht mehr zu verwenden.&lt;br /&gt;
&lt;br /&gt;
Auf der &amp;quot;Design Resources&amp;quot; Seite der Produktseite von ST eines jeden STM32 Mikrocontrollers kann die Library für den jeweiligen Controller heruntergeladen werden, z.B. [http://www.st.com/web/en/catalog/tools/PF257890 hier für den o.g. STM32F103RC].&lt;br /&gt;
&lt;br /&gt;
Library für STM32F4xx: [http://www.st.com/web/en/catalog/tools/PF257901# STSW-STM32065 STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
=== ‎STM32 Cube HAL ===&lt;br /&gt;
&lt;br /&gt;
Hat seit 2012 die SPL abgelöst.&lt;br /&gt;
&lt;br /&gt;
* https://www.st.com/en/embedded-software/stm32cube-mcu-packages.html&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
Zur Programmierung der STM32 gibt es verschiedene Möglichkeiten, sowohl kommerzielle proprietäre als auch mit Freier Software.&lt;br /&gt;
&lt;br /&gt;
=== Freie Software/Freeware ===&lt;br /&gt;
==== Selber zusammenstellen ====&lt;br /&gt;
Man nehme...:&lt;br /&gt;
* Eine Entwicklungsumgebung nach Wahl:&lt;br /&gt;
** [http://www.eclipse.org Eclipse] mit [http://www.eclipse.org/cdt/ C/C++ Development Tooling] und [https://gnu-mcu-eclipse.github.io/ GNU ARM Plug-in](Linux, Windows)&lt;br /&gt;
** [https://atollic.com/truestudio/ TrueStudio for STM32] basiert auf Eclipse&lt;br /&gt;
** [http://www.openstm32.org/Downloading+the+System+Workbench+for+STM32+installer System Workbench for STM32] basiert auf Eclipse&lt;br /&gt;
** [http://netbeans.org/ Netbeans] mit [http://plugins.netbeans.org/plugin/37426/gdbserver GDBserver-Plugin] (Linux, Windows)&lt;br /&gt;
** [http://www.kdevelop.org/ KDevelop] (Linux, Windows)&lt;br /&gt;
** [http://www.geany.org/ Geany] (Linux, Windows)&lt;br /&gt;
** Oder ein einfacher Texteditor&lt;br /&gt;
* Einen C,C++ Compiler:&lt;br /&gt;
** Eine der [[ARM_GCC#Fertige_GCC_Bin.C3.A4rdistributionen|GCC-Binärdistributionen]], siehe auch [[#GCC|GCC]] (je nach Distribution Linux, Windows)&lt;br /&gt;
* Programmiersoftware zum Flashen des Target:&lt;br /&gt;
** [http://openocd.sourceforge.net/ OpenOCD] unterstützt viele Debug/Programmier-Adapter (Linux, Windows)&lt;br /&gt;
** [https://github.com/texane/stlink Texane stlink] funktioniert gut mit den ST-Link Adaptern wie sie zB. auf den STM32 Discovery Boards zu finden sind (Linux)&lt;br /&gt;
** Bei Verwendung eines Segger J-Link, den [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf Segger GDB-Server] in Verbindung mit dem beim GCC mitgelieferten GDB (Linux, Windows).&lt;br /&gt;
** [https://github.com/blacksphere/blackmagic/wiki Black Magic Probe] als Mikrocontrollerfirmware simuliert einen seriellen Port, der direkt von GDB verwendet werden kann. Für FTDI-MPPSE basierte Adapter und ST-Link V2  läuft Blackmagic auf dem Host und stellt den Port :2000 für GDB zur Verfügung. Stlinks können, so man sich Programmierzugang zu dem STM32F103 des Stlinks beschaffen kann, auch mit BMP Firmware umgeflasht werden.&lt;br /&gt;
&lt;br /&gt;
==== Komplette IDEs ====&lt;br /&gt;
* [https://developer.mbed.org/platforms ARM mbed Developer Site] ist eine vollständige Entwicklungsplattform für diverse ARM-Controller auf Basis eines RTOS mit Hardware-Abstraktion und webbasierter Online-sowie Offline-IDE. Ähnlich dem Arduino-Konzept können mit mbed einfachere Aufgaben schnell umgesetzt werden. mbed basiert auf C++ und unterstützt verschiedene Compiler. Projekte können auch exportiert und für andere IDEs heruntergeladen werden. Die mbed-Library ist quelloffen und auf github gehostet.&lt;br /&gt;
* [https://atollic.com Atollic TrueStudio] wurde seit der Übernahme durch ST auf STM32 Mikrocontroller reduziert und ist jetzt kostenlos verfügbar. Basiert auf Eclipse, OpenOCD und [[ARM GCC]]. Ohne size limit.&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite_edition.html Codesourcery Lite Edition] Mit dieser Umgebung muss man sich anfreunden können. Es sind nur wenig Beispielprojekte verfügbar. Nicht mehr kostenlos verfügbar.&lt;br /&gt;
* [http://www.coocox.org/ Coocox Eclipse IDE] kostenlose IDE für STM32F0/F1/F2/F3/F4, die aber mittlerweile nicht mehr weiterentwickelt wird. Basiert auf dem [[ARM GCC]] und es gibt eine breite Unterstützung. Es ist sogar ein freies RTOS verfügbar. Eine gute Wahl ohne Limits mit breiter Debugger-Unterstützung. Hilfreiche Infos gibt es [http://www.mikrocontroller.net/topic/214719?goto=new#2228482 hier] und [http://www.mikrocontroller.net/topic/214719?goto=new#2229943 hier] im Forum, Artikel: [[STM32 CooCox Installation]] &lt;br /&gt;
* [http://emide.org/ emIDE] kostenlose IDE von Segger. Die emIDE basiert auf Code::Blocks. Sie ist auf [[ARM GCC]] aufgebaut und unterstützt eine große Zahl an unterschiedlichen JTAG/SWD-Debuggern - natürlich auch den J-Link aus gleichem Hause.  &lt;br /&gt;
* [http://www.emblocks.org EmBlocks] kostenlose IDE, Code::Blocks basiert, unterstützt STM32 L1/F0/F1/F2/F3/F4/W, integrierter Compiler ([[ARM GCC]]), integrierter GDB-Debugger, Jlink/ST-Link, System view (Peripherie-Register anzeigen) beim Debuggen, Project-Wizard (Eigene Wizards können mit Squirrel geschrieben werden), Basiert auf Code::Blocks. Artikel: [[STM32 - Einstieg mit Em::Blocks]]&lt;br /&gt;
** heißt jetzt EmBitz -&amp;gt; https://www.embitz.org&lt;br /&gt;
* [http://cms.seng.de/service-support/downloads/ Entwicklungsumgebung GNU/Linux] für STM32F1 mit OpenOCD und Olimex ARM-USB-OCD-H, Bedienung über Eclipse-IDE oder Kommandozeile.&lt;br /&gt;
* [http://www.openstm32.org/blog1-System-Workbench-for-STM32 System Workbench for STM32] (SW4STM32) ist eine uneingeschränkte und kostenlose IDE. Sie wird von [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF261797 ST] offiziell unterstützt. Die Entwicklungsumgebung ist in der Version 1.0 seit 5.2.2015 erhältlich. Seit Februar 2016 ist eine Version für Linux verfügbar.&lt;br /&gt;
&lt;br /&gt;
==== Andere Programmiersprachen ====&lt;br /&gt;
&lt;br /&gt;
* [http://mecrisp.sourceforge.net Mecrisp-Stellaris], eine native Forth-Implementation für ARM Cortex M0/M3/M4. Es werden bereits mehrere STM32 Targets unterstützt und neue Portierungen sind herzlich willkommen. Auch Chips von TI, NXP und Freescale sind im aktuellen Paket enthalten.&lt;br /&gt;
&lt;br /&gt;
=== Kommerzielle Umgebungen ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp Keil µVision] (Demo max. 32KB Code/Free für STM32F0/STM32L0): Die sehr komfortable µVison IDE ist neben dem ARM Compiler per Menue auch für einen beliebigen GNU-Compiler konfigurierbar. Damit besteht das 32k-Limit nur noch für den integrierten Debugger / Simulator. In Verbindung mit einem ULINK2 ist die Umgebung schon sehr einfach zu bedienen - leider ist der Compiler mit großen Abstand der langsamste den ich je nutzte, da er keine parallel Option wie der GNU-CC besitzt. Mit der µVision lässt sich kein fremdes File in den Controller in den Flashspeicher des Controllers schreiben. Für den Anfänger eine gute Wahl. Der Preis ist jedoch ein guter Grund auf andere freie IDEs zu wechseln. µVison selbst kann kostenlos mit dem MDK-Evaluationkit heruntergeladen werden. [https://www.keil.com/arm/demo/eval/arm.htm#DOWNLOAD download] Wer sich nur auf STM32 Cortex M0/L0 beschränkt kann die Keil MDK auch ohne 32K Begrenzung frei nutzen. [http://www2.keil.com/stmicroelectronics-stm32/mdk download]&lt;br /&gt;
* [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR-Embedded-Workbench] (Demo max. 32KB Code) [http://supp.iar.com/Download/SW/?item=EWARM-EVAL download]&lt;br /&gt;
* [http://www.isystem.com/download/winideaopen winIDEAOpen] Keine Code Limitierung, GCC und Testwerkzeug beinhaltet. Läuft mit dem iTag50 Adapter, Segger J-Link und dem ST-Link&lt;br /&gt;
* [http://www.raisonance.com Raisonance Ride7] (GCC Compiler, kostenlose Version auf Debugging von max. 32KB Code limitiert, keine Limitierung beim Complilieren)&lt;br /&gt;
* [http://www.rowley.co.uk/arm/ Rowley Crossworks] (Demo 30 Tage unbeschränkt, 150$ für nichtkommerzielle Nutzung, auf GCC basierend). Mir ist nicht klar warum man für diese IDE Geld bezahlen soll. Der GNU-Compiler ist frei und die Entwicklungsumgebungen die auf Eclipse basieren, ebenfalls. Allerdings ist diese Einstellungsarbeit schon was für den etwas erfahrenen Entwickler.&lt;br /&gt;
* [http://www.sisy.de/index.php?id=17&amp;amp;no_cache=1 SiSy ARM oder SiSy Micrcontroller++] (Demo verfügbar keine Gößenbegrenzung, basiert auf GNU-Compiler, grafische Programmierung mit UML möglich, integrierter Debugger)&lt;br /&gt;
* [http://www.comsytec.eu/epsdebugger.php EPS Debugger Plugin, für STM32 Development mit Code::Blocks]&lt;br /&gt;
* [http://www.mikroe.com MikroE bietet neben Pascal und Basic auch C mit kompletter Oberfläche mit Compiler etc. pp relativ günstig]&lt;br /&gt;
* [http://www.visualgdb.com VIsualGDB] Wer vom Atmel Studio kommt oder sonst viele mit Visual Studio arbeitet bekommt hier ein Plugin, das wirklich Spaß macht und funktioniert. Es werden nicht nur STM32 unterstützt. Einfach kostenlose Trial-Version anschauen und probieren.&lt;br /&gt;
&lt;br /&gt;
=== STM32CubeMX ===&lt;br /&gt;
Dies ist eine Software von ST selbst, die die Auswahl und Konfiguration von STM32-Mikrocontrollern vereinfacht:&lt;br /&gt;
* Auswahl der Controller oder Entwicklungsboards mit einer parametrischen Suche&lt;br /&gt;
* grafische Konfiguration der Pins und Alternate Functions (inkl. Überprüfung auf Kollisionen - bei Entwicklungsboards sind gewisse Pins schon vorkonfiguriert und werden angezeigt)&lt;br /&gt;
* grafische Konfiguration des Clock-Trees&lt;br /&gt;
* Generierung von C-Code entsprechend der grafischen Konfiguration. Dieser funktioniert nur mit den neuen STM32CubeMX Libraries (HAL, LL), nicht mit den alten Standard Peripheral Libraries (SPL).&lt;br /&gt;
* Simulation des Strom-Verbrauchs unter Auswahl verschiedenster Stromquellen und Batterien&lt;br /&gt;
STM32CubeMX ist Java-basiert und läuft daher problemlos auf Windows, OS X und Linux. In der Zip-Datei, welche [https://my.st.com/content/my_st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html bei ST heruntergeladen] werden kann, befinden sich entsprechende Installer für die einzelnen Betriebssysteme.&lt;br /&gt;
&lt;br /&gt;
=== Tutorials für diverse Tool-Kombinationen ===&lt;br /&gt;
* [[STM32 Eclipse Installation|Windows,Linux, Eclipse + Yagarto/CodeSourcery + OpenOCD/ST-Link]]&lt;br /&gt;
* [[STM32 Eclipse JLink Linux/Windows|Windows,Linux, Eclipse + GCC-ARM-Embedded + JLink]]&lt;br /&gt;
* [[Linux auf STM32|Linux auf STM32 (ucLinux)]]&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
** Eclipse&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/216554 Windows, Eclipse, codesourcery, st-link ]&lt;br /&gt;
*** [http://www.firefly-power.de/ARM/debugging.html Eclipse Plugin &amp;quot;GDB Hardware Debugging&amp;quot; mit OpenOCD]&lt;br /&gt;
** Code::Blocks&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/265600 Windows, Code::Blocks, STM32F4]&lt;br /&gt;
** STM32 mit EmBlocks&lt;br /&gt;
*** [http://www.emblocks.org/web/downloads-main Download EmBlocks]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=coHPJylnzC8 Video STM32 Project Wizzard in EmBlocks]&lt;br /&gt;
** Atollic TrueSTUDIO&lt;br /&gt;
*** [[STM32 LEDBlinken AtollicTrueStudio|Atollic TrueSTUDIO Installation + Demo]]&lt;br /&gt;
** MDK-ARM Lite mit Einstellungen für STM32F0/F4-Discovery Board&lt;br /&gt;
*** [https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM Download]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=RXOOxby5nns&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;index=1 Installations Video STM32F4 Discovery Board]&lt;br /&gt;
*** [https://www.youtube.com/watch?annotation_id=annotation_203294&amp;amp;feature=iv&amp;amp;index=4&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;src_vid=sN4gDZ7H8gw&amp;amp;v=BeZcQjXxk9A Einstellungen STM32F0 Discovery Board Video]&lt;br /&gt;
** SiSy ARM, STM32&lt;br /&gt;
*** Download: [http://www.sisy.de/index.php?id=59 SiSy DEMO] kein Begrenzung der Codegröße&lt;br /&gt;
*** [http://www.youtube.com/watch?v=84Y3jYLWYpo Videobeispiel]&lt;br /&gt;
** Microsoft Visual Studio&lt;br /&gt;
*** [http://visualgdb.com/tutorials/arm/stm32/f4_discovery/ &amp;quot;STM32F4-Discovery tutorial with Visual Studio&amp;quot;]&lt;br /&gt;
* Ubuntu&lt;br /&gt;
** [http://cms.seng.de/service-support/downloads/ Installing a toolchain for Cortex-M3/STM32 on GNU/Linux] - How-to manual, für STM32F1 unter GNU/Linux mit OpenOCD und Olimex ARM-USB-OCD-H. Integrierte Make files, Linker Skripte, Startup-Code, diverse Tools und Demo-Projekt/Programm. Einbindung in Eclipse IDE oder Bedienung über Kommandozeile.&lt;br /&gt;
** [http://fun-tech.se/stm32/index.php Ubuntu, Selbstcompilierter GCC, STM32/Cortex-M3]&lt;br /&gt;
** [http://thetoolchain.com The ToolChain] - Automatisch installierende Entwicklungsumgebung mit eigenen und externen Treibern, Unterstützt QtCreator als IDE, Flexibel erweiterbar über Shellskripte&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/214719 Tipps für Installation mit Eclipse]&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter===&lt;br /&gt;
* Der [http://www2.st.com/content/st_com/en/products/development-tools/hardware-development-tools/development-tool-hardware-for-mcus/debug-hardware-for-mcus/debug-hardware-for-stm32-mcus/st-link-v2.html ST-LINK/V2] ist ein Debugger, welcher von ST selbst angeboten wird. Jedes STM32 Discovery- oder Nucleo-Board hat einen ST-LINK V2 bzw. ST-Link V2-1 für Programmierung/Debugging per SWD on-board (teilweise abbrechbar), welcher auch für eigene STM32 Target Hardware und prinzipiell auch andere Cortex-M benutzt werden kann. Zwar ist er mit 1.8MHz Takt ein sehr langsamer Vertreter seiner Art, jedoch lassen sich mit ihm fremde Hex- und Binary-Files sowohl Debuggen als auch Flashen. Die ST-LINK-Variante auf den Nucleo- bzw. Discovery-Boards beherrscht nur SWD und kein JTAG, wohingegen der ST-Link in der Adapterversion mit Gehäuse auch JTAG beherrscht und zusätzlich auch in einer Variante mit galvanischer Trennung erhältlich ist. Die ST-LINK/V2-1 auf den NUCLEO und Discovery-Boards können auch per Softwareupdate zu einem J-Link OB umgewandelt werden. Details und Hinweise dazu [https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board hier]. Kopien des ST-Link V2 sind als &amp;quot;mini&amp;quot;-Version u.a. sehr günstig (&amp;lt;5€) über Ebay, Aliexpress und Co zu beziehen. Diese unterstützen jedoch ebenfalls kein JTAG und haben desweiteren den Nachteil, das der Reset-Pin nicht herausgeführt ist bzw. der mit &amp;quot;Reset&amp;quot; bezeichnete Pin nur für STM8 gedacht ist. Sämtliche ST-Link V2 und V2/1 können mittels einer von ST angebotenen [http://www2.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link007.html Update-Software ] auf den jeweils neuesten Stand gebracht werden.&lt;br /&gt;
* [http://www.segger.com/jlink-model-overview.html SEGGER J-LINK / J-TRACE] für u.a. alle ARM7/9/11, Cortex-M0/M1/M3/M4/A5/A8/A9/R4 als [http://www.segger.com/cms/j-link-edu.html Non-Commercial] J-LINK-EDU für ca. 50€ zu haben, läuft in µVision, IAR, GDB (Linux &amp;amp; Windows über einen eigenen [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf GDB-Server]), ... Der J-Link ist mit Abstand der schnellste Debugger, den ich bisher testen konnte. Wer es beim Debuggen eilig hat, liegt mit dem J-Link von Segger richtig.&lt;br /&gt;
* Keil [http://www.keil.com/ulinkme/ ULINK-ME], [http://www.keil.com/arm/ulink2/ ULINK2], [http://www.keil.com/arm/ulinkpro/ ULINK pro] Wenn man die die µVision IDE nicht verlassen mag, kann man sich mit diesen Adaptern anfreunden, denn sie arbeiten nur mit dieser IDE zusammen. Sie benötigen keine USB-Treiber, da sie geschickt das HID-Device des Betriebssystems nutzen. Es lässt sich kein fremdes Binary oder Hex-File flashen. Der ULINK2 kostet genau soviel wie ein Segger J-Link Basic bei gleichem Funktionsumfang, der sich jedoch auch in Verbindung mit anderen IDEs (GDB, usw) einsetzen lässt.&lt;br /&gt;
* [http://www.raisonance.com/rlink.html Raisonance RLink]&lt;br /&gt;
* [http://www.isystem.com/products/itag iTag] für 50€ bei [http://www.amazon.de/dp/B009XAQ9BW Amazon] bestellbar, alternativ als [http://isystem.com/products/hardware/cortex-debugger/itag/itag-instruction Eigenbauversion (offenes Design)] läuft mit der freien winIDEAiTag version (siehe oben)&lt;br /&gt;
&lt;br /&gt;
In der Regel haben die [[JTAG]] Adapter einen 20-poligen Stecker, den man direkt auf die Demo-Boards mit 20-poligem [[JTAG]]-Anschluss einstecken kann. Die Pinbelegung ist genormt, siehe Artikel [[JTAG]]. Die Discovery-Boards haben keinen separaten JTAG-Stecker, aber man kann sich zumindest für das STM32F4 Discovery einen Adapter Pinheader-&amp;gt;JTAG Stecker leicht selbst bauen.&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter Open-Source===&lt;br /&gt;
&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-COOCOX/ ARM-JTAG-COOCOX], CoLinkEX Nachbau von Olimex, unterstützt JTAG sowie SWD&lt;br /&gt;
** [http://www.coocox.org/wiki/coocox/CoLinkEx/CoLinkEx-Support unterstützte uC]&lt;br /&gt;
** unterstütze IDEs: [http://www.keil.com/arm/mdk.asp Keil MDK-ARM 4.03] oder neuer, [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR Embedded Workbench 5.xx] oder neuer sowie die [http://www.coocox.org/CooCox_CoIDE.htm CooCox CoIDE]&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ Olimex] ARM-USB-OCD (ca. 60.-, hat zusätzlich einen Spannungsausgen und einen COM Port)&lt;br /&gt;
* [http://www.randomprojects.org/wiki/Floss-JTAG FLOSS-JTAG]&lt;br /&gt;
&lt;br /&gt;
Der Controller hat auch einen fest eingebauten Boot-Lader. Damit läßt er sich auch über eine gewöhnliche serielle Schnittstelle programmieren, ohne dass man einen JTAG-Adapter benötigt. Dies erfordert ggf. entsprechende Konfiguration über die BOOTx-Pins und/oder die Option-Bytes, und ein Programm wie [https://code.google.com/p/stm32flash/ stm32flash].&lt;br /&gt;
&lt;br /&gt;
=== Demo-Projekte ===&lt;br /&gt;
&lt;br /&gt;
* Einführung in die GPIO Programmierung der STM32F10x und STM32F30x Prozessoren am Beispiel des STM32F3 Discovery Boards und Vergleich zur AVR IO Registerstruktur [http://www.mikrocontroller.net/topic/300472#new]&lt;br /&gt;
* [[prog_bsp_timer_1_timer2|Programmbeispiel für die Verwendung von Timer2 zusammen mit dem Interrupt]]&lt;br /&gt;
* [http://www.firefly-power.de/ARM/printf.html Printf() debugging mit minimalem Aufwand]&lt;br /&gt;
* [[STM32_BLDC_Control_with_HALL_Sensor|Programmbeispiel für BLDC Motoransteuerung (Timer 1) mit HALLSensor (Timer 3)]]&lt;br /&gt;
* [[Cortex_M3_OCM3U]]&lt;br /&gt;
* Martin Thomas hat ein umfangreiches Projekt erstellt, in der die Eclipse Einstellungen enthalten sind:&lt;br /&gt;
** [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html &amp;quot;ChaN&#039;s FAT-Module with STM32 SPI&amp;quot;]&lt;br /&gt;
* [[STM32 USB-FS-Device Lib]]&lt;br /&gt;
* Modellbau-Sender auf STM32-Basis mit vielen Treibern [http://www.rcos.eu www.rcos.eu]&lt;br /&gt;
* Ausführliches [https://github.com/jkerdels/stm32edu Einstiegs-Tutorial] in Codeform für das [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4 discovery board]&lt;br /&gt;
* [http://www.redacom.ch/keillab/ Schweizer Gondelbahnsteuerung über Webserver auf ETT STM32F ARM KIT Board in Keil RTOS] mit Webcam&lt;br /&gt;
* Die [http://ethernut.svn.sourceforge.net/viewvc/ethernut/trunk/ Ethernut SVN Version] unterstützt inzwischen viele STM32 Typen, viele Devices und einige STM32 Demoboards&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=744 Uwe Becker&#039;s Libraries für den STM32F4]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=3290 Uwe Becker&#039;s STM32F429 Discovery Board Oszilloskop], hier der [http://www.mikrocontroller.net/topic/319831#new Thread]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=3424 Uwe Becker&#039;s STM32F429 Discovery Board ZX-Spectrum Emulator]&lt;br /&gt;
* [[USB-Tutorial mit STM32]] enthält ein vollständiges Beispielprojekt&lt;br /&gt;
&lt;br /&gt;
== Debug- und Trace-Interface (CoreSight™ Debug and Trace Technologie)==&lt;br /&gt;
&lt;br /&gt;
Übersicht über beide Funktionalitäten und den Schnittstellen:&lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_cs_core_sight.htm&lt;br /&gt;
&lt;br /&gt;
Die Coresight-Debug-Architektur ermöglicht ein nicht-invasives Debugging, d.h. es können während des Betriebes (meistens) ohne Beeinflussung des Prozessors Daten vom Speicher gelesen und in selbigen geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== Debugger Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Der Debugger-Teil besitzt drei Funktionen:&lt;br /&gt;
* Run Control: z.B. Programm-Start, Stopp und Einzel-Schritte.&lt;br /&gt;
* (Program) Break Points: Ein Programm hält an, wenn der Programm Counter eine bestimmte Programm-Adresse erreicht.&lt;br /&gt;
** Die maximale Anzahl der gleichzeitig möglichen Break Points ist begrenzt (z.B. 6 bei einem STM32).&lt;br /&gt;
** Die Anzahl der Break Points ist nahezu unbegrenzt, wenn ein Debugger über den Memory Access (s.u.) sogenannte Flash Break Points unterstützt. Dabei wird ein geladenes Programm im Flash umprogrammiert, um den Debugger anzuhalten. Diese Funktionalität ist meistens ein kostenpflichtiges Zusatz-Feature des Debugger-Herstellers. &lt;br /&gt;
** Beinhaltet keine Data Watch Funktionalität, welche im Trace-Teil (DWT) realisiert wird.&lt;br /&gt;
* Memory Access: Lesen und Schreiben von Speicheradressen. &lt;br /&gt;
** Diese Funktionalität beinhaltet keine direkte Flash-Programmierung. Der Programmiervorgang für einen Flash ist herstellerspezifisch und muss von dem verwendeten Debugger unterstützt werden.&lt;br /&gt;
&lt;br /&gt;
=== Trace Funktionen ===&lt;br /&gt;
Die Trace-Funktionalität wird in drei Funktionen aufgeteilt:&lt;br /&gt;
* ETM (Embedded Trace Macrocell): Optional, nicht jede CPU besitzt diese Hardware (Kostenfaktor, Ausstattung).&lt;br /&gt;
* ITM (Instrumentation Trace Macrocell): Über diesen Kanal kann ein vereinfachtes Trace des Core ermöglicht werden, sowie &amp;quot;printf-ähnlich&amp;quot; Daten über den ITM Channel 0 geschickt und im Debugger ausgegeben werden.&lt;br /&gt;
* DWT (Data Watchpoint &amp;amp; Trace Unit): &lt;br /&gt;
** Data Watch: 4 Access-Break-Points ( z.B. der Debugger bleibt stehen, wenn das Programm auf einen Speicher zugreift oder der Wert einer Variablen einen bestimmten Wert annimmt). &lt;br /&gt;
** Trace Unit: Programmverlauf (durch Lesen des Program Counters) und Interrupt Aufrufe verfolgen, sowie Zeitmessungen.&lt;br /&gt;
&lt;br /&gt;
Einige der Trace-Funktionalitäten können über die JTAG-Schnittstelle angesprochen werden. Die schnelle Trace-Funktionalität (mit 4 bit Parallel-Port) steht nur mit der erweiterten DEBUG + ETM Schnittstelle zur Verfügung. Im Gegensatz zum Debugger-Teil (Run Control, Break Points und Memory Access) werden Trace-Funktionen nicht von allen Debuggern unterstützt. Debugger mit der vollen Trace-Funktionalität kosten deutlich mehr.&lt;br /&gt;
&lt;br /&gt;
* Beispiele für Trace-Port-Aktivierungen für verschiedene Hersteller: http://www.keil.com/support/man/docs/jlink/jlink_capture_tracedata.htm&lt;br /&gt;
&lt;br /&gt;
Die Aktivierung des parallelen Trace-Ports erfordert, je nach CPU Hersteller, zusätzliche Debugger-Makros für die Aktivierung und Port-Freischaltung. Zusätzlich sind die Schnittstellenauswahl und Einstellung (Frequenzen) im Entwicklungs-Tool (IDE) wichtig, um erfolgreich den Programm-Verlauf &amp;quot;tracen&amp;quot; zu können.&lt;br /&gt;
&lt;br /&gt;
=== Debug und Trace-Schnittstellen ===&lt;br /&gt;
Als Debug Interface stehen zwei Varianten zur Auswahl:&lt;br /&gt;
* [[JTAG]]: Dafür sind mindestens 6 Steuerleitungen nötig. Unterstützt Device Chaining: Mehrere verbundene Geräte können mit einem Debugger/Programmer gleichzeitig angesteuert werden.&lt;br /&gt;
* SWD (Serial Wire Debug): Hier mindestens 2  Steuerleitungen (3 mit SWO, zzgl GND und 3,3V). Die SWD Schnittstelle ist in der Regel schneller und kann auch Funktionen aus dem Trace-Teil beinhalten (z.B. ITM, dafür wird der SWO-Pin benötigt). Device Chaining ist mit dieser Schnittstelle nicht möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standard-JTAG Steckerbelegungen: &lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_hw_connectors.htm&lt;br /&gt;
&lt;br /&gt;
=== Der 10polige JTAG-Stecker von mmvisual ===&lt;br /&gt;
mmvisual hat mit dieser Steckerbelegung die Standard JTAG Schnittstelle erweitert:&lt;br /&gt;
&lt;br /&gt;
Ich habe diesen Part in den Artikel [http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual JTAG] verschoben.&lt;br /&gt;
Hinzu gekommen ist die Adapterplatine 10-Polig auf Standard JTAG 20 Polig mit TTL/V24 Wandler. [http://www.mikrocontroller.net/articles/JTAG#Die_Adapterplatine Siehe hier.]&lt;br /&gt;
&lt;br /&gt;
== Hardware-Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
Der STM32 benötigt für den Betrieb nur (Minimalbeschaltung):&lt;br /&gt;
&lt;br /&gt;
* VCC 2..3,3V (je nach Typ)&lt;br /&gt;
* AVCC 2..3,3V (sehr wichtig, der STM32 lässt sich ohne diese Spannung nicht programmieren)&lt;br /&gt;
* GND&lt;br /&gt;
* Reset Pin 100nF nach GND (ein Pull-Up Widerstand von ca. 40k ist intern vorhanden)&lt;br /&gt;
* [[#Bootmodi|Boot-Pins]]&lt;br /&gt;
&lt;br /&gt;
ansonsten nur ein paar einzelne Cs 100nF an VCC/GND.&lt;br /&gt;
&lt;br /&gt;
Um Programmieren zu können wird entweder noch die serielle Schnittstelle (Programmieren über den vorprogrammierten Bootloader) oder JTAG oder die SWD Schnittstelle benötigt.&lt;br /&gt;
&lt;br /&gt;
=== Bootmodi ===&lt;br /&gt;
Unterschiedliche Bootmodi lassen sich mittels der PINs BOOT0 und BOOT1 auswählen. Siehe Application Note [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Attachments/18225/AN2606.pdf AN2606]. Außer F1 besitzen neuere Familien ein SYSCFG_MEMR Register. In dieses Register kann man die gewünschten Boot0/1 Werte schreiben und nach einem Core-Reset (!= System_Reset) startet der Prozessor im gewünschten Mode. Eine Neu- bzw. Deinitialisierung der Peripherie empfiehlt sich! &lt;br /&gt;
&lt;br /&gt;
==== Boot from FLASH ====&lt;br /&gt;
Startadresse wird von 0x08000004 geladen&lt;br /&gt;
 BOOT0 Lo&lt;br /&gt;
 BOOT1 X &lt;br /&gt;
&lt;br /&gt;
==== Boot from SRAM ====&lt;br /&gt;
PC Startadresse wird an 0x200001E0 direkt angesprungen.&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Hi&lt;br /&gt;
Da der interne FLASH der stm32f1x laut Datenblatt nur für 10000 Schreibvorgänge ausgelegt ist, kann mittels BOOT0 (High) und BOOT1 (High) auch aus dem zuvor mit dem Debugger (JTAG/SWD) beschriebenen SRAM booten. &lt;br /&gt;
Hierbei gilt zu beachten:&lt;br /&gt;
 VTOR auf die NVIC Tabelle im SRAM vor dem auslösen des ersten Interrupts remappen.&lt;br /&gt;
&lt;br /&gt;
 Um ein vergleichbares Startverhalten zum FLASH zu erreichen, empfiehlt es sich,&lt;br /&gt;
 0xF1E0F85F an 0x200001E0 zu schreiben. Diese implizite Ausführung von &amp;quot;ldr.w pc,&lt;br /&gt;
 [pc, #-0x01E0]&amp;quot; beim Start erzwingt ein laden der Startadresse von 0x20000004.&lt;br /&gt;
&lt;br /&gt;
==== Boot from SYSMEM (RS232, CAN und USB) ====&lt;br /&gt;
PC Startadresse wird von 0x1FFFF004 geladen&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Lo&lt;br /&gt;
&lt;br /&gt;
Ab F2 gibt es auch ein SYSCFG_MEMRMR Register. Schreibt man hier den Wert für &amp;quot;System Flash&amp;quot; und macht einen Corereset (keinen Systemreset), so landet man auch im Bootloader, unabhängig vom Wert der Boot Pins.&lt;br /&gt;
&lt;br /&gt;
Auch ohne JTAG lässt sich ein STM32 programmieren (Bootloader-Aktivierung). Dabei stehen, je nach CPU-Typ, verschiedene Möglichkeiten zur Verfügung:&lt;br /&gt;
* RS-232 (bisher alle STMs)&lt;br /&gt;
* USB (alle USB fähigen CPUs &amp;gt; F103)&lt;br /&gt;
* CAN (wie USB nur in bestimmten MCUs)&lt;br /&gt;
&lt;br /&gt;
3 zusätzliche Verbindungen müssen auf dem Board gepatcht werden. Für einen Test geht es auch mit Tastern für RESET und BOOT0.&amp;lt;br&amp;gt;&lt;br /&gt;
RESET=RTS (L-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT0=DTR (H-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT1=LOW&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Details sind hier im Forum: [http://www.mikrocontroller.net/topic/141711 STM32 Programmiertool]&lt;br /&gt;
&lt;br /&gt;
Tools für den Download über den STM32-Bootloader:&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/PF257525 STSW-MCU005 STM32 and STM8 Flash loader demonstrator]&lt;br /&gt;
* [https://sourceforge.net/projects/stm32flash/ stm32flash] - Open source flash program (RS-232)&lt;br /&gt;
* [http://dfu-util.sourceforge.net/ dfu-util] - Open source flash program (USB)&lt;br /&gt;
&lt;br /&gt;
== Bewertung ==&lt;br /&gt;
=== Vorteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber ARM7:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interrupt-Controller jetzt Teil des Prozessors (als Core Peripheral), die Vector Table ist jetzt eine echte Vektortabelle, keine Sprungliste wie bei ARM7. Durch Automatismen zwischen Core und NVIC (auto register save r0..r3, lr, sp, pc) bei Interrupt Entry wird eine deutlich schnellere Ausführungszeit bei Interrupts erreicht. Der Interrupt Code muss sich nicht mehr selbst um die Sicherung der o.g. Register kümmern und eine besondere Konfiguration der Handler im Compiler entfällt. Sind vor Beendigung einer ISR (d.h. Rücksprung zum User Code) weitere Interrupts pending, so werden diese ausgeführt, ohne dass eine komplette pop-push-sequenz der Register notwendig ist. Schön beschrieben ist es hier im [https://www.hitex.com/fileadmin/documents/tools/dev_tools/dt_protected/insiders-guides/stm32/isg-stm32-v18d-scr.pdf Insider&#039;s Guide] unter 2.4.5 / Seite 20 (falls der Link nicht mehr funktioniert, direkt nach isg-stm32-v18d-scr.pdf googlen kann helfen...).&lt;br /&gt;
* Thumb-2 Befehlssatz, deutlich schneller als Thumb-1 und ebenso kompakt&lt;br /&gt;
* Weniger Pins für Debugging benötigt durch SWD&lt;br /&gt;
* Mehr Hardware Breakpoints machen debuggen einfacher&lt;br /&gt;
* Software ist einfacher weil die Umschaltung zwischen ARM Mode und Thumb Mode wegfällt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber LPC1700 und LPC1300:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Flexiblere Gehäuseformen mit mehr Peripherie bei kleinen Gehäusen&lt;br /&gt;
* FW-Lib für alle STM32 gleich, alle AppNotes/Demos beziehen sich auf diese eine FW-Lib was die Entwicklung der eigenen Applikation sehr beschleunigt.&lt;br /&gt;
* Genauerer und flexiblerer ADC, insbesondere gegenüber LPC1300&lt;br /&gt;
* Flexiblere Varianten der Peripherie &amp;gt;&amp;gt; bei weniger einen deutlichen Preisvorteil&lt;br /&gt;
* ab 0,85 EUR (Stand 2010) Allerdings gibts den LPC1100 mit Cortex-M0 schon ab 0,65 $!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber SAM3/4:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fast alle Pins sind 5-Volt tolerant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber anderen &amp;quot;Kleinen&amp;quot; wie z.B. PIC, Atmel usw.&#039;&#039;&#039;&lt;br /&gt;
* nahezu gleicher Preis bei Hobby Anwendungen&lt;br /&gt;
* 32 Bit ohne Umwege in Assembler rechenbar&lt;br /&gt;
* Schnelle direkte Offset-Adressierung ermöglicht effizienten Zugriff auf Stack-Variablen, lokal gespeicherte Flash-Konstanten, struct/Array-Elemente&lt;br /&gt;
* Einfache einheitliche Adressierung des gesamten Adressraums, d.h. Pointer auf Peripherieregister, RAM &amp;amp; Flash können exakt gleich behandelt werden, keinerlei Banking/Umschalt-Mechanismen erforderlich auch bei großem Flash/RAM&lt;br /&gt;
* Interrupt-Prioritäten und Prioritätsgruppen&lt;br /&gt;
* Effiziente Pointerarithmetik da Registerbreite=Adressbreite&lt;br /&gt;
* bessere Peripherie wie USB, Ethernet, Vielzahl an Timern&lt;br /&gt;
* der ARM-Core hat eine höhere Taktfrequenz und kann gleichzeitig mehr in weniger Takten berechnen&lt;br /&gt;
* Hardware-Division, bei einigen FPU zur effizienten float-Berechnung&lt;br /&gt;
* Mit größerem Flash/RAM verfügbar&lt;br /&gt;
* Code kann direkt aus dem RAM ausgeführt werden, Speicherschutz und privilegierter Ausführungsmodus können &amp;quot;Kernel&amp;quot;- vor &amp;quot;Anwendungs&amp;quot;-Code schützen, somit wird das dynamische Nachladen von Anwendungen aus externem Speicher effizient &amp;amp; sicher möglich&lt;br /&gt;
* ... und weitere 1000 Punkte ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Links&#039;&#039;&#039;&lt;br /&gt;
* [http://www.arm.com/files/pdf/ARM_Microcontroller_Code_Size_%28full%29.pdf Code Size Analyse zwischen verschiedenen µC]&lt;br /&gt;
&lt;br /&gt;
=== Nachteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil gegenüber LPC1700:&#039;&#039;&#039;&lt;br /&gt;
* STM32F1xx: nur 72 MHz statt 100 MHz (LPC1759: 120 MHz) Taktfrequenz; STM32F2xx hat diesen Nachteil nicht (ebenfalls 120MHz, STM32F4xx mit 180MHz)&lt;br /&gt;
* Der LPC1700 besitzt deutlich mehr Mechanismen, um die Auswirkung der Waitstates des Flash-ROMs auf Code- und Datenzugriffe zu reduzieren und das bedeutet mehr Performance bei gleicher Taktfrequenz. Beim STM32F2 entfällt dieser Nachteil wohl aufgrund des ART Accelerators. &lt;br /&gt;
* Alle LPC1xxx haben 32 Bit Timer. Bei den STM32 haben das nur die STM32F2xx und STM32F4xx (2 Stück)&lt;br /&gt;
* I2S Einheit von ST hat keinen FIFO und im 24/32Bit Modus müssen 2x16Bit Halbwörter übertragen werden. Wobei allgemein bei neuen ARM Prozessoren die vorhandenen DMA-Kanäle (basierend auf eigenen BUS-Kanälen und Speicherzugriffen) FIFO in beliebiger Größe bedeutet. (Gilt nicht bei bestimmten STM32F4xx)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil für Hobby-Anwender&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Nicht direkt &amp;quot;Steckbrettauglich&amp;quot;, da kein DIL Gehäuse verfügbar. Der ebay-Shop dipmicro führt jedoch sehr günstige Lötadapter für Umsetzung von LQFP48 auf DIP48. QFP64 in 0.5mm Pinabstand und nicht 0.8mm wie AVR. Von NXP gibt es Cortex-M0 µC im DIL Gehäuse.&lt;br /&gt;
&lt;br /&gt;
* Viel Peripherie, Clocks müssen alle richtig eingestellt werden, ggf. Anpassung des Startup Codes usw.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Preis-Leistungs-Verhältnis in der Regel schlechter, da geringere Verkaufsstückzahlen&lt;br /&gt;
&lt;br /&gt;
== Errata, Tipps und Tricks ==&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* AD-Wandler PA0: Im Errata steht, dass hier Fehler in der Wandlung entstehen könnten, also einen anderen Pin verwenden.&lt;br /&gt;
* CAN-Bus PD0/PD1: Remap geht erst ab der 100-Pin-Version. Steht im RM0008 unter 9.3.3.: &amp;quot;CAN1 alternate function remapping&amp;quot;. Alle Infos von RM0008 9.3.x sind interessant&lt;br /&gt;
* CAN und USB sind bei der F1 Serie nur bei der &amp;quot;◦Connectivity-Line&amp;quot; gleichzeitig nutzbar. Siehe Datenblätter.&lt;br /&gt;
* Mit internem RC-Oszillator kann die CPU mit maximal 64MHz betrieben werden. Mit einem externen Quarz sind dann 72MHz möglich.&lt;br /&gt;
* Für USB Betrieb muss die CPU mit 48MHz oder 72MHz betrieben werden (bei STM32F1xx).&lt;br /&gt;
* Der Idle Interrupt vom Usart wird zwar ausgelöst, aber nicht vom entsprechenden Statusflag angezeigt&lt;br /&gt;
* Der DMA fängt beim aktivieren immer von vorn an zu zählen, auch wenn er nur kurz angehalten wurde&lt;br /&gt;
* STM32F2xx hat kein Flash Size Register, bei STM32F4xx ist zwar ein flash Size Register beschrieben, kollidiert aber in der Adresse mit einem anderen Register&lt;br /&gt;
* Derivate mit internem EEPROM und nur einer Speicherbank haben das &amp;quot;Feature&amp;quot; bei write/erase des Data-Flashes (EEPROM) einen kompletten stall der code execution zu verursachen (inkl. ISRs, DMA). Desgleichen bei write/erase des internen Flash (ISP-routinen, EEPROM-Emulation).&lt;br /&gt;
* Der I2C hat diverse Fehler, welche im Errata des jeweiligen Modells (z.B. [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/errata_sheet/CD00238166.pdf STM32F105xx and STM32F107xx Errata sheet] ) zu finden sind. Workarounds hierzu finden sich in der Application Note [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00209826.pdf AN2824]. Am Besten benutzt man jedoch die I2C Communication peripheral application library (CPAL) von ST ([http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF258336 STSW-STM32127])&lt;br /&gt;
* [http://blog.frankvh.com/category/stm32/ weitere undokumentierte Features]&lt;br /&gt;
* Interrupt-Flags in Statusregistern der diversen Peripherals wie der Timer müssen zu &#039;&#039;&#039;Beginn&#039;&#039;&#039; (bzw. möglichst weit vor dem Return) der ISR zurückgesetzt werden, da die ISR sonst eventuell 2x ausgeführt wird (Siehe [https://my.st.com/public/Faq/Lists/faqlst/DispForm.aspx?ID=143&amp;amp;level=1&amp;amp;objectid=141 STM32 FAQ] und [http://www.mikrocontroller.net/topic/312393#new Forum]).&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
==== Allgemein ====&lt;br /&gt;
Standard-GPIOs des STM32 und im speziellen das BSRR&lt;br /&gt;
* Die Register bestehen aus zwei Teilen, der obere Teil BR0-15 signalisiert durch ein gesetztes Bit die zu löschenden Bits im IO-ODR-Register,der untere Teil BS0-15 signalisiert durch ein gesetztes Bit die zu setzenden Bits. Besonders ist, wenn beide Bits (oberer und unterer Teil) gesetzt sind hat das Set-Bit Priorität. Durch eine geschickte Kombination von oberen und unteren Teil kann man Speicherzugriffe Sparen. z.B. kann man solch ein Konstrukt zum ändern der unteren 8 Bit des IO-ODR-Registers &amp;quot;uint32_t temp = GPIOC-&amp;gt;ODR &amp;amp; 0xff00; GPIOC-&amp;gt;ODR = temp | (Eingabe &amp;amp; 0x00ff)&amp;quot; um einen Speicherzugriff verkürzen zu &amp;quot;GPIOC-&amp;gt;BSRR = (Eingabe &amp;amp; 0x00ff) | ((0x00ff) &amp;lt;&amp;lt; 16)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== GCC ====&lt;br /&gt;
Um den GCC direkt zu verwenden (zB. mit selbstgebautem makefile), falls man das nicht von einer Entwicklungsumgebung machen lässt, siehe zunächst [[ARM GCC]]. STM32-spezifisches ist:&lt;br /&gt;
* Wird die [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] und ein Quarz verwendet, so muss noch per Präprozessor-Definition die Frequenz des Quarzes angegeben werden mittels z.B. -DHSE_VALUE=8000000 für 8MHz (wie auf dem STM32F4 Discovery).&lt;br /&gt;
&lt;br /&gt;
===== Startupcode &amp;amp; Linkerscript =====&lt;br /&gt;
* Damit der compilierte Code an den richtigen Stellen im Controller landet (d.h. dem Flash) muss man dem Linker ein Linkerscript mitgeben. Dies geht per &amp;quot;-T &#039;&#039;pfad_zum_linkerscript.ld&#039;&#039;&amp;quot; an den Linker-Befehl. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Linkerscript für die Atollic TrueSTUDIO IDE, dieses kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich das Script im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324x7I_EVAL/stm32_flash.ld&amp;quot; des Archives.&lt;br /&gt;
* Damit beim Starten die richtigen Initialisierungen vorgenommen werden (wie globale Variablen und bei C++ Konstruktoren globaler Objekt-Instanzen) muss als erstes ein Startupcode laufen, der dann die main()-Funktion aufruft. Der Startupcode ist meistens in Assembler geschrieben, C-Code ist aber auch möglich. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Startupcode für die Atollic TrueSTUDIO IDE, dieser kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich der Code in Assemblerform im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f40xx.s&amp;quot; des Archives. Der Assemblercode kann per arm-none-eabi-as (Flags s.o.) assembliert werden, die resultierende .o -Datei normal mitgelinkt.&lt;br /&gt;
&lt;br /&gt;
Zusammen bieten die beiden Dateien der Anwendung ein Standard-C-Interface, d.h. man kann wie gewohnt globale Variablen verwenden und seinen Code in die main()-Funktion schreiben.&lt;br /&gt;
&lt;br /&gt;
=== Tipps für Umsteiger von Atmel/PIC/8051 ===&lt;br /&gt;
* Prozessortakt hat unterschiedliche Taktquellen und eine PLL.&lt;br /&gt;
* Alle Peripheriemodule haben einen extra Clock, den man aktivieren muss.&lt;br /&gt;
* Wenn man z.B. einen UART benutzen möchte, so muss man den Clock vom UART, Alternate Function IO (AFIO) und den GPIO-Port aktivieren.&lt;br /&gt;
* Ansonsten hat man nahezu doppelt so viele Möglichkeiten in den Peripheriemodulen.&lt;br /&gt;
* Interrupt-Flags müssen in der ISR selber gelöscht werden&lt;br /&gt;
* Forum zu [http://www.mikrocontroller.net/topic/175888 Interrupts vs. Events]&lt;br /&gt;
&lt;br /&gt;
=== Errata vom STM32F4xx die nicht im Errata von ST stehen ===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267439#2788478 Aktivieren von DMA], wenn mehr als 3 DMA Kanäle aktiviert werden, kann es sein dass die nicht alle korrekt bedient werden. Auch klappt der DMA mit dem FSMC nicht immer zuverlässig. [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FWarning%20limit%20simultaneous%20DMAs%20to%202&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=811 siehe hier] [http://blog.frankvh.com/2012/01/13/stm32f2xx-stm32f4xx-dma-maximum-transactions/ und hier]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/260637#2700761 Nerviger Bug in &amp;quot;stm32f4xx.h&amp;quot;] Änderung Struktur GPIO_TypeDef&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/261690#2714754 Batterie wird leer gezogen], nur bei manchen Chips mit Rev. A&lt;br /&gt;
* [http://www.efton.sk/STM32/STM32F4xx_doc_errors.txt Liste von Dokumentations-Fehlern]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
Versandhäuser für Privatpersonen&lt;br /&gt;
* [http://www.reichelt.de/STM-Controller/2/index.html?;ACTION=2;LA=2;GROUPID=2950; Reichelt]&lt;br /&gt;
* [http://darisusgmbh.de/shop/index.php?cat=c2692_ARM-Cortex.html Darisus]&lt;br /&gt;
* [https://www.tme.eu/de/katalog/st-mikrocontroller_112866/ TME] &lt;br /&gt;
* [http://de.rs-online.com/web/c/halbleiter/prozessoren-und-mikrocontroller/mikrocontroller/?sort-by=default&amp;amp;sort-order=default&amp;amp;applied-dimensions=4294417325&amp;amp;lastAttributeSelectedBlock=4294425895 RS-Online]&lt;br /&gt;
* [http://www.mouser.de/STMicroelectronics/Semiconductors/Embedded-Processors-Controllers/Microcontrollers-MCU/ARM-Microcontrollers-MCU/_/N-a85pc?P=1z0zpefZ1yzud1pZ1yzmxr3Z1yzud8sZ1yztkjiZ1yzonn5Z1yznfad&amp;amp;FS=True Mouser]&lt;br /&gt;
* [https://www.conrad.de/de/embedded-mikrocontroller-o0214046.html Conrad]&lt;br /&gt;
&lt;br /&gt;
Gewerblich liefern natürlich viele wie EBV, [http://de.futureelectronics.com Future Electronics], Farnell, Digikey usw...&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [https://www.conrad.de/de/stmicroelectronics-entwicklungs-kits-o0214062.html diverse Nucleo- und Discovery-Boards bei Conrad]&lt;br /&gt;
* [https://www.reichelt.de/Einplatinen-Microcontroller/2/index.html?ACTION=2&amp;amp;LA=3&amp;amp;GROUPID=6667 diverse Nucleo-Boards bei Reichelt]&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;keywords=STM32&amp;amp;cat=40&amp;amp;subkat=on&amp;amp;mnf=&amp;amp;sdesc=on&amp;amp;desc=on&amp;amp;x=79&amp;amp;y=19 STM32 bei Watterott (unter anderem Olimex- und Nucleo-Boards)]&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/ST/ STM32-Boards direkt bei Olimex]&lt;br /&gt;
* [http://shop.myavr.de/Hardware.htm?sp=artlist_kat.sp.php&amp;amp;katID=51 verschiedene STM32-Boards myAVR]&lt;br /&gt;
* [http://www.sander-electronic.de/es0028.html Sander Electronic]&lt;br /&gt;
* [http://www.futurlec.com/STM32_Development_Board.shtml Futurlec Evalboard, ebenso Header-Board]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/MP32F103-Stick:_Ein_Mini-Mikrocontroller-Board_mit_USB_und_bis_zu_4MB_Datenspeicher Artikel im Wiki, ARM mit USB und 4MB Speicher]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Cortex_M3_OCM3U Cortex M3 Artikel im Wiki]&lt;br /&gt;
* [http://de.farnell.com/jsp/displayProduct.jsp?sku=1824325&amp;amp;action=view&amp;amp;CMP=GRHS-1000962 STM32Discovery bei Farnell] Mikrocontroller Board (STM32F100RBT6B) mit onboard USB-Programming Interface für ca. 12,50€&lt;br /&gt;
* [https://dsp-sys.de/24-bayerhw-de/26-xynergy-xs-so-dimm-module-mit-cortex-m4-spartan-6-ddr3-ram SO-DIMM Module mit STM32F4, Spartan-6 &amp;amp; DDR3 RAM] Breakout-Board mit CAN (2x isoliert), UART, LAN, SPI, I2C and USB-OTG u.v.m.&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities, Tutorials ==&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/STM32_-_Einstieg_mit_Em::Blocks STM32 - Einstieg mit Em::Blocks Tutorial]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/mikrocontroller-elektronik?filter=ARM*+STM32*+Cortex* Suche im Forum]&lt;br /&gt;
* [[STM32 für Einsteiger]]&lt;br /&gt;
* http://www.openstm32.org/System+Workbench+for+STM32&lt;br /&gt;
* [https://community.st.com/ Forum auf der ST Homepage] &lt;br /&gt;
*[http://joe-c.de/pages/posts/einstieg_mikrocontroller_stm32f103_101.php Einstieg:  STM32board mit Kamera (deutsch)] &lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html STM32 Tutorial für Standard Peripheral Library in Deutsch]&lt;br /&gt;
* [http://mySTM32.de STM32 C und C++ Tutorial in Deutsch ]&lt;br /&gt;
* [http://myugl.de Tutorial für Grafik-Librarys und SiSy-Projekte in Deutsch ]&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF251717 MicroXplorer MCU graphical configuration tool ]&lt;br /&gt;
* [http://www.harerod.de/docs/CoreMark_STM32.pdf Testbericht über CoreMark 1.0 auf Cortex-M3/M4 mit verschiedenen Compiler- und MCU-Einstellungen]&lt;br /&gt;
* [http://klaus4.blogspot.com/2014/05/stm32f4-discovery-mit-opensource.html STM32-Toolchain mit Eclipse CDT 4.3, GnuArmEclipse, OpenOCD 0.8.0, Gnu Arm GCC 4.8, STM32CubeMX]&lt;br /&gt;
* [http://libopencm3.org/ libopenmc3 OpenSource libs für STM32 und ähnliche] &lt;br /&gt;
* [https://www.mikrocontroller.net/topic/423300#new Totzeitrechner für STM32]&lt;br /&gt;
* [https://leanpub.com/mastering-stm32 Download-Buch in englisch, min. 25$ &amp;quot;Mastering STM32&amp;quot;]&lt;br /&gt;
* [http://stefanfrings.de/stm32/index.html STM32F1/F3 Anleitung]&lt;br /&gt;
* [https://www.cs.indiana.edu/~geobrown/book.pdf &amp;quot;Discovering the STM32 Microcontroller&amp;quot; eBook (kostenlos)]&lt;br /&gt;
* [http://stefanfrings.de/mikrocontroller_buch2/index.html Einblick in die moderne Elektronik ohne viel Theorie] &#039;&#039;&#039;PDF&#039;&#039;&#039;, Programmieranleitung für Anfänger &lt;br /&gt;
* [[USB-Tutorial mit STM32]]&lt;br /&gt;
* [http://www.pomad.fr/node/2 Sehr schönes STM32 Anfängertutorial mit Codeanalyse bis in die Register]&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;br /&gt;
[[Kategorie:Mikrocontroller]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=101014</id>
		<title>STM32</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=101014"/>
		<updated>2019-09-19T05:39:35Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Weblinks, Foren, Communities, Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STM32 ist eine Mikrocontroller-Familie von [http://www.st.com/mcu/inchtml-pages-stm32.html ST] mit einer 32-Bit [[ARM]] Cortex-M0/M3/M4 CPU. Diese Architektur ist speziell für den Einsatz in Mikrocontrollern neu entwickelt und löst damit die bisherigen ARM7-basierten Controller weitestgehend ab. Den STM32 gibt es von ST in unzähligen Varianten mit variabler Peripherie und verschiedenen Gehäusegrößen und -formen. Durch die geringe Chipfläche des Cores ist es ST möglich, eine 32 Bit-CPU für weniger als 1&amp;amp;nbsp;€ anzubieten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:stm32F103xc.png|thumb|right|340px|Blockdiagramm STM32F103xC/D/E]]&lt;br /&gt;
&lt;br /&gt;
== STM32-Familien ==&lt;br /&gt;
&lt;br /&gt;
Bisher gibt es elf STM32-Familien:&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f0-series.html STM32F0]&lt;br /&gt;
** Cortex M0&lt;br /&gt;
** Mikrocontroller zum Einstieg&lt;br /&gt;
** Bis 48MHz (38 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series.html STM32F1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 72MHz (61 DMIPS)&lt;br /&gt;
**Verschiedene Unterfamilien:&lt;br /&gt;
*** Connectivity line&lt;br /&gt;
*** Performance line&lt;br /&gt;
*** USB Access line&lt;br /&gt;
*** Access Line&lt;br /&gt;
*** Value line&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f2-series.html STM32F2]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 120MHz (150 DMIPS)&lt;br /&gt;
** Wie die STM32F1 Serie, Camera-Interface, 32-Bit Timer, Crypto-Engine...&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f3-series.html STM32F3]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 72MHz (90 DMIPS)&lt;br /&gt;
** Fast 12-bit 5 MSPS and precise 16-bit sigma-delta ADCs&lt;br /&gt;
** Touch sensing controller (TSC)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series.html STM32F4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 180MHz (225 DMIPS)&lt;br /&gt;
** Bis zu 2MB Flash&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f7-series.html STM32F7]&lt;br /&gt;
** Cortex M7&lt;br /&gt;
** DSP und FPU (Single/Double Precision)&lt;br /&gt;
** Bis 216MHz (462 DMIPS)&lt;br /&gt;
** Mehr Peripherie: SPDIF-IN/OUT, SAI, HDMI-CEC, Dual Quad SPI&lt;br /&gt;
** On-Chip Grafik-LCD-Controller&lt;br /&gt;
** DMAs auch für Ethernet, USB und Chrom-ART&lt;br /&gt;
* [http://www.st.com/en/microcontrollers/stm32h7-series.html STM32H7]&lt;br /&gt;
** Cortex M7&lt;br /&gt;
** Bis 400MHz (856 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l0-series.html STM32L0]&lt;br /&gt;
** Cortex M0+&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
** Bis 32MHz (26 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l1-series.html STM32L1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
** Bis 32MHz (33 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l4-series.html STM32L4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU (Single Precision)&lt;br /&gt;
** Ultra Low Power (bis zu 8nA mit I/O Wake-Up)&lt;br /&gt;
** Bis 80MHz (100 DMIPS)&lt;br /&gt;
** 128KB...1MB Flash, 64/128KB SRAM&lt;br /&gt;
** optional Segment-LCD Treiber&lt;br /&gt;
** Quarzloser Betrieb auch mit CAN (1% ab Werk) oder USB (Synch über Host) möglich&lt;br /&gt;
** Digital-Filter für ΣΔ-Modulatoren&lt;br /&gt;
* [https://www.st.com/en/microcontrollers-microprocessors/stm32g0-series.html STM32G0]&lt;br /&gt;
** Cortex M0+&lt;br /&gt;
** Bis 64MHz (ca. 60MIPS)&lt;br /&gt;
** 16KB...512KB Flash, bis 128KB SRAM&lt;br /&gt;
** 8-100 Pins&lt;br /&gt;
** SO-8, QFP TW im 0.8mm Raster&lt;br /&gt;
** Noch nicht alle gelisteten Varianten in Produktion (8.2019)&lt;br /&gt;
* [https://www.st.com/en/microcontrollers-microprocessors/stm32g4-series.html STM32G4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** FPU und DSP&lt;br /&gt;
** &amp;quot;Math Accelerator&amp;quot; Für Trigonometrische Funktionen, FIR, IIR&lt;br /&gt;
** Bis 170MHz (213 DMIPS)&lt;br /&gt;
** bis 512KB Flash, 128KB SRAM&lt;br /&gt;
** 48-128Pins&lt;br /&gt;
** &amp;quot;Mixed Signal MCU&amp;quot;&lt;br /&gt;
** Noch nicht alle gelisteten Varianten in Produktion (8.2019)&lt;br /&gt;
&lt;br /&gt;
* STM32T - nicht mehr in Produktion&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** 72MHz&lt;br /&gt;
** Touch Sensing&lt;br /&gt;
* STM32W - nicht mehr in Produktion&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** BIS 24MHz&lt;br /&gt;
** RF-MCU &lt;br /&gt;
[http://www.st.com/web/en/catalog/mmc/FM141/SC1169 Hier eine Übersicht zum Auswählen eines STM32Fxxx]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* Cortex-M0(+) / Cortex-M3 / Cortex-M4(F) / Cortex-M7 Kern (mit FPU)&lt;br /&gt;
* 16KB ... 2MB  [[Flash-ROM]]&lt;br /&gt;
* 4KB ... 512KB [[Speicher#SRAM|SRAM]]&lt;br /&gt;
* 2KB ... 16KB [[Speicher#EEPROM|EEPROM]] (STM32L)&lt;br /&gt;
* SDRAM-Controller bei den [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1577/LN1806 STM32F42xxx und STM32F43xxx], bis 512 MByte externer SDRAM addressierbar&lt;br /&gt;
* 512 one-time programmable Bytes(STM32F2/4)&lt;br /&gt;
* [[IC-Gehäuseformen | Gehäuse]] 8 ... 216 Pins als SO, LCSP, TSSOP, QFN, QFP und BGA&lt;br /&gt;
* Derzeit sind &#039;&#039;&#039;über 700&#039;&#039;&#039; [http://www.st.com/web/en/catalog/mmc/FM141/SC1169 STM32 Derivate/Varianten verfügbar]&lt;br /&gt;
* Bis 72MHz CPU-Takt, bis 120MHz beim STM32F2xx, bis 168/180 MHz beim STM32F4xx, wobei eine spezielle Prefetch-Hardware bis 120/168 MHz eine Geschwindigkeit erzielt, die 0 Wait-States entspricht. Der CPU-Takt wird über einen Multiplikator aus dem internen RC-Takt oder einem externen Quarz-Takt abgeleitet. Bis 216MHz CPU-Takt bei STM32F7xx.&lt;br /&gt;
* Zusätzliche FPU &amp;quot;Math Accelerator&amp;quot; Für Trigonom. Funktionen (CORDIC), FIR, IIR(FMAC) (STM32G4)&lt;br /&gt;
* Externes Businterface (nur bei Gehäusen ab 100 Pin und nur bei STM32F4, STM32F2 und STM32F1 Performance line)&lt;br /&gt;
* LCD Treiber für bis zu 8x40 Segmente (nicht beim STM32F2xx)&lt;br /&gt;
* TFT Treiber bei [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series/stm32f429-439.html STM32F429/STM32F439] [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series/stm32f469-479.html STM32F469/STM32F479]&lt;br /&gt;
* Spannungsbereich 1,65 ... 3,6V, nur eine Betriebsspannung nötig&lt;br /&gt;
* Temperaturbereich bis 125 °C&lt;br /&gt;
* Bis zu 168 IOs, viele davon [[Pegelwandler|5V-tolerant]]&lt;br /&gt;
* Interner, kalibrierter RC-Oszillator mit 8MHz (16MHz bei STM32F2/F4xx)&lt;br /&gt;
* Externer Quarz&lt;br /&gt;
* Real Time Clock mit eigenem Quarz und separater Stromversorgung&lt;br /&gt;
* Bis zu 16 [[Timer]], je Timer bis zu 4 IC/OC/PWM Ausgänge. Davon 2x Motion Control Timer (bei STM32F103xF/G), (bis zu 32 PWM Ausgänge)&lt;br /&gt;
* Systick Counter&lt;br /&gt;
* Bis zu 3 12-Bit [[AD-Wandler]] mit insgesamt 24 AD-Eingängen, integrierter [[Temperatursensor]], Referenzspannung Vrefint und VBatt Spannungsmessung (STM32F4xx)&lt;br /&gt;
* Bis zu 2 12-Bit [[DA-Wandler]] (bis zu 3 beim STM32F3xx)&lt;br /&gt;
* Bis zu 2 [[DMA]] Controller mit bis zu 12 Kanälen (16 beim STM32F2/4xx)&lt;br /&gt;
* Bis zu 2x [[I2C|I²C]]&lt;br /&gt;
* Bis zu 5x [[UART|USART]] mit LIN, IrDA und Modem Control (bis zu 8 beim STM32F2/F4xx)&lt;br /&gt;
* Bis zu 3x [[SPI]] (bis zu 6 beim STM32F4xx)&lt;br /&gt;
* Bis zu 2x [[I2S|I²S]]&lt;br /&gt;
* Bis zu 3x [[CAN#STMicroelectronics STM32 (Cortex M3/M4)|CAN]]&lt;br /&gt;
* Hardware [[CRC]] Unit, bei der STM32F3xx Serie mit einem einstellbaren Polynom &lt;br /&gt;
* Unique device ID register (96 Bits)&lt;br /&gt;
* TRNG - True Random Number Generator (STM32F2/4xx), basierend auf analoger Schaltung&lt;br /&gt;
* Cryptographic Processor (CRYP) (STM32F2/4xx)&lt;br /&gt;
* Hash Processor (HASH) (STM32F2/4xx)&lt;br /&gt;
* Kamera-Interface (DCMI) (STM32F2/4xx)&lt;br /&gt;
* [[USB]] 2.0 Full Speed / OTG&lt;br /&gt;
* [[USB]] 2.0 Hi Speed OTG mit extra PHY-Chip (STM32F2/4xx)&lt;br /&gt;
* USB Type-C™ Power Delivery controller (STM32G0/G4)&lt;br /&gt;
* HDMI CEC interface (STM32G0)&lt;br /&gt;
* SDIO Interface (z.B. SD-Card Reader)&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Watchdog mit Window-Mode&lt;br /&gt;
* Jedes Peripheriemodul ist separat einschaltbar, wodurch sich erheblich [[Ultra low power|Strom sparen]] lässt&lt;br /&gt;
* [[JTAG]] und SWD (Serial Wire Debug) Interface&lt;br /&gt;
* Bis zu 6 Hardware-Breakpoints für Debuggen&lt;br /&gt;
* und vieles mehr ...&lt;br /&gt;
&lt;br /&gt;
== Struktur der Dokumentation ==&lt;br /&gt;
Die Dokumentation der STM32 ist im Vergleich zur [[AVR]]-Familie umfangreicher und komplexer. Sie teilt sich in mehrere Dokumente auf.&lt;br /&gt;
Als Beispiel der Dokumentation soll stellvertretend der [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32-mainstream-mcus/stm32f1-series/stm32f103/stm32f103rc.html STM32F103RC] genannt werden. Die Seite von ST beinhaltet alle nötigen Informationen passend zu diesem Prozessor.&lt;br /&gt;
&lt;br /&gt;
Diese Dokumente von ST beschreiben den Controller:&lt;br /&gt;
&lt;br /&gt;
* Im [http://www.st.com/resource/en/datasheet/stm32f103rc.pdf STM32F103xC/D/E Datasheet] sind die speziellen Eigenschaften einer bestimmten Modellreihe beschrieben und die exakten Daten und Pinouts aufgeführt, sowie die Zuordnung Chipname - Flash/RAM-Größe. Die Peripheriemodule werden nur aufgeführt, nicht detailliert beschrieben.&lt;br /&gt;
* Im [http://www.st.com/resource/en/reference_manual/cd00171190.pdf Reference Manual (RM0008)] sind alle Peripheriemodule der jeweiligen STM32-Controllerfamilie im Detail beschrieben.&lt;br /&gt;
* Das [https://static.docs.arm.com/ddi0403/e/DDI0403E_c_armv7m_arm.pdf ARMv7M Architecture Reference Manual] beschreibt detailliert die abstrakte ARMv7M-Architektur, wie das Exception Model, die CPU Instruktionen inklusive Encoding, etc.&lt;br /&gt;
* Das [https://static.docs.arm.com/100166/0001/arm_cortexm4_processor_trm_100166_0001_00_en.pdf Cortex-M4 Technical Reference Manual] bzw. das [https://static.docs.arm.com/100165/0201/arm_cortexm3_processor_trm_100165_0201_00_en.pdf Cortex-M3 Technical Reference Manual] beschreibt Eigenschaften der Cortex-M3/4 Implementierung der Architektur, insbesondere die Geschwindigkeit der einzelnen Prozessor-Instruktionen.&lt;br /&gt;
* Das [http://www.st.com/resource/en/programming_manual/cd00228163.pdf STM32 Cortex-M3 Programming Manual] ist eine Zusammenfassung des ARMv7M Architecture Reference Manual bezogen auf die STM32.&lt;br /&gt;
* Wer nicht die ST Firmware-Library verwendet, der benötigt zusätzlich das [http://www.st.com/resource/en/programming_manual/cd00283419.pdf Flash Programming Manual] für die Betriebsart des Flash-ROMs, d.h. die frequenzabhängige Konfiguration der Waitstates.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sollten auch die [http://www.st.com/resource/en/errata_sheet/cd00197763.pdf Errata Sheets] beachtet werden. Empfohlen sei auch die Appnote &amp;quot;[http://www.st.com/resource/en/application_note/cd00164185.pdf AN2586 Getting started with STM32F10xxx hardware development]&amp;quot;.&lt;br /&gt;
Die jeweiligen Dokumentations-PDFs sind auf der Produktseite von ST eines jeden Mikrocontrollers verlinkt.&lt;br /&gt;
&lt;br /&gt;
== Hardware Zugriffs-Libraries ==&lt;br /&gt;
=== CMSIS ===&lt;br /&gt;
&lt;br /&gt;
Die CMSIS (ARM® &#039;&#039;&#039;C&#039;&#039;&#039;ortex™ &#039;&#039;&#039;M&#039;&#039;&#039;icrocontroller &#039;&#039;&#039;S&#039;&#039;&#039;oftware &#039;&#039;&#039;I&#039;&#039;&#039;nterface &#039;&#039;&#039;S&#039;&#039;&#039;tandard) ist eine Library von ARM für den Zugriff auf die herstellerübergreifenden Funktionen des ARM-Cores. Hierzu gehört bei den Cortex-M4F-Cores auch die DSP und Floating-Point Funktionalität. Weiterhin existieren eine Zahl von Helferfunktionen für den NVIC, den Sys-Tick-Counter, sowie eine SystemInit-Funktion, welche sich um die PLL kümmert. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen des CMSIS-Standards ([http://www.onARM.com www.onARM.com]) wurden die Headerdateien standardisiert, der Zugriff auf die Register erfolgt per &#039;&#039;&#039;Peripheral-&amp;gt;Register&#039;&#039;&#039;. Die CMSIS C-Dateien bzw. Header enthalten auch Anpassungen für die verschiedenen Compiler. Die Portierung eines Real-Time-Betriebsystems sollte unter Verwendung der CMSIS, für Chips der verschiedenen Hersteller, stark vereinfacht möglich sein (z.B. einheitliche Adressen für Core-Hardware/Sys-Tick-Counter).&lt;br /&gt;
&lt;br /&gt;
Die CMSIS ist im Download der ‎STM32 Standard Peripheral Library enthalten. Die Compiler-Hersteller liefern eine jeweils zur ihrer Tool-Version passende bzw. geprüfte Library (incl. CMSIS) aus. Diese Libs können, gegenüber den Downloads beim Chip-Hersteller, auch ältere Version beinhalten.&lt;br /&gt;
&lt;br /&gt;
=== ‎STM32 Standard Peripheral Library (SPL) ===&lt;br /&gt;
&lt;br /&gt;
ST bietet für jede Controller-Familie eine umfangreiche zur CMSIS passende Peripherie-Bibliothek. Alle Funktionen um die Peripherie zu benutzen sind gekapselt in einfache Strukturen und Funktionsaufrufe. Somit muss man sich nicht selbst um die Peripherie-Register kümmern. Diese Library und ihre Dokumentation setzen das grundlegende Verständnis der Funktion des jeweiligen Peripheriemoduls voraus, wie es die o.a. Referenz und diverse Appnotes vermitteln. Die Library beinhaltet außerdem für fast jede Peripherie mehrere Beispiele.&lt;br /&gt;
Für die USB Schnittstelle gibt es noch eine extra Library, genauso wie für Ethernet.&lt;br /&gt;
&lt;br /&gt;
Die Standard Peripheral Library ist inzwischen veraltet, ST empfiehlt, sie nicht mehr zu verwenden.&lt;br /&gt;
&lt;br /&gt;
Auf der &amp;quot;Design Resources&amp;quot; Seite der Produktseite von ST eines jeden STM32 Mikrocontrollers kann die Library für den jeweiligen Controller heruntergeladen werden, z.B. [http://www.st.com/web/en/catalog/tools/PF257890 hier für den o.g. STM32F103RC].&lt;br /&gt;
&lt;br /&gt;
Library für STM32F4xx: [http://www.st.com/web/en/catalog/tools/PF257901# STSW-STM32065 STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
=== ‎STM32 Cube HAL ===&lt;br /&gt;
&lt;br /&gt;
Hat seit 2012 die SPL abgelöst.&lt;br /&gt;
&lt;br /&gt;
* https://www.st.com/en/embedded-software/stm32cube-mcu-packages.html&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
Zur Programmierung der STM32 gibt es verschiedene Möglichkeiten, sowohl kommerzielle proprietäre als auch mit Freier Software.&lt;br /&gt;
&lt;br /&gt;
=== Freie Software/Freeware ===&lt;br /&gt;
==== Selber zusammenstellen ====&lt;br /&gt;
Man nehme...:&lt;br /&gt;
* Eine Entwicklungsumgebung nach Wahl:&lt;br /&gt;
** [http://www.eclipse.org Eclipse] mit [http://www.eclipse.org/cdt/ C/C++ Development Tooling] und [https://gnu-mcu-eclipse.github.io/ GNU ARM Plug-in](Linux, Windows)&lt;br /&gt;
** [https://atollic.com/truestudio/ TrueStudio for STM32] basiert auf Eclipse&lt;br /&gt;
** [http://www.openstm32.org/Downloading+the+System+Workbench+for+STM32+installer System Workbench for STM32] basiert auf Eclipse&lt;br /&gt;
** [http://netbeans.org/ Netbeans] mit [http://plugins.netbeans.org/plugin/37426/gdbserver GDBserver-Plugin] (Linux, Windows)&lt;br /&gt;
** [http://www.kdevelop.org/ KDevelop] (Linux, Windows)&lt;br /&gt;
** [http://www.geany.org/ Geany] (Linux, Windows)&lt;br /&gt;
** Oder ein einfacher Texteditor&lt;br /&gt;
* Einen C,C++ Compiler:&lt;br /&gt;
** Eine der [[ARM_GCC#Fertige_GCC_Bin.C3.A4rdistributionen|GCC-Binärdistributionen]], siehe auch [[#GCC|GCC]] (je nach Distribution Linux, Windows)&lt;br /&gt;
* Programmiersoftware zum Flashen des Target:&lt;br /&gt;
** [http://openocd.sourceforge.net/ OpenOCD] unterstützt viele Debug/Programmier-Adapter (Linux, Windows)&lt;br /&gt;
** [https://github.com/texane/stlink Texane stlink] funktioniert gut mit den ST-Link Adaptern wie sie zB. auf den STM32 Discovery Boards zu finden sind (Linux)&lt;br /&gt;
** Bei Verwendung eines Segger J-Link, den [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf Segger GDB-Server] in Verbindung mit dem beim GCC mitgelieferten GDB (Linux, Windows).&lt;br /&gt;
** [https://github.com/blacksphere/blackmagic/wiki Black Magic Probe] als Mikrocontrollerfirmware simuliert einen seriellen Port, der direkt von GDB verwendet werden kann. Für FTDI-MPPSE basierte Adapter und ST-Link V2  läuft Blackmagic auf dem Host und stellt den Port :2000 für GDB zur Verfügung. Stlinks können, so man sich Programmierzugang zu dem STM32F103 des Stlinks beschaffen kann, auch mit BMP Firmware umgeflasht werden.&lt;br /&gt;
&lt;br /&gt;
==== Komplette IDEs ====&lt;br /&gt;
* [https://developer.mbed.org/platforms ARM mbed Developer Site] ist eine vollständige Entwicklungsplattform für diverse ARM-Controller auf Basis eines RTOS mit Hardware-Abstraktion und webbasierter Online-sowie Offline-IDE. Ähnlich dem Arduino-Konzept können mit mbed einfachere Aufgaben schnell umgesetzt werden. mbed basiert auf C++ und unterstützt verschiedene Compiler. Projekte können auch exportiert und für andere IDEs heruntergeladen werden. Die mbed-Library ist quelloffen und auf github gehostet.&lt;br /&gt;
* [https://atollic.com Atollic TrueStudio] wurde seit der Übernahme durch ST auf STM32 Mikrocontroller reduziert und ist jetzt kostenlos verfügbar. Basiert auf Eclipse, OpenOCD und [[ARM GCC]]. Ohne size limit.&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite_edition.html Codesourcery Lite Edition] Mit dieser Umgebung muss man sich anfreunden können. Es sind nur wenig Beispielprojekte verfügbar. Nicht mehr kostenlos verfügbar.&lt;br /&gt;
* [http://www.coocox.org/ Coocox Eclipse IDE] kostenlose IDE für STM32F0/F1/F2/F3/F4, die aber mittlerweile nicht mehr weiterentwickelt wird. Basiert auf dem [[ARM GCC]] und es gibt eine breite Unterstützung. Es ist sogar ein freies RTOS verfügbar. Eine gute Wahl ohne Limits mit breiter Debugger-Unterstützung. Hilfreiche Infos gibt es [http://www.mikrocontroller.net/topic/214719?goto=new#2228482 hier] und [http://www.mikrocontroller.net/topic/214719?goto=new#2229943 hier] im Forum, Artikel: [[STM32 CooCox Installation]] &lt;br /&gt;
* [http://emide.org/ emIDE] kostenlose IDE von Segger. Die emIDE basiert auf Code::Blocks. Sie ist auf [[ARM GCC]] aufgebaut und unterstützt eine große Zahl an unterschiedlichen JTAG/SWD-Debuggern - natürlich auch den J-Link aus gleichem Hause.  &lt;br /&gt;
* [http://www.emblocks.org EmBlocks] kostenlose IDE, Code::Blocks basiert, unterstützt STM32 L1/F0/F1/F2/F3/F4/W, integrierter Compiler ([[ARM GCC]]), integrierter GDB-Debugger, Jlink/ST-Link, System view (Peripherie-Register anzeigen) beim Debuggen, Project-Wizard (Eigene Wizards können mit Squirrel geschrieben werden), Basiert auf Code::Blocks. Artikel: [[STM32 - Einstieg mit Em::Blocks]]&lt;br /&gt;
** heißt jetzt EmBitz -&amp;gt; https://www.embitz.org&lt;br /&gt;
* [http://cms.seng.de/service-support/downloads/ Entwicklungsumgebung GNU/Linux] für STM32F1 mit OpenOCD und Olimex ARM-USB-OCD-H, Bedienung über Eclipse-IDE oder Kommandozeile.&lt;br /&gt;
* [http://www.openstm32.org/blog1-System-Workbench-for-STM32 System Workbench for STM32] (SW4STM32) ist eine uneingeschränkte und kostenlose IDE. Sie wird von [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF261797 ST] offiziell unterstützt. Die Entwicklungsumgebung ist in der Version 1.0 seit 5.2.2015 erhältlich. Seit Februar 2016 ist eine Version für Linux verfügbar.&lt;br /&gt;
&lt;br /&gt;
==== Andere Programmiersprachen ====&lt;br /&gt;
&lt;br /&gt;
* [http://mecrisp.sourceforge.net Mecrisp-Stellaris], eine native Forth-Implementation für ARM Cortex M0/M3/M4. Es werden bereits mehrere STM32 Targets unterstützt und neue Portierungen sind herzlich willkommen. Auch Chips von TI, NXP und Freescale sind im aktuellen Paket enthalten.&lt;br /&gt;
&lt;br /&gt;
=== Kommerzielle Umgebungen ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp Keil µVision] (Demo max. 32KB Code/Free für STM32F0/STM32L0): Die sehr komfortable µVison IDE ist neben dem ARM Compiler per Menue auch für einen beliebigen GNU-Compiler konfigurierbar. Damit besteht das 32k-Limit nur noch für den integrierten Debugger / Simulator. In Verbindung mit einem ULINK2 ist die Umgebung schon sehr einfach zu bedienen - leider ist der Compiler mit großen Abstand der langsamste den ich je nutzte, da er keine parallel Option wie der GNU-CC besitzt. Mit der µVision lässt sich kein fremdes File in den Controller in den Flashspeicher des Controllers schreiben. Für den Anfänger eine gute Wahl. Der Preis ist jedoch ein guter Grund auf andere freie IDEs zu wechseln. µVison selbst kann kostenlos mit dem MDK-Evaluationkit heruntergeladen werden. [https://www.keil.com/arm/demo/eval/arm.htm#DOWNLOAD download] Wer sich nur auf STM32 Cortex M0/L0 beschränkt kann die Keil MDK auch ohne 32K Begrenzung frei nutzen. [http://www2.keil.com/stmicroelectronics-stm32/mdk download]&lt;br /&gt;
* [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR-Embedded-Workbench] (Demo max. 32KB Code) [http://supp.iar.com/Download/SW/?item=EWARM-EVAL download]&lt;br /&gt;
* [http://www.isystem.com/download/winideaopen winIDEAOpen] Keine Code Limitierung, GCC und Testwerkzeug beinhaltet. Läuft mit dem iTag50 Adapter, Segger J-Link und dem ST-Link&lt;br /&gt;
* [http://www.raisonance.com Raisonance Ride7] (GCC Compiler, kostenlose Version auf Debugging von max. 32KB Code limitiert, keine Limitierung beim Complilieren)&lt;br /&gt;
* [http://www.rowley.co.uk/arm/ Rowley Crossworks] (Demo 30 Tage unbeschränkt, 150$ für nichtkommerzielle Nutzung, auf GCC basierend). Mir ist nicht klar warum man für diese IDE Geld bezahlen soll. Der GNU-Compiler ist frei und die Entwicklungsumgebungen die auf Eclipse basieren, ebenfalls. Allerdings ist diese Einstellungsarbeit schon was für den etwas erfahrenen Entwickler.&lt;br /&gt;
* [http://www.sisy.de/index.php?id=17&amp;amp;no_cache=1 SiSy ARM oder SiSy Micrcontroller++] (Demo verfügbar keine Gößenbegrenzung, basiert auf GNU-Compiler, grafische Programmierung mit UML möglich, integrierter Debugger)&lt;br /&gt;
* [http://www.comsytec.eu/epsdebugger.php EPS Debugger Plugin, für STM32 Development mit Code::Blocks]&lt;br /&gt;
* [http://www.mikroe.com MikroE bietet neben Pascal und Basic auch C mit kompletter Oberfläche mit Compiler etc. pp relativ günstig]&lt;br /&gt;
* [http://www.visualgdb.com VIsualGDB] Wer vom Atmel Studio kommt oder sonst viele mit Visual Studio arbeitet bekommt hier ein Plugin, das wirklich Spaß macht und funktioniert. Es werden nicht nur STM32 unterstützt. Einfach kostenlose Trial-Version anschauen und probieren.&lt;br /&gt;
&lt;br /&gt;
=== STM32CubeMX ===&lt;br /&gt;
Dies ist eine Software von ST selbst, die die Auswahl und Konfiguration von STM32-Mikrocontrollern vereinfacht:&lt;br /&gt;
* Auswahl der Controller oder Entwicklungsboards mit einer parametrischen Suche&lt;br /&gt;
* grafische Konfiguration der Pins und Alternate Functions (inkl. Überprüfung auf Kollisionen - bei Entwicklungsboards sind gewisse Pins schon vorkonfiguriert und werden angezeigt)&lt;br /&gt;
* grafische Konfiguration des Clock-Trees&lt;br /&gt;
* Generierung von C-Code entsprechend der grafischen Konfiguration. Dieser funktioniert nur mit den neuen STM32CubeMX Libraries (HAL, LL), nicht mit den alten Standard Peripheral Libraries (SPL).&lt;br /&gt;
* Simulation des Strom-Verbrauchs unter Auswahl verschiedenster Stromquellen und Batterien&lt;br /&gt;
STM32CubeMX ist Java-basiert und läuft daher problemlos auf Windows, OS X und Linux. In der Zip-Datei, welche [https://my.st.com/content/my_st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html bei ST heruntergeladen] werden kann, befinden sich entsprechende Installer für die einzelnen Betriebssysteme.&lt;br /&gt;
&lt;br /&gt;
=== Tutorials für diverse Tool-Kombinationen ===&lt;br /&gt;
* [[STM32 Eclipse Installation|Windows,Linux, Eclipse + Yagarto/CodeSourcery + OpenOCD/ST-Link]]&lt;br /&gt;
* [[STM32 Eclipse JLink Linux/Windows|Windows,Linux, Eclipse + GCC-ARM-Embedded + JLink]]&lt;br /&gt;
* [[Linux auf STM32|Linux auf STM32 (ucLinux)]]&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
** Eclipse&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/216554 Windows, Eclipse, codesourcery, st-link ]&lt;br /&gt;
*** [http://www.firefly-power.de/ARM/debugging.html Eclipse Plugin &amp;quot;GDB Hardware Debugging&amp;quot; mit OpenOCD]&lt;br /&gt;
** Code::Blocks&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/265600 Windows, Code::Blocks, STM32F4]&lt;br /&gt;
** STM32 mit EmBlocks&lt;br /&gt;
*** [http://www.emblocks.org/web/downloads-main Download EmBlocks]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=coHPJylnzC8 Video STM32 Project Wizzard in EmBlocks]&lt;br /&gt;
** Atollic TrueSTUDIO&lt;br /&gt;
*** [[STM32 LEDBlinken AtollicTrueStudio|Atollic TrueSTUDIO Installation + Demo]]&lt;br /&gt;
** MDK-ARM Lite mit Einstellungen für STM32F0/F4-Discovery Board&lt;br /&gt;
*** [https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM Download]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=RXOOxby5nns&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;index=1 Installations Video STM32F4 Discovery Board]&lt;br /&gt;
*** [https://www.youtube.com/watch?annotation_id=annotation_203294&amp;amp;feature=iv&amp;amp;index=4&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;src_vid=sN4gDZ7H8gw&amp;amp;v=BeZcQjXxk9A Einstellungen STM32F0 Discovery Board Video]&lt;br /&gt;
** SiSy ARM, STM32&lt;br /&gt;
*** Download: [http://www.sisy.de/index.php?id=59 SiSy DEMO] kein Begrenzung der Codegröße&lt;br /&gt;
*** [http://www.youtube.com/watch?v=84Y3jYLWYpo Videobeispiel]&lt;br /&gt;
** Microsoft Visual Studio&lt;br /&gt;
*** [http://visualgdb.com/tutorials/arm/stm32/f4_discovery/ &amp;quot;STM32F4-Discovery tutorial with Visual Studio&amp;quot;]&lt;br /&gt;
* Ubuntu&lt;br /&gt;
** [http://cms.seng.de/service-support/downloads/ Installing a toolchain for Cortex-M3/STM32 on GNU/Linux] - How-to manual, für STM32F1 unter GNU/Linux mit OpenOCD und Olimex ARM-USB-OCD-H. Integrierte Make files, Linker Skripte, Startup-Code, diverse Tools und Demo-Projekt/Programm. Einbindung in Eclipse IDE oder Bedienung über Kommandozeile.&lt;br /&gt;
** [http://fun-tech.se/stm32/index.php Ubuntu, Selbstcompilierter GCC, STM32/Cortex-M3]&lt;br /&gt;
** [http://thetoolchain.com The ToolChain] - Automatisch installierende Entwicklungsumgebung mit eigenen und externen Treibern, Unterstützt QtCreator als IDE, Flexibel erweiterbar über Shellskripte&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/214719 Tipps für Installation mit Eclipse]&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter===&lt;br /&gt;
* Der [http://www2.st.com/content/st_com/en/products/development-tools/hardware-development-tools/development-tool-hardware-for-mcus/debug-hardware-for-mcus/debug-hardware-for-stm32-mcus/st-link-v2.html ST-LINK/V2] ist ein Debugger, welcher von ST selbst angeboten wird. Jedes STM32 Discovery- oder Nucleo-Board hat einen ST-LINK V2 bzw. ST-Link V2-1 für Programmierung/Debugging per SWD on-board (teilweise abbrechbar), welcher auch für eigene STM32 Target Hardware und prinzipiell auch andere Cortex-M benutzt werden kann. Zwar ist er mit 1.8MHz Takt ein sehr langsamer Vertreter seiner Art, jedoch lassen sich mit ihm fremde Hex- und Binary-Files sowohl Debuggen als auch Flashen. Die ST-LINK-Variante auf den Nucleo- bzw. Discovery-Boards beherrscht nur SWD und kein JTAG, wohingegen der ST-Link in der Adapterversion mit Gehäuse auch JTAG beherrscht und zusätzlich auch in einer Variante mit galvanischer Trennung erhältlich ist. Die ST-LINK/V2-1 auf den NUCLEO und Discovery-Boards können auch per Softwareupdate zu einem J-Link OB umgewandelt werden. Details und Hinweise dazu [https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board hier]. Kopien des ST-Link V2 sind als &amp;quot;mini&amp;quot;-Version u.a. sehr günstig (&amp;lt;5€) über Ebay, Aliexpress und Co zu beziehen. Diese unterstützen jedoch ebenfalls kein JTAG und haben desweiteren den Nachteil, das der Reset-Pin nicht herausgeführt ist bzw. der mit &amp;quot;Reset&amp;quot; bezeichnete Pin nur für STM8 gedacht ist. Sämtliche ST-Link V2 und V2/1 können mittels einer von ST angebotenen [http://www2.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link007.html Update-Software ] auf den jeweils neuesten Stand gebracht werden.&lt;br /&gt;
* [http://www.segger.com/jlink-model-overview.html SEGGER J-LINK / J-TRACE] für u.a. alle ARM7/9/11, Cortex-M0/M1/M3/M4/A5/A8/A9/R4 als [http://www.segger.com/cms/j-link-edu.html Non-Commercial] J-LINK-EDU für ca. 50€ zu haben, läuft in µVision, IAR, GDB (Linux &amp;amp; Windows über einen eigenen [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf GDB-Server]), ... Der J-Link ist mit Abstand der schnellste Debugger, den ich bisher testen konnte. Wer es beim Debuggen eilig hat, liegt mit dem J-Link von Segger richtig.&lt;br /&gt;
* Keil [http://www.keil.com/ulinkme/ ULINK-ME], [http://www.keil.com/arm/ulink2/ ULINK2], [http://www.keil.com/arm/ulinkpro/ ULINK pro] Wenn man die die µVision IDE nicht verlassen mag, kann man sich mit diesen Adaptern anfreunden, denn sie arbeiten nur mit dieser IDE zusammen. Sie benötigen keine USB-Treiber, da sie geschickt das HID-Device des Betriebssystems nutzen. Es lässt sich kein fremdes Binary oder Hex-File flashen. Der ULINK2 kostet genau soviel wie ein Segger J-Link Basic bei gleichem Funktionsumfang, der sich jedoch auch in Verbindung mit anderen IDEs (GDB, usw) einsetzen lässt.&lt;br /&gt;
* [http://www.raisonance.com/rlink.html Raisonance RLink]&lt;br /&gt;
* [http://www.isystem.com/products/itag iTag] für 50€ bei [http://www.amazon.de/dp/B009XAQ9BW Amazon] bestellbar, alternativ als [http://isystem.com/products/hardware/cortex-debugger/itag/itag-instruction Eigenbauversion (offenes Design)] läuft mit der freien winIDEAiTag version (siehe oben)&lt;br /&gt;
&lt;br /&gt;
In der Regel haben die [[JTAG]] Adapter einen 20-poligen Stecker, den man direkt auf die Demo-Boards mit 20-poligem [[JTAG]]-Anschluss einstecken kann. Die Pinbelegung ist genormt, siehe Artikel [[JTAG]]. Die Discovery-Boards haben keinen separaten JTAG-Stecker, aber man kann sich zumindest für das STM32F4 Discovery einen Adapter Pinheader-&amp;gt;JTAG Stecker leicht selbst bauen.&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter Open-Source===&lt;br /&gt;
&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-COOCOX/ ARM-JTAG-COOCOX], CoLinkEX Nachbau von Olimex, unterstützt JTAG sowie SWD&lt;br /&gt;
** [http://www.coocox.org/wiki/coocox/CoLinkEx/CoLinkEx-Support unterstützte uC]&lt;br /&gt;
** unterstütze IDEs: [http://www.keil.com/arm/mdk.asp Keil MDK-ARM 4.03] oder neuer, [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR Embedded Workbench 5.xx] oder neuer sowie die [http://www.coocox.org/CooCox_CoIDE.htm CooCox CoIDE]&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ Olimex] ARM-USB-OCD (ca. 60.-, hat zusätzlich einen Spannungsausgen und einen COM Port)&lt;br /&gt;
* [http://www.randomprojects.org/wiki/Floss-JTAG FLOSS-JTAG]&lt;br /&gt;
&lt;br /&gt;
Der Controller hat auch einen fest eingebauten Boot-Lader. Damit läßt er sich auch über eine gewöhnliche serielle Schnittstelle programmieren, ohne dass man einen JTAG-Adapter benötigt. Dies erfordert ggf. entsprechende Konfiguration über die BOOTx-Pins und/oder die Option-Bytes, und ein Programm wie [https://code.google.com/p/stm32flash/ stm32flash].&lt;br /&gt;
&lt;br /&gt;
=== Demo-Projekte ===&lt;br /&gt;
&lt;br /&gt;
* Einführung in die GPIO Programmierung der STM32F10x und STM32F30x Prozessoren am Beispiel des STM32F3 Discovery Boards und Vergleich zur AVR IO Registerstruktur [http://www.mikrocontroller.net/topic/300472#new]&lt;br /&gt;
* [[prog_bsp_timer_1_timer2|Programmbeispiel für die Verwendung von Timer2 zusammen mit dem Interrupt]]&lt;br /&gt;
* [http://www.firefly-power.de/ARM/printf.html Printf() debugging mit minimalem Aufwand]&lt;br /&gt;
* [[STM32_BLDC_Control_with_HALL_Sensor|Programmbeispiel für BLDC Motoransteuerung (Timer 1) mit HALLSensor (Timer 3)]]&lt;br /&gt;
* [[Cortex_M3_OCM3U]]&lt;br /&gt;
* Martin Thomas hat ein umfangreiches Projekt erstellt, in der die Eclipse Einstellungen enthalten sind:&lt;br /&gt;
** [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html &amp;quot;ChaN&#039;s FAT-Module with STM32 SPI&amp;quot;]&lt;br /&gt;
* [[STM32 USB-FS-Device Lib]]&lt;br /&gt;
* Modellbau-Sender auf STM32-Basis mit vielen Treibern [http://www.rcos.eu www.rcos.eu]&lt;br /&gt;
* Ausführliches [https://github.com/jkerdels/stm32edu Einstiegs-Tutorial] in Codeform für das [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4 discovery board]&lt;br /&gt;
* [http://www.redacom.ch/keillab/ Schweizer Gondelbahnsteuerung über Webserver auf ETT STM32F ARM KIT Board in Keil RTOS] mit Webcam&lt;br /&gt;
* Die [http://ethernut.svn.sourceforge.net/viewvc/ethernut/trunk/ Ethernut SVN Version] unterstützt inzwischen viele STM32 Typen, viele Devices und einige STM32 Demoboards&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=744 Uwe Becker&#039;s Libraries für den STM32F4]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=3290 Uwe Becker&#039;s STM32F429 Discovery Board Oszilloskop], hier der [http://www.mikrocontroller.net/topic/319831#new Thread]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=3424 Uwe Becker&#039;s STM32F429 Discovery Board ZX-Spectrum Emulator]&lt;br /&gt;
* [[USB-Tutorial mit STM32]] enthält ein vollständiges Beispielprojekt&lt;br /&gt;
&lt;br /&gt;
== Debug- und Trace-Interface (CoreSight™ Debug and Trace Technologie)==&lt;br /&gt;
&lt;br /&gt;
Übersicht über beide Funktionalitäten und den Schnittstellen:&lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_cs_core_sight.htm&lt;br /&gt;
&lt;br /&gt;
Die Coresight-Debug-Architektur ermöglicht ein nicht-invasives Debugging, d.h. es können während des Betriebes (meistens) ohne Beeinflussung des Prozessors Daten vom Speicher gelesen und in selbigen geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== Debugger Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Der Debugger-Teil besitzt drei Funktionen:&lt;br /&gt;
* Run Control: z.B. Programm-Start, Stopp und Einzel-Schritte.&lt;br /&gt;
* (Program) Break Points: Ein Programm hält an, wenn der Programm Counter eine bestimmte Programm-Adresse erreicht.&lt;br /&gt;
** Die maximale Anzahl der gleichzeitig möglichen Break Points ist begrenzt (z.B. 6 bei einem STM32).&lt;br /&gt;
** Die Anzahl der Break Points ist nahezu unbegrenzt, wenn ein Debugger über den Memory Access (s.u.) sogenannte Flash Break Points unterstützt. Dabei wird ein geladenes Programm im Flash umprogrammiert, um den Debugger anzuhalten. Diese Funktionalität ist meistens ein kostenpflichtiges Zusatz-Feature des Debugger-Herstellers. &lt;br /&gt;
** Beinhaltet keine Data Watch Funktionalität, welche im Trace-Teil (DWT) realisiert wird.&lt;br /&gt;
* Memory Access: Lesen und Schreiben von Speicheradressen. &lt;br /&gt;
** Diese Funktionalität beinhaltet keine direkte Flash-Programmierung. Der Programmiervorgang für einen Flash ist herstellerspezifisch und muss von dem verwendeten Debugger unterstützt werden.&lt;br /&gt;
&lt;br /&gt;
=== Trace Funktionen ===&lt;br /&gt;
Die Trace-Funktionalität wird in drei Funktionen aufgeteilt:&lt;br /&gt;
* ETM (Embedded Trace Macrocell): Optional, nicht jede CPU besitzt diese Hardware (Kostenfaktor, Ausstattung).&lt;br /&gt;
* ITM (Instrumentation Trace Macrocell): Über diesen Kanal kann ein vereinfachtes Trace des Core ermöglicht werden, sowie &amp;quot;printf-ähnlich&amp;quot; Daten über den ITM Channel 0 geschickt und im Debugger ausgegeben werden.&lt;br /&gt;
* DWT (Data Watchpoint &amp;amp; Trace Unit): &lt;br /&gt;
** Data Watch: 4 Access-Break-Points ( z.B. der Debugger bleibt stehen, wenn das Programm auf einen Speicher zugreift oder der Wert einer Variablen einen bestimmten Wert annimmt). &lt;br /&gt;
** Trace Unit: Programmverlauf (durch Lesen des Program Counters) und Interrupt Aufrufe verfolgen, sowie Zeitmessungen.&lt;br /&gt;
&lt;br /&gt;
Einige der Trace-Funktionalitäten können über die JTAG-Schnittstelle angesprochen werden. Die schnelle Trace-Funktionalität (mit 4 bit Parallel-Port) steht nur mit der erweiterten DEBUG + ETM Schnittstelle zur Verfügung. Im Gegensatz zum Debugger-Teil (Run Control, Break Points und Memory Access) werden Trace-Funktionen nicht von allen Debuggern unterstützt. Debugger mit der vollen Trace-Funktionalität kosten deutlich mehr.&lt;br /&gt;
&lt;br /&gt;
* Beispiele für Trace-Port-Aktivierungen für verschiedene Hersteller: http://www.keil.com/support/man/docs/jlink/jlink_capture_tracedata.htm&lt;br /&gt;
&lt;br /&gt;
Die Aktivierung des parallelen Trace-Ports erfordert, je nach CPU Hersteller, zusätzliche Debugger-Makros für die Aktivierung und Port-Freischaltung. Zusätzlich sind die Schnittstellenauswahl und Einstellung (Frequenzen) im Entwicklungs-Tool (IDE) wichtig, um erfolgreich den Programm-Verlauf &amp;quot;tracen&amp;quot; zu können.&lt;br /&gt;
&lt;br /&gt;
=== Debug und Trace-Schnittstellen ===&lt;br /&gt;
Als Debug Interface stehen zwei Varianten zur Auswahl:&lt;br /&gt;
* [[JTAG]]: Dafür sind mindestens 6 Steuerleitungen nötig. Unterstützt Device Chaining: Mehrere verbundene Geräte können mit einem Debugger/Programmer gleichzeitig angesteuert werden.&lt;br /&gt;
* SWD (Serial Wire Debug): Hier mindestens 2  Steuerleitungen (3 mit SWO, zzgl GND und 3,3V). Die SWD Schnittstelle ist in der Regel schneller und kann auch Funktionen aus dem Trace-Teil beinhalten (z.B. ITM, dafür wird der SWO-Pin benötigt). Device Chaining ist mit dieser Schnittstelle nicht möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standard-JTAG Steckerbelegungen: &lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_hw_connectors.htm&lt;br /&gt;
&lt;br /&gt;
=== Der 10polige JTAG-Stecker von mmvisual ===&lt;br /&gt;
mmvisual hat mit dieser Steckerbelegung die Standard JTAG Schnittstelle erweitert:&lt;br /&gt;
&lt;br /&gt;
Ich habe diesen Part in den Artikel [http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual JTAG] verschoben.&lt;br /&gt;
Hinzu gekommen ist die Adapterplatine 10-Polig auf Standard JTAG 20 Polig mit TTL/V24 Wandler. [http://www.mikrocontroller.net/articles/JTAG#Die_Adapterplatine Siehe hier.]&lt;br /&gt;
&lt;br /&gt;
== Hardware-Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
Der STM32 benötigt für den Betrieb nur (Minimalbeschaltung):&lt;br /&gt;
&lt;br /&gt;
* VCC 2..3,3V (je nach Typ)&lt;br /&gt;
* AVCC 2..3,3V (sehr wichtig, der STM32 lässt sich ohne diese Spannung nicht programmieren)&lt;br /&gt;
* GND&lt;br /&gt;
* Reset Pin 100nF nach GND (ein Pull-Up Widerstand von ca. 40k ist intern vorhanden)&lt;br /&gt;
* [[#Bootmodi|Boot-Pins]]&lt;br /&gt;
&lt;br /&gt;
ansonsten nur ein paar einzelne Cs 100nF an VCC/GND.&lt;br /&gt;
&lt;br /&gt;
Um Programmieren zu können wird entweder noch die serielle Schnittstelle (Programmieren über den vorprogrammierten Bootloader) oder JTAG oder die SWD Schnittstelle benötigt.&lt;br /&gt;
&lt;br /&gt;
=== Bootmodi ===&lt;br /&gt;
Unterschiedliche Bootmodi lassen sich mittels der PINs BOOT0 und BOOT1 auswählen. Siehe Application Note [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Attachments/18225/AN2606.pdf AN2606]. Außer F1 besitzen neuere Familien ein SYSCFG_MEMR Register. In dieses Register kann man die gewünschten Boot0/1 Werte schreiben und nach einem Core-Reset (!= System_Reset) startet der Prozessor im gewünschten Mode. Eine Neu- bzw. Deinitialisierung der Peripherie empfiehlt sich! &lt;br /&gt;
&lt;br /&gt;
==== Boot from FLASH ====&lt;br /&gt;
Startadresse wird von 0x08000004 geladen&lt;br /&gt;
 BOOT0 Lo&lt;br /&gt;
 BOOT1 X &lt;br /&gt;
&lt;br /&gt;
==== Boot from SRAM ====&lt;br /&gt;
PC Startadresse wird an 0x200001E0 direkt angesprungen.&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Hi&lt;br /&gt;
Da der interne FLASH der stm32f1x laut Datenblatt nur für 10000 Schreibvorgänge ausgelegt ist, kann mittels BOOT0 (High) und BOOT1 (High) auch aus dem zuvor mit dem Debugger (JTAG/SWD) beschriebenen SRAM booten. &lt;br /&gt;
Hierbei gilt zu beachten:&lt;br /&gt;
 VTOR auf die NVIC Tabelle im SRAM vor dem auslösen des ersten Interrupts remappen.&lt;br /&gt;
&lt;br /&gt;
 Um ein vergleichbares Startverhalten zum FLASH zu erreichen, empfiehlt es sich,&lt;br /&gt;
 0xF1E0F85F an 0x200001E0 zu schreiben. Diese implizite Ausführung von &amp;quot;ldr.w pc,&lt;br /&gt;
 [pc, #-0x01E0]&amp;quot; beim Start erzwingt ein laden der Startadresse von 0x20000004.&lt;br /&gt;
&lt;br /&gt;
==== Boot from SYSMEM (RS232, CAN und USB) ====&lt;br /&gt;
PC Startadresse wird von 0x1FFFF004 geladen&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Lo&lt;br /&gt;
&lt;br /&gt;
Ab F2 gibt es auch ein SYSCFG_MEMRMR Register. Schreibt man hier den Wert für &amp;quot;System Flash&amp;quot; und macht einen Corereset (keinen Systemreset), so landet man auch im Bootloader, unabhängig vom Wert der Boot Pins.&lt;br /&gt;
&lt;br /&gt;
Auch ohne JTAG lässt sich ein STM32 programmieren (Bootloader-Aktivierung). Dabei stehen, je nach CPU-Typ, verschiedene Möglichkeiten zur Verfügung:&lt;br /&gt;
* RS-232 (bisher alle STMs)&lt;br /&gt;
* USB (alle USB fähigen CPUs &amp;gt; F103)&lt;br /&gt;
* CAN (wie USB nur in bestimmten MCUs)&lt;br /&gt;
&lt;br /&gt;
3 zusätzliche Verbindungen müssen auf dem Board gepatcht werden. Für einen Test geht es auch mit Tastern für RESET und BOOT0.&amp;lt;br&amp;gt;&lt;br /&gt;
RESET=RTS (L-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT0=DTR (H-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT1=LOW&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Details sind hier im Forum: [http://www.mikrocontroller.net/topic/141711 STM32 Programmiertool]&lt;br /&gt;
&lt;br /&gt;
Tools für den Download über den STM32-Bootloader:&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/PF257525 STSW-MCU005 STM32 and STM8 Flash loader demonstrator]&lt;br /&gt;
* [https://sourceforge.net/projects/stm32flash/ stm32flash] - Open source flash program (RS-232)&lt;br /&gt;
* [http://dfu-util.sourceforge.net/ dfu-util] - Open source flash program (USB)&lt;br /&gt;
&lt;br /&gt;
== Bewertung ==&lt;br /&gt;
=== Vorteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber ARM7:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interrupt-Controller jetzt Teil des Prozessors (als Core Peripheral), die Vector Table ist jetzt eine echte Vektortabelle, keine Sprungliste wie bei ARM7. Durch Automatismen zwischen Core und NVIC (auto register save r0..r3, lr, sp, pc) bei Interrupt Entry wird eine deutlich schnellere Ausführungszeit bei Interrupts erreicht. Der Interrupt Code muss sich nicht mehr selbst um die Sicherung der o.g. Register kümmern und eine besondere Konfiguration der Handler im Compiler entfällt. Sind vor Beendigung einer ISR (d.h. Rücksprung zum User Code) weitere Interrupts pending, so werden diese ausgeführt, ohne dass eine komplette pop-push-sequenz der Register notwendig ist. Schön beschrieben ist es hier im [https://www.hitex.com/fileadmin/documents/tools/dev_tools/dt_protected/insiders-guides/stm32/isg-stm32-v18d-scr.pdf Insider&#039;s Guide] unter 2.4.5 / Seite 20 (falls der Link nicht mehr funktioniert, direkt nach isg-stm32-v18d-scr.pdf googlen kann helfen...).&lt;br /&gt;
* Thumb-2 Befehlssatz, deutlich schneller als Thumb-1 und ebenso kompakt&lt;br /&gt;
* Weniger Pins für Debugging benötigt durch SWD&lt;br /&gt;
* Mehr Hardware Breakpoints machen debuggen einfacher&lt;br /&gt;
* Software ist einfacher weil die Umschaltung zwischen ARM Mode und Thumb Mode wegfällt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber LPC1700 und LPC1300:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Flexiblere Gehäuseformen mit mehr Peripherie bei kleinen Gehäusen&lt;br /&gt;
* FW-Lib für alle STM32 gleich, alle AppNotes/Demos beziehen sich auf diese eine FW-Lib was die Entwicklung der eigenen Applikation sehr beschleunigt.&lt;br /&gt;
* Genauerer und flexiblerer ADC, insbesondere gegenüber LPC1300&lt;br /&gt;
* Flexiblere Varianten der Peripherie &amp;gt;&amp;gt; bei weniger einen deutlichen Preisvorteil&lt;br /&gt;
* ab 0,85 EUR (Stand 2010) Allerdings gibts den LPC1100 mit Cortex-M0 schon ab 0,65 $!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber SAM3/4:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fast alle Pins sind 5-Volt tolerant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber anderen &amp;quot;Kleinen&amp;quot; wie z.B. PIC, Atmel usw.&#039;&#039;&#039;&lt;br /&gt;
* nahezu gleicher Preis bei Hobby Anwendungen&lt;br /&gt;
* 32 Bit ohne Umwege in Assembler rechenbar&lt;br /&gt;
* Schnelle direkte Offset-Adressierung ermöglicht effizienten Zugriff auf Stack-Variablen, lokal gespeicherte Flash-Konstanten, struct/Array-Elemente&lt;br /&gt;
* Einfache einheitliche Adressierung des gesamten Adressraums, d.h. Pointer auf Peripherieregister, RAM &amp;amp; Flash können exakt gleich behandelt werden, keinerlei Banking/Umschalt-Mechanismen erforderlich auch bei großem Flash/RAM&lt;br /&gt;
* Interrupt-Prioritäten und Prioritätsgruppen&lt;br /&gt;
* Effiziente Pointerarithmetik da Registerbreite=Adressbreite&lt;br /&gt;
* bessere Peripherie wie USB, Ethernet, Vielzahl an Timern&lt;br /&gt;
* der ARM-Core hat eine höhere Taktfrequenz und kann gleichzeitig mehr in weniger Takten berechnen&lt;br /&gt;
* Hardware-Division, bei einigen FPU zur effizienten float-Berechnung&lt;br /&gt;
* Mit größerem Flash/RAM verfügbar&lt;br /&gt;
* Code kann direkt aus dem RAM ausgeführt werden, Speicherschutz und privilegierter Ausführungsmodus können &amp;quot;Kernel&amp;quot;- vor &amp;quot;Anwendungs&amp;quot;-Code schützen, somit wird das dynamische Nachladen von Anwendungen aus externem Speicher effizient &amp;amp; sicher möglich&lt;br /&gt;
* ... und weitere 1000 Punkte ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Links&#039;&#039;&#039;&lt;br /&gt;
* [http://www.arm.com/files/pdf/ARM_Microcontroller_Code_Size_%28full%29.pdf Code Size Analyse zwischen verschiedenen µC]&lt;br /&gt;
&lt;br /&gt;
=== Nachteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil gegenüber LPC1700:&#039;&#039;&#039;&lt;br /&gt;
* STM32F1xx: nur 72 MHz statt 100 MHz (LPC1759: 120 MHz) Taktfrequenz; STM32F2xx hat diesen Nachteil nicht (ebenfalls 120MHz, STM32F4xx mit 180MHz)&lt;br /&gt;
* Der LPC1700 besitzt deutlich mehr Mechanismen, um die Auswirkung der Waitstates des Flash-ROMs auf Code- und Datenzugriffe zu reduzieren und das bedeutet mehr Performance bei gleicher Taktfrequenz. Beim STM32F2 entfällt dieser Nachteil wohl aufgrund des ART Accelerators. &lt;br /&gt;
* Alle LPC1xxx haben 32 Bit Timer. Bei den STM32 haben das nur die STM32F2xx und STM32F4xx (2 Stück)&lt;br /&gt;
* I2S Einheit von ST hat keinen FIFO und im 24/32Bit Modus müssen 2x16Bit Halbwörter übertragen werden. Wobei allgemein bei neuen ARM Prozessoren die vorhandenen DMA-Kanäle (basierend auf eigenen BUS-Kanälen und Speicherzugriffen) FIFO in beliebiger Größe bedeutet. (Gilt nicht bei bestimmten STM32F4xx)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil für Hobby-Anwender&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Nicht direkt &amp;quot;Steckbrettauglich&amp;quot;, da kein DIL Gehäuse verfügbar. Der ebay-Shop dipmicro führt jedoch sehr günstige Lötadapter für Umsetzung von LQFP48 auf DIP48. QFP64 in 0.5mm Pinabstand und nicht 0.8mm wie AVR. Von NXP gibt es Cortex-M0 µC im DIL Gehäuse.&lt;br /&gt;
&lt;br /&gt;
* Viel Peripherie, Clocks müssen alle richtig eingestellt werden, ggf. Anpassung des Startup Codes usw.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Preis-Leistungs-Verhältnis in der Regel schlechter, da geringere Verkaufsstückzahlen&lt;br /&gt;
&lt;br /&gt;
== Errata, Tipps und Tricks ==&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* AD-Wandler PA0: Im Errata steht, dass hier Fehler in der Wandlung entstehen könnten, also einen anderen Pin verwenden.&lt;br /&gt;
* CAN-Bus PD0/PD1: Remap geht erst ab der 100-Pin-Version. Steht im RM0008 unter 9.3.3.: &amp;quot;CAN1 alternate function remapping&amp;quot;. Alle Infos von RM0008 9.3.x sind interessant&lt;br /&gt;
* CAN und USB sind bei der F1 Serie nur bei der &amp;quot;◦Connectivity-Line&amp;quot; gleichzeitig nutzbar. Siehe Datenblätter.&lt;br /&gt;
* Mit internem RC-Oszillator kann die CPU mit maximal 64MHz betrieben werden. Mit einem externen Quarz sind dann 72MHz möglich.&lt;br /&gt;
* Für USB Betrieb muss die CPU mit 48MHz oder 72MHz betrieben werden (bei STM32F1xx).&lt;br /&gt;
* Der Idle Interrupt vom Usart wird zwar ausgelöst, aber nicht vom entsprechenden Statusflag angezeigt&lt;br /&gt;
* Der DMA fängt beim aktivieren immer von vorn an zu zählen, auch wenn er nur kurz angehalten wurde&lt;br /&gt;
* STM32F2xx hat kein Flash Size Register, bei STM32F4xx ist zwar ein flash Size Register beschrieben, kollidiert aber in der Adresse mit einem anderen Register&lt;br /&gt;
* Derivate mit internem EEPROM und nur einer Speicherbank haben das &amp;quot;Feature&amp;quot; bei write/erase des Data-Flashes (EEPROM) einen kompletten stall der code execution zu verursachen (inkl. ISRs, DMA). Desgleichen bei write/erase des internen Flash (ISP-routinen, EEPROM-Emulation).&lt;br /&gt;
* Der I2C hat diverse Fehler, welche im Errata des jeweiligen Modells (z.B. [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/errata_sheet/CD00238166.pdf STM32F105xx and STM32F107xx Errata sheet] ) zu finden sind. Workarounds hierzu finden sich in der Application Note [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00209826.pdf AN2824]. Am Besten benutzt man jedoch die I2C Communication peripheral application library (CPAL) von ST ([http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF258336 STSW-STM32127])&lt;br /&gt;
* [http://blog.frankvh.com/category/stm32/ weitere undokumentierte Features]&lt;br /&gt;
* Interrupt-Flags in Statusregistern der diversen Peripherals wie der Timer müssen zu &#039;&#039;&#039;Beginn&#039;&#039;&#039; (bzw. möglichst weit vor dem Return) der ISR zurückgesetzt werden, da die ISR sonst eventuell 2x ausgeführt wird (Siehe [https://my.st.com/public/Faq/Lists/faqlst/DispForm.aspx?ID=143&amp;amp;level=1&amp;amp;objectid=141 STM32 FAQ] und [http://www.mikrocontroller.net/topic/312393#new Forum]).&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
==== Allgemein ====&lt;br /&gt;
Standard-GPIOs des STM32 und im speziellen das BSRR&lt;br /&gt;
* Die Register bestehen aus zwei Teilen, der obere Teil BR0-15 signalisiert durch ein gesetztes Bit die zu löschenden Bits im IO-ODR-Register,der untere Teil BS0-15 signalisiert durch ein gesetztes Bit die zu setzenden Bits. Besonders ist, wenn beide Bits (oberer und unterer Teil) gesetzt sind hat das Set-Bit Priorität. Durch eine geschickte Kombination von oberen und unteren Teil kann man Speicherzugriffe Sparen. z.B. kann man solch ein Konstrukt zum ändern der unteren 8 Bit des IO-ODR-Registers &amp;quot;uint32_t temp = GPIOC-&amp;gt;ODR &amp;amp; 0xff00; GPIOC-&amp;gt;ODR = temp | (Eingabe &amp;amp; 0x00ff)&amp;quot; um einen Speicherzugriff verkürzen zu &amp;quot;GPIOC-&amp;gt;BSRR = (Eingabe &amp;amp; 0x00ff) | ((0x00ff) &amp;lt;&amp;lt; 16)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== GCC ====&lt;br /&gt;
Um den GCC direkt zu verwenden (zB. mit selbstgebautem makefile), falls man das nicht von einer Entwicklungsumgebung machen lässt, siehe zunächst [[ARM GCC]]. STM32-spezifisches ist:&lt;br /&gt;
* Wird die [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] und ein Quarz verwendet, so muss noch per Präprozessor-Definition die Frequenz des Quarzes angegeben werden mittels z.B. -DHSE_VALUE=8000000 für 8MHz (wie auf dem STM32F4 Discovery).&lt;br /&gt;
&lt;br /&gt;
===== Startupcode &amp;amp; Linkerscript =====&lt;br /&gt;
* Damit der compilierte Code an den richtigen Stellen im Controller landet (d.h. dem Flash) muss man dem Linker ein Linkerscript mitgeben. Dies geht per &amp;quot;-T &#039;&#039;pfad_zum_linkerscript.ld&#039;&#039;&amp;quot; an den Linker-Befehl. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Linkerscript für die Atollic TrueSTUDIO IDE, dieses kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich das Script im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324x7I_EVAL/stm32_flash.ld&amp;quot; des Archives.&lt;br /&gt;
* Damit beim Starten die richtigen Initialisierungen vorgenommen werden (wie globale Variablen und bei C++ Konstruktoren globaler Objekt-Instanzen) muss als erstes ein Startupcode laufen, der dann die main()-Funktion aufruft. Der Startupcode ist meistens in Assembler geschrieben, C-Code ist aber auch möglich. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Startupcode für die Atollic TrueSTUDIO IDE, dieser kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich der Code in Assemblerform im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f40xx.s&amp;quot; des Archives. Der Assemblercode kann per arm-none-eabi-as (Flags s.o.) assembliert werden, die resultierende .o -Datei normal mitgelinkt.&lt;br /&gt;
&lt;br /&gt;
Zusammen bieten die beiden Dateien der Anwendung ein Standard-C-Interface, d.h. man kann wie gewohnt globale Variablen verwenden und seinen Code in die main()-Funktion schreiben.&lt;br /&gt;
&lt;br /&gt;
=== Tipps für Umsteiger von Atmel/PIC/8051 ===&lt;br /&gt;
* Prozessortakt hat unterschiedliche Taktquellen und eine PLL.&lt;br /&gt;
* Alle Peripheriemodule haben einen extra Clock, den man aktivieren muss.&lt;br /&gt;
* Wenn man z.B. einen UART benutzen möchte, so muss man den Clock vom UART, Alternate Function IO (AFIO) und den GPIO-Port aktivieren.&lt;br /&gt;
* Ansonsten hat man nahezu doppelt so viele Möglichkeiten in den Peripheriemodulen.&lt;br /&gt;
* Interrupt-Flags müssen in der ISR selber gelöscht werden&lt;br /&gt;
* Forum zu [http://www.mikrocontroller.net/topic/175888 Interrupts vs. Events]&lt;br /&gt;
&lt;br /&gt;
=== Errata vom STM32F4xx die nicht im Errata von ST stehen ===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267439#2788478 Aktivieren von DMA], wenn mehr als 3 DMA Kanäle aktiviert werden, kann es sein dass die nicht alle korrekt bedient werden. Auch klappt der DMA mit dem FSMC nicht immer zuverlässig. [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FWarning%20limit%20simultaneous%20DMAs%20to%202&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=811 siehe hier] [http://blog.frankvh.com/2012/01/13/stm32f2xx-stm32f4xx-dma-maximum-transactions/ und hier]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/260637#2700761 Nerviger Bug in &amp;quot;stm32f4xx.h&amp;quot;] Änderung Struktur GPIO_TypeDef&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/261690#2714754 Batterie wird leer gezogen], nur bei manchen Chips mit Rev. A&lt;br /&gt;
* [http://www.efton.sk/STM32/STM32F4xx_doc_errors.txt Liste von Dokumentations-Fehlern]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
Versandhäuser für Privatpersonen&lt;br /&gt;
* [http://www.reichelt.de/STM-Controller/2/index.html?;ACTION=2;LA=2;GROUPID=2950; Reichelt]&lt;br /&gt;
* [http://darisusgmbh.de/shop/index.php?cat=c2692_ARM-Cortex.html Darisus]&lt;br /&gt;
* [https://www.tme.eu/de/katalog/st-mikrocontroller_112866/ TME] &lt;br /&gt;
* [http://de.rs-online.com/web/c/halbleiter/prozessoren-und-mikrocontroller/mikrocontroller/?sort-by=default&amp;amp;sort-order=default&amp;amp;applied-dimensions=4294417325&amp;amp;lastAttributeSelectedBlock=4294425895 RS-Online]&lt;br /&gt;
* [http://www.mouser.de/STMicroelectronics/Semiconductors/Embedded-Processors-Controllers/Microcontrollers-MCU/ARM-Microcontrollers-MCU/_/N-a85pc?P=1z0zpefZ1yzud1pZ1yzmxr3Z1yzud8sZ1yztkjiZ1yzonn5Z1yznfad&amp;amp;FS=True Mouser]&lt;br /&gt;
* [https://www.conrad.de/de/embedded-mikrocontroller-o0214046.html Conrad]&lt;br /&gt;
&lt;br /&gt;
Gewerblich liefern natürlich viele wie EBV, [http://de.futureelectronics.com Future Electronics], Farnell, Digikey usw...&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [https://www.conrad.de/de/stmicroelectronics-entwicklungs-kits-o0214062.html diverse Nucleo- und Discovery-Boards bei Conrad]&lt;br /&gt;
* [https://www.reichelt.de/Einplatinen-Microcontroller/2/index.html?ACTION=2&amp;amp;LA=3&amp;amp;GROUPID=6667 diverse Nucleo-Boards bei Reichelt]&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;keywords=STM32&amp;amp;cat=40&amp;amp;subkat=on&amp;amp;mnf=&amp;amp;sdesc=on&amp;amp;desc=on&amp;amp;x=79&amp;amp;y=19 STM32 bei Watterott (unter anderem Olimex- und Nucleo-Boards)]&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/ST/ STM32-Boards direkt bei Olimex]&lt;br /&gt;
* [http://shop.myavr.de/Hardware.htm?sp=artlist_kat.sp.php&amp;amp;katID=51 verschiedene STM32-Boards myAVR]&lt;br /&gt;
* [http://www.sander-electronic.de/es0028.html Sander Electronic]&lt;br /&gt;
* [http://www.futurlec.com/STM32_Development_Board.shtml Futurlec Evalboard, ebenso Header-Board]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/MP32F103-Stick:_Ein_Mini-Mikrocontroller-Board_mit_USB_und_bis_zu_4MB_Datenspeicher Artikel im Wiki, ARM mit USB und 4MB Speicher]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Cortex_M3_OCM3U Cortex M3 Artikel im Wiki]&lt;br /&gt;
* [http://de.farnell.com/jsp/displayProduct.jsp?sku=1824325&amp;amp;action=view&amp;amp;CMP=GRHS-1000962 STM32Discovery bei Farnell] Mikrocontroller Board (STM32F100RBT6B) mit onboard USB-Programming Interface für ca. 12,50€&lt;br /&gt;
* [https://dsp-sys.de/24-bayerhw-de/26-xynergy-xs-so-dimm-module-mit-cortex-m4-spartan-6-ddr3-ram SO-DIMM Module mit STM32F4, Spartan-6 &amp;amp; DDR3 RAM] Breakout-Board mit CAN (2x isoliert), UART, LAN, SPI, I2C and USB-OTG u.v.m.&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities, Tutorials ==&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/STM32_-_Einstieg_mit_Em::Blocks STM32 - Einstieg mit Em::Blocks Tutorial]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/mikrocontroller-elektronik?filter=ARM*+STM32*+Cortex* Suche im Forum]&lt;br /&gt;
* [[STM32 für Einsteiger]]&lt;br /&gt;
* http://www.openstm32.org/System+Workbench+for+STM32&lt;br /&gt;
* [https://community.st.com/ Forum auf der ST Homepage] &lt;br /&gt;
*[http://joe-c.de/pages/posts/einstieg_mikrocontroller_stm32f103_101.php Einstieg:  STM32board mit Kamera (deutsch)] &lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html STM32 Tutorial für Standard Peripheral Library in Deutsch]&lt;br /&gt;
* [http://mySTM32.de STM32 C und C++ Tutorial in Deutsch ]&lt;br /&gt;
* [http://myugl.de Tutorial für Grafik-Librarys und SiSy-Projekte in Deutsch ]&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF251717 MicroXplorer MCU graphical configuration tool ]&lt;br /&gt;
* [http://www.harerod.de/docs/CoreMark_STM32.pdf Testbericht über CoreMark 1.0 auf Cortex-M3/M4 mit verschiedenen Compiler- und MCU-Einstellungen]&lt;br /&gt;
* [http://klaus4.blogspot.com/2014/05/stm32f4-discovery-mit-opensource.html STM32-Toolchain mit Eclipse CDT 4.3, GnuArmEclipse, OpenOCD 0.8.0, Gnu Arm GCC 4.8, STM32CubeMX]&lt;br /&gt;
* [http://libopencm3.org/ libopenmc3 OpenSource libs für STM32 und ähnliche] &lt;br /&gt;
* [https://www.mikrocontroller.net/topic/423300#new Totzeitrechner für STM32]&lt;br /&gt;
* [https://leanpub.com/mastering-stm32 Download-Buch in englisch, min. 25$ &amp;quot;Mastering STM32&amp;quot;]&lt;br /&gt;
* [http://stefanfrings.de/stm32/index.html STM32F1/F3 Anleitung]&lt;br /&gt;
* [https://www.cs.indiana.edu/~geobrown/book.pdf &amp;quot;Discovering the STM32 Microcontroller&amp;quot; eBook (kostenlos)]&lt;br /&gt;
* [http://stefanfrings.de/mikrocontroller_buch2/index.html Einblick in die moderne Elektronik ohne viel Theorie] &#039;&#039;&#039;PDF&#039;&#039;&#039;, Programmieranleitung für Anfänger mit Codeanalyse bis in die Register&lt;br /&gt;
* [[USB-Tutorial mit STM32]]&lt;br /&gt;
* [http://www.pomad.fr/node/2 Sehr schönes STM32 Anfängertutorial]&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;br /&gt;
[[Kategorie:Mikrocontroller]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=101013</id>
		<title>STM32</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=101013"/>
		<updated>2019-09-19T05:38:24Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Weblinks, Foren, Communities, Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STM32 ist eine Mikrocontroller-Familie von [http://www.st.com/mcu/inchtml-pages-stm32.html ST] mit einer 32-Bit [[ARM]] Cortex-M0/M3/M4 CPU. Diese Architektur ist speziell für den Einsatz in Mikrocontrollern neu entwickelt und löst damit die bisherigen ARM7-basierten Controller weitestgehend ab. Den STM32 gibt es von ST in unzähligen Varianten mit variabler Peripherie und verschiedenen Gehäusegrößen und -formen. Durch die geringe Chipfläche des Cores ist es ST möglich, eine 32 Bit-CPU für weniger als 1&amp;amp;nbsp;€ anzubieten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:stm32F103xc.png|thumb|right|340px|Blockdiagramm STM32F103xC/D/E]]&lt;br /&gt;
&lt;br /&gt;
== STM32-Familien ==&lt;br /&gt;
&lt;br /&gt;
Bisher gibt es elf STM32-Familien:&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f0-series.html STM32F0]&lt;br /&gt;
** Cortex M0&lt;br /&gt;
** Mikrocontroller zum Einstieg&lt;br /&gt;
** Bis 48MHz (38 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series.html STM32F1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 72MHz (61 DMIPS)&lt;br /&gt;
**Verschiedene Unterfamilien:&lt;br /&gt;
*** Connectivity line&lt;br /&gt;
*** Performance line&lt;br /&gt;
*** USB Access line&lt;br /&gt;
*** Access Line&lt;br /&gt;
*** Value line&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f2-series.html STM32F2]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 120MHz (150 DMIPS)&lt;br /&gt;
** Wie die STM32F1 Serie, Camera-Interface, 32-Bit Timer, Crypto-Engine...&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f3-series.html STM32F3]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 72MHz (90 DMIPS)&lt;br /&gt;
** Fast 12-bit 5 MSPS and precise 16-bit sigma-delta ADCs&lt;br /&gt;
** Touch sensing controller (TSC)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series.html STM32F4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 180MHz (225 DMIPS)&lt;br /&gt;
** Bis zu 2MB Flash&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f7-series.html STM32F7]&lt;br /&gt;
** Cortex M7&lt;br /&gt;
** DSP und FPU (Single/Double Precision)&lt;br /&gt;
** Bis 216MHz (462 DMIPS)&lt;br /&gt;
** Mehr Peripherie: SPDIF-IN/OUT, SAI, HDMI-CEC, Dual Quad SPI&lt;br /&gt;
** On-Chip Grafik-LCD-Controller&lt;br /&gt;
** DMAs auch für Ethernet, USB und Chrom-ART&lt;br /&gt;
* [http://www.st.com/en/microcontrollers/stm32h7-series.html STM32H7]&lt;br /&gt;
** Cortex M7&lt;br /&gt;
** Bis 400MHz (856 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l0-series.html STM32L0]&lt;br /&gt;
** Cortex M0+&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
** Bis 32MHz (26 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l1-series.html STM32L1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
** Bis 32MHz (33 DMIPS)&lt;br /&gt;
* [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l4-series.html STM32L4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU (Single Precision)&lt;br /&gt;
** Ultra Low Power (bis zu 8nA mit I/O Wake-Up)&lt;br /&gt;
** Bis 80MHz (100 DMIPS)&lt;br /&gt;
** 128KB...1MB Flash, 64/128KB SRAM&lt;br /&gt;
** optional Segment-LCD Treiber&lt;br /&gt;
** Quarzloser Betrieb auch mit CAN (1% ab Werk) oder USB (Synch über Host) möglich&lt;br /&gt;
** Digital-Filter für ΣΔ-Modulatoren&lt;br /&gt;
* [https://www.st.com/en/microcontrollers-microprocessors/stm32g0-series.html STM32G0]&lt;br /&gt;
** Cortex M0+&lt;br /&gt;
** Bis 64MHz (ca. 60MIPS)&lt;br /&gt;
** 16KB...512KB Flash, bis 128KB SRAM&lt;br /&gt;
** 8-100 Pins&lt;br /&gt;
** SO-8, QFP TW im 0.8mm Raster&lt;br /&gt;
** Noch nicht alle gelisteten Varianten in Produktion (8.2019)&lt;br /&gt;
* [https://www.st.com/en/microcontrollers-microprocessors/stm32g4-series.html STM32G4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** FPU und DSP&lt;br /&gt;
** &amp;quot;Math Accelerator&amp;quot; Für Trigonometrische Funktionen, FIR, IIR&lt;br /&gt;
** Bis 170MHz (213 DMIPS)&lt;br /&gt;
** bis 512KB Flash, 128KB SRAM&lt;br /&gt;
** 48-128Pins&lt;br /&gt;
** &amp;quot;Mixed Signal MCU&amp;quot;&lt;br /&gt;
** Noch nicht alle gelisteten Varianten in Produktion (8.2019)&lt;br /&gt;
&lt;br /&gt;
* STM32T - nicht mehr in Produktion&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** 72MHz&lt;br /&gt;
** Touch Sensing&lt;br /&gt;
* STM32W - nicht mehr in Produktion&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** BIS 24MHz&lt;br /&gt;
** RF-MCU &lt;br /&gt;
[http://www.st.com/web/en/catalog/mmc/FM141/SC1169 Hier eine Übersicht zum Auswählen eines STM32Fxxx]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* Cortex-M0(+) / Cortex-M3 / Cortex-M4(F) / Cortex-M7 Kern (mit FPU)&lt;br /&gt;
* 16KB ... 2MB  [[Flash-ROM]]&lt;br /&gt;
* 4KB ... 512KB [[Speicher#SRAM|SRAM]]&lt;br /&gt;
* 2KB ... 16KB [[Speicher#EEPROM|EEPROM]] (STM32L)&lt;br /&gt;
* SDRAM-Controller bei den [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1577/LN1806 STM32F42xxx und STM32F43xxx], bis 512 MByte externer SDRAM addressierbar&lt;br /&gt;
* 512 one-time programmable Bytes(STM32F2/4)&lt;br /&gt;
* [[IC-Gehäuseformen | Gehäuse]] 8 ... 216 Pins als SO, LCSP, TSSOP, QFN, QFP und BGA&lt;br /&gt;
* Derzeit sind &#039;&#039;&#039;über 700&#039;&#039;&#039; [http://www.st.com/web/en/catalog/mmc/FM141/SC1169 STM32 Derivate/Varianten verfügbar]&lt;br /&gt;
* Bis 72MHz CPU-Takt, bis 120MHz beim STM32F2xx, bis 168/180 MHz beim STM32F4xx, wobei eine spezielle Prefetch-Hardware bis 120/168 MHz eine Geschwindigkeit erzielt, die 0 Wait-States entspricht. Der CPU-Takt wird über einen Multiplikator aus dem internen RC-Takt oder einem externen Quarz-Takt abgeleitet. Bis 216MHz CPU-Takt bei STM32F7xx.&lt;br /&gt;
* Zusätzliche FPU &amp;quot;Math Accelerator&amp;quot; Für Trigonom. Funktionen (CORDIC), FIR, IIR(FMAC) (STM32G4)&lt;br /&gt;
* Externes Businterface (nur bei Gehäusen ab 100 Pin und nur bei STM32F4, STM32F2 und STM32F1 Performance line)&lt;br /&gt;
* LCD Treiber für bis zu 8x40 Segmente (nicht beim STM32F2xx)&lt;br /&gt;
* TFT Treiber bei [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series/stm32f429-439.html STM32F429/STM32F439] [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series/stm32f469-479.html STM32F469/STM32F479]&lt;br /&gt;
* Spannungsbereich 1,65 ... 3,6V, nur eine Betriebsspannung nötig&lt;br /&gt;
* Temperaturbereich bis 125 °C&lt;br /&gt;
* Bis zu 168 IOs, viele davon [[Pegelwandler|5V-tolerant]]&lt;br /&gt;
* Interner, kalibrierter RC-Oszillator mit 8MHz (16MHz bei STM32F2/F4xx)&lt;br /&gt;
* Externer Quarz&lt;br /&gt;
* Real Time Clock mit eigenem Quarz und separater Stromversorgung&lt;br /&gt;
* Bis zu 16 [[Timer]], je Timer bis zu 4 IC/OC/PWM Ausgänge. Davon 2x Motion Control Timer (bei STM32F103xF/G), (bis zu 32 PWM Ausgänge)&lt;br /&gt;
* Systick Counter&lt;br /&gt;
* Bis zu 3 12-Bit [[AD-Wandler]] mit insgesamt 24 AD-Eingängen, integrierter [[Temperatursensor]], Referenzspannung Vrefint und VBatt Spannungsmessung (STM32F4xx)&lt;br /&gt;
* Bis zu 2 12-Bit [[DA-Wandler]] (bis zu 3 beim STM32F3xx)&lt;br /&gt;
* Bis zu 2 [[DMA]] Controller mit bis zu 12 Kanälen (16 beim STM32F2/4xx)&lt;br /&gt;
* Bis zu 2x [[I2C|I²C]]&lt;br /&gt;
* Bis zu 5x [[UART|USART]] mit LIN, IrDA und Modem Control (bis zu 8 beim STM32F2/F4xx)&lt;br /&gt;
* Bis zu 3x [[SPI]] (bis zu 6 beim STM32F4xx)&lt;br /&gt;
* Bis zu 2x [[I2S|I²S]]&lt;br /&gt;
* Bis zu 3x [[CAN#STMicroelectronics STM32 (Cortex M3/M4)|CAN]]&lt;br /&gt;
* Hardware [[CRC]] Unit, bei der STM32F3xx Serie mit einem einstellbaren Polynom &lt;br /&gt;
* Unique device ID register (96 Bits)&lt;br /&gt;
* TRNG - True Random Number Generator (STM32F2/4xx), basierend auf analoger Schaltung&lt;br /&gt;
* Cryptographic Processor (CRYP) (STM32F2/4xx)&lt;br /&gt;
* Hash Processor (HASH) (STM32F2/4xx)&lt;br /&gt;
* Kamera-Interface (DCMI) (STM32F2/4xx)&lt;br /&gt;
* [[USB]] 2.0 Full Speed / OTG&lt;br /&gt;
* [[USB]] 2.0 Hi Speed OTG mit extra PHY-Chip (STM32F2/4xx)&lt;br /&gt;
* USB Type-C™ Power Delivery controller (STM32G0/G4)&lt;br /&gt;
* HDMI CEC interface (STM32G0)&lt;br /&gt;
* SDIO Interface (z.B. SD-Card Reader)&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Watchdog mit Window-Mode&lt;br /&gt;
* Jedes Peripheriemodul ist separat einschaltbar, wodurch sich erheblich [[Ultra low power|Strom sparen]] lässt&lt;br /&gt;
* [[JTAG]] und SWD (Serial Wire Debug) Interface&lt;br /&gt;
* Bis zu 6 Hardware-Breakpoints für Debuggen&lt;br /&gt;
* und vieles mehr ...&lt;br /&gt;
&lt;br /&gt;
== Struktur der Dokumentation ==&lt;br /&gt;
Die Dokumentation der STM32 ist im Vergleich zur [[AVR]]-Familie umfangreicher und komplexer. Sie teilt sich in mehrere Dokumente auf.&lt;br /&gt;
Als Beispiel der Dokumentation soll stellvertretend der [http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32-mainstream-mcus/stm32f1-series/stm32f103/stm32f103rc.html STM32F103RC] genannt werden. Die Seite von ST beinhaltet alle nötigen Informationen passend zu diesem Prozessor.&lt;br /&gt;
&lt;br /&gt;
Diese Dokumente von ST beschreiben den Controller:&lt;br /&gt;
&lt;br /&gt;
* Im [http://www.st.com/resource/en/datasheet/stm32f103rc.pdf STM32F103xC/D/E Datasheet] sind die speziellen Eigenschaften einer bestimmten Modellreihe beschrieben und die exakten Daten und Pinouts aufgeführt, sowie die Zuordnung Chipname - Flash/RAM-Größe. Die Peripheriemodule werden nur aufgeführt, nicht detailliert beschrieben.&lt;br /&gt;
* Im [http://www.st.com/resource/en/reference_manual/cd00171190.pdf Reference Manual (RM0008)] sind alle Peripheriemodule der jeweiligen STM32-Controllerfamilie im Detail beschrieben.&lt;br /&gt;
* Das [https://static.docs.arm.com/ddi0403/e/DDI0403E_c_armv7m_arm.pdf ARMv7M Architecture Reference Manual] beschreibt detailliert die abstrakte ARMv7M-Architektur, wie das Exception Model, die CPU Instruktionen inklusive Encoding, etc.&lt;br /&gt;
* Das [https://static.docs.arm.com/100166/0001/arm_cortexm4_processor_trm_100166_0001_00_en.pdf Cortex-M4 Technical Reference Manual] bzw. das [https://static.docs.arm.com/100165/0201/arm_cortexm3_processor_trm_100165_0201_00_en.pdf Cortex-M3 Technical Reference Manual] beschreibt Eigenschaften der Cortex-M3/4 Implementierung der Architektur, insbesondere die Geschwindigkeit der einzelnen Prozessor-Instruktionen.&lt;br /&gt;
* Das [http://www.st.com/resource/en/programming_manual/cd00228163.pdf STM32 Cortex-M3 Programming Manual] ist eine Zusammenfassung des ARMv7M Architecture Reference Manual bezogen auf die STM32.&lt;br /&gt;
* Wer nicht die ST Firmware-Library verwendet, der benötigt zusätzlich das [http://www.st.com/resource/en/programming_manual/cd00283419.pdf Flash Programming Manual] für die Betriebsart des Flash-ROMs, d.h. die frequenzabhängige Konfiguration der Waitstates.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sollten auch die [http://www.st.com/resource/en/errata_sheet/cd00197763.pdf Errata Sheets] beachtet werden. Empfohlen sei auch die Appnote &amp;quot;[http://www.st.com/resource/en/application_note/cd00164185.pdf AN2586 Getting started with STM32F10xxx hardware development]&amp;quot;.&lt;br /&gt;
Die jeweiligen Dokumentations-PDFs sind auf der Produktseite von ST eines jeden Mikrocontrollers verlinkt.&lt;br /&gt;
&lt;br /&gt;
== Hardware Zugriffs-Libraries ==&lt;br /&gt;
=== CMSIS ===&lt;br /&gt;
&lt;br /&gt;
Die CMSIS (ARM® &#039;&#039;&#039;C&#039;&#039;&#039;ortex™ &#039;&#039;&#039;M&#039;&#039;&#039;icrocontroller &#039;&#039;&#039;S&#039;&#039;&#039;oftware &#039;&#039;&#039;I&#039;&#039;&#039;nterface &#039;&#039;&#039;S&#039;&#039;&#039;tandard) ist eine Library von ARM für den Zugriff auf die herstellerübergreifenden Funktionen des ARM-Cores. Hierzu gehört bei den Cortex-M4F-Cores auch die DSP und Floating-Point Funktionalität. Weiterhin existieren eine Zahl von Helferfunktionen für den NVIC, den Sys-Tick-Counter, sowie eine SystemInit-Funktion, welche sich um die PLL kümmert. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen des CMSIS-Standards ([http://www.onARM.com www.onARM.com]) wurden die Headerdateien standardisiert, der Zugriff auf die Register erfolgt per &#039;&#039;&#039;Peripheral-&amp;gt;Register&#039;&#039;&#039;. Die CMSIS C-Dateien bzw. Header enthalten auch Anpassungen für die verschiedenen Compiler. Die Portierung eines Real-Time-Betriebsystems sollte unter Verwendung der CMSIS, für Chips der verschiedenen Hersteller, stark vereinfacht möglich sein (z.B. einheitliche Adressen für Core-Hardware/Sys-Tick-Counter).&lt;br /&gt;
&lt;br /&gt;
Die CMSIS ist im Download der ‎STM32 Standard Peripheral Library enthalten. Die Compiler-Hersteller liefern eine jeweils zur ihrer Tool-Version passende bzw. geprüfte Library (incl. CMSIS) aus. Diese Libs können, gegenüber den Downloads beim Chip-Hersteller, auch ältere Version beinhalten.&lt;br /&gt;
&lt;br /&gt;
=== ‎STM32 Standard Peripheral Library (SPL) ===&lt;br /&gt;
&lt;br /&gt;
ST bietet für jede Controller-Familie eine umfangreiche zur CMSIS passende Peripherie-Bibliothek. Alle Funktionen um die Peripherie zu benutzen sind gekapselt in einfache Strukturen und Funktionsaufrufe. Somit muss man sich nicht selbst um die Peripherie-Register kümmern. Diese Library und ihre Dokumentation setzen das grundlegende Verständnis der Funktion des jeweiligen Peripheriemoduls voraus, wie es die o.a. Referenz und diverse Appnotes vermitteln. Die Library beinhaltet außerdem für fast jede Peripherie mehrere Beispiele.&lt;br /&gt;
Für die USB Schnittstelle gibt es noch eine extra Library, genauso wie für Ethernet.&lt;br /&gt;
&lt;br /&gt;
Die Standard Peripheral Library ist inzwischen veraltet, ST empfiehlt, sie nicht mehr zu verwenden.&lt;br /&gt;
&lt;br /&gt;
Auf der &amp;quot;Design Resources&amp;quot; Seite der Produktseite von ST eines jeden STM32 Mikrocontrollers kann die Library für den jeweiligen Controller heruntergeladen werden, z.B. [http://www.st.com/web/en/catalog/tools/PF257890 hier für den o.g. STM32F103RC].&lt;br /&gt;
&lt;br /&gt;
Library für STM32F4xx: [http://www.st.com/web/en/catalog/tools/PF257901# STSW-STM32065 STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
=== ‎STM32 Cube HAL ===&lt;br /&gt;
&lt;br /&gt;
Hat seit 2012 die SPL abgelöst.&lt;br /&gt;
&lt;br /&gt;
* https://www.st.com/en/embedded-software/stm32cube-mcu-packages.html&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
Zur Programmierung der STM32 gibt es verschiedene Möglichkeiten, sowohl kommerzielle proprietäre als auch mit Freier Software.&lt;br /&gt;
&lt;br /&gt;
=== Freie Software/Freeware ===&lt;br /&gt;
==== Selber zusammenstellen ====&lt;br /&gt;
Man nehme...:&lt;br /&gt;
* Eine Entwicklungsumgebung nach Wahl:&lt;br /&gt;
** [http://www.eclipse.org Eclipse] mit [http://www.eclipse.org/cdt/ C/C++ Development Tooling] und [https://gnu-mcu-eclipse.github.io/ GNU ARM Plug-in](Linux, Windows)&lt;br /&gt;
** [https://atollic.com/truestudio/ TrueStudio for STM32] basiert auf Eclipse&lt;br /&gt;
** [http://www.openstm32.org/Downloading+the+System+Workbench+for+STM32+installer System Workbench for STM32] basiert auf Eclipse&lt;br /&gt;
** [http://netbeans.org/ Netbeans] mit [http://plugins.netbeans.org/plugin/37426/gdbserver GDBserver-Plugin] (Linux, Windows)&lt;br /&gt;
** [http://www.kdevelop.org/ KDevelop] (Linux, Windows)&lt;br /&gt;
** [http://www.geany.org/ Geany] (Linux, Windows)&lt;br /&gt;
** Oder ein einfacher Texteditor&lt;br /&gt;
* Einen C,C++ Compiler:&lt;br /&gt;
** Eine der [[ARM_GCC#Fertige_GCC_Bin.C3.A4rdistributionen|GCC-Binärdistributionen]], siehe auch [[#GCC|GCC]] (je nach Distribution Linux, Windows)&lt;br /&gt;
* Programmiersoftware zum Flashen des Target:&lt;br /&gt;
** [http://openocd.sourceforge.net/ OpenOCD] unterstützt viele Debug/Programmier-Adapter (Linux, Windows)&lt;br /&gt;
** [https://github.com/texane/stlink Texane stlink] funktioniert gut mit den ST-Link Adaptern wie sie zB. auf den STM32 Discovery Boards zu finden sind (Linux)&lt;br /&gt;
** Bei Verwendung eines Segger J-Link, den [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf Segger GDB-Server] in Verbindung mit dem beim GCC mitgelieferten GDB (Linux, Windows).&lt;br /&gt;
** [https://github.com/blacksphere/blackmagic/wiki Black Magic Probe] als Mikrocontrollerfirmware simuliert einen seriellen Port, der direkt von GDB verwendet werden kann. Für FTDI-MPPSE basierte Adapter und ST-Link V2  läuft Blackmagic auf dem Host und stellt den Port :2000 für GDB zur Verfügung. Stlinks können, so man sich Programmierzugang zu dem STM32F103 des Stlinks beschaffen kann, auch mit BMP Firmware umgeflasht werden.&lt;br /&gt;
&lt;br /&gt;
==== Komplette IDEs ====&lt;br /&gt;
* [https://developer.mbed.org/platforms ARM mbed Developer Site] ist eine vollständige Entwicklungsplattform für diverse ARM-Controller auf Basis eines RTOS mit Hardware-Abstraktion und webbasierter Online-sowie Offline-IDE. Ähnlich dem Arduino-Konzept können mit mbed einfachere Aufgaben schnell umgesetzt werden. mbed basiert auf C++ und unterstützt verschiedene Compiler. Projekte können auch exportiert und für andere IDEs heruntergeladen werden. Die mbed-Library ist quelloffen und auf github gehostet.&lt;br /&gt;
* [https://atollic.com Atollic TrueStudio] wurde seit der Übernahme durch ST auf STM32 Mikrocontroller reduziert und ist jetzt kostenlos verfügbar. Basiert auf Eclipse, OpenOCD und [[ARM GCC]]. Ohne size limit.&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite_edition.html Codesourcery Lite Edition] Mit dieser Umgebung muss man sich anfreunden können. Es sind nur wenig Beispielprojekte verfügbar. Nicht mehr kostenlos verfügbar.&lt;br /&gt;
* [http://www.coocox.org/ Coocox Eclipse IDE] kostenlose IDE für STM32F0/F1/F2/F3/F4, die aber mittlerweile nicht mehr weiterentwickelt wird. Basiert auf dem [[ARM GCC]] und es gibt eine breite Unterstützung. Es ist sogar ein freies RTOS verfügbar. Eine gute Wahl ohne Limits mit breiter Debugger-Unterstützung. Hilfreiche Infos gibt es [http://www.mikrocontroller.net/topic/214719?goto=new#2228482 hier] und [http://www.mikrocontroller.net/topic/214719?goto=new#2229943 hier] im Forum, Artikel: [[STM32 CooCox Installation]] &lt;br /&gt;
* [http://emide.org/ emIDE] kostenlose IDE von Segger. Die emIDE basiert auf Code::Blocks. Sie ist auf [[ARM GCC]] aufgebaut und unterstützt eine große Zahl an unterschiedlichen JTAG/SWD-Debuggern - natürlich auch den J-Link aus gleichem Hause.  &lt;br /&gt;
* [http://www.emblocks.org EmBlocks] kostenlose IDE, Code::Blocks basiert, unterstützt STM32 L1/F0/F1/F2/F3/F4/W, integrierter Compiler ([[ARM GCC]]), integrierter GDB-Debugger, Jlink/ST-Link, System view (Peripherie-Register anzeigen) beim Debuggen, Project-Wizard (Eigene Wizards können mit Squirrel geschrieben werden), Basiert auf Code::Blocks. Artikel: [[STM32 - Einstieg mit Em::Blocks]]&lt;br /&gt;
** heißt jetzt EmBitz -&amp;gt; https://www.embitz.org&lt;br /&gt;
* [http://cms.seng.de/service-support/downloads/ Entwicklungsumgebung GNU/Linux] für STM32F1 mit OpenOCD und Olimex ARM-USB-OCD-H, Bedienung über Eclipse-IDE oder Kommandozeile.&lt;br /&gt;
* [http://www.openstm32.org/blog1-System-Workbench-for-STM32 System Workbench for STM32] (SW4STM32) ist eine uneingeschränkte und kostenlose IDE. Sie wird von [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF261797 ST] offiziell unterstützt. Die Entwicklungsumgebung ist in der Version 1.0 seit 5.2.2015 erhältlich. Seit Februar 2016 ist eine Version für Linux verfügbar.&lt;br /&gt;
&lt;br /&gt;
==== Andere Programmiersprachen ====&lt;br /&gt;
&lt;br /&gt;
* [http://mecrisp.sourceforge.net Mecrisp-Stellaris], eine native Forth-Implementation für ARM Cortex M0/M3/M4. Es werden bereits mehrere STM32 Targets unterstützt und neue Portierungen sind herzlich willkommen. Auch Chips von TI, NXP und Freescale sind im aktuellen Paket enthalten.&lt;br /&gt;
&lt;br /&gt;
=== Kommerzielle Umgebungen ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp Keil µVision] (Demo max. 32KB Code/Free für STM32F0/STM32L0): Die sehr komfortable µVison IDE ist neben dem ARM Compiler per Menue auch für einen beliebigen GNU-Compiler konfigurierbar. Damit besteht das 32k-Limit nur noch für den integrierten Debugger / Simulator. In Verbindung mit einem ULINK2 ist die Umgebung schon sehr einfach zu bedienen - leider ist der Compiler mit großen Abstand der langsamste den ich je nutzte, da er keine parallel Option wie der GNU-CC besitzt. Mit der µVision lässt sich kein fremdes File in den Controller in den Flashspeicher des Controllers schreiben. Für den Anfänger eine gute Wahl. Der Preis ist jedoch ein guter Grund auf andere freie IDEs zu wechseln. µVison selbst kann kostenlos mit dem MDK-Evaluationkit heruntergeladen werden. [https://www.keil.com/arm/demo/eval/arm.htm#DOWNLOAD download] Wer sich nur auf STM32 Cortex M0/L0 beschränkt kann die Keil MDK auch ohne 32K Begrenzung frei nutzen. [http://www2.keil.com/stmicroelectronics-stm32/mdk download]&lt;br /&gt;
* [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR-Embedded-Workbench] (Demo max. 32KB Code) [http://supp.iar.com/Download/SW/?item=EWARM-EVAL download]&lt;br /&gt;
* [http://www.isystem.com/download/winideaopen winIDEAOpen] Keine Code Limitierung, GCC und Testwerkzeug beinhaltet. Läuft mit dem iTag50 Adapter, Segger J-Link und dem ST-Link&lt;br /&gt;
* [http://www.raisonance.com Raisonance Ride7] (GCC Compiler, kostenlose Version auf Debugging von max. 32KB Code limitiert, keine Limitierung beim Complilieren)&lt;br /&gt;
* [http://www.rowley.co.uk/arm/ Rowley Crossworks] (Demo 30 Tage unbeschränkt, 150$ für nichtkommerzielle Nutzung, auf GCC basierend). Mir ist nicht klar warum man für diese IDE Geld bezahlen soll. Der GNU-Compiler ist frei und die Entwicklungsumgebungen die auf Eclipse basieren, ebenfalls. Allerdings ist diese Einstellungsarbeit schon was für den etwas erfahrenen Entwickler.&lt;br /&gt;
* [http://www.sisy.de/index.php?id=17&amp;amp;no_cache=1 SiSy ARM oder SiSy Micrcontroller++] (Demo verfügbar keine Gößenbegrenzung, basiert auf GNU-Compiler, grafische Programmierung mit UML möglich, integrierter Debugger)&lt;br /&gt;
* [http://www.comsytec.eu/epsdebugger.php EPS Debugger Plugin, für STM32 Development mit Code::Blocks]&lt;br /&gt;
* [http://www.mikroe.com MikroE bietet neben Pascal und Basic auch C mit kompletter Oberfläche mit Compiler etc. pp relativ günstig]&lt;br /&gt;
* [http://www.visualgdb.com VIsualGDB] Wer vom Atmel Studio kommt oder sonst viele mit Visual Studio arbeitet bekommt hier ein Plugin, das wirklich Spaß macht und funktioniert. Es werden nicht nur STM32 unterstützt. Einfach kostenlose Trial-Version anschauen und probieren.&lt;br /&gt;
&lt;br /&gt;
=== STM32CubeMX ===&lt;br /&gt;
Dies ist eine Software von ST selbst, die die Auswahl und Konfiguration von STM32-Mikrocontrollern vereinfacht:&lt;br /&gt;
* Auswahl der Controller oder Entwicklungsboards mit einer parametrischen Suche&lt;br /&gt;
* grafische Konfiguration der Pins und Alternate Functions (inkl. Überprüfung auf Kollisionen - bei Entwicklungsboards sind gewisse Pins schon vorkonfiguriert und werden angezeigt)&lt;br /&gt;
* grafische Konfiguration des Clock-Trees&lt;br /&gt;
* Generierung von C-Code entsprechend der grafischen Konfiguration. Dieser funktioniert nur mit den neuen STM32CubeMX Libraries (HAL, LL), nicht mit den alten Standard Peripheral Libraries (SPL).&lt;br /&gt;
* Simulation des Strom-Verbrauchs unter Auswahl verschiedenster Stromquellen und Batterien&lt;br /&gt;
STM32CubeMX ist Java-basiert und läuft daher problemlos auf Windows, OS X und Linux. In der Zip-Datei, welche [https://my.st.com/content/my_st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html bei ST heruntergeladen] werden kann, befinden sich entsprechende Installer für die einzelnen Betriebssysteme.&lt;br /&gt;
&lt;br /&gt;
=== Tutorials für diverse Tool-Kombinationen ===&lt;br /&gt;
* [[STM32 Eclipse Installation|Windows,Linux, Eclipse + Yagarto/CodeSourcery + OpenOCD/ST-Link]]&lt;br /&gt;
* [[STM32 Eclipse JLink Linux/Windows|Windows,Linux, Eclipse + GCC-ARM-Embedded + JLink]]&lt;br /&gt;
* [[Linux auf STM32|Linux auf STM32 (ucLinux)]]&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
** Eclipse&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/216554 Windows, Eclipse, codesourcery, st-link ]&lt;br /&gt;
*** [http://www.firefly-power.de/ARM/debugging.html Eclipse Plugin &amp;quot;GDB Hardware Debugging&amp;quot; mit OpenOCD]&lt;br /&gt;
** Code::Blocks&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/265600 Windows, Code::Blocks, STM32F4]&lt;br /&gt;
** STM32 mit EmBlocks&lt;br /&gt;
*** [http://www.emblocks.org/web/downloads-main Download EmBlocks]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=coHPJylnzC8 Video STM32 Project Wizzard in EmBlocks]&lt;br /&gt;
** Atollic TrueSTUDIO&lt;br /&gt;
*** [[STM32 LEDBlinken AtollicTrueStudio|Atollic TrueSTUDIO Installation + Demo]]&lt;br /&gt;
** MDK-ARM Lite mit Einstellungen für STM32F0/F4-Discovery Board&lt;br /&gt;
*** [https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM Download]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=RXOOxby5nns&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;index=1 Installations Video STM32F4 Discovery Board]&lt;br /&gt;
*** [https://www.youtube.com/watch?annotation_id=annotation_203294&amp;amp;feature=iv&amp;amp;index=4&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;src_vid=sN4gDZ7H8gw&amp;amp;v=BeZcQjXxk9A Einstellungen STM32F0 Discovery Board Video]&lt;br /&gt;
** SiSy ARM, STM32&lt;br /&gt;
*** Download: [http://www.sisy.de/index.php?id=59 SiSy DEMO] kein Begrenzung der Codegröße&lt;br /&gt;
*** [http://www.youtube.com/watch?v=84Y3jYLWYpo Videobeispiel]&lt;br /&gt;
** Microsoft Visual Studio&lt;br /&gt;
*** [http://visualgdb.com/tutorials/arm/stm32/f4_discovery/ &amp;quot;STM32F4-Discovery tutorial with Visual Studio&amp;quot;]&lt;br /&gt;
* Ubuntu&lt;br /&gt;
** [http://cms.seng.de/service-support/downloads/ Installing a toolchain for Cortex-M3/STM32 on GNU/Linux] - How-to manual, für STM32F1 unter GNU/Linux mit OpenOCD und Olimex ARM-USB-OCD-H. Integrierte Make files, Linker Skripte, Startup-Code, diverse Tools und Demo-Projekt/Programm. Einbindung in Eclipse IDE oder Bedienung über Kommandozeile.&lt;br /&gt;
** [http://fun-tech.se/stm32/index.php Ubuntu, Selbstcompilierter GCC, STM32/Cortex-M3]&lt;br /&gt;
** [http://thetoolchain.com The ToolChain] - Automatisch installierende Entwicklungsumgebung mit eigenen und externen Treibern, Unterstützt QtCreator als IDE, Flexibel erweiterbar über Shellskripte&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/214719 Tipps für Installation mit Eclipse]&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter===&lt;br /&gt;
* Der [http://www2.st.com/content/st_com/en/products/development-tools/hardware-development-tools/development-tool-hardware-for-mcus/debug-hardware-for-mcus/debug-hardware-for-stm32-mcus/st-link-v2.html ST-LINK/V2] ist ein Debugger, welcher von ST selbst angeboten wird. Jedes STM32 Discovery- oder Nucleo-Board hat einen ST-LINK V2 bzw. ST-Link V2-1 für Programmierung/Debugging per SWD on-board (teilweise abbrechbar), welcher auch für eigene STM32 Target Hardware und prinzipiell auch andere Cortex-M benutzt werden kann. Zwar ist er mit 1.8MHz Takt ein sehr langsamer Vertreter seiner Art, jedoch lassen sich mit ihm fremde Hex- und Binary-Files sowohl Debuggen als auch Flashen. Die ST-LINK-Variante auf den Nucleo- bzw. Discovery-Boards beherrscht nur SWD und kein JTAG, wohingegen der ST-Link in der Adapterversion mit Gehäuse auch JTAG beherrscht und zusätzlich auch in einer Variante mit galvanischer Trennung erhältlich ist. Die ST-LINK/V2-1 auf den NUCLEO und Discovery-Boards können auch per Softwareupdate zu einem J-Link OB umgewandelt werden. Details und Hinweise dazu [https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board hier]. Kopien des ST-Link V2 sind als &amp;quot;mini&amp;quot;-Version u.a. sehr günstig (&amp;lt;5€) über Ebay, Aliexpress und Co zu beziehen. Diese unterstützen jedoch ebenfalls kein JTAG und haben desweiteren den Nachteil, das der Reset-Pin nicht herausgeführt ist bzw. der mit &amp;quot;Reset&amp;quot; bezeichnete Pin nur für STM8 gedacht ist. Sämtliche ST-Link V2 und V2/1 können mittels einer von ST angebotenen [http://www2.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link007.html Update-Software ] auf den jeweils neuesten Stand gebracht werden.&lt;br /&gt;
* [http://www.segger.com/jlink-model-overview.html SEGGER J-LINK / J-TRACE] für u.a. alle ARM7/9/11, Cortex-M0/M1/M3/M4/A5/A8/A9/R4 als [http://www.segger.com/cms/j-link-edu.html Non-Commercial] J-LINK-EDU für ca. 50€ zu haben, läuft in µVision, IAR, GDB (Linux &amp;amp; Windows über einen eigenen [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf GDB-Server]), ... Der J-Link ist mit Abstand der schnellste Debugger, den ich bisher testen konnte. Wer es beim Debuggen eilig hat, liegt mit dem J-Link von Segger richtig.&lt;br /&gt;
* Keil [http://www.keil.com/ulinkme/ ULINK-ME], [http://www.keil.com/arm/ulink2/ ULINK2], [http://www.keil.com/arm/ulinkpro/ ULINK pro] Wenn man die die µVision IDE nicht verlassen mag, kann man sich mit diesen Adaptern anfreunden, denn sie arbeiten nur mit dieser IDE zusammen. Sie benötigen keine USB-Treiber, da sie geschickt das HID-Device des Betriebssystems nutzen. Es lässt sich kein fremdes Binary oder Hex-File flashen. Der ULINK2 kostet genau soviel wie ein Segger J-Link Basic bei gleichem Funktionsumfang, der sich jedoch auch in Verbindung mit anderen IDEs (GDB, usw) einsetzen lässt.&lt;br /&gt;
* [http://www.raisonance.com/rlink.html Raisonance RLink]&lt;br /&gt;
* [http://www.isystem.com/products/itag iTag] für 50€ bei [http://www.amazon.de/dp/B009XAQ9BW Amazon] bestellbar, alternativ als [http://isystem.com/products/hardware/cortex-debugger/itag/itag-instruction Eigenbauversion (offenes Design)] läuft mit der freien winIDEAiTag version (siehe oben)&lt;br /&gt;
&lt;br /&gt;
In der Regel haben die [[JTAG]] Adapter einen 20-poligen Stecker, den man direkt auf die Demo-Boards mit 20-poligem [[JTAG]]-Anschluss einstecken kann. Die Pinbelegung ist genormt, siehe Artikel [[JTAG]]. Die Discovery-Boards haben keinen separaten JTAG-Stecker, aber man kann sich zumindest für das STM32F4 Discovery einen Adapter Pinheader-&amp;gt;JTAG Stecker leicht selbst bauen.&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter Open-Source===&lt;br /&gt;
&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-COOCOX/ ARM-JTAG-COOCOX], CoLinkEX Nachbau von Olimex, unterstützt JTAG sowie SWD&lt;br /&gt;
** [http://www.coocox.org/wiki/coocox/CoLinkEx/CoLinkEx-Support unterstützte uC]&lt;br /&gt;
** unterstütze IDEs: [http://www.keil.com/arm/mdk.asp Keil MDK-ARM 4.03] oder neuer, [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR Embedded Workbench 5.xx] oder neuer sowie die [http://www.coocox.org/CooCox_CoIDE.htm CooCox CoIDE]&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ Olimex] ARM-USB-OCD (ca. 60.-, hat zusätzlich einen Spannungsausgen und einen COM Port)&lt;br /&gt;
* [http://www.randomprojects.org/wiki/Floss-JTAG FLOSS-JTAG]&lt;br /&gt;
&lt;br /&gt;
Der Controller hat auch einen fest eingebauten Boot-Lader. Damit läßt er sich auch über eine gewöhnliche serielle Schnittstelle programmieren, ohne dass man einen JTAG-Adapter benötigt. Dies erfordert ggf. entsprechende Konfiguration über die BOOTx-Pins und/oder die Option-Bytes, und ein Programm wie [https://code.google.com/p/stm32flash/ stm32flash].&lt;br /&gt;
&lt;br /&gt;
=== Demo-Projekte ===&lt;br /&gt;
&lt;br /&gt;
* Einführung in die GPIO Programmierung der STM32F10x und STM32F30x Prozessoren am Beispiel des STM32F3 Discovery Boards und Vergleich zur AVR IO Registerstruktur [http://www.mikrocontroller.net/topic/300472#new]&lt;br /&gt;
* [[prog_bsp_timer_1_timer2|Programmbeispiel für die Verwendung von Timer2 zusammen mit dem Interrupt]]&lt;br /&gt;
* [http://www.firefly-power.de/ARM/printf.html Printf() debugging mit minimalem Aufwand]&lt;br /&gt;
* [[STM32_BLDC_Control_with_HALL_Sensor|Programmbeispiel für BLDC Motoransteuerung (Timer 1) mit HALLSensor (Timer 3)]]&lt;br /&gt;
* [[Cortex_M3_OCM3U]]&lt;br /&gt;
* Martin Thomas hat ein umfangreiches Projekt erstellt, in der die Eclipse Einstellungen enthalten sind:&lt;br /&gt;
** [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html &amp;quot;ChaN&#039;s FAT-Module with STM32 SPI&amp;quot;]&lt;br /&gt;
* [[STM32 USB-FS-Device Lib]]&lt;br /&gt;
* Modellbau-Sender auf STM32-Basis mit vielen Treibern [http://www.rcos.eu www.rcos.eu]&lt;br /&gt;
* Ausführliches [https://github.com/jkerdels/stm32edu Einstiegs-Tutorial] in Codeform für das [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4 discovery board]&lt;br /&gt;
* [http://www.redacom.ch/keillab/ Schweizer Gondelbahnsteuerung über Webserver auf ETT STM32F ARM KIT Board in Keil RTOS] mit Webcam&lt;br /&gt;
* Die [http://ethernut.svn.sourceforge.net/viewvc/ethernut/trunk/ Ethernut SVN Version] unterstützt inzwischen viele STM32 Typen, viele Devices und einige STM32 Demoboards&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=744 Uwe Becker&#039;s Libraries für den STM32F4]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=3290 Uwe Becker&#039;s STM32F429 Discovery Board Oszilloskop], hier der [http://www.mikrocontroller.net/topic/319831#new Thread]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=3424 Uwe Becker&#039;s STM32F429 Discovery Board ZX-Spectrum Emulator]&lt;br /&gt;
* [[USB-Tutorial mit STM32]] enthält ein vollständiges Beispielprojekt&lt;br /&gt;
&lt;br /&gt;
== Debug- und Trace-Interface (CoreSight™ Debug and Trace Technologie)==&lt;br /&gt;
&lt;br /&gt;
Übersicht über beide Funktionalitäten und den Schnittstellen:&lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_cs_core_sight.htm&lt;br /&gt;
&lt;br /&gt;
Die Coresight-Debug-Architektur ermöglicht ein nicht-invasives Debugging, d.h. es können während des Betriebes (meistens) ohne Beeinflussung des Prozessors Daten vom Speicher gelesen und in selbigen geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== Debugger Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Der Debugger-Teil besitzt drei Funktionen:&lt;br /&gt;
* Run Control: z.B. Programm-Start, Stopp und Einzel-Schritte.&lt;br /&gt;
* (Program) Break Points: Ein Programm hält an, wenn der Programm Counter eine bestimmte Programm-Adresse erreicht.&lt;br /&gt;
** Die maximale Anzahl der gleichzeitig möglichen Break Points ist begrenzt (z.B. 6 bei einem STM32).&lt;br /&gt;
** Die Anzahl der Break Points ist nahezu unbegrenzt, wenn ein Debugger über den Memory Access (s.u.) sogenannte Flash Break Points unterstützt. Dabei wird ein geladenes Programm im Flash umprogrammiert, um den Debugger anzuhalten. Diese Funktionalität ist meistens ein kostenpflichtiges Zusatz-Feature des Debugger-Herstellers. &lt;br /&gt;
** Beinhaltet keine Data Watch Funktionalität, welche im Trace-Teil (DWT) realisiert wird.&lt;br /&gt;
* Memory Access: Lesen und Schreiben von Speicheradressen. &lt;br /&gt;
** Diese Funktionalität beinhaltet keine direkte Flash-Programmierung. Der Programmiervorgang für einen Flash ist herstellerspezifisch und muss von dem verwendeten Debugger unterstützt werden.&lt;br /&gt;
&lt;br /&gt;
=== Trace Funktionen ===&lt;br /&gt;
Die Trace-Funktionalität wird in drei Funktionen aufgeteilt:&lt;br /&gt;
* ETM (Embedded Trace Macrocell): Optional, nicht jede CPU besitzt diese Hardware (Kostenfaktor, Ausstattung).&lt;br /&gt;
* ITM (Instrumentation Trace Macrocell): Über diesen Kanal kann ein vereinfachtes Trace des Core ermöglicht werden, sowie &amp;quot;printf-ähnlich&amp;quot; Daten über den ITM Channel 0 geschickt und im Debugger ausgegeben werden.&lt;br /&gt;
* DWT (Data Watchpoint &amp;amp; Trace Unit): &lt;br /&gt;
** Data Watch: 4 Access-Break-Points ( z.B. der Debugger bleibt stehen, wenn das Programm auf einen Speicher zugreift oder der Wert einer Variablen einen bestimmten Wert annimmt). &lt;br /&gt;
** Trace Unit: Programmverlauf (durch Lesen des Program Counters) und Interrupt Aufrufe verfolgen, sowie Zeitmessungen.&lt;br /&gt;
&lt;br /&gt;
Einige der Trace-Funktionalitäten können über die JTAG-Schnittstelle angesprochen werden. Die schnelle Trace-Funktionalität (mit 4 bit Parallel-Port) steht nur mit der erweiterten DEBUG + ETM Schnittstelle zur Verfügung. Im Gegensatz zum Debugger-Teil (Run Control, Break Points und Memory Access) werden Trace-Funktionen nicht von allen Debuggern unterstützt. Debugger mit der vollen Trace-Funktionalität kosten deutlich mehr.&lt;br /&gt;
&lt;br /&gt;
* Beispiele für Trace-Port-Aktivierungen für verschiedene Hersteller: http://www.keil.com/support/man/docs/jlink/jlink_capture_tracedata.htm&lt;br /&gt;
&lt;br /&gt;
Die Aktivierung des parallelen Trace-Ports erfordert, je nach CPU Hersteller, zusätzliche Debugger-Makros für die Aktivierung und Port-Freischaltung. Zusätzlich sind die Schnittstellenauswahl und Einstellung (Frequenzen) im Entwicklungs-Tool (IDE) wichtig, um erfolgreich den Programm-Verlauf &amp;quot;tracen&amp;quot; zu können.&lt;br /&gt;
&lt;br /&gt;
=== Debug und Trace-Schnittstellen ===&lt;br /&gt;
Als Debug Interface stehen zwei Varianten zur Auswahl:&lt;br /&gt;
* [[JTAG]]: Dafür sind mindestens 6 Steuerleitungen nötig. Unterstützt Device Chaining: Mehrere verbundene Geräte können mit einem Debugger/Programmer gleichzeitig angesteuert werden.&lt;br /&gt;
* SWD (Serial Wire Debug): Hier mindestens 2  Steuerleitungen (3 mit SWO, zzgl GND und 3,3V). Die SWD Schnittstelle ist in der Regel schneller und kann auch Funktionen aus dem Trace-Teil beinhalten (z.B. ITM, dafür wird der SWO-Pin benötigt). Device Chaining ist mit dieser Schnittstelle nicht möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standard-JTAG Steckerbelegungen: &lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_hw_connectors.htm&lt;br /&gt;
&lt;br /&gt;
=== Der 10polige JTAG-Stecker von mmvisual ===&lt;br /&gt;
mmvisual hat mit dieser Steckerbelegung die Standard JTAG Schnittstelle erweitert:&lt;br /&gt;
&lt;br /&gt;
Ich habe diesen Part in den Artikel [http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual JTAG] verschoben.&lt;br /&gt;
Hinzu gekommen ist die Adapterplatine 10-Polig auf Standard JTAG 20 Polig mit TTL/V24 Wandler. [http://www.mikrocontroller.net/articles/JTAG#Die_Adapterplatine Siehe hier.]&lt;br /&gt;
&lt;br /&gt;
== Hardware-Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
Der STM32 benötigt für den Betrieb nur (Minimalbeschaltung):&lt;br /&gt;
&lt;br /&gt;
* VCC 2..3,3V (je nach Typ)&lt;br /&gt;
* AVCC 2..3,3V (sehr wichtig, der STM32 lässt sich ohne diese Spannung nicht programmieren)&lt;br /&gt;
* GND&lt;br /&gt;
* Reset Pin 100nF nach GND (ein Pull-Up Widerstand von ca. 40k ist intern vorhanden)&lt;br /&gt;
* [[#Bootmodi|Boot-Pins]]&lt;br /&gt;
&lt;br /&gt;
ansonsten nur ein paar einzelne Cs 100nF an VCC/GND.&lt;br /&gt;
&lt;br /&gt;
Um Programmieren zu können wird entweder noch die serielle Schnittstelle (Programmieren über den vorprogrammierten Bootloader) oder JTAG oder die SWD Schnittstelle benötigt.&lt;br /&gt;
&lt;br /&gt;
=== Bootmodi ===&lt;br /&gt;
Unterschiedliche Bootmodi lassen sich mittels der PINs BOOT0 und BOOT1 auswählen. Siehe Application Note [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Attachments/18225/AN2606.pdf AN2606]. Außer F1 besitzen neuere Familien ein SYSCFG_MEMR Register. In dieses Register kann man die gewünschten Boot0/1 Werte schreiben und nach einem Core-Reset (!= System_Reset) startet der Prozessor im gewünschten Mode. Eine Neu- bzw. Deinitialisierung der Peripherie empfiehlt sich! &lt;br /&gt;
&lt;br /&gt;
==== Boot from FLASH ====&lt;br /&gt;
Startadresse wird von 0x08000004 geladen&lt;br /&gt;
 BOOT0 Lo&lt;br /&gt;
 BOOT1 X &lt;br /&gt;
&lt;br /&gt;
==== Boot from SRAM ====&lt;br /&gt;
PC Startadresse wird an 0x200001E0 direkt angesprungen.&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Hi&lt;br /&gt;
Da der interne FLASH der stm32f1x laut Datenblatt nur für 10000 Schreibvorgänge ausgelegt ist, kann mittels BOOT0 (High) und BOOT1 (High) auch aus dem zuvor mit dem Debugger (JTAG/SWD) beschriebenen SRAM booten. &lt;br /&gt;
Hierbei gilt zu beachten:&lt;br /&gt;
 VTOR auf die NVIC Tabelle im SRAM vor dem auslösen des ersten Interrupts remappen.&lt;br /&gt;
&lt;br /&gt;
 Um ein vergleichbares Startverhalten zum FLASH zu erreichen, empfiehlt es sich,&lt;br /&gt;
 0xF1E0F85F an 0x200001E0 zu schreiben. Diese implizite Ausführung von &amp;quot;ldr.w pc,&lt;br /&gt;
 [pc, #-0x01E0]&amp;quot; beim Start erzwingt ein laden der Startadresse von 0x20000004.&lt;br /&gt;
&lt;br /&gt;
==== Boot from SYSMEM (RS232, CAN und USB) ====&lt;br /&gt;
PC Startadresse wird von 0x1FFFF004 geladen&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Lo&lt;br /&gt;
&lt;br /&gt;
Ab F2 gibt es auch ein SYSCFG_MEMRMR Register. Schreibt man hier den Wert für &amp;quot;System Flash&amp;quot; und macht einen Corereset (keinen Systemreset), so landet man auch im Bootloader, unabhängig vom Wert der Boot Pins.&lt;br /&gt;
&lt;br /&gt;
Auch ohne JTAG lässt sich ein STM32 programmieren (Bootloader-Aktivierung). Dabei stehen, je nach CPU-Typ, verschiedene Möglichkeiten zur Verfügung:&lt;br /&gt;
* RS-232 (bisher alle STMs)&lt;br /&gt;
* USB (alle USB fähigen CPUs &amp;gt; F103)&lt;br /&gt;
* CAN (wie USB nur in bestimmten MCUs)&lt;br /&gt;
&lt;br /&gt;
3 zusätzliche Verbindungen müssen auf dem Board gepatcht werden. Für einen Test geht es auch mit Tastern für RESET und BOOT0.&amp;lt;br&amp;gt;&lt;br /&gt;
RESET=RTS (L-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT0=DTR (H-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT1=LOW&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Details sind hier im Forum: [http://www.mikrocontroller.net/topic/141711 STM32 Programmiertool]&lt;br /&gt;
&lt;br /&gt;
Tools für den Download über den STM32-Bootloader:&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/PF257525 STSW-MCU005 STM32 and STM8 Flash loader demonstrator]&lt;br /&gt;
* [https://sourceforge.net/projects/stm32flash/ stm32flash] - Open source flash program (RS-232)&lt;br /&gt;
* [http://dfu-util.sourceforge.net/ dfu-util] - Open source flash program (USB)&lt;br /&gt;
&lt;br /&gt;
== Bewertung ==&lt;br /&gt;
=== Vorteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber ARM7:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interrupt-Controller jetzt Teil des Prozessors (als Core Peripheral), die Vector Table ist jetzt eine echte Vektortabelle, keine Sprungliste wie bei ARM7. Durch Automatismen zwischen Core und NVIC (auto register save r0..r3, lr, sp, pc) bei Interrupt Entry wird eine deutlich schnellere Ausführungszeit bei Interrupts erreicht. Der Interrupt Code muss sich nicht mehr selbst um die Sicherung der o.g. Register kümmern und eine besondere Konfiguration der Handler im Compiler entfällt. Sind vor Beendigung einer ISR (d.h. Rücksprung zum User Code) weitere Interrupts pending, so werden diese ausgeführt, ohne dass eine komplette pop-push-sequenz der Register notwendig ist. Schön beschrieben ist es hier im [https://www.hitex.com/fileadmin/documents/tools/dev_tools/dt_protected/insiders-guides/stm32/isg-stm32-v18d-scr.pdf Insider&#039;s Guide] unter 2.4.5 / Seite 20 (falls der Link nicht mehr funktioniert, direkt nach isg-stm32-v18d-scr.pdf googlen kann helfen...).&lt;br /&gt;
* Thumb-2 Befehlssatz, deutlich schneller als Thumb-1 und ebenso kompakt&lt;br /&gt;
* Weniger Pins für Debugging benötigt durch SWD&lt;br /&gt;
* Mehr Hardware Breakpoints machen debuggen einfacher&lt;br /&gt;
* Software ist einfacher weil die Umschaltung zwischen ARM Mode und Thumb Mode wegfällt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber LPC1700 und LPC1300:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Flexiblere Gehäuseformen mit mehr Peripherie bei kleinen Gehäusen&lt;br /&gt;
* FW-Lib für alle STM32 gleich, alle AppNotes/Demos beziehen sich auf diese eine FW-Lib was die Entwicklung der eigenen Applikation sehr beschleunigt.&lt;br /&gt;
* Genauerer und flexiblerer ADC, insbesondere gegenüber LPC1300&lt;br /&gt;
* Flexiblere Varianten der Peripherie &amp;gt;&amp;gt; bei weniger einen deutlichen Preisvorteil&lt;br /&gt;
* ab 0,85 EUR (Stand 2010) Allerdings gibts den LPC1100 mit Cortex-M0 schon ab 0,65 $!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber SAM3/4:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fast alle Pins sind 5-Volt tolerant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber anderen &amp;quot;Kleinen&amp;quot; wie z.B. PIC, Atmel usw.&#039;&#039;&#039;&lt;br /&gt;
* nahezu gleicher Preis bei Hobby Anwendungen&lt;br /&gt;
* 32 Bit ohne Umwege in Assembler rechenbar&lt;br /&gt;
* Schnelle direkte Offset-Adressierung ermöglicht effizienten Zugriff auf Stack-Variablen, lokal gespeicherte Flash-Konstanten, struct/Array-Elemente&lt;br /&gt;
* Einfache einheitliche Adressierung des gesamten Adressraums, d.h. Pointer auf Peripherieregister, RAM &amp;amp; Flash können exakt gleich behandelt werden, keinerlei Banking/Umschalt-Mechanismen erforderlich auch bei großem Flash/RAM&lt;br /&gt;
* Interrupt-Prioritäten und Prioritätsgruppen&lt;br /&gt;
* Effiziente Pointerarithmetik da Registerbreite=Adressbreite&lt;br /&gt;
* bessere Peripherie wie USB, Ethernet, Vielzahl an Timern&lt;br /&gt;
* der ARM-Core hat eine höhere Taktfrequenz und kann gleichzeitig mehr in weniger Takten berechnen&lt;br /&gt;
* Hardware-Division, bei einigen FPU zur effizienten float-Berechnung&lt;br /&gt;
* Mit größerem Flash/RAM verfügbar&lt;br /&gt;
* Code kann direkt aus dem RAM ausgeführt werden, Speicherschutz und privilegierter Ausführungsmodus können &amp;quot;Kernel&amp;quot;- vor &amp;quot;Anwendungs&amp;quot;-Code schützen, somit wird das dynamische Nachladen von Anwendungen aus externem Speicher effizient &amp;amp; sicher möglich&lt;br /&gt;
* ... und weitere 1000 Punkte ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Links&#039;&#039;&#039;&lt;br /&gt;
* [http://www.arm.com/files/pdf/ARM_Microcontroller_Code_Size_%28full%29.pdf Code Size Analyse zwischen verschiedenen µC]&lt;br /&gt;
&lt;br /&gt;
=== Nachteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil gegenüber LPC1700:&#039;&#039;&#039;&lt;br /&gt;
* STM32F1xx: nur 72 MHz statt 100 MHz (LPC1759: 120 MHz) Taktfrequenz; STM32F2xx hat diesen Nachteil nicht (ebenfalls 120MHz, STM32F4xx mit 180MHz)&lt;br /&gt;
* Der LPC1700 besitzt deutlich mehr Mechanismen, um die Auswirkung der Waitstates des Flash-ROMs auf Code- und Datenzugriffe zu reduzieren und das bedeutet mehr Performance bei gleicher Taktfrequenz. Beim STM32F2 entfällt dieser Nachteil wohl aufgrund des ART Accelerators. &lt;br /&gt;
* Alle LPC1xxx haben 32 Bit Timer. Bei den STM32 haben das nur die STM32F2xx und STM32F4xx (2 Stück)&lt;br /&gt;
* I2S Einheit von ST hat keinen FIFO und im 24/32Bit Modus müssen 2x16Bit Halbwörter übertragen werden. Wobei allgemein bei neuen ARM Prozessoren die vorhandenen DMA-Kanäle (basierend auf eigenen BUS-Kanälen und Speicherzugriffen) FIFO in beliebiger Größe bedeutet. (Gilt nicht bei bestimmten STM32F4xx)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil für Hobby-Anwender&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Nicht direkt &amp;quot;Steckbrettauglich&amp;quot;, da kein DIL Gehäuse verfügbar. Der ebay-Shop dipmicro führt jedoch sehr günstige Lötadapter für Umsetzung von LQFP48 auf DIP48. QFP64 in 0.5mm Pinabstand und nicht 0.8mm wie AVR. Von NXP gibt es Cortex-M0 µC im DIL Gehäuse.&lt;br /&gt;
&lt;br /&gt;
* Viel Peripherie, Clocks müssen alle richtig eingestellt werden, ggf. Anpassung des Startup Codes usw.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Preis-Leistungs-Verhältnis in der Regel schlechter, da geringere Verkaufsstückzahlen&lt;br /&gt;
&lt;br /&gt;
== Errata, Tipps und Tricks ==&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* AD-Wandler PA0: Im Errata steht, dass hier Fehler in der Wandlung entstehen könnten, also einen anderen Pin verwenden.&lt;br /&gt;
* CAN-Bus PD0/PD1: Remap geht erst ab der 100-Pin-Version. Steht im RM0008 unter 9.3.3.: &amp;quot;CAN1 alternate function remapping&amp;quot;. Alle Infos von RM0008 9.3.x sind interessant&lt;br /&gt;
* CAN und USB sind bei der F1 Serie nur bei der &amp;quot;◦Connectivity-Line&amp;quot; gleichzeitig nutzbar. Siehe Datenblätter.&lt;br /&gt;
* Mit internem RC-Oszillator kann die CPU mit maximal 64MHz betrieben werden. Mit einem externen Quarz sind dann 72MHz möglich.&lt;br /&gt;
* Für USB Betrieb muss die CPU mit 48MHz oder 72MHz betrieben werden (bei STM32F1xx).&lt;br /&gt;
* Der Idle Interrupt vom Usart wird zwar ausgelöst, aber nicht vom entsprechenden Statusflag angezeigt&lt;br /&gt;
* Der DMA fängt beim aktivieren immer von vorn an zu zählen, auch wenn er nur kurz angehalten wurde&lt;br /&gt;
* STM32F2xx hat kein Flash Size Register, bei STM32F4xx ist zwar ein flash Size Register beschrieben, kollidiert aber in der Adresse mit einem anderen Register&lt;br /&gt;
* Derivate mit internem EEPROM und nur einer Speicherbank haben das &amp;quot;Feature&amp;quot; bei write/erase des Data-Flashes (EEPROM) einen kompletten stall der code execution zu verursachen (inkl. ISRs, DMA). Desgleichen bei write/erase des internen Flash (ISP-routinen, EEPROM-Emulation).&lt;br /&gt;
* Der I2C hat diverse Fehler, welche im Errata des jeweiligen Modells (z.B. [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/errata_sheet/CD00238166.pdf STM32F105xx and STM32F107xx Errata sheet] ) zu finden sind. Workarounds hierzu finden sich in der Application Note [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00209826.pdf AN2824]. Am Besten benutzt man jedoch die I2C Communication peripheral application library (CPAL) von ST ([http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF258336 STSW-STM32127])&lt;br /&gt;
* [http://blog.frankvh.com/category/stm32/ weitere undokumentierte Features]&lt;br /&gt;
* Interrupt-Flags in Statusregistern der diversen Peripherals wie der Timer müssen zu &#039;&#039;&#039;Beginn&#039;&#039;&#039; (bzw. möglichst weit vor dem Return) der ISR zurückgesetzt werden, da die ISR sonst eventuell 2x ausgeführt wird (Siehe [https://my.st.com/public/Faq/Lists/faqlst/DispForm.aspx?ID=143&amp;amp;level=1&amp;amp;objectid=141 STM32 FAQ] und [http://www.mikrocontroller.net/topic/312393#new Forum]).&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
==== Allgemein ====&lt;br /&gt;
Standard-GPIOs des STM32 und im speziellen das BSRR&lt;br /&gt;
* Die Register bestehen aus zwei Teilen, der obere Teil BR0-15 signalisiert durch ein gesetztes Bit die zu löschenden Bits im IO-ODR-Register,der untere Teil BS0-15 signalisiert durch ein gesetztes Bit die zu setzenden Bits. Besonders ist, wenn beide Bits (oberer und unterer Teil) gesetzt sind hat das Set-Bit Priorität. Durch eine geschickte Kombination von oberen und unteren Teil kann man Speicherzugriffe Sparen. z.B. kann man solch ein Konstrukt zum ändern der unteren 8 Bit des IO-ODR-Registers &amp;quot;uint32_t temp = GPIOC-&amp;gt;ODR &amp;amp; 0xff00; GPIOC-&amp;gt;ODR = temp | (Eingabe &amp;amp; 0x00ff)&amp;quot; um einen Speicherzugriff verkürzen zu &amp;quot;GPIOC-&amp;gt;BSRR = (Eingabe &amp;amp; 0x00ff) | ((0x00ff) &amp;lt;&amp;lt; 16)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== GCC ====&lt;br /&gt;
Um den GCC direkt zu verwenden (zB. mit selbstgebautem makefile), falls man das nicht von einer Entwicklungsumgebung machen lässt, siehe zunächst [[ARM GCC]]. STM32-spezifisches ist:&lt;br /&gt;
* Wird die [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] und ein Quarz verwendet, so muss noch per Präprozessor-Definition die Frequenz des Quarzes angegeben werden mittels z.B. -DHSE_VALUE=8000000 für 8MHz (wie auf dem STM32F4 Discovery).&lt;br /&gt;
&lt;br /&gt;
===== Startupcode &amp;amp; Linkerscript =====&lt;br /&gt;
* Damit der compilierte Code an den richtigen Stellen im Controller landet (d.h. dem Flash) muss man dem Linker ein Linkerscript mitgeben. Dies geht per &amp;quot;-T &#039;&#039;pfad_zum_linkerscript.ld&#039;&#039;&amp;quot; an den Linker-Befehl. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Linkerscript für die Atollic TrueSTUDIO IDE, dieses kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich das Script im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324x7I_EVAL/stm32_flash.ld&amp;quot; des Archives.&lt;br /&gt;
* Damit beim Starten die richtigen Initialisierungen vorgenommen werden (wie globale Variablen und bei C++ Konstruktoren globaler Objekt-Instanzen) muss als erstes ein Startupcode laufen, der dann die main()-Funktion aufruft. Der Startupcode ist meistens in Assembler geschrieben, C-Code ist aber auch möglich. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Startupcode für die Atollic TrueSTUDIO IDE, dieser kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich der Code in Assemblerform im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f40xx.s&amp;quot; des Archives. Der Assemblercode kann per arm-none-eabi-as (Flags s.o.) assembliert werden, die resultierende .o -Datei normal mitgelinkt.&lt;br /&gt;
&lt;br /&gt;
Zusammen bieten die beiden Dateien der Anwendung ein Standard-C-Interface, d.h. man kann wie gewohnt globale Variablen verwenden und seinen Code in die main()-Funktion schreiben.&lt;br /&gt;
&lt;br /&gt;
=== Tipps für Umsteiger von Atmel/PIC/8051 ===&lt;br /&gt;
* Prozessortakt hat unterschiedliche Taktquellen und eine PLL.&lt;br /&gt;
* Alle Peripheriemodule haben einen extra Clock, den man aktivieren muss.&lt;br /&gt;
* Wenn man z.B. einen UART benutzen möchte, so muss man den Clock vom UART, Alternate Function IO (AFIO) und den GPIO-Port aktivieren.&lt;br /&gt;
* Ansonsten hat man nahezu doppelt so viele Möglichkeiten in den Peripheriemodulen.&lt;br /&gt;
* Interrupt-Flags müssen in der ISR selber gelöscht werden&lt;br /&gt;
* Forum zu [http://www.mikrocontroller.net/topic/175888 Interrupts vs. Events]&lt;br /&gt;
&lt;br /&gt;
=== Errata vom STM32F4xx die nicht im Errata von ST stehen ===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267439#2788478 Aktivieren von DMA], wenn mehr als 3 DMA Kanäle aktiviert werden, kann es sein dass die nicht alle korrekt bedient werden. Auch klappt der DMA mit dem FSMC nicht immer zuverlässig. [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FWarning%20limit%20simultaneous%20DMAs%20to%202&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=811 siehe hier] [http://blog.frankvh.com/2012/01/13/stm32f2xx-stm32f4xx-dma-maximum-transactions/ und hier]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/260637#2700761 Nerviger Bug in &amp;quot;stm32f4xx.h&amp;quot;] Änderung Struktur GPIO_TypeDef&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/261690#2714754 Batterie wird leer gezogen], nur bei manchen Chips mit Rev. A&lt;br /&gt;
* [http://www.efton.sk/STM32/STM32F4xx_doc_errors.txt Liste von Dokumentations-Fehlern]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
Versandhäuser für Privatpersonen&lt;br /&gt;
* [http://www.reichelt.de/STM-Controller/2/index.html?;ACTION=2;LA=2;GROUPID=2950; Reichelt]&lt;br /&gt;
* [http://darisusgmbh.de/shop/index.php?cat=c2692_ARM-Cortex.html Darisus]&lt;br /&gt;
* [https://www.tme.eu/de/katalog/st-mikrocontroller_112866/ TME] &lt;br /&gt;
* [http://de.rs-online.com/web/c/halbleiter/prozessoren-und-mikrocontroller/mikrocontroller/?sort-by=default&amp;amp;sort-order=default&amp;amp;applied-dimensions=4294417325&amp;amp;lastAttributeSelectedBlock=4294425895 RS-Online]&lt;br /&gt;
* [http://www.mouser.de/STMicroelectronics/Semiconductors/Embedded-Processors-Controllers/Microcontrollers-MCU/ARM-Microcontrollers-MCU/_/N-a85pc?P=1z0zpefZ1yzud1pZ1yzmxr3Z1yzud8sZ1yztkjiZ1yzonn5Z1yznfad&amp;amp;FS=True Mouser]&lt;br /&gt;
* [https://www.conrad.de/de/embedded-mikrocontroller-o0214046.html Conrad]&lt;br /&gt;
&lt;br /&gt;
Gewerblich liefern natürlich viele wie EBV, [http://de.futureelectronics.com Future Electronics], Farnell, Digikey usw...&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* [https://www.conrad.de/de/stmicroelectronics-entwicklungs-kits-o0214062.html diverse Nucleo- und Discovery-Boards bei Conrad]&lt;br /&gt;
* [https://www.reichelt.de/Einplatinen-Microcontroller/2/index.html?ACTION=2&amp;amp;LA=3&amp;amp;GROUPID=6667 diverse Nucleo-Boards bei Reichelt]&lt;br /&gt;
* [http://www.watterott.com/index.php?page=search&amp;amp;keywords=STM32&amp;amp;cat=40&amp;amp;subkat=on&amp;amp;mnf=&amp;amp;sdesc=on&amp;amp;desc=on&amp;amp;x=79&amp;amp;y=19 STM32 bei Watterott (unter anderem Olimex- und Nucleo-Boards)]&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/ST/ STM32-Boards direkt bei Olimex]&lt;br /&gt;
* [http://shop.myavr.de/Hardware.htm?sp=artlist_kat.sp.php&amp;amp;katID=51 verschiedene STM32-Boards myAVR]&lt;br /&gt;
* [http://www.sander-electronic.de/es0028.html Sander Electronic]&lt;br /&gt;
* [http://www.futurlec.com/STM32_Development_Board.shtml Futurlec Evalboard, ebenso Header-Board]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/MP32F103-Stick:_Ein_Mini-Mikrocontroller-Board_mit_USB_und_bis_zu_4MB_Datenspeicher Artikel im Wiki, ARM mit USB und 4MB Speicher]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Cortex_M3_OCM3U Cortex M3 Artikel im Wiki]&lt;br /&gt;
* [http://de.farnell.com/jsp/displayProduct.jsp?sku=1824325&amp;amp;action=view&amp;amp;CMP=GRHS-1000962 STM32Discovery bei Farnell] Mikrocontroller Board (STM32F100RBT6B) mit onboard USB-Programming Interface für ca. 12,50€&lt;br /&gt;
* [https://dsp-sys.de/24-bayerhw-de/26-xynergy-xs-so-dimm-module-mit-cortex-m4-spartan-6-ddr3-ram SO-DIMM Module mit STM32F4, Spartan-6 &amp;amp; DDR3 RAM] Breakout-Board mit CAN (2x isoliert), UART, LAN, SPI, I2C and USB-OTG u.v.m.&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities, Tutorials ==&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/STM32_-_Einstieg_mit_Em::Blocks STM32 - Einstieg mit Em::Blocks Tutorial]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/mikrocontroller-elektronik?filter=ARM*+STM32*+Cortex* Suche im Forum]&lt;br /&gt;
* [[STM32 für Einsteiger]]&lt;br /&gt;
* http://www.openstm32.org/System+Workbench+for+STM32&lt;br /&gt;
* [https://community.st.com/ Forum auf der ST Homepage] &lt;br /&gt;
*[http://joe-c.de/pages/posts/einstieg_mikrocontroller_stm32f103_101.php Einstieg:  STM32board mit Kamera (deutsch)] &lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html STM32 Tutorial für Standard Peripheral Library in Deutsch]&lt;br /&gt;
* [http://mySTM32.de STM32 C und C++ Tutorial in Deutsch ]&lt;br /&gt;
* [http://myugl.de Tutorial für Grafik-Librarys und SiSy-Projekte in Deutsch ]&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF251717 MicroXplorer MCU graphical configuration tool ]&lt;br /&gt;
* [http://www.harerod.de/docs/CoreMark_STM32.pdf Testbericht über CoreMark 1.0 auf Cortex-M3/M4 mit verschiedenen Compiler- und MCU-Einstellungen]&lt;br /&gt;
* [http://klaus4.blogspot.com/2014/05/stm32f4-discovery-mit-opensource.html STM32-Toolchain mit Eclipse CDT 4.3, GnuArmEclipse, OpenOCD 0.8.0, Gnu Arm GCC 4.8, STM32CubeMX]&lt;br /&gt;
* [http://libopencm3.org/ libopenmc3 OpenSource libs für STM32 und ähnliche] &lt;br /&gt;
* [https://www.mikrocontroller.net/topic/423300#new Totzeitrechner für STM32]&lt;br /&gt;
* [https://leanpub.com/mastering-stm32 Download-Buch in englisch, min. 25$ &amp;quot;Mastering STM32&amp;quot;]&lt;br /&gt;
* [http://stefanfrings.de/stm32/index.html STM32F1/F3 Anleitung]&lt;br /&gt;
* [https://www.cs.indiana.edu/~geobrown/book.pdf &amp;quot;Discovering the STM32 Microcontroller&amp;quot; eBook (kostenlos)]&lt;br /&gt;
* [http://stefanfrings.de/mikrocontroller_buch2/index.html Einblick in die moderne Elektronik ohne viel Theorie] &#039;&#039;&#039;PDF&#039;&#039;&#039;, Programmieranleitung für Anfänger&lt;br /&gt;
* [[USB-Tutorial mit STM32]]&lt;br /&gt;
* [http://www.pomad.fr/node/2 Sehr schönes STM32 Anfängertutorial]&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;br /&gt;
[[Kategorie:Mikrocontroller]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=97680</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=97680"/>
		<updated>2017-11-08T08:07:41Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren Brushless-Controller für Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
* [https://www.youtube.com/watch?v=szgVUfyX8JM Texas Instruments Artikel ]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
Der AVR-ADC ist für hohe Drehzahlen zu langsam bzw. ist die PWM -und Samplefrequenz mit 10/5KHz zu langsam um ausreichen Auflösung für das Flussintegral zu bekommen. Die Problematik ist dann, dass nur 1-2 Samples pro Kommutierungsschritt zur Verfügung stehen, was vorn und hinten nicht ausreichend ist. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösungen:&#039;&#039;&#039;&lt;br /&gt;
* Man verwendet einen schnelleren externen ADC&lt;br /&gt;
* Man schaltet bei hohen Drehzahlen in den Komparatormodus&lt;br /&gt;
* Anderer µC mit schnellerem ADC verweden z.B. STM32F4 - Derivat&lt;br /&gt;
&lt;br /&gt;
== Lösung mit einem schnelleren Controller ==&lt;br /&gt;
Der Controller wurde durch einen STM32F050K6 ersetzt. Dieser sampelt nun im Center-Aligned PWM Mode in der Pulsmittte alle Werte und schaufelt diese per DMA in einen Buffer. Die PWM Frequenz beträgt 20kHz.&lt;br /&gt;
Klappt alles prima.&lt;br /&gt;
&lt;br /&gt;
Ich habe den BLDC nun in ein Plexiglaswürfel &amp;quot;gesperrt&amp;quot; und weiter geforscht. Es funktioniert nun sehr gut. Es wird vor dem Anlauf die Rotorposition bestimmt und der Rotor in eine bestimmte Stellung gebracht. Das Ergebnis ist, dass der Rotor sauber anläuft.&lt;br /&gt;
&lt;br /&gt;
Hier das Programm:&lt;br /&gt;
[[Datei:Programm_STM32.zip]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Programm_STM32.zip&amp;diff=97679</id>
		<title>Datei:Programm STM32.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Programm_STM32.zip&amp;diff=97679"/>
		<updated>2017-11-08T08:06:18Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: Corrtexx lud eine neue Version von Datei:Programm STM32.zip hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=97678</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=97678"/>
		<updated>2017-11-08T08:06:10Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren Brushless-Controller für Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
* [https://www.youtube.com/watch?v=szgVUfyX8JM Texas Instruments Artikel ]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
Der AVR-ADC ist für hohe Drehzahlen zu langsam bzw. ist die PWM -und Samplefrequenz mit 10/5KHz zu langsam um ausreichen Auflösung für das Flussintegral zu bekommen. Die Problematik ist dann, dass nur 1-2 Samples pro Kommutierungsschritt zur Verfügung stehen, was vorn und hinten nicht ausreichend ist. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösungen:&#039;&#039;&#039;&lt;br /&gt;
* Man verwendet einen schnelleren externen ADC&lt;br /&gt;
* Man schaltet bei hohen Drehzahlen in den Komparatormodus&lt;br /&gt;
* Anderer µC mit schnellerem ADC verweden z.B. STM32F4 - Derivat&lt;br /&gt;
&lt;br /&gt;
== Lösung mit einem schnelleren Controller ==&lt;br /&gt;
Der Controller wurde durch einen STM32F050K6 ersetzt. Dieser sampelt nun im Center-Aligned PWM Mode in der Pulsmittte alle Werte und schaufelt diese per DMA in einen Buffer. Die PWM Frequenz beträgt 20kHz.&lt;br /&gt;
Klappt alles prima.&lt;br /&gt;
&lt;br /&gt;
Ich habe den BLDC nun in ein Plexiglaswürfel &amp;quot;gesperrt&amp;quot; und weiter geforscht. Es funktioniert nun sehr gut. Es wird vor dem Anlauf die Rotorposition bestimmt und der Rotor in eine bestimmte Stellung gebracht. Das Ergebnis ist, dass der Rotor sauber anläuft.&lt;br /&gt;
&lt;br /&gt;
Hier das Programm:&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32_f%C3%BCr_Einsteiger&amp;diff=95817</id>
		<title>STM32 für Einsteiger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32_f%C3%BCr_Einsteiger&amp;diff=95817"/>
		<updated>2017-03-23T09:44:49Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Immer wiederkehrend hier im Forum &amp;quot;Mit welchem Mikrocontroller anfangen?&amp;quot;. Es gibt eine große Auswahl und eben so viele Empfehlungen. In diesem Artikel soll zu erst geholfen werden ob ein Cortex-M3/M4 Kern überhaupt der Richtige für den Start ist.&lt;br /&gt;
Nicht für jeden ist der [[Cortex]] zu empfehlen, denn die Anforderungen und Wünsche die man realisieren möchte, sowie die eigenen Fähigkeiten sind verschieden.&lt;br /&gt;
&lt;br /&gt;
Es werden meist die Prozessoren [[AVR]], [[PIC]], [[Arduino]], [[MSP430]], [[LPC1xxx]] und [[STM32]] empfohlen. Seltener auch 8051 und M16C. Alle haben Vorzüge und ebenso auch Nachteile.&lt;br /&gt;
&lt;br /&gt;
[[Bild:STM32F407SB.jpg|thumb|right|340px|STM32F417 auf einem Selbstbau-Board]]&lt;br /&gt;
&lt;br /&gt;
= Eigene Fähigkeiten und Wünsche =&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel geht davon aus, dass bereits Elektronikkenntnisse vorhanden sind. Wenn nicht dann sollte man erst einmal den Artikel &amp;quot;[[Absolute Beginner]]&amp;quot; durcharbeiten, sowie die anderen Artikel aus der Kategorie &amp;quot;[http://www.mikrocontroller.net/articles/Kategorie:Grundlagen Grundlagen]&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;Weitere Artikel die andere Prozessoren näher darstellen da sich dieser Artikel hauptsächlich auf [[STM32]] konzentriert: [[Entscheidung Mikrocontroller]] und [[Mikrocontroller Vergleich]]. Die Seiten [[AVR]], [[MSP430]], [[LPC1xxx]] und [[PIC]] zeigen mehr Details über diese µC. Hier werden nur grob ein paar Tabelle zum Vergleichen gezeigt.&lt;br /&gt;
&lt;br /&gt;
Zu erst einmal die Randbedingungen, mit der man sich selbst zu erst einmal einschätzen sollte:&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! Fähigkeit || [[Cortex]] || [[AVR]] || colspan=&amp;quot;3&amp;quot; | [[PIC]] || [[MSP430]] || [[Arduino]]&lt;br /&gt;
|-&lt;br /&gt;
| Bitbreite, jedoch unwichtig für Einsteiger || align=&amp;quot;center&amp;quot; | 32-bit || align=&amp;quot;center&amp;quot; | 8-bit || align=&amp;quot;center&amp;quot; | 8-bit (PIC18) || align=&amp;quot;center&amp;quot; | 16-bit (PIC24) || align=&amp;quot;center&amp;quot; | 32-bit (PIC32) || align=&amp;quot;center&amp;quot; | 16-bit || align=&amp;quot;center&amp;quot; | 8-bit&lt;br /&gt;
|-&lt;br /&gt;
| Neueinsteiger, kaum Elektronikkenntnisse, noch nie programmiert &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &amp;lt;ref name=&amp;quot;AVR_TUT1&amp;quot;&amp;gt;[http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht], RoboterNetz: AVR-Einstieg leicht gemacht&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;AVR_TUT2&amp;quot;&amp;gt;[http://www.avr-asm-tutorial.net/avr_de/], Tutorial für das Erlernen der Assemblersprache von AVR-Einchip-Prozessoren&amp;lt;/ref&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | O&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
|-&lt;br /&gt;
| Wunsch ist SD-Card oder Grafik-Display&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &amp;lt;ref name=&amp;quot;PIC_SD&amp;quot;&amp;gt;[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2680&amp;amp;dDocName=en537999], Microchip Memory Disk Drive File System for PIC18 PIC24 dsPIC PIC32&amp;lt;/ref&amp;gt; || align=&amp;quot;center&amp;quot; | X&amp;lt;ref name=&amp;quot;PIC_SD&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;PIC_LCD&amp;quot;&amp;gt;[http://www.microchip.com/pagehandler/en-us/technology/graphics/], Microchip Graphics Library&amp;lt;/ref&amp;gt; || align=&amp;quot;center&amp;quot; | X&amp;lt;ref name=&amp;quot;PIC_SD&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;PIC_LCD&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O&lt;br /&gt;
|-&lt;br /&gt;
| Wunsch ist TCP/IP Netzwerk&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | X &amp;lt;ref name=&amp;quot;PIC_TCP&amp;quot;&amp;gt;[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2505&amp;amp;param=en535724], Microchip TCP/IP stack&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Wunsch ist Kamera und Video-/Bildbearbeitung&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - || align=&amp;quot;center&amp;quot; | - || align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
|-&lt;br /&gt;
| Möchte die Erkenntnisse beruflich nutzen &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
|-&lt;br /&gt;
| Strom sparende Anwendungen &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &amp;lt;br&amp;gt; 300 nA Sleep&amp;lt;ref name=&amp;quot;STM_Power&amp;quot;&amp;gt;[http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1295], [[STM32]] L1 series of ultra-low-power MCUs&amp;lt;/ref&amp;gt;&amp;lt;br&amp;gt;230 μA/MHz&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &amp;lt;br&amp;gt;100 nA Sleep&amp;lt;ref name=&amp;quot;AVR_Power1&amp;quot;&amp;gt;[http://www.atmel.com/technologies/lowpower/default.aspx], Atmel picoPower Technology&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;AVR_Power2&amp;quot;&amp;gt;[http:/www.futurlec.com/News/Atmel/PicoPower.shtml], Atmel Releases New picoPower AVR Microcontrollers&amp;lt;/ref&amp;gt;&amp;lt;br&amp;gt;340 μA/MHz&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | X&amp;lt;br&amp;gt;9 nA Sleep&amp;lt;ref name=&amp;quot;PIC_XLPvsTI&amp;quot;&amp;gt;[http://ww1.microchip.com/downloads/en/DeviceDoc/39989A.pdf], The Truth about Power Consumption in PIC® MCUs with &lt;br /&gt;
XLP Technology vs. TI’s MSP430&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;PIC_XLP&amp;quot;&amp;gt;[http://ww1.microchip.com/downloads/en/DeviceDoc/30009941F.pdf], nanoWatt XLP eXtreme Low Power PIC® Microcontrollers&amp;lt;/ref&amp;gt;&amp;lt;br&amp;gt;35 μA/MHz || align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &amp;lt;br&amp;gt; 100 nA Sleep&amp;lt;ref name=&amp;quot;TI_Power1&amp;quot;&amp;gt;[http://www.ti.com/lit/wp/slay015/slay015.pdf], Texas Instruments: Ultra-Low Power Comparison: MSP430 vs. Microchip XLP&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;TI_Power2&amp;quot;&amp;gt;[http://www.ti.com/ww/mx/multimedia/webcasts/Aspectos_Generales_MSP430.pdf], Texas Instruments: Meet MSP430&amp;lt;/ref&amp;gt;&amp;lt;br&amp;gt;100 μA/MHz &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
|-&lt;br /&gt;
| Multithreading, RTOS, Schedulern &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &amp;lt;ref name=&amp;quot;AVR_RTOS1&amp;quot;&amp;gt;[http://www.freertos.org/a00098.html], Atmel AVR freeRTOS port&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;AVR_RTOS2&amp;quot;&amp;gt;[http://www.femtoos.org/], Femto OS: RTOS for small MCU&#039;s like AVR&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &amp;lt;ref name=&amp;quot;PIC_RTOS2&amp;quot;&amp;gt;[http://www.freertos.org/a00097.html], Microchip PICmicro (PIC18) freeRTOS Port&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;PIC_RTOS3&amp;quot;&amp;gt;[http://www.pumpkininc.com/], Salvo RTOS&amp;lt;/ref&amp;gt;|| align=&amp;quot;center&amp;quot; | X&amp;lt;ref name=&amp;quot;PIC_RTOS&amp;quot;&amp;gt;[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en531543&amp;amp;redirects=rtos], 3rd Party RTOS selection guide&amp;lt;/ref&amp;gt; || align=&amp;quot;center&amp;quot; | X&amp;lt;ref name=&amp;quot;PIC_RTOS&amp;quot; /&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &amp;lt;ref name=&amp;quot;TI_RTOS&amp;quot;&amp;gt;[http://processors.wiki.ti.com/index.php/MSP430_Real_Time_Operating_Systems_Overview], TI Wiki: MSP430 Real Time Operating Systems Overview&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
|-&lt;br /&gt;
| Besonders große, speicherintensive Programme&amp;lt;br&amp;gt;z.B. Grafiken, Fonts &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | bis 2MB Flash&amp;lt;br&amp;gt;bis 256kB SRAM &amp;lt;ref name=&amp;quot;STM32Ueb&amp;quot;&amp;gt;[http://www.st.com/web/en/catalog/mmc/FM141/SC1169], Übersicht aller verfügbaren [[STM32]] µC von ST&amp;lt;/ref&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | bis 256kB Flash&amp;lt;br&amp;gt;bis 16kB SRAM &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | bis 128kB Flash&amp;lt;br&amp;gt;bis 4kB SRAM || bis 2MB Flash&amp;lt;br&amp;gt;bis 98kB SRAM || bis 2MB Flash&amp;lt;br&amp;gt;bis 512kB SRAM &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | bis 512KB Flash&amp;lt;br&amp;gt;bis 66kB SRAM &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | bis 256kB Flash&amp;lt;br&amp;gt;bis 16kB SRAM&lt;br /&gt;
|-&lt;br /&gt;
| Sehr viel PWM mit komplexem Timing&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | AT90Spwm &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - || align=&amp;quot;center&amp;quot; | X || align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | -&lt;br /&gt;
|-&lt;br /&gt;
| Deutschsprachige Community &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | O &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X &amp;lt;ref name=&amp;quot;PIC-Projekte&amp;quot;&amp;gt;[http://pic-projekte.de/], pic-projekte.de&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;SPRUT&amp;quot;&amp;gt;[http://www.sprut.de/], sprut.de&amp;lt;/ref&amp;gt; || align=&amp;quot;center&amp;quot; | - || align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | X&lt;br /&gt;
|-&lt;br /&gt;
| Anzahl möglicher HW-Breakpoints &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4 bis 6 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1 bis 5 &amp;lt;ref name=&amp;quot;PIC_HWBP&amp;quot;&amp;gt;[http://www.microchip.com/stellent/groups/SiteComm_sg/documents/DeviceDoc/en556761.pdf], PIC Hardware Breakpoints (Seite 6)&amp;lt;/ref&amp;gt; || align=&amp;quot;center&amp;quot; | 1 bis 10 &amp;lt;ref name=&amp;quot;PIC_HWBP&amp;quot;/&amp;gt; || align=&amp;quot;center&amp;quot; | 6&amp;lt;ref name=&amp;quot;PIC_HWBP&amp;quot;/&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
|}&lt;br /&gt;
* X = ja&lt;br /&gt;
* O = Teilweise, Einschränkungen&lt;br /&gt;
* - = nicht empfohlen&lt;br /&gt;
Nur um nicht zu verwirren, auch wenn Teile &amp;quot;nicht empfohlen&amp;quot; sind, heißt das nicht dass es mit dem Prozessor nicht geht, vielmehr dass es mehr Aufwand ist das zu realisieren oder mehr Einschränkungen hat.&lt;br /&gt;
Viele Eigenschaften weisen nur bestimmte Modelle einer Mikrocontrollerfamilie auf. Der Wechsel innerhalb einer Familie gestaltet sich jedoch oft einfach (z.B. innerhalb [[STM32]] oder innerhalb PIC24).&lt;br /&gt;
&lt;br /&gt;
Die Spalte Cortex zeigt die Prozessorfamilie von STM32F0xx bis STM32F4xx mit einem Cortex-M0 oder M3/M4 Kern. Die technischen Daten sind ähnlich anderer Hersteller die auch einen Cortex-Mx Kern verbauen wie z.B. NXP ([[LPC1xxx]]), Freescale, Atmel, TI, Toshiba, usw. Jedoch bietet ST mit dem [[STM32]] eine hohe Flexibilität an Gehäuse-Variationen (vergleichbar mit NXP [[LPC1xxx]]) und ist privat recht leicht beschaffbar. Übersicht aller verfügbaren [[STM32]] µC von ST&amp;lt;ref name=&amp;quot;STM32Ueb&amp;quot;&amp;gt;[http://www.st.com/web/en/catalog/mmc/FM141/SC1169], Übersicht aller verfügbaren [[STM32]] µC von ST&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Der STM32 ist in der Tat nicht der beste in der Kategorie &amp;quot;Stromsparend&amp;quot;, jedoch um eine Alternative mit Cortex-Mx Kern auf zu zeigen:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;quot;EFM32&amp;quot; von Silabs&amp;lt;ref name=&amp;quot;EFM32&amp;quot;&amp;gt;[http://www.silabs.com/products/mcu/lowpower/Pages/efm32-energy-modes.aspx], EFM32, der Stromsparende mit Cortex-Mx Kern&amp;lt;/ref&amp;gt; benötigt nur 0,9 µA im Sleep Mode.&lt;br /&gt;
&lt;br /&gt;
Die Spalte PIC zeigt die Eigenschaften der 8-Bit PIC18 (vergleichbar mit [[AVR]]), 16-Bit [[PIC24]]/[[dsPIC]] (vergleichbar mit [[MSP430]]) und 32-Bit [[PIC32]] (vergleichbar mit [[STM32]]). Ein Wechsel des Mikrocontrollers innerhalb der Familien ist Codetechnisch problemlos möglich. &amp;lt;ref name=&amp;quot;PIC_codeswitch&amp;quot;&amp;gt;[http://www.elektor.nl/Uploads/Files/PIC24FIntro_5f082806.pdf], Microchip: Introduction to the 16-bit PIC24F Microcontroller Family&amp;lt;/ref&amp;gt; Hardwaretechnisch sind verschiedene Modelle gleicher Familie zudem auch meist Pin-Kompatibel &amp;lt;ref name=&amp;quot;PIC_PinCompatibility&amp;quot;&amp;gt;[http://ww1.microchip.com/downloads/en/DeviceDoc/00148m.pdf], Microchip: 2007 Product Selector Guide (Seite 114 ff.)&amp;lt;/ref&amp;gt; sodass ohne Design-Änderung zwischen verschiedenen Modellen gewechselt werden kann.&lt;br /&gt;
Ein Wechsel zwischen den Familien ist Architekturbedingt aufwendiger, vor allem von 8-Bit auf 16/32-Bit. &amp;lt;ref name=&amp;quot;PIC_8to16Migration&amp;quot;&amp;gt;[http://ww1.microchip.com/downloads/en/DeviceDoc/39764a.pdf], Microchip: PIC18F to PIC24F Migration: An Overview&amp;lt;/ref&amp;gt; Aufgrund gleichbleibender IDE (Mplab) sowie gleichbleibenden Libraries bei Verwendung einer Hochsprache (C) jedoch vor allem zwischen 16-Bit und 32-Bit ohne weitere Probleme möglich &amp;lt;ref name=&amp;quot;PIC_16to32Migration&amp;quot;&amp;gt;[http://www.embedded.com/design/mcus-processors-and-socs/4007683/Practical-migration-from-8-16-to-32-bit-PIC], Artikel: Practical migration from 8-/16- to 32-bit PIC&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;Ein PIC10/12/16 ist für den Einstieg nicht empfohlen, da diese Architekturbedingt viele Einschränkungen haben, die eher hinderlich für das Lernen sind.&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;[[Arduino]]&amp;quot; ist kein eigenständiger Prozessor, sondern ein fertiges Board mit einer &amp;quot;[[Arduino]]&amp;quot; Programmierumgebung (und einem AVR Prozessor), extra geschaffen für Einsteiger. Allerdings ist da der Lerneffekt viel geringer da man den Prozessor mit der [[Arduino]]-Software programmiert und nicht direkt die Register. Anderseits ist der Arduino besser für jemanden geeignet, der eigentlich nicht lernen möchte, sondern nur mal schnell etwas steuern/basteln will und so ohne großartige µC Kenntnisse zum Ziel kommt. Für diese Zielgruppe ist der Arduino perfekt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Unwichtige Randbedingungen =&lt;br /&gt;
&lt;br /&gt;
Oftmals werden fälschlicherweise Argumente für oder gegen eine µC-Familie ausgesprochen, die in der Praxis &#039;&#039;&#039;zum Einstieg&#039;&#039;&#039; (bei konkreten Anwendungen kann das anders aussehen) eher unwichtig sind.&lt;br /&gt;
&lt;br /&gt;
* Spannungsversorgung 3,3V / 5V (Wobei z.B Atmel XMega keine 5V Tolerante Eingänge besitzt)&lt;br /&gt;
* 8 (z.B. [[AVR]]), 16 (z.B. [[MSP430]]) oder 32 (z.B. [[STM32]]) Bit&lt;br /&gt;
* Prozessorkern Cortex-M0/M3/M4, MIPS, ARM7/9/..., AVR-RISC, PIC-RISC, 8051, ...&lt;br /&gt;
* Interrupt System mit mehr oder weniger Features&lt;br /&gt;
* Programmiersprache (Assembler, Basic, C, C++, Pascal)&lt;br /&gt;
* Programmierumgebung - ist ohnehin Geschmackssache&lt;br /&gt;
* Assembler verstehen (Sollte nur theoretisch verstanden werden, ein Programm sollte in einer Hochsprache geschrieben sein)&lt;br /&gt;
* DIL Gehäuse - steckbretttauglich ([[STM32]]-Prozessoren gibt es auch fertig gelötet auf einem steckbretttauglichen Board)&lt;br /&gt;
* Programmieradapter - solange er auch debuggen kann&lt;br /&gt;
* zu 90% reicht doch ein kleiner Prozessor ([[AVR]]/PIC) - und für die restlichen kann man immer noch einen großen nehmen. Warum also nicht gleich einen großen nehmen?&lt;br /&gt;
&lt;br /&gt;
= Kosten =&lt;br /&gt;
&lt;br /&gt;
Grobe Abschätzung was das alles denn kosten wird. Hier sind nur einige Beispiele gezeigt (Einzelpreise bei Bezugsquellen in Deutschland).&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! Board || [[STM32]] || [[AVR]] || PIC18/24/32 || [[MSP430]] || [[Arduino]]&lt;br /&gt;
|-&lt;br /&gt;
| Demo-Board &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;ref name=&amp;quot;STM32F4DISCOVERY&amp;quot;&amp;gt;[http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/PF252419], ST STM32F4DISCOVERY Demoboard&amp;lt;/ref&amp;gt; 9..20€ (incl. Programmieradapter und Debugger) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5..500€, z.B. [[Arduino]] || align=&amp;quot;center&amp;quot;| &amp;lt;ref name=&amp;quot;PICDEMOBOARD&amp;quot;&amp;gt;[http://www.microchipdirect.com/ProductDetails.aspx?Catalog=BuyMicrochip&amp;amp;Category=Starter%20Kits&amp;amp;mid=1&amp;amp;lmid=610], Microchip Demoboard&amp;lt;/ref&amp;gt; durchschnittlich 18€ .. 50€ (Für 16 und 32bit auch mit integriertem Debugger + Programmer)  &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;ref name=&amp;quot;MSP430DEMOBOARD&amp;quot;&amp;gt;[http://www.ti.com/tool/msp-exp430fr5739], MSP430 Demoboard&amp;lt;/ref&amp;gt; ~35€ &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20€&lt;br /&gt;
|-&lt;br /&gt;
| Steckbrettaugliches Board &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | s.o. oder &amp;lt;ref name=&amp;quot;STM32F405Board&amp;quot;&amp;gt;[http://re.reworld.eu/de/produkte/s64dil-405/index.htm], S64DIL-405 mit STM32F405&amp;lt;/ref&amp;gt;S64DIL-405 30€, STM32F103C8 4€ (China)&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | DIP IC &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | DIP IC oder Microstick&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | DIP IC&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ab ca. 1.50€ (Pro Mini, China)&lt;br /&gt;
|-&lt;br /&gt;
| Einzelchip (Einzelstückpreise)&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| 2..15€ nur SMD (TSSOP..LQFP..BGA) &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|0,6–5€ SMD + DIP &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|0,5-15€ SMD + DIP &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|?? &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|siehe AVR&lt;br /&gt;
|-&lt;br /&gt;
| Programmieradapter &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0€ da Bootloader (ROM) UART / USB usw. unterstützt&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | ab 4€ &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| Programmieradapter mit Debugger &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | s.o. oder z.B &amp;lt;ref name=&amp;quot;JLINKEDU&amp;quot;&amp;gt;[http://www.segger.com/j-link-edu.html], Segger J-LINK EDU&amp;lt;/ref&amp;gt; Segger J-LINK EDU 50€ (sehr schnell und unterstützt viele Prozessoren) &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;ref name=&amp;quot;AVRDragon&amp;quot;&amp;gt;[http://www.atmel.com/tools/AVRDRAGON.aspx], Atmel AVR Dragon&amp;lt;/ref&amp;gt; AVR Dragon 40€&amp;lt;br&amp;gt;&amp;lt;ref name=&amp;quot;JTAGICE3&amp;quot;&amp;gt;[http://www.atmel.com/tools/JTAGICE3.aspx], AT JTAG ICE3&amp;lt;/ref&amp;gt; AT JTAG ICE3  99€ &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;ref name=&amp;quot;PICKIT3&amp;quot;&amp;gt;[http://www.microchipdirect.com/ProductSearch.aspx?keywords=PG164130], Microchip PICkit 3&amp;lt;/ref&amp;gt; PICkit 3 30€&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | z.B. Dragon 50€ &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20€ (Man muss DebugWire aktivieren)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das Demo-Board sollte ein Board sein, nicht zu teuer, um die ersten Erfahrungen zu sammeln. Wenn einem der Prozessor gefällt, so kann man später immer noch mit einem zweiten Demo-Board, z.B. mit Display aufrüsten.&lt;br /&gt;
&lt;br /&gt;
Wenn man gerne mit einem Steckbrett sich die Schaltung zusammen stecken möchte, so kann man entweder die benötigten Drähte am Demo-Board anlöten oder bei z.B. [[AVR]]/[[PIC]] Prozessoren gibt es Ausführungen im DIL Gehäuse, die direkt steckbar sind.&lt;br /&gt;
&lt;br /&gt;
Ein Programmieradapter sollte unbedingt auch einen Debugger beinhalten. Denn für den Start ist es ungemein hilfreich zu sehen was im Prozessor gerade geschieht. Die JTAG-Adapter für einen [[STM32]] Prozessor sind alle Debugger-Tauglich. Für die [[AVR]] Controller gibt es auch oft reine Programmer (AVR ISP oder Selbstbau-Lösungen über die serielle oder parallele Schnittstelle) welche den Mikrocontroller nur beschreiben können. Für die [[PIC]] Controller werden solche reinen Programmer vereinzelt auch noch angeboten. Sinvoller sind hingegen Debugger, die die Ausführung eines Mikrocontrollers anhalten können um die aktuelle Position im Programmcode, Variableninhalt, Register, ... auszulesen bzw. zur Laufzeit zu ändern. &lt;br /&gt;
&lt;br /&gt;
Der für den [[STM32]] empfohlene Segger J-LINK EDU ist zwar nicht der günstigste (z.B. auf einem STM32F4DISCOVERY Board ist ein ST-LINK/V2 mit drauf, den man für andere [[STM32]] nutzen kann) aber eines der besten, mit sehr guten Software-Tools und nutzbar für alle Prozessoren mit ARM-Kern (ARM7/9/11/... Cortex-Mx der Hersteller Atmel, Energy Micro, Freescale, Holtek, TI, NXP, Nuvoton, ST, Toshiba, ... unter Windows, Linux und MAC). Niemals am Werkzeug sparen und man hat viel mehr Freude bei der Arbeit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Programmierumgebungen=&lt;br /&gt;
&lt;br /&gt;
Bei den Programmierumgebungen gibt es zu allen Prozessorfamilien kostenlose und Leistungsfähige Software&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|- bgcolor=&amp;quot;#d0d0ff&amp;quot;&lt;br /&gt;
! Betriebssystem || [[STM32]] || [[AVR]] || [[PIC]] || [[MSP430]] || [[Arduino]]&lt;br /&gt;
|-&lt;br /&gt;
| Windows &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://www.coocox.org/CooCox_CoIDE.htm CooCox, EmBitz, Eclipse] &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|Atmel-Studio &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://www.microchip.com/pagehandler/en-us/family/mplabx/ MPLAB X] (IDE inklusive compiler) &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|TI Code Composer Studio&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Arduino]] IDE&lt;br /&gt;
|-&lt;br /&gt;
| Linux&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://eclipse.org/downloads/ Eclipse IDE for C/C++ Developers] &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|z.B. [http://eclipse.org/downloads/ Eclipse IDE for C/C++ Developers] &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://www.microchip.com/pagehandler/en-us/family/mplabx/ MPLAB X] (IDE inklusive compiler) &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|TI Code Composer Studio&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Arduino]] IDE&lt;br /&gt;
|-&lt;br /&gt;
| MacOS&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://eclipse.org/downloads/ Eclipse IDE for C/C++ Developers] &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|??&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[http://www.microchip.com/pagehandler/en-us/family/mplabx/ MPLAB X] (IDE inklusive compiler) &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|TI Code Composer Studio &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|[[Arduino]] IDE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
natürlich gibt es noch viele weitere (für [[STM32]] siehe [[STM32#Programmierung]]), es sollte jedoch nur die jeweils einfachste kostenlose (und ohne Codebegrenzung) für den ersten Einstieg gezeigt werden.&lt;br /&gt;
&lt;br /&gt;
* [http://www.coocox.org/CooCox_CoIDE.htm CooCox] Anleitung wie man innerhalb einer Stunde die LED eines Nagel neuen STM32F4DISCOVERY Boards zum blinken bekommt, Artikel: [[STM32 CooCox Installation]]. Diese Anleitung ist eine Schritt-Für-Schritt Anleitung um den aller ersten Start zu vereinfachen.&lt;br /&gt;
* Mit [http://www.coocox.org/CooCox_CoIDE.htm CooCox] können sehr viele Prozessoren mit Cortex-M0, M3 und M4 Kern programmiert werden. Unter anderem der Firmen Atmel, Energy Micro, Freescale, Holtek, TI, NXP, Nuvoton, ST und Toshiba. Somit hat man eine Entwicklungsumgebung und ist damit nicht an einen Hersteller der µC gebunden.&lt;br /&gt;
* Mit [http://www.microchip.com/pagehandler/en-us/family/mplabx/ MPLAB X] können alle Prozessoren von Microchip (z.B. PIC18, PIC24, PIC32, dsPIC) programmiert werden.&lt;br /&gt;
&lt;br /&gt;
= Dokumentation=&lt;br /&gt;
&lt;br /&gt;
Bevor man sich für einen Prozessor entscheidet, sollte man unbedingt deren Dokumentation mal zumindest überfliegen und auch deren Errata lesen. Nicht dass man eine Anwendung erstellen möchte und stellt hinterher fest, dass genau dieser Teil so buggy ist, dass er nicht genutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Beim [[STM32]] hat die Dokumentation doch recht viele Seiten, viel mehr als bei einem [[AVR]] oder PIC, dabei ist vieles eher knapp beschrieben. Der Aufbau der [[STM32]] Dokumentation ist [http://www.mikrocontroller.net/articles/STM32#Struktur_der_Dokumentation: hier] beschrieben.&lt;br /&gt;
&amp;lt;br&amp;gt;Bei den PICs ist die Dokumentation wiederum anders strukturiert, [http://www.mikrocontroller.net/articles/PIC#Dokumenatation siehe im PIC Artikel].&lt;br /&gt;
&lt;br /&gt;
Für die [[STM32]], [[AVR]] und [[PIC]] Mikrocontroller gibt es zudem viele, auch deutschsprachige Einsteigerhilfestellungen und Tutorials.&lt;br /&gt;
&lt;br /&gt;
Parallel zur Dokumentation sollte man sich auch die Demo-Beispiele der Hersteller anschauen, dann wird vieles gleich verständlicher.&lt;br /&gt;
&lt;br /&gt;
Eine Übersicht über die Funktionen gibt es im Artikel: [[STM32]]&lt;br /&gt;
&lt;br /&gt;
= Die Arbeit mit dem [[STM32]]=&lt;br /&gt;
&lt;br /&gt;
Zu erst einmal SOOO groß sind die Unterschiede zwischen den einzelnen Prozessoren nicht. Alle haben Ein-/Ausgänge und um mittels einem Port-Pin eine LED ansteuern zu können, muss bei jedem Prozessor der Pin erst einmal parametriert werden, egal ob das jetzt ein [[STM32]] oder ein [[AVR]] oder ein [[MSP430]] ist. Nur hat man bei einem [[STM32]] doch einige Funktionen mehr, z.B. zuschaltbarer Pull-Up oder Pull-Down Widerstand und spezielle Setz-Rücksetzregister, die andere Prozessoren nicht haben, jedoch das Programmieren vereinfachen.&lt;br /&gt;
Der Haupt-Unterschied zu den anderen Prozessoren ist, dass der [[STM32]] so viele Peripherie-Module beherbergt, dass man die einzeln immer mit einem Clock aktivieren muss, denn damit lässt sich viel Strom sparen.&lt;br /&gt;
&lt;br /&gt;
Und mal ganz ehrlich die Diskussion, welcher µc einfacher zu konfigurieren ist, ist doch absoluter Unsinn. Der Weg ist immer der Gleiche:&lt;br /&gt;
*1. Blick ins Datenblatt, welche Register für diese Funktion benötigt werden.&lt;br /&gt;
*2. Werte ermitteln, die in die Register eingetragen werden.&lt;br /&gt;
*3. Werte ins Register schreiben. Da machte es GAR KEINEN UNTERSCHIED, ob es ein [[AVR]], 8051/2, [[ARM]],...... ist.&lt;br /&gt;
&lt;br /&gt;
Stimmt schon, es gibt Unterschiede. Die Register haben anderen Namen, andere Adressen, andere Bitbedeutungen,...&lt;br /&gt;
Aber es steht doch alles im Datenblatt. Und ob ich jetzt einen [[AVR]] oder einen [[ARM]] das erste Mal vor mir liegen hab. Ich brauch in allen Fällen die oben beschriebenen Schritte.&lt;br /&gt;
&lt;br /&gt;
Das Interruptsystem ist bei einem [[STM32]] zusätzlich priorisiert. Damit kann man festlegen, welcher Interrupt vorrangig bearbeitet wird. Die Prioritätenvergabe ist auch kein Hexenwerk.&lt;br /&gt;
&lt;br /&gt;
Zu allen Prozessoren liefern die jeweiligen Hersteller umfangreiche Demo-Codes und Libraries mit. Meist sind alle in C geschrieben, daher sollte auch die Programmiersprache C verwendet werden. Vor allem auch wenn man berufliche Absichten verfolgt.&lt;br /&gt;
&lt;br /&gt;
Und wenn man einen [[STM32]] kann, dann ist ein Umstieg auf einen [[LPC1xxx]] (NXP) oder andere Hersteller überhaupt kein Problem (*), denn die bieten ebenfalls Prozessoren mit Cortex-M3 Kern und man kann diese mit der gleichen Programmierumgebung programmieren. Somit ist man nicht zwingend herstellerabhängig. (* jeder Hersteller verbaut seine eigene Peripherie, die andere Funktionalitäten haben.)&lt;br /&gt;
&lt;br /&gt;
Mit einem [[STM32]] kann man als Hobby-Baster und professionell nahezu alle Anwendungen realisieren. Der hat genügend RAM und FLASH Speicher und auch genügend Geschwindigkeit. Viele Gehäuse-Varianten, um kleine bis hin zu größere Geräte zu erstellen. Viele Schnittstellen sind im Artikel [[STM32]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Für den Einstig gibt es diverse, auch deutschsprachige, Tutorials im Netz. Eine Übersicht ist [http://www.mikrocontroller.net/articles/STM32#Weblinks.2C_Foren.2C_Communities.2C_Tutorials hier auf der STM32 Seite]. (Beispiel: [http://diller-technologies.de/stm32_wide.html STM32 Tutorial in Deutsch von Diller Technologies])&lt;br /&gt;
&amp;lt;br&amp;gt;Wobei dazugesagt werden muss, dass diese meist auf die Standard ST-Libs aufbauen. Diese Libs vereinfachen zum einen das Ansteuern/die Benutzung der Peripheriefunktion zum anderen muss man diese erst mal kennenlernen. Vereinfacht wird das da ALLE [http://www.st.com/stonline/stappl/productcatalog/app?page=partNumberSearchPage&amp;amp;levelid=SS1577&amp;amp;parentid=1743&amp;amp;resourcetype=SW ST-Demo-Codebeispiele] ebenfalls auf diesen Lib&#039;s basieren und somit wird der Wechsel innerhalb des [[STM32]] deutlich vereinfacht.&lt;br /&gt;
&amp;lt;br&amp;gt;STM32F4xx Library von ST: [http://www.st.com/web/en/catalog/tools/PF257901# &amp;quot;STSW-STM32065 STM32F4 DSP and standard peripherals library&amp;quot;] incl. Dokumentation und Demo-Projekte zu allen CPU-Funktionen.&lt;br /&gt;
&lt;br /&gt;
Der einzige Nachteil beim [[STM32]]: Man muss etwas mehr lesen, da eine Peripherie doch viel mehr Funktionalität hat (sofern man das Modul überhaupt benötigt). Ansonsten kenne ich nicht wirklich einen Grund, warum man als Neueinsteiger keinen [[STM32]] nehmen sollte.&lt;br /&gt;
&lt;br /&gt;
= Programmiersprachen =&lt;br /&gt;
* Wie bei vielen anderen Controllern wird beim [[STM32]] auch hauptsächlich C und C++ verwendet. Kennen sollte man die Programmiersprache C schon, wenn man davon noch keine Ahnung hat dann sollte man erst mal mittels einem Tutorial auf einem PC ein Konsoleprogramm schreiben, sodass man es einigermaßen kennen lernt. Hier im Forum gibt es ebenfalls Artikel dazu. Zielt man auf die (spätere) Anwendung in der Industrie, sollte aufgrund der Verbreitung auf jeden Fall C (oder C++) gewählt werden; außerdem sind die meisten verfügbaren Libraries in C geschrieben.&lt;br /&gt;
* Assembler sollte man nur grob verstehen, Details wie ein Befehl arbeitet ist unwichtig. Selbst wenn man die Zyklen für einen Funktionsaufruf wissen will, so bietet der [[STM32]] (Cortex-M3) einen Cycle-Counter den man auslesen kann; durch die komplexere Pipeline und Cache-Effekte sind die Laufzeiten allerdings nicht genau vorhersehbar. Wird zyklengenause Timing benötigt, sollten Timer verwendet werden - davon hat der [[STM32]] genug.&lt;br /&gt;
&lt;br /&gt;
Der 32bit-Adressraum, der RAM, Flash, I/O-Register vereinheitlicht ansprechen kann (im Gegensatz zu z.B. [[AVR]]) ist ideal für eine Verwendung durch Hochsprachen; bei Pointern muss keine zusätzliche Information verwaltet werden, in welche Art Speicher sie zeigen. Die Adresse gibt dies eindeutig an (es gibt nur &#039;&#039;&#039;eine&#039;&#039;&#039; Adresse 42, und nicht 2 wie z.B. beim [[AVR]] (Flash, RAM &amp;amp; I/O)) und die Hardware spricht automatisch den richtigen Speicher an. Die Möglichkeiten zur Offset-Adressierung, der Barrel-Shifter, Divsions-Einheit, die FPU (bei STM32F4), Interrupt-Modell etc. begünstigen ebenfalls die Erzeugung effizienteren Codes. Außerdem haben die [[STM32]] einfach mehr &amp;quot;rohe Leistung&amp;quot;, d.h. mehr Flash/RAM-Speicher und höhere Taktfrequenzen.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Folgerung&#039;&#039;&#039;: Die Programmierung in Hochsprachen ist &#039;&#039;&#039;bequemer als bei 8-Bittern&#039;&#039;&#039;, denn man muss sich einfach weniger Gedanken machen, ob der Compiler ein Programm nun effizent umsetzen kann (kann man natürlich trotzdem machen, um noch mehr Leistung &amp;quot;herauszuquetschen&amp;quot;, wenn man will).&lt;br /&gt;
&lt;br /&gt;
= Weitere Randbedingungen für die Entscheidung=&lt;br /&gt;
&lt;br /&gt;
Der wichtige Punkt, der oftmals auch vergessen wird: die Beschaffbarkeit. Wenn jemand einen Renesas M16C oder Fujitsu empfiehlt, dann sucht man erst mal und findet nur wenige vereinzelte die man privat kaufen kann.&lt;br /&gt;
&lt;br /&gt;
Oder auch die Unterstützung im Internet - ist bei einigen Exoten spärlich. Dieses Forum bietet die beste Hilfe für [[AVR]], PIC, [[MSP430]], [[LPC1xxx]] und [[STM32]].&lt;br /&gt;
&lt;br /&gt;
Andere Prozessoren sind schon sehr alt, bzw. nicht mehr modern da deren Peripherie zum Teil doch recht eingeschränkte Funktionalität bietet. z.B. viele 8051 Typen oder PIC16 (oder auch dsPIC30). Die mögen für Mini-Anwenungen gut sein, aber wer will den schon gerne sich extra für eine Kleinanwendung mit einem kleinen µC auseinandersetzen, wenn er schon einen [[STM32]] kennt, mit dem er alles machen kann (und sich bereits gute Funktionen geschrieben hat)?&lt;br /&gt;
&lt;br /&gt;
Daher mein Resümee: wer nicht gerade auf den Kopf gefallen ist, der kann getrost mit einem [[STM32]] starten. Ein [http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/PF252419?s_searchtype=keyword STM32F4DISCOVERY] Board kostet nur ca. 20 EUR - und mehr muss für den ersten Start nicht investiert werden - wenn es doch zu komplex sein sollte gibt es hier im Forum auch viel Hilfe. Jedenfalls sind diese 20 EUR wirklich keine große Investition.&lt;br /&gt;
&amp;lt;br&amp;gt;Wer berufliche Absichten verflogt, sollte zu einem späteren Zeitpunk sich unbedingt auch mit einem zweiten, anderen Prozessor beschäftigen um so die nötigen Erfahrungen zu gewinnen.&lt;br /&gt;
&lt;br /&gt;
Ein paar Forenbeiträge:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/317792#3481048 &amp;quot;Klein anfangen!&amp;quot; heisst die Devise]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/312330#3483218 Einen 8-Bitter nehme ich nur noch aus &amp;quot;Nostalgiegründen&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
= Übersicht CPU Funktionalitäten=&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt ist kurz gezeigt welche Möglichkeiten die CPUs bei den oben empfohlenen Einsteigerboards haben&lt;br /&gt;
&lt;br /&gt;
=== STM32F407 - vom STM32F4DISCOVERY Board ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Datei:STM32F407.png|mini|x400px]]&lt;br /&gt;
| [[Datei:stm32f4_discovery2.png|mini|x400px]]&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140?s_searchtype=partnumber Blockdiagramm STM32F407]&lt;br /&gt;
| [http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/PF252419 STM32F4DISCOVERY Demoboard]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Es sind sehr viele Peripheriemodule im µC implementiert. Jedes einzelne Peripherie-Modul (z.B. Ethernet, USB, CAN, Timer, AD-Wandler, usw.) kann aktiviert werden, indem der Clock freigeschaltet wird. So lange der Clock nicht aktiviert wurde verhält sich das Modul so als ob es nicht vorhanden wäre und beeinträchtigt in keinster Weise die Bearbeitung vom Prozessor. Somit lässt sich der Stromverbrauch senken.&lt;br /&gt;
&lt;br /&gt;
Eine ganze Auflistung der Einzelmodule steht im Artikel: [[STM32]] und [http://www.st.com/web/en/catalog/mmc/FM141/SC1169 auf der Homepage von ST]&lt;br /&gt;
&lt;br /&gt;
Zu Anfang mag vielleicht die interne Busstruktur verwirren, jedoch braucht man diese nicht beachten. Wenn nun die CPU auf UART4 zugreifen möchte, so gehen die Daten durch die Busse &amp;quot;AHB1&amp;quot; &amp;gt; &amp;quot;ABH/APB1-Bridge&amp;quot; &amp;gt; &amp;quot;APB1&amp;quot;. Dies erledigt der µC ganz von alleine. Diese Unterteilung ist technisch nötig, da die Peripheriebusse nicht mit dem gleichen Prozessortakt betrieben werden (wie z.B. bei [[MSP430], siehe Schaubild unten), die &amp;quot;Bridge&amp;quot; managt ganz alleine das Handling und generiert automatisch Wait-Befehle für die CPU.&lt;br /&gt;
&amp;lt;br&amp;gt;Die &amp;quot;AHB-Bus-Matrix&amp;quot; ist ebenfalls für den Anwender meist uninteressant. ST hat damit ein System geschaffen, damit die CPU, DMAs und Displaycontroller gleichzeitig auf die verschiedenen RAM-Bereiche zugreifen können um mehr Daten parallel zu verarbeiten. Somit braucht man diese Matrix erst mal nicht beachten.&lt;br /&gt;
&lt;br /&gt;
Ebenso braucht man zu Anfang sich auch keine Gedanken um den Prozessortakt machen, wenn man nichts initialisiert so läuft der STM32F4xx mit dem internen RC-Oszillator von 16MHz und die Peripheriebusse laufen ebenfalls mit der gleichen Geschwindigkeit. Erst wenn man später umfangreichere Applikationen schreibt, bei der die 16MHz nicht mehr reichen, so kann man die PLL aktivieren und die Taktrate flexibel bis auf 168MHz hochsetzen. (Siehe Demo-Projekt von [[STM32 CooCox Installation]].)&lt;br /&gt;
&lt;br /&gt;
=== [[AVR]] ([[Arduino]])===&lt;br /&gt;
&lt;br /&gt;
Details können im Artikel [[AVR]] gelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== PIC18, PIC24, PIC32===&lt;br /&gt;
&lt;br /&gt;
Details können im Artikel [[PIC]] gelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== MSP430 - vom MSP-EXP430FR5739 Experimentier-Board===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Datei:MSP430FR5739.gif|mini|450px]]&lt;br /&gt;
| [[Datei:MSP-EXP430FR5739.jpg|mini|x350px]]&lt;br /&gt;
|-&lt;br /&gt;
| Blockdiagramm MSP430FR5739&lt;br /&gt;
| MSP-EXP430FR5739 Demoboard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Details können im Artikel [[MSP430]] gelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== LPC1x d.h. Cortex -M0 &amp;amp; -M3 Familie von NXP ===&lt;br /&gt;
Details können aus dem Leitartikel [[LPC1xxx]] und den darin verlinkten Artikeln entnommen werden.&lt;br /&gt;
&lt;br /&gt;
= Tipps und Tricks bei der Programmierung=&lt;br /&gt;
&lt;br /&gt;
===Interruptcontroller vom Cortex-M3/M4===&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;Nested Vectored Interrupt Controller&amp;quot; (NVIC) ist eine Funktion der ARMv7M Architektur und ist über die CMSIS verwendbar.&lt;br /&gt;
&lt;br /&gt;
Beim STM32 hat jeder Interrupt eine Priorität von 4 Bit (bei ARMv7M je nach Implementation bis 8bit möglich). Diese 4 Bit können in eine &amp;quot;pre-emption priority&amp;quot; und &amp;quot;subpriority&amp;quot; unterteilt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel 2 Bit zu 2 Bit Unterteilung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2 Bits für pre-emption priority&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Somit kann &amp;quot;pre-emption priority&amp;quot; den Wert 0..3 und &amp;quot;subpriority&amp;quot; auch 0..3 erhalten. Um so kleiner die Zahl ist um so höherwertig ist der Interrupt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;br&amp;gt;ISR1 Pre 2 / Sub 1&lt;br /&gt;
&amp;lt;br&amp;gt;ISR2 Pre 1 / Sub 1&lt;br /&gt;
&amp;lt;br&amp;gt;ISR3 Pre 1 / Sub 2&lt;br /&gt;
&lt;br /&gt;
Wenn jetzt ISR1 kommt, dann wird der aufgerufen. Kommt während dem ein ISR2 dann darf der den ISR1 unterbrechen, da er eine höhere &amp;quot;pre-emption priority&amp;quot; Wertigkeit hat.&lt;br /&gt;
&lt;br /&gt;
Wenn ISR2 bereits aktiv ist, so darf ISR3 diesen nicht unterbrechen, ISR1 ebenfalls nicht.&lt;br /&gt;
&lt;br /&gt;
Wenn ISR2 und ISR3 gleichzeitig kommen, so wird zu erst ISR2 bearbeitet, anschließend ISR3 da beide die gleiche &amp;quot;pre-emption priority&amp;quot; haben fällt die Entscheidung anhand der &amp;quot;subpriority&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Beispiel Interrupt Konfiguration für USART1 mittels CMSIS-Funktionen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
NVIC_InitTypeDef NVIC_InitSt;&lt;br /&gt;
NVIC_InitSt.NVIC_IRQChannel = USART1_IRQn;&lt;br /&gt;
NVIC_InitSt.NVIC_IRQChannelPreemptionPriority = 3; // &amp;lt;&amp;lt; Tiefe Prio&lt;br /&gt;
NVIC_InitSt.NVIC_IRQChannelSubPriority = 1;&lt;br /&gt;
NVIC_InitSt.NVIC_IRQChannelCmd = ENABLE;&lt;br /&gt;
NVIC_Init(&amp;amp;NVIC_InitSt);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Taktzeitberechnung und Überwachung===&lt;br /&gt;
&lt;br /&gt;
Bei zeitkritischen Applikationen stellt sich immer wieder die Frage wie viele Prozessortakte nun die Funktion verbraucht. Ist der Interrupt auch wirklich nicht zu lange und wie viel Reserve gibt es noch?&lt;br /&gt;
&amp;lt;br&amp;gt;Der ARMv7M -Kern hat dafür extra einen Takt-Zähler in der DWT-Einheit implementiert, den man mittels der CMSIS nutzen kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt; // Für die Standard-Typen uint32_t etc.&lt;br /&gt;
#include &amp;lt;stm32f4xx.h&amp;gt; // Hier die Header-Datei der CMSIS für die jeweilige Familie verwenden.&lt;br /&gt;
&lt;br /&gt;
// DWT-Einheit aktivieren&lt;br /&gt;
inline void DWT_Enable() {&lt;br /&gt;
  CoreDebug-&amp;gt;DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;&lt;br /&gt;
}&lt;br /&gt;
// Takt-Zähler - Messen der Anzahl der Befehle des Prozessors:&lt;br /&gt;
inline void DWT_CycCounterEn () {&lt;br /&gt;
  DWT-&amp;gt;CTRL = 0x40000001;&lt;br /&gt;
}&lt;br /&gt;
inline void DWT_CycCounterDis () {&lt;br /&gt;
  DWT-&amp;gt;CTRL = 0x40000000;&lt;br /&gt;
}&lt;br /&gt;
inline uint32_t DWT_CycCounterRead () {&lt;br /&gt;
  return DWT-&amp;gt;CYCCNT;&lt;br /&gt;
}&lt;br /&gt;
inline void DWT_CycCounterClear () {&lt;br /&gt;
  DWT-&amp;gt;CYCCNT = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main () {&lt;br /&gt;
  // ... Programmcode ...&lt;br /&gt;
&lt;br /&gt;
  // Systick-Zähler benutzen&lt;br /&gt;
  DWT_Enable(); // DWT-Einheit aktivieren&lt;br /&gt;
  DWT_CycCounterEn (); // Zähler aktivieren&lt;br /&gt;
  DWT_CycCounterClear (); // Zähler löschen&lt;br /&gt;
  // ... Programmbearbeitung ...&lt;br /&gt;
  uint32_t iZ = DWT_CycCounterRead (); // Zähler auslesen&lt;br /&gt;
  &lt;br /&gt;
  // ... weiterer Programmcode ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In iZ steht nun wie viele Maschinentakte der Prozessor für die Bearbeitung benötigt hat und kann mit folgender Formel umgerechnet werden:&lt;br /&gt;
&lt;br /&gt;
Zeit in µSec = iZ / CPU-Takt in MHz&lt;br /&gt;
&lt;br /&gt;
= FAQ - Anfängerfragen=&lt;br /&gt;
&lt;br /&gt;
* Muss ich, wenn ich die Debugging-Funktionen nutzen möchte einen JTAG Adapter anschließen? - Ja. Auf dem STM32F4DISCOVERY ist jedoch bereits einer mit drauf.&lt;br /&gt;
* Mit diesem kann ich dann den µC auch programmieren? - Ja, programmieren und debuggen.&lt;br /&gt;
* Ich möchte eine eigene Platine entwickelt, jedoch der 20polige [[JTAG]]-Anschluss ist mir zu groß, gibt es eine Alternative? - Ja, [http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual &amp;quot;Der 10-polige JTAG Stecker von mmvisual&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
= Weblinks, Foren, Communities, Tutorials =&lt;br /&gt;
* [[STM32]] Hauptartikel, [http://www.mikrocontroller.net/articles/STM32#Weblinks.2C_Foren.2C_Communities.2C_Tutorials dortige Linksammlung]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/319328 Diskussion zum Artikel]&lt;br /&gt;
* [[STM32 CooCox Installation]]&lt;br /&gt;
* [[STM32 Eclipse Installation]]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/423300#new Totzeitrechner für STM32]&lt;br /&gt;
* [[LPC1xxx für Umsteiger]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;br /&gt;
[[Kategorie:Mikrocontroller]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=95816</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=95816"/>
		<updated>2017-03-23T09:15:48Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren Brushless-Controller für Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
* [https://www.youtube.com/watch?v=szgVUfyX8JM Texas Instruments Artikel ]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
Der AVR-ADC ist für hohe Drehzahlen zu langsam bzw. ist die PWM -und Samplefrequenz mit 10/5KHz zu langsam um ausreichen Auflösung für das Flussintegral zu bekommen. Die Problematik ist dann, dass nur 1-2 Samples pro Kommutierungsschritt zur Verfügung stehen, was vorn und hinten nicht ausreichend ist. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösungen:&#039;&#039;&#039;&lt;br /&gt;
* Man verwendet einen schnelleren externen ADC&lt;br /&gt;
* Man schaltet bei hohen Drehzahlen in den Komparatormodus&lt;br /&gt;
* Anderer µC mit schnellerem ADC verweden z.B. STM32F4 - Derivat&lt;br /&gt;
&lt;br /&gt;
== Lösung mit einem schnelleren Controller ==&lt;br /&gt;
Der Controller wurde durch einen STM32F050K6 ersetzt. Dieser sampelt nun im Center-Aligned PWM Mode in der Pulsmittte alle Werte und schaufelt diese per DMA in einen Buffer. Die PWM Frequenz beträgt 20kHz.&lt;br /&gt;
Klappt alles prima.&lt;br /&gt;
Aufgrund der (m.M.n.) sehr hohen Gefahr durch die Luftschraube stelle ich alle weiteren Forschungen hier ein.&lt;br /&gt;
Ich verkaufe meine Hardware hier:&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/373059?goto=4217547#4217547 Verkaufe BLDC + Zubehör] &lt;br /&gt;
&lt;br /&gt;
Anbei hier noch das Programm für den STM32 (allerdings mit recht heißer Nadel gestrickt):&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm_STM32.zip|miniatur|links]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=95815</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=95815"/>
		<updated>2017-03-23T09:14:45Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren Brushless-Controller für Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
* [https://www.youtube.com/watch?v=szgVUfyX8JM Texas Instruments Artikel ]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
Der AVR-ADC ist für hohe Drehzahlen zu langsam bzw. ist die PWM -und Samplefrequenz mit 10/5KHz zu langsam um ausreichen Auflösung für das Flussintegral zu bekommen. Die Problematik ist dann, dass nur 1-2 Samples pro Kommutierungsschritt zur Verfügung stehen, was vorn und hinten nicht ausreichend ist. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösungen:&#039;&#039;&#039;&lt;br /&gt;
* Man verwendet einen schnelleren externen ADC&lt;br /&gt;
* Man schaltet bei hohen Drehzahlen in den Komparatormodus&lt;br /&gt;
* Anderer µC mit schnellerem ADC verweden z.B. STM32F4 - Derivat&lt;br /&gt;
&lt;br /&gt;
== Lösung mit einem schnelleren Controller ==&lt;br /&gt;
Der Controller wurde durch einen STM32F050K6 ersetzt. Dieser sampelt nun im Center-Aligned PWM Mode in der Pulsmittte alle Werte und schaufelt diese per DMA in einen Buffer. Die PWM Frequenz beträgt 20kHz.&lt;br /&gt;
Klappt alles prima.&lt;br /&gt;
Aufgrund der (m.M.n.) sehr hohen Gefahr durch die Luftschraube stelle ich alle weiteren Forschungen hier ein.&lt;br /&gt;
Ich verkaufe meine Hardware hier:&lt;br /&gt;
&lt;br /&gt;
https://www.mikrocontroller.net/topic/373059?goto=4217547#4217547&lt;br /&gt;
&lt;br /&gt;
Anbei hier noch das Programm für den STM32 (allerdings mit recht heißer Nadel gestrickt):&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm_STM32.zip|miniatur|links]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=95814</id>
		<title>STM32</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=STM32&amp;diff=95814"/>
		<updated>2017-03-23T09:13:32Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STM32 ist eine Mikrocontroller-Familie von [http://www.st.com/mcu/inchtml-pages-stm32.html ST] mit einer 32-Bit [[ARM]] Cortex-M0/M3/M4 CPU. Diese Architektur ist speziell für den Einsatz in Mikrocontrollern neu entwickelt und löst damit die bisherigen ARM7-basierten Controller weitestgehend ab. Den STM32 gibt es von ST in unzähligen Varianten mit variabler Peripherie und verschiedenen Gehäusegrößen und -formen. Durch die geringe Chipfläche des Cores ist es ST möglich, eine 32 Bit-CPU für weniger als 1&amp;amp;nbsp;€ anzubieten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:stm32F103xc.png|thumb|right|340px|Blockdiagramm STM32F103xC/D/E]]&lt;br /&gt;
&lt;br /&gt;
== STM32-Familien ==&lt;br /&gt;
&lt;br /&gt;
Bisher gibt es elf STM32-Familien:&lt;br /&gt;
* [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f0-series.html STM32F0]&lt;br /&gt;
** Cortex M0&lt;br /&gt;
** Mikrocontroller zum Einstieg&lt;br /&gt;
** Bis 48MHz (38 DMIPS)&lt;br /&gt;
* [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series.html STM32F1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 72MHz (61 DMIPS)&lt;br /&gt;
**Verschiedene Unterfamilien:&lt;br /&gt;
*** Connectivity line&lt;br /&gt;
*** Performance line&lt;br /&gt;
*** USB Access line&lt;br /&gt;
*** Access Line&lt;br /&gt;
*** Value line&lt;br /&gt;
* [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1575 STM32F2]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Bis 120MHz (150 DMIPS)&lt;br /&gt;
** Wie die STM32F1 Serie, Camera-Interface, 32-Bit Timer, Crypto-Engine...&lt;br /&gt;
* [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f3-series.html STM32F3]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 72MHz (90 DMIPS)&lt;br /&gt;
** Fast 12-bit 5 MSPS and precise 16-bit sigma-delta ADCs&lt;br /&gt;
** Touch sensing controller (TSC)&lt;br /&gt;
* [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series.html STM32F4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU&lt;br /&gt;
** Bis 180MHz (225 DMIPS)&lt;br /&gt;
** Bis zu 2MB Flash&lt;br /&gt;
* [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f7-series.html STM32F7]&lt;br /&gt;
** Cortex M7&lt;br /&gt;
** DSP und FPU (Single/Double Precision)&lt;br /&gt;
** Bis 216MHz (462 DMIPS)&lt;br /&gt;
** Mehr Peripherie: SPDIF-IN/OUT, SAI, HDMI-CEC, Dual Quad SPI&lt;br /&gt;
** On-Chip Grafik-LCD-Controller&lt;br /&gt;
** DMAs auch für Ethernet, USB und Chrom-ART&lt;br /&gt;
* [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l0-series.html STM32L0]&lt;br /&gt;
** Cortex M0+&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
** Bis 32MHz (26 DMIPS)&lt;br /&gt;
* [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l1-series.html STM32L1]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** Low Power &lt;br /&gt;
** mit LCD Treiber&lt;br /&gt;
** Bis 32MHz (33 DMIPS)&lt;br /&gt;
* [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32l4-series.html STM32L4]&lt;br /&gt;
** Cortex M4F&lt;br /&gt;
** DSP und FPU (Single Precision)&lt;br /&gt;
** Ultra Low Power (bis zu 8nA mit I/O Wake-Up)&lt;br /&gt;
** Bis 80MHz (100 DMIPS)&lt;br /&gt;
** 128KB...1MB Flash, 64/128KB SRAM&lt;br /&gt;
** optional Segment-LCD Treiber&lt;br /&gt;
** Quarzloser Betrieb auch mit CAN (1% ab Werk) oder USB (Synch über Host) möglich&lt;br /&gt;
** Digital-Filter für ΣΔ-Modulatoren&lt;br /&gt;
* [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32t-series.html STM32T]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** 72MHz&lt;br /&gt;
** Touch Sensing&lt;br /&gt;
* [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32w-series.html STM32W]&lt;br /&gt;
** Cortex M3&lt;br /&gt;
** BIS 24MHz&lt;br /&gt;
** RF-MCU &lt;br /&gt;
[http://www.st.com/web/en/catalog/mmc/FM141/SC1169 Hier eine Übersicht zum Auswählen eines STM32Fxxx]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* Cortex-M0 / Cortex-M3 / Cortex-M4F / Cortex-M7 Kern (mit FPU)&lt;br /&gt;
* 16KB ... 2MB  [[Flash-ROM]]&lt;br /&gt;
* 4KB ... 512KB [[Speicher#SRAM|SRAM]]&lt;br /&gt;
* 2KB ... 16KB [[Speicher#EEPROM|EEPROM]] (STM32L)&lt;br /&gt;
* SDRAM-Controller bei den [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1577/LN1806 STM32F42xxx und STM32F43xxx], bis 512 MByte externer SDRAM addressierbar&lt;br /&gt;
* 512 one-time programmable Bytes(STM32F2/4)&lt;br /&gt;
* [[IC-Gehäuseformen | Gehäuse]] 20 ... 216 Pins als LCSP, TSSOP, QFN, LQFP und BGA&lt;br /&gt;
* Derzeit sind &#039;&#039;&#039;über 700&#039;&#039;&#039; [http://www.st.com/web/en/catalog/mmc/FM141/SC1169 STM32 Derivate/Varianten verfügbar]&lt;br /&gt;
* Bis 72MHz CPU-Takt, bis 120MHz beim STM32F2xx, bis 168/180 MHz beim STM32F4xx, wobei eine spezielle Prefetch-Hardware bis 120/168 MHz eine Geschwindigkeit erzielt, die 0 Wait-States entspricht. Der CPU-Takt wird über einen Multiplikator aus dem internen RC-Takt oder einem externen Quarz-Takt abgeleitet. Bis 216MHz CPU-Takt bei STM32F7xx.&lt;br /&gt;
* Externes Businterface (nur bei Gehäusen ab 100 Pin und nur bei STM32F4, STM32F2 und STM32F1 Performance line)&lt;br /&gt;
* LCD Treiber für bis zu 8x40 Segmente (nicht beim STM32F2xx)&lt;br /&gt;
* TFT Treiber bei [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series/stm32f429-439.html STM32F429/STM32F439] [http://www2.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series/stm32f469-479.html STM32F469/STM32F479]&lt;br /&gt;
* Spannungsbereich 1,65 ... 3,6V, nur eine Betriebsspannung nötig&lt;br /&gt;
* Temperaturbereich bis 125 °C&lt;br /&gt;
* Bis zu 168 IOs, viele davon [[Pegelwandler|5V-tolerant]]&lt;br /&gt;
* Interner, kalibrierter RC-Oszillator mit 8MHz (16MHz bei STM32F2/F4xx)&lt;br /&gt;
* Externer Quarz&lt;br /&gt;
* Real Time Clock mit eigenem Quarz und separater Stromversorgung&lt;br /&gt;
* Bis zu 16 [[Timer]], je Timer bis zu 4 IC/OC/PWM Ausgänge. Davon 2x Motion Control Timer (bei STM32F103xF/G), (bis zu 32 PWM Ausgänge)&lt;br /&gt;
* Systick Counter&lt;br /&gt;
* Bis zu 3 12-Bit [[AD-Wandler]] mit insgesamt 24 AD-Eingängen, integrierter [[Temperatursensor]], Referenzspannung Vrefint und VBatt Spannungsmessung (STM32F4xx)&lt;br /&gt;
* Bis zu 2 12-Bit [[DA-Wandler]] (bis zu 3 beim STM32F3xx)&lt;br /&gt;
* Bis zu 2 [[DMA]] Controller mit bis zu 12 Kanälen (16 beim STM32F2/4xx)&lt;br /&gt;
* Bis zu 2x [[I2C|I²C]]&lt;br /&gt;
* Bis zu 5x [[UART|USART]] mit LIN, IrDA und Modem Control (bis zu 8 beim STM32F2/F4xx)&lt;br /&gt;
* Bis zu 3x [[SPI]] (bis zu 6 beim STM32F4xx)&lt;br /&gt;
* Bis zu 2x [[I2S|I²S]]&lt;br /&gt;
* Bis zu 3x [[CAN#STMicroelectronics STM32 (Cortex M3/M4)|CAN]]&lt;br /&gt;
* Hardware [[CRC]] Unit, bei der STM32F3xx Serie mit einem einstellbaren Polynom &lt;br /&gt;
* Unique device ID register (96 Bits)&lt;br /&gt;
* TRNG - True Random Number Generator (STM32F2/4xx), basierend auf analoger Schaltung&lt;br /&gt;
* Cryptographic Processor (CRYP) (STM32F2/4xx)&lt;br /&gt;
* Hash Processor (HASH) (STM32F2/4xx)&lt;br /&gt;
* Kamera-Interface (DCMI) (STM32F2/4xx)&lt;br /&gt;
* [[USB]] 2.0 Full Speed / OTG&lt;br /&gt;
* [[USB]] 2.0 Hi Speed OTG mit extra PHY-Chip (STM32F2/4xx)&lt;br /&gt;
* SDIO Interface (z.B. SD-Card Reader)&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Watchdog mit Window-Mode&lt;br /&gt;
* Jedes Peripheriemodul ist separat einschaltbar, wodurch sich erheblich [[Ultra low power|Strom sparen]] lässt&lt;br /&gt;
* [[JTAG]] und SWD (Serial Wire Debug) Interface&lt;br /&gt;
* Bis zu 6 Hardware-Breakpoints für Debuggen&lt;br /&gt;
* und vieles mehr ...&lt;br /&gt;
&lt;br /&gt;
== Struktur der Dokumentation ==&lt;br /&gt;
Die Dokumentation der STM32 ist im Vergleich zur [[AVR]]-Familie umfangreicher und komplexer. Sie teilt sich in mehrere Dokumente auf.&lt;br /&gt;
Als Beispiel der Dokumentation soll stellvertretend der [http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1031/LN1565/PF164486 STM32F103RC] genannt werden. Die Seite von ST beinhaltet alle nötigen Informationen passend zu diesem Prozessor.&lt;br /&gt;
&lt;br /&gt;
Diese Dokumente von ST beschreiben den Controller:&lt;br /&gt;
&lt;br /&gt;
* Im [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00191185.pdf STM32F103xC/D/E Datasheet] sind die speziellen Eigenschaften einer bestimmten Modellreihe beschrieben und die exakten Daten und Pinouts aufgeführt, sowie die Zuordnung Chipname - Flash/RAM-Größe. Die Peripheriemodule werden nur aufgeführt, nicht detailliert beschrieben.&lt;br /&gt;
* Im [http://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf Reference Manual (RM0008)] sind alle Peripheriemodule der jeweiligen STM32-Controllerfamilie im Detail beschrieben.&lt;br /&gt;
* Das [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0403c/index.html ARMv7M Architecture Reference Manual] beschreibt detailliert den Prozessorkern, wie das Exception Model, die CPU Instruktionen inklusive Encoding, etc.&lt;br /&gt;
* Das [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00228163.pdf STM32 Cortex-M3 Programming Manual] ist eine Zusammenfassung des ARMv7M Architecture Reference Manual bezogen auf die STM32.&lt;br /&gt;
* Wer nicht die ST Firmware-Library verwendet, der benötigt zusätzlich das [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00283419.pdf Flash Programming Manual] für die Betriebsart des Flash-ROMs, d.h. die frequenzabhängige Konfiguration der Waitstates.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sollten auch die [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/errata_sheet/CD00197763.pdf Errata Sheets] beachtet werden. Empfohlen sei auch die Appnote &amp;quot;[http://www.st.com/web/en/resource/technical/document/application_note/CD00164185.pdf AN2586 Getting started with STM32F10xxx hardware development]&amp;quot;.&lt;br /&gt;
Die jeweiligen Dokumentations-PDFs sind auf der Produktseite von ST eines jeden Mikrocontrollers verlinkt.&lt;br /&gt;
&lt;br /&gt;
== Hardware Zugriffs-Libraries ==&lt;br /&gt;
=== CMSIS ===&lt;br /&gt;
&lt;br /&gt;
Die CMSIS (ARM® &#039;&#039;&#039;C&#039;&#039;&#039;ortex™ &#039;&#039;&#039;M&#039;&#039;&#039;icrocontroller &#039;&#039;&#039;S&#039;&#039;&#039;oftware &#039;&#039;&#039;I&#039;&#039;&#039;nterface &#039;&#039;&#039;S&#039;&#039;&#039;tandard) ist eine Library von ARM für den Zugriff auf die herstellerübergreifenden Funktionen des ARM-Cores. Hierzu gehört bei den Cortex-M4F-Cores auch die DSP und Floating-Point Funktionalität. Weiterhin existieren eine Zahl von Helferfunktionen für den NVIC, den Sys-Tick-Counter, sowie eine SystemInit-Funktion, welche sich um die PLL kümmert. &lt;br /&gt;
&lt;br /&gt;
Im Rahmen des CMSIS-Standards ([http://www.onARM.com www.onARM.com]) wurden die Headerdateien standardisiert, der Zugriff auf die Register erfolgt per &#039;&#039;&#039;Peripheral-&amp;gt;Register&#039;&#039;&#039;. Die CMSIS C-Dateien bzw. Header enthalten auch Anpassungen für die verschiedenen Compiler. Die Portierung eines Real-Time-Betriebsystems sollte unter Verwendung der CMSIS, für Chips der verschiedenen Hersteller, stark vereinfacht möglich sein (z.B. einheitliche Adressen für Core-Hardware/Sys-Tick-Counter).&lt;br /&gt;
&lt;br /&gt;
Die CMSIS ist im Download der ‎STM32 Standard Peripheral Library enthalten. Die Compiler-Hersteller liefern eine jeweils zur ihrer Tool-Version passende bzw. geprüfte Library (incl. CMSIS) aus. Diese Libs können, gegenüber den Downloads beim Chip-Hersteller, auch ältere Version beinhalten.&lt;br /&gt;
&lt;br /&gt;
=== ‎STM32 Standard Peripheral Library ===&lt;br /&gt;
&lt;br /&gt;
ST bietet für jede Controller-Familie eine umfangreiche zur CMSIS passende Peripherie-Bibliothek. Alle Funktionen um die Peripherie zu benutzen sind gekapselt in einfache Strukturen und Funktionsaufrufe. Somit muss man sich nicht selbst um die Peripherie-Register kümmern. Diese Library und ihre Dokumentation setzen das grundlegende Verständnis der Funktion des jeweiligen Peripheriemoduls voraus, wie es die o.a. Referenz und diverse Appnotes vermitteln. Die Library beinhaltet außerdem für fast jede Peripherie mehrere Beispiele.&lt;br /&gt;
Für die USB Schnittstelle gibt es noch eine extra Library, genauso wie für Ethernet.&lt;br /&gt;
&lt;br /&gt;
Auf der &amp;quot;Design Resources&amp;quot; Seite der Produktseite von ST eines jeden STM32 Mikrocontrollers kann die Library für den jeweiligen Controller heruntergeladen werden, z.B. [http://www.st.com/web/en/catalog/tools/PF257890 hier für den o.g. STM32F103RC].&lt;br /&gt;
&lt;br /&gt;
Library für STM32F4xx: [http://www.st.com/web/en/catalog/tools/PF257901# STSW-STM32065 STM32F4 DSP and standard peripherals library]&lt;br /&gt;
&lt;br /&gt;
=== ‎STM32Cube / HAL ===&lt;br /&gt;
&lt;br /&gt;
Wird in Zukunft die Standard Library ablösen.&lt;br /&gt;
* http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/LN1897&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
Zur Programmierung der STM32 gibt es verschiedene Möglichkeiten, sowohl kommerzielle proprietäre als auch mit Freier Software.&lt;br /&gt;
&lt;br /&gt;
Der GCC (in seinen verschiedenen Binärdistributionen) ist der einzige ARM Compiler der [http://de.wikipedia.org/wiki/C%2B%2B11 C++11] unterstützt.&lt;br /&gt;
&lt;br /&gt;
=== Freie Software/Freeware ===&lt;br /&gt;
==== Selber zusammenstellen ====&lt;br /&gt;
Man nehme...:&lt;br /&gt;
* Eine Entwicklungsumgebung nach Wahl:&lt;br /&gt;
** [http://www.eclipse.org Eclipse] mit [http://www.eclipse.org/cdt/ C/C++ Development Tooling] und [http://gnuarmeclipse.livius.net/blog/ GNU ARM Plug-in] (Bei Verwendung vom GCC-ARM-Embedded als Toolchain &amp;quot;Sourcery G++ Lite&amp;quot; auswählen, dieser sieht für eclipse gleich aus) (Linux, Windows)&lt;br /&gt;
** [http://netbeans.org/ Netbeans] mit [http://plugins.netbeans.org/plugin/37426/gdbserver GDBserver-Plugin] (Linux, Windows)&lt;br /&gt;
** [http://www.kdevelop.org/ KDevelop] (Linux, Windows)&lt;br /&gt;
** [http://www.geany.org/ Geany] (Linux, Windows)&lt;br /&gt;
** Oder ein einfacher Texteditor&lt;br /&gt;
* Einen C,C++ Compiler:&lt;br /&gt;
** Eine der [[ARM_GCC#GCC_Bin.C3.A4rdistributionen|GCC-Binärdistributionen]], siehe auch [[#GCC|GCC]] (je nach Distribution Linux, Windows)&lt;br /&gt;
* Programmiersoftware zum Flashen des Target:&lt;br /&gt;
** [http://openocd.sourceforge.net/ OpenOCD] unterstützt viele Debug/Programmier-Adapter (Linux, Windows)&lt;br /&gt;
** [https://github.com/texane/stlink Texane stlink] funktioniert gut mit den ST-Link Adaptern wie sie zB. auf den STM32 Discovery Boards zu finden sind (Linux)&lt;br /&gt;
** Turtelizer2 oder andere JTAG Programmieradapter&lt;br /&gt;
** Bei Verwendung eines Segger J-Link, den [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf Segger GDB-Server] in Verbindung mit dem beim GCC mitgelieferten GDB (Linux, Windows).&lt;br /&gt;
&lt;br /&gt;
==== Komplette IDEs ====&lt;br /&gt;
* [https://developer.mbed.org/platforms ARM mbed Developer Site] ist der ultimative Compiler für denjenigen, der nur mal schnüffeln will. Doppelklick auf das gewünschte Board, Beispielprogramm (rechts am Rand auswählen), kompilieren und über USB hochladen. Schon blinkt es! Wenn man ein Projekt dann lieber doch lokal bearbeiten möchte (z.B. um einen Debugger zu benutzen) dann kann man die Projekte über die Export Funktion herunterladen. Es werden verschiedene IDE sowie ein gcc Kommandozeilenprojekt unterstützt. Die mbed Library ist quelloffen und auf github gehostet.&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite_edition.html Codesourcery Lite Edition] Mit dieser Umgebung muss man sich anfreunden können, was mir bisher nicht gelungen ist. Es sind nur wenig Beispielprojekte verfügbar. Nicht mehr kostenlos verfügbar.&lt;br /&gt;
* [http://www.coocox.org/ Coocox Eclipse IDE] kostenlose IDE für STM32F0/F1/F2/F3/F4. Basiert auf der ARM-GCC Toolchain und es gibt eine breite Unterstützung. Es ist sogar ein freies RTOS verfügbar. Beim Start der IDE muss man geduldig sein, was jedoch für alle Eclipse basierten IDEs gilt. Eine gute Wahl ohne Limits mit breiter Debugger-Unterstützung. Hilfreiche Infos gibt es [http://www.mikrocontroller.net/topic/214719?goto=new#2228482 hier] und [http://www.mikrocontroller.net/topic/214719?goto=new#2229943 hier] im Forum, Artikel: [[STM32 CooCox Installation]] &lt;br /&gt;
* [http://emide.org/ emIDE] kostenlose IDE von Segger. Die emIDE basiert auf Code::Blocks. Sie ist auf ARM-GCC aufgebaut und unterstützt eine große Zahl an unterschiedlichen JTAG/SWD Debugger - natürlich auch den J-Link aus gleichem Hause.  &lt;br /&gt;
* [http://www.emblocks.org EmBlocks] kostenlose IDE, Code::Blocks basiert, unterstützt STM32 L1/F0/F1/F2/F3/F4/W, integrierter Compiler (ARM-GCC), integrierter GDB-Debugger, Jlink/ST-Link, System view (Peripherie Register anzeigen) beim Debuggen, Project Wizard (Eigene Wizards können mit Squirrel geschrieben werden), Basiert auf Code::Blocks und gefällt mir recht gut da man ihn fast so gut nutzen kann wie die µVision von Keil, jedoch ohne deren Limit, http://www.mikrocontroller.net/articles/STM32_-_Einstieg_mit_Em::Blocks STM32 - Einstieg mit Em::Blocks]&lt;br /&gt;
** heisst jetzt EmBitz beta 0.42 -&amp;gt; http://www.emblocks.org/web/downloads-main&lt;br /&gt;
* [http://cms.seng.de/service-support/downloads/ Entwicklungsumgebung GNU/Linux] für STM32F1 mit OpenOCD und Olimex ARM-USB-OCD-H, Bedienung über Eclipse IDE oder Kommandozeile.&lt;br /&gt;
* [http://www.openstm32.org/blog1-System-Workbench-for-STM32 System Workbench for STM32] (SW4STM32) ist eine uneingeschränkte und kostenlose IDE. Sie wird von [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF261797 ST] offiziell unterstützt. Die Entwicklungsumgebung ist in der Version 1.0 seit 5.2.2015 erhältlich. Seit Februar 2016 ist eine Version für Linux verfügbar.&lt;br /&gt;
&lt;br /&gt;
==== Andere Programmiersprachen ====&lt;br /&gt;
&lt;br /&gt;
* [http://mecrisp.sourceforge.net Mecrisp-Stellaris], eine native Forth-Implementation für ARM Cortex M0/M3/M4. Es werden bereits mehrere STM32 Targets unterstützt und neue Portierungen sind herzlich willkommen. Auch Chips von TI, NXP und Freescale sind im aktuellen Paket enthalten.&lt;br /&gt;
&lt;br /&gt;
=== Kommerzielle Umgebungen ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.keil.com/arm/mdk.asp Keil µVision] (Demo max. 32KB Code/Free für STM32F0/STM32L0): Die sehr komfortable µVison IDE ist neben dem ARM Compiler per Menue auch für einen beliebigen GNU-Compiler konfigurierbar. Damit besteht das 32k-Limit nur noch für den integrierten Debugger / Simulator. In Verbindung mit einem ULINK2 ist die Umgebung schon sehr einfach zu bedienen - leider ist der Compiler mit großen Abstand der langsamste den ich je nutzte, da er keine parallel Option wie der GNU-CC besitzt. Mit der µVision lässt sich kein fremdes File in den Controller in den Flashspeicher des Controllers schreiben. Für den Anfänger eine gute Wahl. Der Preis ist jedoch ein guter Grund auf andere freie IDEs zu wechseln. µVison selbst kann kostenlos mit dem MDK-Evaluationkit heruntergeladen werden. [https://www.keil.com/arm/demo/eval/arm.htm#DOWNLOAD download] Wer sich nur auf STM32 Cortex M0/L0 beschränkt kann die Keil MDK auch ohne 32K Begrenzung frei nutzen. [http://www2.keil.com/stmicroelectronics-stm32/mdk download]&lt;br /&gt;
* [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR-Embedded-Workbench] (Demo max. 32KB Code) [http://supp.iar.com/Download/SW/?item=EWARM-EVAL download]&lt;br /&gt;
* [http://www.isystem.com/download/winideaopen winIDEAOpen] Keine Code Limitierung, GCC und Testwerkzeug beinhaltet. Läuft mit dem iTag50 Adapter, Segger J-Link und dem ST-Link&lt;br /&gt;
* [http://www.raisonance.com Raisonance Ride7] (GCC Compiler, kostenlose Version auf Debugging von max. 32KB Code limitiert, keine Limitierung beim Complilieren)&lt;br /&gt;
* [http://www.atollic.com Atollic TrueStudio], auf Eclipse/GCC basierend. Aktuell ist V 5.4, diese hat kein Codesize Limit. Eingeschränkt sind Debug Optionen wie Variablen LiveWatch oder Tracing, was aber auch &#039;bessere&#039; Debugprobes erforderlich macht. Das Semihosting (printf über SWD/JTAG) fällt leider auch unter die Restriktionen der Lite Version. Atollic TrueStudio unterstützt viele verschiedene Hersteller von ARM MCUs, dadurch ist das Paket sehr umfangreich. In der Lite Version muss man sich beim Start für ein paar Sekunden einen Dialog mit dem Upgrade Angebot gefallen lassen.&lt;br /&gt;
* [http://www.rowley.co.uk/arm/ Rowley Crossworks] (Demo 30 Tage unbeschränkt, 150$ für nichtkommerzielle Nutzung, auf GCC basierend). Mir ist nicht klar warum man für diese IDE Geld bezahlen soll. Der GNU-Compiler ist frei und die Entwicklungsumgebungen die auf Eclipse basieren, ebenfalls. Allerdings ist diese Einstellungsarbeit schon was für den etwas erfahrenen Entwickler.&lt;br /&gt;
* [http://www.code-red-tech.com Code Red] (GCC basierend)&lt;br /&gt;
* [http://www.sisy.de/index.php?id=17&amp;amp;no_cache=1 SiSy ARM oder SiSy Micrcontroller++] (Demo verfügbar keine Gößenbegrenzung, basiert auf GNU-Compiler, grafische Programmierung mit UML möglich, integrierter Debugger)&lt;br /&gt;
* [http://www.comsytec.eu/epsdebugger.php EPS Debugger Plugin, für STM32 Development mit Code::Blocks]&lt;br /&gt;
* [http://www.mikroe.com MikroE bietet neben Pascal und Basic auch C mit kompletter Oberfläche mit Compiler etc. pp relativ günstig]&lt;br /&gt;
* [http://www.visualgdb.com VIsualGDB] Wer vom Atmel Studio kommt oder sonst viele mit Visual Studio arbeitet bekommt hier ein Plugin, das wirklich Spaß macht und funktioniert. Es werden nicht nur STM32 unterstützt. Einfach kostenlose Trial-Version anschauen und probieren.&lt;br /&gt;
&lt;br /&gt;
=== STM32CubeMX ===&lt;br /&gt;
Dies ist eine Software von ST selbst, die die Auswahl und Konfiguration von STM32-Mikrocontrollern vereinfacht:&lt;br /&gt;
* Auswahl der Controller oder Entwicklungsboards mit einer parametrischen Suche&lt;br /&gt;
* grafische Konfiguration der Pins und Alternate Functions (inkl. Überprüfung auf Kollisionen - bei Entwicklungsboards sind gewisse Pins schon vorkonfiguriert und werden angezeigt)&lt;br /&gt;
* grafische Konfiguration des Clock-Trees&lt;br /&gt;
* Generierung von C-Code entsprechend der grafischen Konfiguration. Dieser funktioniert nur mit den neuen STM32CubeFx Libraries, nicht mit den alten Standard Peripheral Libraries.&lt;br /&gt;
* Simulation des Strom-Verbrauchs unter Auswahl verschiedenster Stromquellen und Batterien&lt;br /&gt;
Die Software kann [http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF259242 bei ST heruntergeladen] werden. Sie wird im Windows Executable Format angeboten und erweckt daher den Eindruck, ausschließlich für Windows geeignet zu sein, ist aber tatsächlich Java-basiert und daher seit Version 4.13 vollständig betriebssystem-unabhängig.&lt;br /&gt;
==== STM32CubeMX unter Linux ====&lt;br /&gt;
Ab der Version 4.13 liegt jetzt ein Linux-Installer mit bei.&lt;br /&gt;
&lt;br /&gt;
Unter Linux kann STM32CubeMX installiert werden, indem man das heruntergeladene .zip-Archiv entpackt, und den enthaltenen Installer per Java über ein Terminal startet:&lt;br /&gt;
&amp;lt;pre&amp;gt;java -jar SetupSTM32CubeMX-4.5.0.exe&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das Anlegen der Desktop/Startmenü-Shortcuts funktioniert unter Linux nicht richtig und kann daher deaktiviert werden. Um STM32CubeMX nach der Installation zu starten, wechselt man im Terminal in den Installationsort und gibt ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;java -jar STM32CubeMX.exe&amp;lt;/pre&amp;gt;&lt;br /&gt;
Damit das funktioniert, muss die Oracle Java Runtime Environment 1.8 installiert sein (Siehe z.B. [http://wiki.ubuntuusers.de/Java/Installation/Oracle_Java/Java_8#Java-8-JRE hier] für Ubuntu). Nicht benötigt wird wine.&lt;br /&gt;
&lt;br /&gt;
Update:&lt;br /&gt;
In der Datei stm32cubemx.zip  md5sum: 86217b9f14b99b1133bda6e87dbd1270&lt;br /&gt;
http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF259242?icmp=pf259242_pron_pr_jun2014&amp;amp;sc=stm32cube-pr6#&lt;br /&gt;
befindet sich u.a. SetupSTM32CubeMX-4.13.0.linux (ist ein ELF 64-bit). Mit Ausführen wird cubemx standalone (nicht in Eclipse) im Pfad der Wahl installiert. Es reicht Java 1.7.xx, hier java -version: java version &amp;quot;1.7.0_95&amp;quot;&lt;br /&gt;
OpenJDK Runtime Environment (IcedTea 2.6.4) (suse-24.30.3-x86_64). Das Anlegen von Desktop/StartMenü Icons, Stichworte freedesktop.org, &amp;quot;Desktop Entry&amp;quot;, funktioniert. Man muss aber beachten, dass ein Symlink zum Starten nicht funktioniert. Stattdessen ist eine ausführbare Datei im Pfad anzulegen, z.B. /usr/local/bin/cubemx mit z.B dem Inhalt /array_data01/STM32CubeMX/STM32CubeMX&lt;br /&gt;
&lt;br /&gt;
==== STM32CubeMX unter Mac OS ====&lt;br /&gt;
Mit der Version 4.14 wird ein Setup-Programm für Mac OS angeboten, das sich in der stm32cubemx.zip Datei befindet (siehe auch Update zur Linux-Unterstützung).&lt;br /&gt;
&lt;br /&gt;
=== Tutorials für diverse Tool-Kombinationen ===&lt;br /&gt;
* [[STM32 Eclipse Installation|Windows,Linux, Eclipse + Yagarto/CodeSourcery + OpenOCD/ST-Link]]&lt;br /&gt;
* [[STM32 Eclipse JLink Linux/Windows|Windows,Linux, Eclipse + GCC-ARM-Embedded + JLink]]&lt;br /&gt;
* [[Linux auf STM32|Linux auf STM32 (ucLinux)]]&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
** Eclipse&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/216554 Windows, Eclipse, codesourcery, st-link ]&lt;br /&gt;
*** [http://www.firefly-power.de/ARM/debugging.html Eclipse Plugin &amp;quot;GDB Hardware Debugging&amp;quot; mit OpenOCD]&lt;br /&gt;
** Code::Blocks&lt;br /&gt;
*** [http://www.mikrocontroller.net/topic/265600 Windows, Code::Blocks, STM32F4]&lt;br /&gt;
** STM32 mit EmBlocks&lt;br /&gt;
*** [http://www.emblocks.org/web/downloads-main Download EmBlocks]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=coHPJylnzC8 Video STM32 Project Wizzard in EmBlocks]&lt;br /&gt;
** Atollic TrueSTUDIO&lt;br /&gt;
*** [[STM32 LEDBlinken AtollicTrueStudio|Atollic TrueSTUDIO Installation + Demo]]&lt;br /&gt;
** MDK-ARM Lite mit Einstellungen für STM32F0/F4-Discovery Board&lt;br /&gt;
*** [https://www.keil.com/demo/eval/arm.htm KEIL MDK-ARM Download]&lt;br /&gt;
*** [https://www.youtube.com/watch?v=RXOOxby5nns&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;index=1 Installations Video STM32F4 Discovery Board]&lt;br /&gt;
*** [https://www.youtube.com/watch?annotation_id=annotation_203294&amp;amp;feature=iv&amp;amp;index=4&amp;amp;list=PL6-W3FoUyb48WFI5PQv3SDJj2G1t2FonV&amp;amp;src_vid=sN4gDZ7H8gw&amp;amp;v=BeZcQjXxk9A Einstellungen STM32F0 Discovery Board Video]&lt;br /&gt;
** SiSy ARM, STM32&lt;br /&gt;
*** Download: [http://www.sisy.de/index.php?id=59 SiSy DEMO] kein Begrenzung der Codegröße&lt;br /&gt;
*** [http://www.youtube.com/watch?v=84Y3jYLWYpo Videobeispiel]&lt;br /&gt;
** Microsoft Visual Studio&lt;br /&gt;
*** [http://visualgdb.com/tutorials/arm/stm32/f4_discovery/ &amp;quot;STM32F4-Discovery tutorial with Visual Studio&amp;quot;]&lt;br /&gt;
* Ubuntu&lt;br /&gt;
** [http://cms.seng.de/service-support/downloads/ Installing a toolchain for Cortex-M3/STM32 on GNU/Linux] - How-to manual, für STM32F1 unter GNU/Linux mit OpenOCD und Olimex ARM-USB-OCD-H. Integrierte Make files, Linker Skripte, Startup-Code, diverse Tools und Demo-Projekt/Programm. Einbindung in Eclipse IDE oder Bedienung über Kommandozeile.&lt;br /&gt;
** [http://fun-tech.se/stm32/index.php Ubuntu, Selbstcompilierter GCC, STM32/Cortex-M3]&lt;br /&gt;
** [http://thetoolchain.com The ToolChain] - Automatisch installierende Entwicklungsumgebung mit eigenen und externen Treibern, Unterstützt QtCreator als IDE, Flexibel erweiterbar über Shellskripte&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/214719 Tipps für Installation mit Eclipse]&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter===&lt;br /&gt;
* [http://www.segger.com/jlink-model-overview.html SEGGER J-LINK / J-TRACE] für u.a. alle ARM7/9/11, Cortex-M0/M1/M3/M4/A5/A8/A9/R4 als [http://www.segger.com/cms/j-link-edu.html Non-Commercial] J-LINK-EDU für ca. 50€ zu haben, läuft in µVision, IAR, GDB (Linux &amp;amp; Windows über einen eigenen [http://www.segger.com/admin/uploads/productDocs/UM08005_JLinkGDBServer.pdf GDB-Server]), Keil, ... Der J-Link ist mit Abstand der schnellste Debugger, den ich bisher testen konnte. Wer es beim Debuggen eilig hat, liegt mit dem J-Link von Segger richtig.&lt;br /&gt;
* Keil [http://www.keil.com/ulinkme/ ULINK-ME], [http://www.keil.com/arm/ulink2/ ULINK2], [http://www.keil.com/arm/ulinkpro/ ULINK pro] Wenn man die die µVision IDE nicht verlassen mag, kann man sich mit diesen Adaptern anfreunden, denn sie arbeiten nur mit dieser IDE zusammen. Sie benötigen keine USB-Treiber, da sie geschickt das HID-Device des Betriebssystems nutzen. Es lässt sich kein fremdes Binary oder Hex-File flashen. Der ULINK2 kostet genau soviel wie ein Segger J-Link Basic bei gleichem Funktionsumfang, der sich jedoch auch in Verbindung mit anderen IDEs (GDB, usw) einsetzen lässt.&lt;br /&gt;
* [http://www2.st.com/content/st_com/en/products/development-tools/hardware-development-tools/development-tool-hardware-for-mcus/debug-hardware-for-mcus/debug-hardware-for-stm32-mcus/st-link.html ST-LINK],  [http://www2.st.com/content/st_com/en/products/development-tools/hardware-development-tools/development-tool-hardware-for-mcus/debug-hardware-for-mcus/debug-hardware-for-stm32-mcus/st-link-v2.html ST-LINK/V2]&lt;br /&gt;
* Jedes STM32 NUCLEO und DISCOVERY board hat einen ST-LINK für Programmierung/Debugging per SWD on-board (teilweise abbrechbar), welcher auch für eigene STM32 Target Hardware benutzt werden kann (ca. 12,- bis 19,-€, je nach Typ). Zwar ist er mit 1.8MHz Takt ein sehr langsamer Vertreter seiner Art, jedoch lassen sich mit ihm fremde Hex- und Binary-Files sowohl Debuggen als auch Flashen. Er unterstützt aber nur MCUs von ST. NXP, Atmel oder TI lassen sich damit nicht programmieren. Diese ST-LINK-Variante beherrscht nur SWD, kein JTAG und hat keine Treiber, die den Programmierprozessor vom Zielsystem galvanisch entkoppeln. Der ST-Link in der Adapterversion mit Gehäuse hat diese Nachteile nicht und kostet auch nur um 20€.  Unter Linux kann der Virtuellen COM-Port des ST-LINK/V2 mit Hilfe des cdc-acm Treibers aus dem Kernel angesprochen werden ([https://embeddedmicro.com/forum/viewtopic.php?t=82 siehe hier]). &#039;&#039;&#039;UPDATE:&#039;&#039;&#039; Die ST-LINK/V2-1 auf den NUCLEO und Discovery-Boards können jetzt auch auf J-Link OB geflasht werden. Details und Hinweise dazu [https://www.segger.com/jlink-st-link.html hier].&lt;br /&gt;
* [http://www.raisonance.com/~rlink-debugger-programmer__microcontrollers__tool~tool__T018:4cn9ziz4bnx6.html Raisonance RLink]&lt;br /&gt;
* [http://www.amontec.com Amontec] (2016-05: Website OFFLINE)&lt;br /&gt;
* [http://www.hjtag.com H-JTAG] nur noch STD- und PRO-Edition (Cortex-M0, Cortex-M3, kein M4), Personal-Edition (LPT-Port) war für ca. 60€ zu haben, läuft mit ADS, SDT, IAR, Vision und RVDS (möglicher Selbstbau der Personal-Edition siehe [http://nazya.com/freeshipping/single/4929017/orig_desc.html hier])&lt;br /&gt;
* [http://www.isystem.com/products/itag iTag] für 50€ bei [http://www.amazon.de/dp/B009XAQ9BW Amazon] bestellbar, alternativ als [http://isystem.com/products/hardware/cortex-debugger/itag/itag-instruction Eigenbauversion (offenes Design)] läuft mit der freien winIDEAiTag version (siehe oben)&lt;br /&gt;
&lt;br /&gt;
In der Regel haben die [[JTAG]] Adapter einen 20-poligen Stecker, den man direkt auf die Demo-Boards mit 20-poligem [[JTAG]]-Anschluss einstecken kann. Die Pinbelegung ist genormt, siehe Artikel [[JTAG]]. Die Discovery-Boards haben keinen separaten JTAG-Stecker, aber man kann sich zumindest für das STM32F4 Discovery einen Adapter Pinheader-&amp;gt;JTAG Stecker leicht selbst bauen.&lt;br /&gt;
&lt;br /&gt;
ST-Link Adapter können jetzt auch unter Linux mit neuer Firmware geflasht werden: [http://www2.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link007.html Download]. &lt;br /&gt;
&lt;br /&gt;
Andere [[JTAG]] Adapter wie z.B. der ULink2 von Keil funktionieren nur mit dem Keil Compiler. Leider kann dieser auch kein fremdes Binary oder Hex-File in den Controller schreiben.&lt;br /&gt;
&lt;br /&gt;
===Programmieradapter Open-Source===&lt;br /&gt;
&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-COOCOX/ ARM-JTAG-COOCOX], CoLinkEX Nachbau von Olimex, unterstützt JTAG sowie SWD&lt;br /&gt;
** [http://www.coocox.org/colinkEx.htm unterstützte uC]&lt;br /&gt;
** unterstütze IDEs: [http://www.keil.com/arm/mdk.asp Keil MDK-ARM 4.03] oder neuer, [http://www.iar.com/en/Products/IAR-Embedded-Workbench/ IAR Embedded Workbench 5.xx] oder neuer sowie die [http://www.coocox.org/CooCox_CoIDE.htm CooCox CoIDE]&lt;br /&gt;
* [https://www.olimex.com/Products/ARM/JTAG/ Olimex] ARM-USB-OCD (ca. 60.-, hat zusätzlich einen Spannungsausgen und einen COM Port)&lt;br /&gt;
* [http://www.oocdlink.com/ OOCDLink]  [_Link ist derzeit nicht verfügbar_]&lt;br /&gt;
* [https://github.com/texane/stlink Stlink]&lt;br /&gt;
* [http://www.randomprojects.org/wiki/Floss-JTAG FLOSS-JTAG]&lt;br /&gt;
* [http://capitanio.org/mlink/ Linux Demo Code für die Discovery&#039;s ST-Link Programmierung]&lt;br /&gt;
&lt;br /&gt;
Der Controller hat auch einen fest eingebauten Boot-Lader. Damit läßt er sich auch über eine gewöhnliche serielle Schnittstelle programmieren, ohne dass man einen JTAG-Adapter benötigt. Dies erfordert ggf. entsprechende Konfiguration über die BOOTx-Pins und/oder die Option-Bytes, und ein Programm wie [https://code.google.com/p/stm32flash/ stm32flash].&lt;br /&gt;
&lt;br /&gt;
=== Demo-Projekte ===&lt;br /&gt;
&lt;br /&gt;
* Einführung in die GPIO Programmierung der STM32F10x und STM32F30x Prozessoren am Beispiel des STM32F3 Discovery Boards und Vergleich zur AVR IO Registerstruktur [http://www.mikrocontroller.net/topic/300472#new]&lt;br /&gt;
* [[prog_bsp_timer_1_timer2|Programmbeispiel für die Verwendung von Timer2 zusammen mit dem Interrupt]]&lt;br /&gt;
* [http://www.firefly-power.de/ARM/printf.html Printf() debugging mit minimalem Aufwand]&lt;br /&gt;
* [[STM32_BLDC_Control_with_HALL_Sensor|Programmbeispiel für BLDC Motoransteuerung (Timer 1) mit HALLSensor (Timer 3)]]&lt;br /&gt;
* [[Cortex_M3_OCM3U]]&lt;br /&gt;
* Martin Thomas hat ein umfangreiches Projekt erstellt, in der die Eclipse Einstellungen enthalten sind:&lt;br /&gt;
** [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html &amp;quot;ChaN&#039;s FAT-Module with STM32 SPI&amp;quot;]&lt;br /&gt;
* [[STM32 USB-FS-Device Lib]]&lt;br /&gt;
* Modellbau-Sender auf STM32-Basis mit vielen Treibern [http://www.rcos.eu www.rcos.eu]&lt;br /&gt;
* Ausführliches [https://github.com/jkerdels/stm32edu Einstiegs-Tutorial] in Codeform für das [http://www.st.com/internet/evalboard/product/252419.jsp STM32F4 discovery board]&lt;br /&gt;
* [http://www.redacom.ch/keillab/ Schweizer Gondelbahnsteuerung über Webserver auf ETT STM32F ARM KIT Board in Keil RTOS] mit Webcam&lt;br /&gt;
* Die [http://ethernut.svn.sourceforge.net/viewvc/ethernut/trunk/ Ethernut SVN Version] unterstützt inzwischen viele STM32 Typen, viele Devices und einige STM32 Demoboards&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=744 Uwe Becker&#039;s Libraries für den STM32F4]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=3290 Uwe Becker&#039;s STM32F429 Discovery Board Oszilloskop], hier der [http://www.mikrocontroller.net/topic/319831#new Thread]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net/wordpress/?page_id=3424 Uwe Becker&#039;s STM32F429 Discovery Board ZX-Spectrum Emulator]&lt;br /&gt;
&lt;br /&gt;
== Debug- und Trace-Interface (CoreSight™ Debug and Trace Technologie)==&lt;br /&gt;
&lt;br /&gt;
Übersicht über beide Funktionalitäten und den Schnittstellen:&lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_cs_core_sight.htm&lt;br /&gt;
&lt;br /&gt;
Die Coresight-Debug-Architektur ermöglicht ein nicht-invasives Debugging, d.h. es können während des Betriebes (meistens) ohne Beeinflussung des Prozessors Daten vom Speicher gelesen und in selbigen geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
=== Debugger Funktionen ===&lt;br /&gt;
&lt;br /&gt;
Der Debugger-Teil besitzt drei Funktionen:&lt;br /&gt;
* Run Control: z.B. Programm-Start, Stopp und Einzel-Schritte.&lt;br /&gt;
* (Program) Break Points: Ein Programm hält an, wenn der Programm Counter eine bestimmte Programm-Adresse erreicht.&lt;br /&gt;
** Die maximale Anzahl der gleichzeitig möglichen Break Points ist begrenzt (z.B. 6 bei einem STM32).&lt;br /&gt;
** Die Anzahl der Break Points ist nahezu unbegrenzt, wenn ein Debugger über den Memory Access (s.u.) sogenannte Flash Break Points unterstützt. Dabei wird ein geladenes Programm im Flash umprogrammiert, um den Debugger anzuhalten. Diese Funktionalität ist meistens ein kostenpflichtiges Zusatz-Feature des Debugger-Herstellers. &lt;br /&gt;
** Beinhaltet keine Data Watch Funktionalität, welche im Trace-Teil (DWT) realisiert wird.&lt;br /&gt;
* Memory Access: Lesen und Schreiben von Speicheradressen. &lt;br /&gt;
** Diese Funktionalität beinhaltet keine direkte Flash-Programmierung. Der Programmiervorgang für einen Flash ist herstellerspezifisch und muss von dem verwendeten Debugger unterstützt werden.&lt;br /&gt;
&lt;br /&gt;
=== Trace Funktionen ===&lt;br /&gt;
Die Trace-Funktionalität wird in drei Funktionen aufgeteilt:&lt;br /&gt;
* ETM (Embedded Trace Macrocell): Optional, nicht jede CPU besitzt diese Hardware (Kostenfaktor, Ausstattung).&lt;br /&gt;
* ITM (Instrumentation Trace Macrocell): Über diesen Kanal kann ein vereinfachtes Trace des Core ermöglicht werden, sowie &amp;quot;printf-ähnlich&amp;quot; Daten über den ITM Channel 0 geschickt und im Debugger ausgegeben werden.&lt;br /&gt;
* DWT (Data Watchpoint &amp;amp; Trace Unit): &lt;br /&gt;
** Data Watch: 4 Access-Break-Points ( z.B. der Debugger bleibt stehen, wenn das Programm auf einen Speicher zugreift oder der Wert einer Variablen einen bestimmten Wert annimmt). &lt;br /&gt;
** Trace Unit: Programmverlauf (durch Lesen des Program Counters) und Interrupt Aufrufe verfolgen, sowie Zeitmessungen.&lt;br /&gt;
&lt;br /&gt;
Einige der Trace-Funktionalitäten können über die JTAG-Schnittstelle angesprochen werden. Die schnelle Trace-Funktionalität (mit 4 bit Parallel-Port) steht nur mit der erweiterten DEBUG + ETM Schnittstelle zur Verfügung. Im Gegensatz zum Debugger-Teil (Run Control, Break Points und Memory Access) werden Trace-Funktionen nicht von allen Debuggern unterstützt. Debugger mit der vollen Trace-Funktionalität kosten deutlich mehr.&lt;br /&gt;
&lt;br /&gt;
* Beispiele für Trace-Port-Aktivierungen für verschiedene Hersteller: http://www.keil.com/support/man/docs/jlink/jlink_capture_tracedata.htm&lt;br /&gt;
&lt;br /&gt;
Die Aktivierung des parallelen Trace-Ports erfordert, je nach CPU Hersteller, zusätzliche Debugger-Makros für die Aktivierung und Port-Freischaltung. Zusätzlich sind die Schnittstellenauswahl und Einstellung (Frequenzen) im Entwicklungs-Tool (IDE) wichtig, um erfolgreich den Programm-Verlauf &amp;quot;tracen&amp;quot; zu können.&lt;br /&gt;
&lt;br /&gt;
=== Debug und Trace-Schnittstellen ===&lt;br /&gt;
Als Debug Interface stehen zwei Varianten zur Auswahl:&lt;br /&gt;
* [[JTAG]]: Dafür sind mindestens 6 Steuerleitungen nötig. Unterstützt Device Chaining: Mehrere verbundene Geräte können mit einem Debugger/Programmer gleichzeitig angesteuert werden.&lt;br /&gt;
* SWD (Serial Wire Debug): Hier mindestens 2  Steuerleitungen (3 mit SWO, zzgl GND und 3,3V). Die SWD Schnittstelle ist in der Regel schneller und kann auch Funktionen aus dem Trace-Teil beinhalten (z.B. ITM, dafür wird der SWO-Pin benötigt). Device Chaining ist mit dieser Schnittstelle nicht möglich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standard-JTAG Steckerbelegungen: &lt;br /&gt;
http://www.keil.com/support/man/docs/ulink2/ulink2_hw_connectors.htm&lt;br /&gt;
&lt;br /&gt;
=== Der 10polige JTAG-Stecker von mmvisual ===&lt;br /&gt;
mmvisual hat mit dieser Steckerbelegung die Standard JTAG Schnittstelle erweitert:&lt;br /&gt;
&lt;br /&gt;
Ich habe diesen Part in den Artikel [http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual JTAG] verschoben.&lt;br /&gt;
Hinzu gekommen ist die Adapterplatine 10-Polig auf Standard JTAG 20 Polig mit TTL/V24 Wandler. [http://www.mikrocontroller.net/articles/JTAG#Die_Adapterplatine Siehe hier.]&lt;br /&gt;
&lt;br /&gt;
== Hardware-Beschaltung ==&lt;br /&gt;
&lt;br /&gt;
Der STM32 benötigt für den Betrieb nur (Minimalbeschaltung):&lt;br /&gt;
&lt;br /&gt;
* VCC 2..3,3V (je nach Typ)&lt;br /&gt;
* AVCC 2..3,3V (sehr wichtig, der STM32 lässt sich ohne diese Spannung nicht programmieren)&lt;br /&gt;
* GND&lt;br /&gt;
* Reset Pin 100nF nach GND (ein Pull-Up Widerstand von ca. 40k ist intern vorhanden)&lt;br /&gt;
* [[#Bootmodi|Boot-Pins]]&lt;br /&gt;
&lt;br /&gt;
ansonsten nur ein paar einzelne Cs 100nF an VCC/GND.&lt;br /&gt;
&lt;br /&gt;
Um Programmieren zu können wird entweder noch die serielle Schnittstelle (Programmieren über den vorprogrammierten Bootloader) oder JTAG oder die SWD Schnittstelle benötigt.&lt;br /&gt;
&lt;br /&gt;
=== Bootmodi ===&lt;br /&gt;
Unterschiedliche Bootmodi lassen sich mittels der PINs BOOT0 und BOOT1 auswählen . Siehe Application Note [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Attachments/18225/AN2606.pdf AN2606]. Außer F1 besitzen neuere Familien ein SYSCFG_MEMR Register. In dieses Register kann man die gewünschten Boot0/1 Werte schreiben und nach einem Core-Reset (!= System_Reset) startet der Prozessor im gewünschten Mode. Eine Neu- bzw. Deinitialisierung der Peripherie empfiehlt sich! &lt;br /&gt;
&lt;br /&gt;
==== Boot from FLASH ====&lt;br /&gt;
Startadresse wird von 0x08000004 geladen&lt;br /&gt;
 BOOT0 Lo&lt;br /&gt;
 BOOT1 X &lt;br /&gt;
&lt;br /&gt;
==== Boot from SRAM ====&lt;br /&gt;
PC Startadresse wird an 0x200001E0 direkt angesprungen.&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Hi&lt;br /&gt;
Da der interne FLASH der stm32f1x laut Datenblatt nur für 1000 Schreibvorgänge ausgelegt ist, kann mittels BOOT0 (High) und BOOT1 (High) auch aus dem zuvor mit dem Debugger (JTAG/SWD) beschriebenen SRAM booten. &lt;br /&gt;
Hierbei gilt zu beachten:&lt;br /&gt;
 VTOR auf die NVIC Tabelle im SRAM vor dem auslösen des ersten Interrupts remappen.&lt;br /&gt;
&lt;br /&gt;
 Um ein vergleichbares Startverhalten zum FLASH zu erreichen, empfiehlt es sich,&lt;br /&gt;
 0xF1E0F85F an 0x200001E0 zu schreiben. Diese implizite Ausführung von &amp;quot;ldr.w pc,&lt;br /&gt;
 [pc, #-0x01E0]&amp;quot; beim Start erzwingt ein laden der Startadresse von 0x20000004.&lt;br /&gt;
&lt;br /&gt;
==== Boot from SYSMEM (RS232, CAN und USB) ====&lt;br /&gt;
PC Startadresse wird von 0x1FFFF004 geladen&lt;br /&gt;
 BOOT0 Hi&lt;br /&gt;
 BOOT1 Lo&lt;br /&gt;
&lt;br /&gt;
Ab F2 gibt es auch ein SYSCFG_MEMRMR Register. Schreibt man hier den Wert für &amp;quot;System Flash&amp;quot; und macht einen Corereset (keinen Systemreset), so landet man auch im Bootloader, unabhängig vom Wert der Boot Pins.&lt;br /&gt;
&lt;br /&gt;
Auch ohne JTAG lässt sich ein STM32 programmieren (Bootloader-Aktivierung). Dabei stehen, je nach CPU-Typ, verschiedene Möglichkeiten zur Verfügung:&lt;br /&gt;
* RS-232 (bisher alle STMs)&lt;br /&gt;
* USB (alle USB fähigen CPUs &amp;gt; F103)&lt;br /&gt;
* CAN (wie USB nur in bestimmten MCUs)&lt;br /&gt;
&lt;br /&gt;
3 zusätzliche Verbindungen müssen auf dem Board gepatcht werden. Für einen Test geht es auch mit Tastern für RESET und BOOT0.&amp;lt;br&amp;gt;&lt;br /&gt;
RESET=RTS (L-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT0=DTR (H-aktiv)&amp;lt;br&amp;gt;&lt;br /&gt;
BOOT1=LOW&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Details sind hier im Forum: [http://www.mikrocontroller.net/topic/141711 STM32 Programmiertool]&lt;br /&gt;
&lt;br /&gt;
Tools für den Download über den STM32-Bootloader:&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/PF257525 STSW-MCU005 STM32 and STM8 Flash loader demonstrator]&lt;br /&gt;
* [https://sourceforge.net/projects/stm32flash/ stm32flash] - Open source flash program (RS-232)&lt;br /&gt;
* [http://dfu-util.sourceforge.net/ dfu-util] - Open source flash program (USB)&lt;br /&gt;
&lt;br /&gt;
== Bewertung ==&lt;br /&gt;
=== Vorteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber ARM7:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Interrupt-Controller jetzt Teil des Prozessors (als Core Peripheral), die Vector Table ist jetzt eine echte Vektortabelle, keine Sprungliste wie bei ARM7. Durch Automatismen zwischen Core und NVIC (auto register save r0..r3, lr, sp, pc) bei Interrupt Entry wird eine deutlich schnellere Ausführungszeit bei Interrupts erreicht. Der Interrupt Code muss sich nicht mehr selbst um die Sicherung der o.g. Register kümmern und eine besondere Konfiguration der Handler im Compiler entfällt. Sind vor Beendigung einer ISR (d.h. Rücksprung zum User Code) weitere Interrupts pending, so werden diese ausgeführt, ohne dass eine komplette pop-push-sequenz der Register notwendig ist. Schön beschrieben ist es hier im [http://www.hitex.com/fileadmin/pdf/insiders-guides/stm32/isg-stm32-v18d-scr.pdf Insider&#039;s Guide] unter 2.4.5 / Seite 20 (der Link funktioniert nicht mehr, direkt nach isg-stm32-v18d-scr.pdf googlen kann helfen...).&lt;br /&gt;
* Thumb-2 Befehlssatz, deutlich schneller als Thumb-1 und ebenso kompakt&lt;br /&gt;
* Weniger Pins für Debugging benötigt durch SWD&lt;br /&gt;
* Mehr Hardware Breakpoints machen debuggen einfacher&lt;br /&gt;
* Software ist einfacher weil die Umschaltung zwischen ARM Mode und Thumb Mode wegfällt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber LPC1700 und LPC1300:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Flexiblere Gehäuseformen mit mehr Peripherie bei kleinen Gehäusen&lt;br /&gt;
* FW-Lib für alle STM32 gleich, alle AppNotes/Demos beziehen sich auf diese eine FW-Lib was die Entwicklung der eigenen Applikation sehr beschleunigt.&lt;br /&gt;
* Genauerer und flexiblerer ADC, insbesondere gegenüber LPC1300&lt;br /&gt;
* Flexiblere Varianten der Peripherie &amp;gt;&amp;gt; bei weniger einen deutlichen Preisvorteil&lt;br /&gt;
* ab 0,85 EUR (Stand 2010) Allerdings gibts den LPC1100 mit Cortex-M0 schon ab 0,65 $!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber SAM3/4:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fast alle Pins sind 5-Volt tolerant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorteile gegenüber anderen &amp;quot;Kleinen&amp;quot; wie z.B. PIC, Atmel usw.&#039;&#039;&#039;&lt;br /&gt;
* nahezu gleicher Preis bei Hobby Anwendungen&lt;br /&gt;
* 32 Bit ohne Umwege in Assembler rechenbar&lt;br /&gt;
* Schnelle direkte Offset-Adressierung ermöglicht effizienten Zugriff auf Stack-Variablen, lokal gespeicherte Flash-Konstanten, struct/Array-Elemente&lt;br /&gt;
* Einfache einheitliche Adressierung des gesamten Adressraums, d.h. Pointer auf Peripherieregister, RAM &amp;amp; Flash können exakt gleich behandelt werden, keinerlei Banking/Umschalt-Mechanismen erforderlich auch bei großem Flash/RAM&lt;br /&gt;
* Interrupt-Prioritäten und Prioritätsgruppen&lt;br /&gt;
* Effiziente Pointerarithmetik da Registerbreite=Adressbreite&lt;br /&gt;
* bessere Peripherie wie USB, Ethernet, Vielzahl an Timern&lt;br /&gt;
* der ARM-Core hat eine höhere Taktfrequenz und kann gleichzeitig mehr in weniger Takten berechnen&lt;br /&gt;
* Hardware-Division, bei einigen FPU zur effizienten float-Berechnung&lt;br /&gt;
* Mit größerem Flash/RAM verfügbar&lt;br /&gt;
* Code kann direkt aus dem RAM ausgeführt werden, Speicherschutz und privilegierter Ausführungsmodus können &amp;quot;Kernel&amp;quot;- vor &amp;quot;Anwendungs&amp;quot;-Code schützen, somit wird das dynamische Nachladen von Anwendungen aus externem Speicher effizient &amp;amp; sicher möglich&lt;br /&gt;
* ... und weitere 1000 Punkte ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Links&#039;&#039;&#039;&lt;br /&gt;
* [http://www.arm.com/files/pdf/ARM_Microcontroller_Code_Size_%28full%29.pdf Code Size Analyse zwischen verschiedenen µC]&lt;br /&gt;
&lt;br /&gt;
=== Nachteile ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil gegenüber LPC1700:&#039;&#039;&#039;&lt;br /&gt;
* STM32F1xx: nur 72 MHz statt 100 MHz (LPC1759: 120 MHz) Taktfrequenz; STM32F2xx hat diesen Nachteil nicht (ebenfalls 120MHz, STM32F4xx mit 180MHz)&lt;br /&gt;
* Der LPC1700 besitzt deutlich mehr Mechanismen, um die Auswirkung der Waitstates des Flash-ROMs auf Code- und Datenzugriffe zu reduzieren und das bedeutet mehr Performance bei gleicher Taktfrequenz. Beim STM32F2 entfällt dieser Nachteil wohl aufgrund des ART Accelerators. &lt;br /&gt;
* Alle LPC1xxx haben 32 Bit Timer. Bei den STM32 haben das nur die STM32F2xx und STM32F4xx (2 Stück)&lt;br /&gt;
* I2S Einheit von ST hat keinen FIFO und im 24/32Bit Modus müssen 2x16Bit Halbwörter übertragen werden. Wobei allgemein bei neuen ARM Prozessoren die vorhandenen DMA-Kanäle (basierend auf eigenen BUS-Kanälen und Speicherzugriffen) FIFO in beliebiger Größe bedeutet. (Gilt nicht bei bestimmten STM32F4xx)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nachteil für Hobby-Anwender&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Nicht direkt &amp;quot;Steckbrettauglich&amp;quot;, da kein DIL Gehäuse verfügbar. Der ebay-Shop dipmicro führt jedoch sehr günstige Lötadapter für Umsetzung von LQFP48 auf DIP48. QFP64 in 0.5mm Pinabstand und nicht 0.8mm wie AVR. Von NXP gibt es Cortex-M0 µC im DIL Gehäuse.&lt;br /&gt;
&lt;br /&gt;
* Viel Peripherie, Clocks müssen alle richtig eingestellt werden, ggf. Anpassung des Startup Codes usw.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Errata, Tipps und Tricks ==&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* AD-Wandler PA0: Im Errata steht, dass hier Fehler in der Wandlung entstehen könnten, also einen anderen Pin verwenden.&lt;br /&gt;
* CAN-Bus PD0/PD1: Remap geht erst ab der 100-Pin-Version. Steht im RM0008 unter 9.3.3.: &amp;quot;CAN1 alternate function remapping&amp;quot;. Alle Infos von RM0008 9.3.x sind interessant&lt;br /&gt;
* CAN und USB sind bei der F1 Serie nur bei der &amp;quot;◦Connectivity-Line&amp;quot; gleichzeitig nutzbar. Siehe Datenblätter.&lt;br /&gt;
* Mit internem RC-Oszillator kann die CPU mit maximal 64MHz betrieben werden. Mit einem externen Quarz sind dann 72MHz möglich.&lt;br /&gt;
* Für USB Betrieb muss die CPU mit 48MHz oder 72MHz betrieben werden (bei STM32F1xx).&lt;br /&gt;
* Der Idle Interrupt vom Usart wird zwar ausgelöst, aber nicht vom entsprechenden Statusflag angezeigt&lt;br /&gt;
* Der DMA fängt beim aktivieren immer von vorn an zu zählen, auch wenn er nur kurz angehalten wurde&lt;br /&gt;
* STM32F2xx hat kein Flash Size Register, bei STM32F4xx ist zwar ein flash Size Register beschrieben, kollidiert aber in der Adresse mit einem anderen Register&lt;br /&gt;
* Derivate mit internem EEPROM und nur einer Speicherbank haben das &amp;quot;Feature&amp;quot; bei write/erase des Data-Flashes (EEPROM) einen kompletten stall der code execution zu verursachen (inkl. ISRs, DMA). Desgleichen bei write/erase des internen Flash (ISP-routinen, EEPROM-Emulation).&lt;br /&gt;
* Der I2C hat diverse Fehler, welche im Errata des jeweiligen Modells (z.B. [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/errata_sheet/CD00238166.pdf STM32F105xx and STM32F107xx Errata sheet] ) zu finden sind. Workarounds hierzu finden sich in der Application Note [http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00209826.pdf AN2824]. Am Besten benutzt man jedoch die I2C Communication peripheral application library (CPAL) von ST ([http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF258336 STSW-STM32127])&lt;br /&gt;
* [http://blog.frankvh.com/category/stm32/ weitere undokumentierte Features]&lt;br /&gt;
* Interrupt-Flags in Statusregistern der diversen Peripherals wie der Timer müssen zu &#039;&#039;&#039;Beginn&#039;&#039;&#039; (bzw. möglichst weit vor dem Return) der ISR zurückgesetzt werden, da die ISR sonst eventuell 2x ausgeführt wird (Siehe [https://my.st.com/public/Faq/Lists/faqlst/DispForm.aspx?ID=143&amp;amp;level=1&amp;amp;objectid=141 STM32 FAQ] und [http://www.mikrocontroller.net/topic/312393#new Forum]).&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
==== Allgemein ====&lt;br /&gt;
Standard-GPIOs des STM32 und im speziellen das BSRR&lt;br /&gt;
* Die Register bestehen aus zwei Teilen, der obere Teil BR0-15 signalisiert durch ein gesetztes Bit die zu löschenden Bits im IO-ODR-Register,der untere Teil BS0-15 signalisiert durch ein gesetztes Bit die zu setzenden Bits. Besonders ist, wenn beide Bits (oberer und unterer Teil) gesetzt sind hat das Set-Bit Priorität. Durch eine geschickte Kombination von oberen und unteren Teil kann man Speicherzugriffe Sparen. z.B. kann man solch ein Konstrukt zum ändern der unteren 8 Bit des IO-ODR-Registers &amp;quot;uint32_t temp = GPIOC-&amp;gt;ODR &amp;amp; 0xff00; GPIOC-&amp;gt;ODR = temp | (Eingabe &amp;amp; 0x00ff)&amp;quot; um einen Speicherzugriff verkürzen zu &amp;quot;GPIOC-&amp;gt;BSRR = (Eingabe &amp;amp; 0x00ff) | ((0x00ff) &amp;lt;&amp;lt; 16)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== GCC ====&lt;br /&gt;
Um den GCC direkt zu verwenden (zB. mit selbstgebautem makefile), falls man das nicht von einer Entwicklungsumgebung machen lässt, siehe zunächst [[ARM GCC]]. STM32-spezifisches ist:&lt;br /&gt;
* Wird die [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] und ein Quarz verwendet, so muss noch per Präprozessor-Definition die Frequenz des Quarzes angegeben werden mittels z.B. -DHSE_VALUE=8000000 für 8MHz (wie auf dem STM32F4 Discovery).&lt;br /&gt;
&lt;br /&gt;
===== Startupcode &amp;amp; Linkerscript =====&lt;br /&gt;
* Damit der compilierte Code an den richtigen Stellen im Controller landet (d.h. dem Flash) muss man dem Linker ein Linkerscript mitgeben. Dies geht per &amp;quot;-T &#039;&#039;pfad_zum_linkerscript.ld&#039;&#039;&amp;quot; an den Linker-Befehl. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Linkerscript für die Atollic TrueSTUDIO IDE, dieses kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich das Script im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM324x7I_EVAL/stm32_flash.ld&amp;quot; des Archives.&lt;br /&gt;
* Damit beim Starten die richtigen Initialisierungen vorgenommen werden (wie globale Variablen und bei C++ Konstruktoren globaler Objekt-Instanzen) muss als erstes ein Startupcode laufen, der dann die main()-Funktion aufruft. Der Startupcode ist meistens in Assembler geschrieben, C-Code ist aber auch möglich. Im Archiv der [[#.E2.80.8ESTM32_Standard_Peripheral_Library|STM32 Standard Peripheral Library]] befindet sich ein Beispiel-Startupcode für die Atollic TrueSTUDIO IDE, dieser kann direkt mit dem GCC verwendet werden. Beispielsweise für den STM32F4 befindet sich der Code in Assemblerform im Pfad &amp;quot;/STM32F4xx_DSP_StdPeriph_Lib_V1.1.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f40xx.s&amp;quot; des Archives. Der Assemblercode kann per arm-none-eabi-as (Flags s.o.) assembliert werden, die resultierende .o -Datei normal mitgelinkt.&lt;br /&gt;
&lt;br /&gt;
Zusammen bieten die beiden Dateien der Anwendung ein Standard-C-Interface, d.h. man kann wie gewohnt globale Variablen verwenden und seinen Code in die main()-Funktion schreiben.&lt;br /&gt;
&lt;br /&gt;
=== Tipps für Umsteiger von Atmel/PIC/8051 ===&lt;br /&gt;
* Prozessortakt hat unterschiedliche Taktquellen und eine PLL.&lt;br /&gt;
* Alle Peripheriemodule haben einen extra Clock, den man aktivieren muss.&lt;br /&gt;
* Wenn man z.B. einen UART benutzen möchte, so muss man den Clock vom UART, Alternate Function IO (AFIO) und den GPIO-Port aktivieren.&lt;br /&gt;
* Ansonsten hat man nahezu doppelt so viele Möglichkeiten in den Peripheriemodulen.&lt;br /&gt;
* Interrupt-Flags müssen in der ISR selber gelöscht werden&lt;br /&gt;
* Forum zu [http://www.mikrocontroller.net/topic/175888 Interrupts vs. Events]&lt;br /&gt;
&lt;br /&gt;
=== Errata vom STM32F4xx die nicht im Errata von ST stehen ===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/267439#2788478 Aktivieren von DMA], wenn mehr als 3 DMA Kanäle aktiviert werden, kann es sein dass die nicht alle korrekt bedient werden. Auch klappt der DMA mit dem FSMC nicht immer zuverlässig. [https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FWarning%20limit%20simultaneous%20DMAs%20to%202&amp;amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;amp;currentviews=811 siehe hier] [http://blog.frankvh.com/2012/01/13/stm32f2xx-stm32f4xx-dma-maximum-transactions/ und hier]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/260637#2700761 Nerviger Bug in &amp;quot;stm32f4xx.h&amp;quot;] Änderung Struktur GPIO_TypeDef&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/261690#2714754 Batterie wird leer gezogen], nur bei manchen Chips mit Rev. A&lt;br /&gt;
* [http://www.efton.sk/STM32/STM32F4xx_doc_errors.txt Liste von Dokumentations-Fehlern]&lt;br /&gt;
&lt;br /&gt;
== Bezugsquellen ==&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
Versand Europaweit im endasmedia.ch Shop&lt;br /&gt;
* STM32F105 Controller für 2.50€ [http://shop.endasmedia.ch/index.php?id_product=8&amp;amp;controller=product&amp;amp;id_lang=1 shop.endasmedia.ch]&lt;br /&gt;
&lt;br /&gt;
Versandhäuser für Privatpersonen&lt;br /&gt;
* [http://www.reichelt.de/STM-Controller/2/index.html?;ACTION=2;LA=2;GROUPID=2950; Reichelt]&lt;br /&gt;
* [http://darisusgmbh.de/shop/index.php?cat=c2692_ARM-Cortex.html Darisus]&lt;br /&gt;
* [http://www.hbe-shop.de HBE (Farnell Programm für Private)] &lt;br /&gt;
* [http://www.sander-electronic.de/be00069.html Sander]&lt;br /&gt;
* [http://www.tme.eu/de/katalog/index.phtml#cleanParameters%3D1%26search%3DSTM32F10%26bf_szukaj%3D+ TME] &lt;br /&gt;
* [http://teske-electronics.de/index.php?cPath=3_9_53 Teske electronics]&lt;br /&gt;
* [http://de.rs-online.com/web/c/halbleiter/prozessoren-und-mikrocontroller/mikrocontroller/?sort-by=default&amp;amp;sort-order=default&amp;amp;applied-dimensions=4294417325&amp;amp;lastAttributeSelectedBlock=4294425895 RS-Online]&lt;br /&gt;
&lt;br /&gt;
Gewerblich liefern natürlich viele wie EBV, [http://de.futureelectronics.com Future Electronics], Mouser, Farnell, Digikey usw...&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Boards ===&lt;br /&gt;
* Siehe [[:Kategorie:ARM-Boards]]&lt;br /&gt;
* [http://shop.embedded-projects.net/index.php?module=artikel&amp;amp;action=gruppe&amp;amp;id=14 Im Shop von Embedded Projects]&lt;br /&gt;
* [http://www.watterott.com/de/Boards-Kits/ARM/ARM-Cortex-M3 Cortex M3 bei Watterott]&lt;br /&gt;
* [http://www.raisonance.com/~primer-starter-kits__microcontrollers__tool~tool__T018:4enfvamuxbtp.html Primer und Primer2 von Raisonance]&lt;br /&gt;
* [http://www.sander-electronic.de/es0028.html Sander Electronic]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/MP32F103-Stick:_Ein_Mini-Mikrocontroller-Board_mit_USB_und_bis_zu_4MB_Datenspeicher Artikel im Wiki, ARM mit USB und 4MB Speicher]&lt;br /&gt;
* [http://www.futurlec.com/STM32_Development_Board.shtml Futurlec Evalboard, ebenso Header-Board]&lt;br /&gt;
* [http://www.propox.com/products/t_174.html Propox, Header-Boards für 103R und 103V sowie Trägerplatine dafür]&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/Cortex_M3_OCM3U Cortex M3 Artikel im Wiki]&lt;br /&gt;
* [http://olimex.com/dev/index.html STM32 bei Olimex]&lt;br /&gt;
* [http://de.farnell.com/jsp/displayProduct.jsp?sku=1824325&amp;amp;action=view&amp;amp;CMP=GRHS-1000962 STM32Discovery bei Farnell] Mikrocontroller Board (STM32F100RBT6B) mit onboard USB-Programming Interface für ca. 12,50€&lt;br /&gt;
* [http://www.de.rs-online.com/web/p/products/7458434/ STM32Discovery bei RS-Components] 12,65 € +MwSt.&lt;br /&gt;
* [http://www.segor.de/#Q=STM32 VL DISCOVERY] STM32 Discovery bei Segor&lt;br /&gt;
* [http://www.watterott.com/de/STM32F4Discovery STM32F4DISCOVERY] STM32F4 Cortex M4 Controller mit JTAG-Debugger auf der Platine bei Watterott für 16,66EUR.&lt;br /&gt;
* [http://www.conrad.de/ce/de/product/443910/ STM32F4 Discovery Kit bei Conrad] 17,11 €&lt;br /&gt;
* [http://www.ST.com/stm32l152c-discovery STM32 L1 Discovery] mit kleiner LCD-Anzeige; [http://www.ST.com/web/en/catalog/tools/PF250990 Weitere Informationen dazu]&lt;br /&gt;
* [http://www.mcu-raisonance.com/~open4-development-platform__microcontrollers__tool~tool__T018:g65gu6ghg2n.html/ Open 4 oder auch genannt Evo-Primer]&lt;br /&gt;
* [http://www.wayengineer.com/index.php?main_page=index&amp;amp;cPath=50_66&amp;amp;page=1&amp;amp;sort=3a WayEngineer]&lt;br /&gt;
* [http://thinkembedded.ch/ST-STMicroelectronics:::24.html Im Thinkembedded Shop] in der Schweiz / DiscoveryF4, div. ETT und Olimex Boarde ab 20,18 CHF / 16,15 EUR (inkl. MwSt.) zzgl. Versandkosten&lt;br /&gt;
* [http://shop.myavr.de/ARM-Produktlinie/STM32F4-Discovery.htm?sp=article.sp.php&amp;amp;artID=200072 Im myAVR Shop] DiscoveryF4 mit möglichem Zubehör 16,45 EUR (inkl. MwSt.) zzgl. Versandkosten&lt;br /&gt;
* [http://www.keil.com/boards/cortexm.asp Keil/ARM Demoboards]&lt;br /&gt;
* [http://www.phytec.de Phytec]&lt;br /&gt;
* [http://shop.myavr.de/index.php?sp=artlist_kat.sp.php&amp;amp;katID=37 verschiedene ARM Produkte und Erweiterungen bei myAVR]&lt;br /&gt;
* [http://re.reworld.eu/de/produkte/s64dil-405/index.htm S64DIL-405 STM32Fxxx ARM Cortex M3 Mikrocontrollermodul mit USB-Schnittstelle, Steckbretttauglich] (Leerplatine eignet sich auch für STM32F1xx Prozessoren.)&lt;br /&gt;
* [http://www.amazon.de/STM32F4-DISCOVERY-STM32F429-Cortex-M4-Development/dp/B00HGG0KHY STM32F429 DISCOVERY Cortex M4 mit 2,4&amp;quot; Touch-TFT, 3-Achs Sensor, 64 MBit SDRAM ab ~25 EUR bei Amazon, Ebay u.a.]&lt;br /&gt;
&lt;br /&gt;
== Weblinks, Foren, Communities, Tutorials ==&lt;br /&gt;
* [http://www.mikrocontroller.net/articles/STM32_-_Einstieg_mit_Em::Blocks STM32 - Einstieg mit Em::Blocks Tutorial]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/173753 Diskussion zum Artikel]&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/mikrocontroller-elektronik?filter=ARM*+STM32*+Cortex* Suche im Forum]&lt;br /&gt;
* [[STM32 für Einsteiger]]&lt;br /&gt;
* [[STM32 CooCox Installation]]&lt;br /&gt;
* http://www.openstm32.org/System+Workbench+for+STM32&lt;br /&gt;
* [https://my.st.com/public/STe2ecommunities/mcu/Lists/ARM%20CortexM3%20STM32/AllItems.aspx Forum auf der ST Homepage] &lt;br /&gt;
* [http://www.stm32circle.com/hom/index.php STM32 Community] &lt;br /&gt;
*[http://joe-c.de/pages/posts/einstieg_mikrocontroller_stm32f103_101.php Einstieg:  STM32board mit Kamera (deutsch)] &lt;br /&gt;
* [http://www.ebv.com/fileadmin/products/Press_Print/Brochures/Product_Brochures/EBV_Cortex%20Collection_V2.pdf Übersicht der Cortex Prozessoren und deren Hersteller (nicht nur ST, von EBV)]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/258652 Tutorial]&lt;br /&gt;
* [http://diller-technologies.de/stm32_wide.html STM32 Tutorial in Deutsch von Diller Technologies]&lt;br /&gt;
* [http://mySTM32.de STM32 C und C++ Tutorial in Deutsch ]&lt;br /&gt;
* [http://mikrocontroller.bplaced.net STM32F4 Quellcode-Librarys und CooCox-Projekte in Deutsch ]&lt;br /&gt;
* [http://myugl.de Tutorial für Grafik-Librarys und SiSy-Projekte in Deutsch ]&lt;br /&gt;
* [http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF251717 MicroXplorer MCU graphical configuration tool ]&lt;br /&gt;
* [http://www.harerod.de/docs/CoreMark_STM32.pdf Testbericht über CoreMark 1.0 auf Cortex-M3/M4 mit verschiedenen Compiler- und MCU-Einstellungen]&lt;br /&gt;
* [http://klaus4.blogspot.com/2014/05/stm32f4-discovery-mit-opensource.html STM32-Toolchain mit Eclipse CDT 4.3, GnuArmEclipse, OpenOCD 0.8.0, Gnu Arm GCC 4.8, STM32CubeMX]&lt;br /&gt;
* [http://libopencm3.org/wiki/Main_Page libopenmc3 OpenSource libs für STM32 und ähnliche] &lt;br /&gt;
* [https://www.mikrocontroller.net/topic/423300#new Totzeitrechner für STM32]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:STM32]]&lt;br /&gt;
[[Kategorie:Mikrocontroller]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Reichelt-Wishlist&amp;diff=92557</id>
		<title>Reichelt-Wishlist</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Reichelt-Wishlist&amp;diff=92557"/>
		<updated>2016-03-22T09:11:22Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Reichelt Wunschliste =&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite können Wünsche zur Erweiterung des Reichelt-Lieferprogramms eingetragen werden. Es ist keine offizielle Wunschliste von Reichelt und es ist nicht bekannt, ob Reichelt-Mitarbeiter diese Seite regelmäßig sichten. Reichelt sollte sicherheitshalber regelmäßig angeschrieben werden, damit diese Liste nicht in Vergessenheit gerät.&lt;br /&gt;
&lt;br /&gt;
Damit sich die beliebtesten Artikel herauskristallisieren, macht jeder einfach &#039;&#039;&#039;einen&#039;&#039;&#039; virtuellen Strich dahinter: | (Windows: ALT-GR Taste und &amp;lt; Taste drücken, Mac OS X: Alt-Taste und 7 Taste drücken). Alle fünf Striche (|||||) bitte immer ein Leerzeichen einfügen. Blöcke von 50 Strichen werden regelmäßig gegen eingefärbte Kolonnen von Ausrufezeichen ausgetauscht, die den Reichelt-Mitarbeitern hoffentlich umso mehr auffallen ;)&lt;br /&gt;
&lt;br /&gt;
Neue Artikel einfügen darf und soll natürlich auch jeder - aber bitte die Liste vorher durchgehen (Tipp: Browser-Suchfunktion nutzen)! Einfach ganz viele Striche auf einmal hinter einem Artikel einzufügen ist zwecklos. Das erkennt man in der History und es gibt viele Leute, die diese Seite überwachen...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nicht sinnvoll&#039;&#039;&#039; ist etwas sehr exotisches, wie z.&amp;amp;nbsp;B. einen ganz bestimmten super schnellen AD-Wandler hier aufzulisten! Neue Artikel müssen sich für Reichelt ja auch rentieren und wirtschaftlich &amp;quot;an den Mann bringbar&amp;quot; sein. [Die Entscheidung, ob sich was rentiert und ob es exotisch ist, sollte man vielleicht Reichelt und den eventuellen späteren Strichle-Setzern überlassen, statt im Voraus die Schere im Kopf walten zu lassen.]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Wunschliste =&lt;br /&gt;
== Halbleiter ==&lt;br /&gt;
=== Controller, FPGA und CPLD ===&lt;br /&gt;
&lt;br /&gt;
* Ajile aj-100 (Java Real-Time Prozessor) |||||&lt;br /&gt;
* Allgemein mehr XMEGAs&lt;br /&gt;
* ALTERA CPLD EPM30xx - Familie |||&lt;br /&gt;
* ALTERA CPLD EPM70xx - Familie ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* ALTERA Cyclone2 - Familie ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* ALTERA Cyclone3 - Familie ||||| ||&lt;br /&gt;
* ALTERA Flex10K - Familie ||||&lt;br /&gt;
* ALTERA MAX-II (CPLDs) ||||| ||||| ||||| ||||&lt;br /&gt;
* ALTERA MAX-V CPLDs |&lt;br /&gt;
* ARM: Cortex M3 Nachfolger für die LPC2x&lt;br /&gt;
* Atmel AT89LP4052 PDIP ||||| ||||| ||||&lt;br /&gt;
* Atmel AT89S2051/4051 |||||&lt;br /&gt;
* Atmel AT90PWM3B (µC für Servosteuerungen und z.b. Motorsteuerungen) ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Atmel ATA6612/13 (LIN-Bus SoC) ||&lt;br /&gt;
* Atmel ATxmega192A3U-AUR |&lt;br /&gt;
* Atmel ATmega 16L und 32L in TQFP (wäre ATmega 16/32L8 TQ) ||||| ||&lt;br /&gt;
* Atmel ATmega16M1 (CAN) in TQFP ||||&lt;br /&gt;
* Atmel ATmega324P in TQFP und PDIP ||||| ||||| ||||| ||&lt;br /&gt;
* Atmel ATmega324PV in TQFP und PDIP |||&lt;br /&gt;
* Atmel ATmega48P in TQFP und PDIP ||||&lt;br /&gt;
* Atmel ATmega644p(a) / ATmega1284p(a) in TQFP und PDIP ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Atmel ATtiny2313V in SO und PDIP ||||| |&lt;br /&gt;
* Atmel ATtiny1634 |||&lt;br /&gt;
* Atmel ATtiny261 (auch 461 und 861; bevorzugt DIP) ||||| ||||| ||||| ||| {{Gibt es bei reichelt bereits :) |FF0000}}&lt;br /&gt;
* Atmel ATtiny441 und ATtiny841 (4x 16bit PWM) |||&lt;br /&gt;
* Atmel AVR Controller mit Funkanbindung z.&amp;amp;nbsp;B. AT86RF230, AT86RF211, AT86RF401, dazu passende Quarze (evtl. SMD) 18,080 MHz (Crystek P/N 016758), Spulen 39nH. {{Reichelt50|FF0000}}{{Reichelt50|00FF00}}||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Atmel AVR mit USB: AT90USB82 und ATmega32u4 {{Reichelt50|FF0000}} ||||| ||&lt;br /&gt;
* Atmel AVR32 im TQFP ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Atmel Cortex M3 SAM3S im QFN/LQFP Gehäuse ||&lt;br /&gt;
* Atmel Dream Sound Synthesizer Chips, z.&amp;amp;nbsp;B. ATSAM3103 und ATSAM3308 ||||| ||||&lt;br /&gt;
* Axis Etrax 100LX Risc Processor (kostenloses Linux-System vorhanden) ||||| ||||&lt;br /&gt;
* Bessere Auswahl: statt MSP430F147, F148, F149 wenigstens einen mit DAC -&amp;gt; MSP430F16x&lt;br /&gt;
* CY7C68013A-56PVXC (Cypress EZ-USB FX2LP) ||||| |||&lt;br /&gt;
* Cypress PSoC Mikrocontroller ||||| ||||| ||||| ||&lt;br /&gt;
* Freescale DSP56F801 ||||&lt;br /&gt;
* Freescale HCS12 Controller ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Freescale MC9S08QD4 ||||&lt;br /&gt;
* Freescale MC9S08QEx |&lt;br /&gt;
* Freescale MC9S08QG8 (DIP 16) ||||| ||||| ||||| ||||&lt;br /&gt;
* Freescale Prozessoren (Coldfire) (16 + 32 Bit) ||||| ||&lt;br /&gt;
* Infineon XC866 ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Infineon xmc 2go |&lt;br /&gt;
* Infineon xmc 1100 in tssop gehäuse |&lt;br /&gt;
* Infineon Boot Kit XMC1100 |&lt;br /&gt;
* Lattice GAL 26V12 ||&lt;br /&gt;
* Lattice ispMACH 4032C / 4064C / 4128C |||||&lt;br /&gt;
* Luminarymicro Stellaris Serie (Cortex-M3) ||||| ||&lt;br /&gt;
* Maxim/Dallas DS89C450 |&lt;br /&gt;
* Mehr FPGAs (v.a aktuellere) von Xilinx, z.&amp;amp;nbsp;B. Spartan III , ALTERA CYCLONE II (v.a. auch größere Typen, die noch im TQFP-Gehäuse zu haben sind wie z.&amp;amp;nbsp;B. XC3S400 oder XC3S500E (PQFP208)) {{Reichelt50|FF0000}}{{Reichelt50|00FF00}}{{Reichelt50|0000FF}}{{Reichelt50|00FFFF}}||||| ||||| | ||||| ||||| ||||| ||&lt;br /&gt;
* Microchip dsPIC33FJ128GP802 |||||&lt;br /&gt;
* Microchip PIC12F1822 |&lt;br /&gt;
* Microchip PIC24HJ64GP202-I/SP |&lt;br /&gt;
* NXP LPC1114 (auch in DIP verfügbar!) ||||| ||||&lt;br /&gt;
* NXP LPC1313 |||||&lt;br /&gt;
* NXP LPC1343 ||&lt;br /&gt;
* NXP LPC1751 |||&lt;br /&gt;
* NXP LPC1754 ||||&lt;br /&gt;
* NXP LPC214x-Serie ARM7-Controller ||||| ||||| |||||&lt;br /&gt;
* NXP LPC23xx/24xx ||||| ||&lt;br /&gt;
* NXP SAA5281 Videotextinterface ||||| ||||&lt;br /&gt;
* Parallax Propeller CPU, 8 Cogs - DIP 40 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* PICAXE von Revolution Education Ltd ||&lt;br /&gt;
* Renesas M16C ||||| ||||&lt;br /&gt;
* Silabs C8051F320 USB Mikrocontroller ||&lt;br /&gt;
* Silabs C8051F340 USB Mikrocontroller ||&lt;br /&gt;
* Silabs Si4735 im SSOP-Gehäuse (AM/FM-Empfänger) ||||&lt;br /&gt;
* SSV DIL/NetPCs [http://www.dilnetpc.com]http://www.dilnetpc.com ||||| ||||| ||||&lt;br /&gt;
* ST ST7MC... (µC für Servosteuerungen, und vor allem Brushless-Motoren) |||||  ||||| |&lt;br /&gt;
* QFP Bausteine der STM32F4 Serie (Cortex-M4)&lt;br /&gt;
* ST STR7 Serie (ARM7TDMI) ||&lt;br /&gt;
* TI MSP430F167, TI MSP430F168 ||||&lt;br /&gt;
* TI MSP430F2001/2/3 etc. im RSA-Gehäuse (=QFN) ||||| ||&lt;br /&gt;
* TI MSP430F2618 |||&lt;br /&gt;
* TI MSP430FG4618 |&lt;br /&gt;
* TI MSP430G2553IN20 viele MSP430 Gs im DIP-Gehäuse für Launchpad-Besitzer ||&lt;br /&gt;
* TI TMS470 Arm7 ||||| ||||| ||||| ||||| |&lt;br /&gt;
* TI TUSB3210 ||||| ||||&lt;br /&gt;
* Ubicom SX20 SX28 IP2022 ||&lt;br /&gt;
* Western Design Center 65c816 |||&lt;br /&gt;
* XC3S 400 TQ144 |||&lt;br /&gt;
* Zilog Z8 Encore-Microcontroller (bis 64k Flash, I²C, SPI, 2xUART, ADC, on-Chip Debugger ...) [http://www.zilog.com/products/family.asp?fam=225]www.zilog.com ||||| ||&lt;br /&gt;
* Zilog ZNEO-Microcontroller (Z16Fxxx, bis 128k Flash, 4k RAM, bis zu 76 I/Os, 3 Timer, 10-bit A/D, externer Daten-/Adressbus, on-Chip Debugger) [http://www.zilog.com/products/family.asp?fam=236] www.zilog.com |&lt;br /&gt;
* Upgrade der XMEGA auf die XMEGA U Serie (zb ATXMEGA 64A1 -&amp;gt; ATXMEGA 64A1U) |&lt;br /&gt;
&lt;br /&gt;
=== Speicher ===&lt;br /&gt;
&lt;br /&gt;
* 24LC256 oder 24AA256 oder 24LC512 oder 24AA512 ||||| |||||&lt;br /&gt;
* 24AA02E48 (EEPROM mit einprogrammierter MAC-Adresse) ||&lt;br /&gt;
* 3.3V async SRAM ab 16KByte ||||| |||&lt;br /&gt;
* 3.3V DRAM ||||| ||&lt;br /&gt;
* EEPROM mit SPI Schnittstelle 25XX Serien ||||| ||||&lt;br /&gt;
* F-RAM mit SPI von RAMTRON ||||| |||||&lt;br /&gt;
* FM25L16 o. FM25L256 SPI-FRAM ||&lt;br /&gt;
* FPGA Konfigurations-EEPROMS AT17LV256, AT17C65/128/256.../XCF04S/... ||||| ||||| ||||| |||||&lt;br /&gt;
* NexFlash spiFlash NX25P16 (16MBit serial Flash im SO8-Gehäuse) ||||| ||||| ||||| |||&lt;br /&gt;
* RAMs (SRAM oder DRAM) mit ordentlicher Kapazität (z.&amp;amp;nbsp;B. HY57V641620HG oder besser) ||||| ||||| ||||| |||||&lt;br /&gt;
* Schnelles statisches RAM 128kB (10, 12, 15 oder 20ns, z.&amp;amp;nbsp;B. Samsung K6R1008C1D-UI10 oder CY7C1019D-10ZSXI) (5V/3,3V) {{Reichelt50|FF0000}}||||| ||||| |||||&lt;br /&gt;
* Serielle SRAMs (Microchip 23K256) ||&lt;br /&gt;
&lt;br /&gt;
=== Einzeltransistoren und Diode ===&lt;br /&gt;
* 2SC1971 Transistor mit hoher Frequenz und viel Leistung für Endstufen ||&lt;br /&gt;
* BF556 (SMD-Version vom BF256) |&lt;br /&gt;
* BSH205 P-Channel 1.5V(GS), 0.75A, 12V D-S |||&lt;br /&gt;
* BUF420AW Schaltnetzteil Transistor von STM |||||&lt;br /&gt;
* IPW60R045CS Infineon MOSFET 600V 45mOhm Rdson 30ns tr+tf (niedrigster Rdson in der Klasse) |&lt;br /&gt;
* Si4562DY N- and P-Channel 2.5-V (G-S) MOSFET SMD ||||| ||||| ||&lt;br /&gt;
* SPP20N60C3 Infineon MOSFET 600V 190mOhm Rdson &amp;lt;10ns tr+tf (Schnellste Schaltzeit in der Klasse) ||||| |&lt;br /&gt;
* STX13005 wenigstens EINEN 700V Transistor in TO92 zur Reparatur von Schaltnetzteilen&lt;br /&gt;
* mehr FETs und IGBTs (nicht nur IRF, sehr gut IXYS &amp;lt;- und sauteuer!) ||||| ||||&lt;br /&gt;
* MJD31C NPN Transistor SMD DPAK 3&lt;br /&gt;
* Digitaltransistoren (BCR*), auch als Pärchen NPN/PNP (BCR10, BCR08pn) ||||| ||||&lt;br /&gt;
* Philips PDTD113E/123E und PDTB113E/123E (PNP und NPN im sot23 mit internen Widerständen für Basis und PullUp/Down ||&lt;br /&gt;
&lt;br /&gt;
=== Op-Amps, MOSFET-Treiber ===&lt;br /&gt;
&lt;br /&gt;
* OPA134, OPA2134, OPA4134 low noise audio OpAmps ||&lt;br /&gt;
* AD623 Single Supply,Rail-Rail, InstrOpamp ||||| |&lt;br /&gt;
* AD628 InstrOpAmp, high voltage inputs |&lt;br /&gt;
* AD8601 Rail to Rail Opamp |&lt;br /&gt;
* IPS5451S intelligenter Leistungsschalter 50 V, 35 A, 25 mΩ |&lt;br /&gt;
* High Side Driver, 8-fach, z.B. AMIS−39101 (350 mA, 3Ω, SPI) |&lt;br /&gt;
* IR2011 MOSFET Treiber |||&lt;br /&gt;
* IR21844 DIL (High-Speed IGBT-Driver) |||&lt;br /&gt;
* IR3313 o.ä. Intelligenter Leistungsschalter 32V/90A, einstellbare Strombegrenzung |||&lt;br /&gt;
* IRF7503/IRF7506 Dual MOSFET SMD ||||| |||||&lt;br /&gt;
* IRFI4212H-117P Doppel-MOSFET (f. Klasse D-Verstärker) |&lt;br /&gt;
* Leistungs-OP LM675 von National ||&lt;br /&gt;
* LM397, LM321 o.ä. single op-amp in SOT23-5 5-30V supply {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* MAX4420 MOSFET Driver ||&lt;br /&gt;
* MAX4429 MOSFET Driver ||&lt;br /&gt;
* MC 34152 D-SMD SO8 Dual MOSFET Driver |&lt;br /&gt;
* Mehr FET-Treiber (TI UCC3372x, HIPxxx , die neueren Brückentreiber von Maxim ||||| |||&lt;br /&gt;
* Schnellere und gleichzeitig günstige OpAmps; Beispiel AD8055 ||&lt;br /&gt;
* TLC2264 (Quad Rail-to-Rail Operational Amplifier) |||&lt;br /&gt;
* TLV2782 (1,8V Rail-to-Rail OP) &#039;&#039;&#039;unklar: War &amp;quot;TLV27(2&amp;quot;&#039;&#039;&#039; |||||&lt;br /&gt;
* TLC3702 Komparator ||&lt;br /&gt;
* TLV2382ID Rail-Rail-OP von TI ||&lt;br /&gt;
* Sehr schnelle Op-Amps wie LMH6733 o.a in single und trible ||&lt;br /&gt;
&lt;br /&gt;
=== Linear- und Schaltregler (Buck, Boost, DC/DC,...) ===&lt;br /&gt;
&lt;br /&gt;
* 5,2V Lowdrop Längsregler LF52 im TO252AA von STM |||||&lt;br /&gt;
* Größere Auswahl an Step-up Reglern ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* L4941 Spannungsregler 5V/1A in SMD-Ausführung (im DPAK Gehäuse, TO220 vorhanden) ||||| ||||| |&lt;br /&gt;
* L5970 o. L5972 1 bzw. 2A, 250kHz Schaltregler im SO8 | (L5970 in SO8 vorhanden)&lt;br /&gt;
* L5973D 2,5A, 250kHz, Schaltregler im SO8 (ca. 1€) ||||| (inzwischen vorhanden)&lt;br /&gt;
* LF50ABDT Spannungsregler SMD DPAK 5.0V very low drop |&lt;br /&gt;
* LM1084-ADJ (low dropout voltage positive regulator) | (nur in 3V3 und 5V Variante vorhanden)&lt;br /&gt;
* LM1117 (low dropout voltage regulator) - 1,8V |||(nur in 1V8 nicht vorhanden, ADJ vorhanden)&lt;br /&gt;
* LM1117MPX-1.8 und LM1117MPX-3.3 (SMD-Spannungsregler SOT-223) ||||| ||||| ||||| |&lt;br /&gt;
* LM2734 Schaltregler |||||&lt;br /&gt;
* LM317EMP oder LM317AEMP SMD-Spannungsregler einstellbar (SMD TO-223 Gehäuse) ||||| ||||| |||| (ENP vorhanden)&lt;br /&gt;
* Maxim MAX629, MAX1795, MAX1703 (Aufwärtsregler / Step-Up-Konverter) ||||| ||||| |||||&lt;br /&gt;
* MAX859CSA |&lt;br /&gt;
* MAX 8865 Dual, Low-Dropout, 100mA Linear Regulator |&lt;br /&gt;
* MC78LCxx Serie - Ultra Low Drop Spannungsregler 3-5 Volt mit 1 Mikro-Ampere Ruhestrom ||||| ||&lt;br /&gt;
* MIC29300/29301 Spannungsregler 5,0V 3A im TO263(SMD) Gehäuse ||&lt;br /&gt;
* NCP3063: 1.5 A, BUCK _&amp;amp;_ BOOST Inverting Switching Regulator DIP8/SOIC8 (MC34063 upgrade) (0,32$) |&lt;br /&gt;
* RECOM R-523.3PA fertig Schaltregler 4V - 18V Eingang, variabler Ausgang (Nominalspannung 3.3 V) mit nur 2-4 externen Bauteilen bei &amp;gt; 90% Effizienz &lt;br /&gt;
* RECOM  R-723.3P Schaltregler 4V - 28V Eingang, variabler Ausgang (Nominalspannung 3.3 V) mit nur 2-4 externen Bauteilen bei &amp;gt; 90% Effizienz |&lt;br /&gt;
* R-783.3-0.5 Schaltregler 4,75V - ca. 18V Eingang; 3,3V Ausgang (Hersteller Recom) ||||| ||||&lt;br /&gt;
* R-785.0-0.5 Schaltregler 6,5V - 30V Eingang; 5,0V Ausgang (Hersteller Recom) ||||| |||&lt;br /&gt;
* R-785.0-1.0 Schaltregler, Ausgang 5,0V, 1A ||||&lt;br /&gt;
* ST1S10 günstiger &amp;quot;Monolithic synchronous step-down regulator&amp;quot; bis zu 3A Ausgang ||||| &lt;br /&gt;
* TI TPS61070 3.3V-75mA-aus-einer-NiMH-Zelle (+ passende SMD-Induktivität) |&lt;br /&gt;
* ViPER Schaltregler von ST ||&lt;br /&gt;
* ViPER 12A |&lt;br /&gt;
* LM3578 sehr universeller, weil in allen Konfigurationen einsetzbarer Schaltregler (DIP8) von NS mit 1.25V Vref  -&amp;gt; gibt es in SO8 bei Reichelt&lt;br /&gt;
* LTC4089 USB Power Manager with High Voltage Switching Charger |&lt;br /&gt;
* IS31LT3360 40V/1.2A LED DRIVER um 1€ ||||| |&lt;br /&gt;
* TPS79318 1,8V 200mA LDO in (bestens für z.&amp;amp;nbsp;B. LPC210x µC) ||&lt;br /&gt;
&lt;br /&gt;
=== Konstantstromquellen (LED, Akkus) ===&lt;br /&gt;
&lt;br /&gt;
* CCS-Akkulade-IC (z.&amp;amp;nbsp;B. CCS9620SL) (siehe [[http://bticcs.com/]]) ||||| |&lt;br /&gt;
* HV9910 Schaltregler für die Hochleistungs-LEDs Ub=8-450V; I beliebig; Eff. besser 90% ||||| ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* LM340x High Power LED-Treiber von National ||||&lt;br /&gt;
* LTC3490 (350mA-Konstantstromquelle) ||||| ||||| |&lt;br /&gt;
* Max1555 - LiPo Lade IC ||||| |&lt;br /&gt;
* MAX7313 16 LED-PWM-Dimmer (Im Gegensatz zu den Philips-ICs ist jede einzelne LED-Dimmbar, dafür nur in 16 Schritten) ||||| ||||| |&lt;br /&gt;
* PCA9685 16Kanal 12Bit PWM LED Controller ||||| ||||| |||||&lt;br /&gt;
* STP08CL596B1 DIP16 STM, LOW VOLTAGE 8-BIT CONSTANT CURRENT LED SINK DRIVER ||&lt;br /&gt;
* STP08CL596M SO16 STM, LOW VOLTAGE 8-BIT CONSTANT CURRENT LED SINK DRIVER ||||&lt;br /&gt;
* STP16CL596B1R DIP24 STM, LOW VOLTAGE 16-BIT CONSTANT CURRENT LED SINK DRIVER ||&lt;br /&gt;
* STP16CL596M SO24 STM, LOW VOLTAGE 8-BIT CONSTANT CURRENT LED SINK DRIVER |||&lt;br /&gt;
* TLC5940 16 Kanal PWM LED-Treiber ||||| ||||| ||||| | &lt;br /&gt;
* UDN 2987 LW (Source Driver UDN298 SMD-Bauform) ||&lt;br /&gt;
* Holtek HT16K33 8*16-LED-Controller |&lt;br /&gt;
&lt;br /&gt;
=== Ethernet, I²C (2Wire), SPI und andere Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* AMIS−39101: Siehe [http://www.mikrocontroller.net/articles/Reichelt-Wishlist#Einzeltransistoren.2C_Op-Amps.2C_MOSFET-Treiber MOSFET-Treiber&lt;br /&gt;
* CH340/CH341 (billiger USB &amp;lt;-&amp;gt; seriell chip)&lt;br /&gt;
* CLC020 und CLC021 (National Semiconductor) Parallel Component nach SDI-Converter |||||&lt;br /&gt;
* CP2120 single-chip SPI to I2C bridge and GPIO port expander |&lt;br /&gt;
* CS8900A Ethernet-Controller ||||| |||&lt;br /&gt;
* CY7C67300 (Cypress) dual role USB controller mit OTG ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* DP83848C (Ethernet Physical Layer Transceiver/PHY, MII/RMII-Schnittstelle, passend zu AT91SAM7X) |||&lt;br /&gt;
* Ethernet Magnetics (Auch POE) ||||| |||||&lt;br /&gt;
* Fast Ethernet-Controller (DE9000A/B/E, AX88796B, ...) |&lt;br /&gt;
* FTDI High Speed Chips, z.&amp;amp;nbsp;B. FT2232H (USB - UART/FIFO IC)||||| ||&lt;br /&gt;
* Generell mehr 1-Wire-ICs ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Generell mehr I²C-ICs {{Reichelt50|FF0000}}||||| ||||| ||||&lt;br /&gt;
* Generell mehr SPI IC ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* IP101 PHY von IC+ (Distri für DE [http://www.topas.de/tt/cfs/icp_cfs_mai05.htm Topas]) ||&lt;br /&gt;
* ISD 5116 (Sprachaufnahme bis 16min &amp;amp; I2C-Interface) ||||| ||||| ||||| |&lt;br /&gt;
* LTC1694-1 (I2C/SMBus Accelerator) ||||| |&lt;br /&gt;
* MAX6650 I²C-Lüftermonitor ||&lt;br /&gt;
* MAX6958 / MAX6959 (I²C 4-Digit, 9-Segment LED Display Drivers with Keyscan) ||||| ||||| ||&lt;br /&gt;
* MAX7311AWG 2Wire Interface von Maxim ||||| |&lt;br /&gt;
* MCP23008 8Bit I2C I/O Expander |||&lt;br /&gt;
* MCP23S08 8BIT SPI I/O Expander |&lt;br /&gt;
* P82B86 (I2C Dual Bi-Directional Bus Buffer) ||&lt;br /&gt;
* Philips PCA82C252 oder TJA1054A oder vergleichbar (&amp;quot;Fault-Tolerant&amp;quot; CAN Transceiver, 11898-3) ||||| |||||&lt;br /&gt;
* Power over Ethernet Bausteine z.&amp;amp;nbsp;B. LM5070 |||&lt;br /&gt;
* RS485 isoliert: z.&amp;amp;nbsp;B. Burr-Brown ISO485 o.ä. ||||| |||&lt;br /&gt;
* sn65hvd230/231/232 (CAN-Transceiver) in SO8 |||&lt;br /&gt;
* TH3122 K-Line Interface von Melexis ||||| ||||&lt;br /&gt;
* TH8080 LIN Transceiver von Melexis (oder vergleichbare) ||&lt;br /&gt;
* TI ISO1050 (Isolierter CAN-Transceiver) ||||&lt;br /&gt;
* SC18IM700 o.ä. I2C to UART-Converter ||&lt;br /&gt;
* RS232 Pegelkonverter für 1,8V (gibt derzeit nichts unter 3,3V). z.B. LTC2803 oder MAX3218 |&lt;br /&gt;
&lt;br /&gt;
=== ADC, DAC und PWM ===&lt;br /&gt;
&lt;br /&gt;
* 16-bit A/D-Wandler (waren von Maxim schon im Programm, sind aber wieder herausgeflogen?) ||||| ||&lt;br /&gt;
* AD7524 8-Bit DAC in SMD ||||| ||||| ||||&lt;br /&gt;
* ADS8320  ADC 16 Bit seriell          ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* ADS8323Y ADC 16 Bit parallel 500kSPS |&lt;br /&gt;
* CS5641 von Cirrus...The CS5461 incl. two delta-sigma A/D converters.... ||&lt;br /&gt;
* D/A Wandler mit 4 oder mehr Ausgängen, z.&amp;amp;nbsp;B. TLC5620/TLV5629/AD5325 ||||| ||||| |||&lt;br /&gt;
* DAC7612 DAC 12 Bit seriell ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* DAC8830 IDT (16Bit-DAC,ser. Input) ||||| |&lt;br /&gt;
* Generell mehr DAC&#039;s (auch die teureren) von TI ||||| |&lt;br /&gt;
* Generell mehr I2C IC (ADC, DAC, DSP, u.a. Crystal, BurrBrown etc.) |||||&lt;br /&gt;
* Generell mehr PWM-SIC&#039;s |||||&lt;br /&gt;
* LTC 1655(L) N8 16 Bit DAC interne Ref 2.048/1.25V(L Type) SPI Interface ||&lt;br /&gt;
* LTC24xx (24-Bit Delta-Sigma ADC) ||||&lt;br /&gt;
* MAX127/128 8-Kanal 12bit ADC mit I2C-Interface |||&lt;br /&gt;
* MAX528 8-fach 8Bit DAC mit Output Buffer seriell |&lt;br /&gt;
* MCP4725A0 und MCP4725A1 D/A-Wandler 12 Bit I²C ||||&lt;br /&gt;
* MCP1541ITO (TO92 Referenz f AD/DAC 4.096V)|&lt;br /&gt;
* Philips TDA1543 - 2x16-Bit DAC |&lt;br /&gt;
* TI PCM1804 Audio-ADC||||&lt;br /&gt;
* TI PCM2707 USB-Audio-DAC ||&lt;br /&gt;
* Video-AD-Wandler z.&amp;amp;nbsp;B. LTC2208 (16 Bit 130 MS/s) für FPGA und SDR |&lt;br /&gt;
* IR Class-D Amplifier IRS2092 (In D derzeit nirgends erhältlich!) ||||&lt;br /&gt;
&lt;br /&gt;
=== Sensoren und Aktoren ===&lt;br /&gt;
&lt;br /&gt;
* 4Hz Supersense µblox LEA-4S GPS module (Importer pointis.de) + Passende Passives Patch antenna (zB. von inpaq.com) ||||| ||||&lt;br /&gt;
* Allegro Stromsensoren (z.&amp;amp;nbsp;B. ACS713, ACS756) ||||| ||||| ||||| ||&lt;br /&gt;
* Allgemein mehr Sensoren ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* AD8210YRZ Stromsensor |&lt;br /&gt;
* Anemometer ||||| ||&lt;br /&gt;
* BLDC-Motoren ||||&lt;br /&gt;
* Durchflussmesser (z.&amp;amp;nbsp;B. wie Conrad Nr.155374) ||||| ||||| ||||| |||&lt;br /&gt;
* Flexinol / Nitinol (Nickel-Titanium) / NanoMuscle Aktuatoren ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Freescale/Motorola Drucksensoren, besonders die gängigen aber noch fehlenden MPX4100AP, MPX4200AP, MPX4250AP mit der robusten Automotive Spezifikation und Stutzen für Schlauchanschluss = CASE 867B-04 ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* FSRs (Force Sensing Resistor) von Interlink Electronics ||||| ||||| ||||&lt;br /&gt;
* Getriebemotoren wie RB35 oder RB40 ||||| ||||| ||||| |&lt;br /&gt;
* günstige Temp. Sensoren TC77 ||||| ||||| ||||| |&lt;br /&gt;
* Gyro Sensoren  MURATA,  ENC-03J A/B    ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Gyro, Drehwinkelgeber, Kreiselsensoren ähnl. Tokin CG-L43 {{Reichelt50|FF0000}} ||&lt;br /&gt;
* Hall-Sensor(analog) Allegro A1301, A1302 |&lt;br /&gt;
* Hall-Sensor UGN3503, KMZ51 ||||| ||||| ||||| |||&lt;br /&gt;
* Hall-Sensoren ähnlich TLE4905, aber mit Vcc 3,3V, z.&amp;amp;nbsp;B. CYD1102G (TLE 4905L Hallsensor, 3,8-24V ist lieferbar seit 20.12.11) ||   &lt;br /&gt;
* I²C-Bus Temperatursensor DS1631Z ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* iMEMs Acceleration Sensors ADXL Series von Analog Devices ||||| ||||| ||||| ||||| ||&lt;br /&gt;
&lt;br /&gt;
* Induktions-Stromsensoren Coilcraft #J9199-A o.ä. ||||| |||&lt;br /&gt;
* IS471 Selbstmodulierende IR-Lichtschranke ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* kleine Feuchtigkeitssensoren zur &#039;on-board-Montage&#039; ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* LEM Stromsensoren (Transducer) der HAIS-Serie, speziell HAIS 50-P und 100-P ||||| ||||| ||||| ||||&lt;br /&gt;
* Luftdruck-/ Temperatur Sensor Intersema MS5534 (mit SPI- Interface) ||||| ||||&lt;br /&gt;
* Magnetfeld-Sensor (Kompass-Anwendung) KMZ52 ||||| ||||| |||&lt;br /&gt;
* Modellbau-Servos |||&lt;br /&gt;
* Piezo Minimotoren/Linearaktoren von Elliptec/Siemens einzeln und günstig ||||| |||||&lt;br /&gt;
* PIR Bewegungsmelder ||||&lt;br /&gt;
* QT160 6-fach Touch Sensor IC ||||| ||&lt;br /&gt;
* Sensirion SHT11/SHT71 (oder auch SHT15/SHT75) {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Summer mit 20mA@5V ähnlich Conrad Nr.751553 (TDB05 kann mit 30mA@5V nicht von allen Controllern direkt getrieben werden) ||||| ||||| |||||&lt;br /&gt;
* Temperatur IC TC1047 |||||&lt;br /&gt;
* Temperatursensor mit SPI-Interface LM74 ||||| |||&lt;br /&gt;
* Thermoelement Typ-K (MAX6675)/ Typ-J mit Steckverbinder und SPI ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Sensoren zur Umweltanalyse (Sauerstoffgehalt der Luft, pH-Wert, etc.) ||&lt;br /&gt;
&lt;br /&gt;
=== Funk und Signalsynthese ===&lt;br /&gt;
&lt;br /&gt;
* Clock generator IC&#039;s, z.&amp;amp;nbsp;B. PCK20?? von Philips |&lt;br /&gt;
* DDS-IC (Waveform-Generator) von Analog wie AD9833, AD9835, AD9850 ||||| ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
(  -&amp;gt; AD9833BRM und AD9835BRU inzwischen lieferbar)&lt;br /&gt;
* EM4095 (RFID) |||||&lt;br /&gt;
* LMX2306/LMX2316/LMX2326 PLL Synthesizer von National ||||| ||&lt;br /&gt;
* LTC5540 (RF-Mixer) |&lt;br /&gt;
* PLL Schaltkreise für Frequenzerzeugung. z.&amp;amp;nbsp;B. MC / ML145170 (SOIC16) / TSA5060A ||||| ||||| ||||| |||||&lt;br /&gt;
* SI4735 Silicon Labs Radio ICs ||||| ||||| |&lt;br /&gt;
* TEA5757 FM-Tuner IC von Philips |||&lt;br /&gt;
* TEA5768HL FM-Tuner IC von Philips |||||&lt;br /&gt;
&lt;br /&gt;
=== sonstige ===&lt;br /&gt;
* Schnelle Hochspannungsdioden (GP0240 GP02-40 4kv 0,25A 500ns) ||&lt;br /&gt;
* 74ACTxxx |&lt;br /&gt;
* 74ASxxx |&lt;br /&gt;
* 74HCxxxx komplette Serie |||||&lt;br /&gt;
* 74HCT-Logik in SMD {{Reichelt50|FF0000}}||||| ||||| ||||| ||||&lt;br /&gt;
* 74VHC-Serie komplettieren (z.&amp;amp;nbsp;B. 74VHC125D) ||||| ||&lt;br /&gt;
* 74xx mehr Familien von Logik-ICs, z.&amp;amp;nbsp;B. AC, ACT, LVC (in SMD) ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* A3982 Motortreiber/Controller (1,5A, 2APeak, u.A. für RepRap&#039;s) ||&lt;br /&gt;
* Automotiv ICs z.&amp;amp;nbsp;B. LM1815, LM1915, LM1949, LM9011, LM9040, LM9044, LMD18400... ||||| ||&lt;br /&gt;
* Bosch CJ125 (Lambdasonden-IC) ||||| ||||| |&lt;br /&gt;
* DS1616 von Dallas Datalogger-IC ||&lt;br /&gt;
* DTMF-Dekoder-Enkoder (8870, 8880) ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* High Side Current Sense ICs wie MAX4172,LT6105 ||||| ||&lt;br /&gt;
* IRS2092 Class-D Audio Driver IC |||&lt;br /&gt;
* ISD 2560 -&amp;gt; SOIC Gehäuse (Sprachaufnahme IC) ||||| |&lt;br /&gt;
* ITS4141N o. BTS4141N Smart High-Side Power Switch (z.&amp;amp;nbsp;B. bestens für 24V geeignet!) ||&lt;br /&gt;
* Kleinere SMD-Bauformen (bes. bei ICs) ||||| ||||| ||||| |||&lt;br /&gt;
* LMD18200 (H-Bridge) |&lt;br /&gt;
* LT3080 Linearregler 0V-36V 1.1A ||||&lt;br /&gt;
* LT3081 Linearregler 0V-36V 1.5A |&lt;br /&gt;
* LTC 4411 ideale Diode 2,6 bis 5,5V max. 2,6A im SOT-23 Gehäuse&lt;br /&gt;
* LTZ1000ACH#PBF Linear Technology Präzisions-Referenz (Ersatz für LM399H) |||||&lt;br /&gt;
* Maxim Switched Capacitor Tiefpass-Filter (z.&amp;amp;nbsp;B. MAX297, MAX7410) ||||| |&lt;br /&gt;
* mehr SMD Bauteile  {{Reichelt50|FF0000}} {{Reichelt50|00FF00}} ||||| ||&lt;br /&gt;
* MIC6315 von Micrel (3,3/5V Reset Baustein mit manual Reset) ||&lt;br /&gt;
* Motortreiber TLE 4205 ||||&lt;br /&gt;
* PGA2311 (Stereo Audio Volume Control) |&lt;br /&gt;
* PMEG2010AEB 20 V, 1 A ultra low VF Schottky Diode SOD523 |&lt;br /&gt;
* SDT06S60 Infineon SiC 600V 6A Silizium-Carbid Schottky-Diode (kein trr, daher keine Schaltverluste) ||||&lt;br /&gt;
* SMD Doppeldiode Schottky 12A 60V im TO252AA z.&amp;amp;nbsp;B. 12CWQ06FN von IOR ||||| ||||| ||||| ||&lt;br /&gt;
* SMD SM5817 Schottky |&lt;br /&gt;
* SMD MBRX120LF Schottky SOT-123 |&lt;br /&gt;
* Solenoid drivers TI DRV102T, DRV103U |&lt;br /&gt;
* TLV320AIC23B Audio-Codec ||&lt;br /&gt;
* TPIC6B595 (oder ähnliche 74xx595 high current (150 mA) shift register) |||||  ||||| |||&lt;br /&gt;
* uC supervisor chips + watchdog z.&amp;amp;nbsp;B.: MAX6864 ist z.Z. der beste (0.2uA!) ||||&lt;br /&gt;
* USB-Umschalter, z.B. FSUSB42MUX |&lt;br /&gt;
* VN808 Low Treshold Octal High Side Driver 0,7A ||&lt;br /&gt;
* VS1000 Ogg Decoder von VLSI |&lt;br /&gt;
* VS1053 MP3/AAC/WMA/Ogg Decoder von VLSI ||||| ||||| ||&lt;br /&gt;
* Zarlink MT8841 Calling Number Identification Circuit |&lt;br /&gt;
* ZHB6718 (H-Bridge für 1,5V - 20V Motoren) ||||| ||||&lt;br /&gt;
* ZRA250F005 Referenzspannungsquelle 2,5V 0.5% SOT23-Gehäuse ||||| ||||| ||&lt;br /&gt;
* TXB0108 8-Bit Bidirectional Voltage-Level Translator with Auto Direction Sensing |&lt;br /&gt;
* 579-MCP6S91-E/P (Sonderverstärker 1-Ch. 10 MHz SPI PGA) |&lt;br /&gt;
* 579-MCP6292-E/SN (Operationsverstärker Dual 10MHz ) |&lt;br /&gt;
* 926-LMH6642MAX/NOPB (Operationsverstärker Lo Pwr 130MHz 75mA RR Output Amp) |&lt;br /&gt;
* TMC5130 (Trinamic Stepper Motor Controller) |&lt;br /&gt;
&lt;br /&gt;
== Baugruppen ==&lt;br /&gt;
&lt;br /&gt;
* Atmel ATNGW100 von [http://www.atmel.com/dyn/corporate/view_detail.asp?FileName=AVR32NGKit_3_26.html Atmel] = billiges Linux Board ($69=51.69€) --&amp;gt; [http://www.avrfreaks.net/wiki/index.php/Documentation:NGW/NGW100_Hardware_reference Dokumentation] ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Atmel ATSTK1000 von [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3918 Atmel] ||||| ||||| ||||| ||||&lt;br /&gt;
* Axis Etrax 100LX MCM (Multi Chip Module) A full Linux computer on a single chip!  ||||| |||||&lt;br /&gt;
* Bluetooth Funkmodul {{Reichelt50|FF0000}}{{Reichelt50|00FF00}}||||| ||&lt;br /&gt;
* Bluetooth Mini-Module (RS232-Bluetooth-&amp;quot;Wandler&amp;quot;-Platinchen) z.&amp;amp;nbsp;B. BTM222 ||||| |||||&lt;br /&gt;
* CentiPad/DevKit Embedded Linux Modul ([http://www.centipad.de www.centipad.com]) ||||| ||&lt;br /&gt;
* DS9490R USB zu 1-Wire Dongle (auch mit Linux Treiber) ||||| ||||| |&lt;br /&gt;
* Easy-Radio Module zur seriellen Datenübertragung (ER400 RS/TS/RTS) ||||| ||||| ||||| ||||&lt;br /&gt;
* Foxboard = Betriebsfertiges Micro Linux System mit Axis Etrax 100LX MCM 66mm x 72mm ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* FoxVHDL = FPGA Erweiterungskarte für das ACME Foxboard ||||&lt;br /&gt;
* FPGA, low-cost Experimentierplatinen ||||| ||||| ||||| ||||| |||| &lt;br /&gt;
* Hope RF Module 433 u. 868 MHz, http://www.hoperf.com/pdf/RF12.pdf ||||| ||||| ||&lt;br /&gt;
* Hope RF Module 2,4GHz, RFM70 ||||| |&lt;br /&gt;
* kostengünstige Funkempfänger/Funksender 433 &amp;amp; 868 Mhz ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* kostengünstige Funkschaltmodule (TLP/RLP) ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Lantronix XPort Direct |||&lt;br /&gt;
* Lantronix XPort Embedded Device Server ([http://www.lantronix.com www.lantronix.com]) ||||| ||||| ||&lt;br /&gt;
* Microchip PICkit 2 ||||| ||||&lt;br /&gt;
* Microchip PICkit 2 (PG164120) ohne Demoplatine ||&lt;br /&gt;
* Mini-WLAN Module (RS232 zu WLAN) ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* MT1390 FM Tuner-Modul von Microtune |||&lt;br /&gt;
* NetDCU8 von F &amp;amp; S Elektronik Systeme GmbH (http://www.fs-net.de) - Linux-Computerplatine mit 400MHz Samsung-ARM mit 32MB RAM, 16MB Flash und SD/Ethernet/CAN/USB/TFT/RS232 für ca. 100 Euro ||||| ||||| ||&lt;br /&gt;
* ODROID-Produkpalette (besserer Raspberry Pi -Clone aus Korea) -&amp;gt; http://www.hardkernel.com ). Bislang nur bei Pollin. |&lt;br /&gt;
* OM5610 FM Tuner-Matchbox von Philips |||&lt;br /&gt;
* ST Primer 2 (Experimentierboard fuer ARM Einsteiger) ||&lt;br /&gt;
* STM STM3210C-EVAL für &amp;lt;=214,79€ netto (wie bei Future Elektronik, Stand 18.3.2011) |&lt;br /&gt;
* TI - MSP430 Wireless Development Tool (AEC13895U) |&lt;br /&gt;
&lt;br /&gt;
== Passive Bauteile ==&lt;br /&gt;
&lt;br /&gt;
=== Spulen und Trafos ===&lt;br /&gt;
&lt;br /&gt;
* Die Micrometals Pulverkerne (-18 und -26) auch in größer ||||| ||&lt;br /&gt;
* Fastron 0805 AS Serie vervollständigen ||&lt;br /&gt;
* Funk-Entstördrosseln 16A, div. Werte ||||| ||||| ||||| ||||&lt;br /&gt;
* Funk-Entstördrosseln 330µH / 3A |&lt;br /&gt;
* Funk-Entstördrosseln 47µH |||&lt;br /&gt;
* Magnetics CoolMu Ringkerne ||||| ||||| ||&lt;br /&gt;
* Magnetics MPP Ringkerne ||||| ||||| ||&lt;br /&gt;
* Ordentliche Trafospulen + Kerne, z.b. ETD-Serie, oder RM10 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Passende Ferrite dazu: N27,N41,N67,N87,N97 ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Ringkertrafos &amp;gt;500VA mit höherer Spannung als 30V (Verstärkerbau) ||||&lt;br /&gt;
* SEPIC-Speicherdrosseln von Würth WE-DD (Größe M u. L) ||||&lt;br /&gt;
* Übertrager für Schaltregler z.&amp;amp;nbsp;B. Epcos Typ  B78304 ||||| ||||| |&lt;br /&gt;
* Würth Induktivitäten ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Würth Sortimentskästen Induktivitäten ||||| |&lt;br /&gt;
* Auswahl an EPCOS ETD 28 - ETD 49 Kernen mit entsprechenden Körpern und Zubehör (Wandlerbau) |&lt;br /&gt;
&lt;br /&gt;
=== Kondensatoren ===&lt;br /&gt;
&lt;br /&gt;
* Axiale Kondensatoren als Blockkondensator unter DIP-Sockeln, z.B. &amp;quot;C410C104M5U5TA7200&amp;quot; ||&lt;br /&gt;
* Drehkondensatoren 20-500pf ||||| ||||| |||||&lt;br /&gt;
* Günstige hochkapazitive Doppelschichtkondensatoren (z.&amp;amp;nbsp;B. Maxfarad MES2245 220F 2,3V) ||||| |||&lt;br /&gt;
* Keramikkondensatoren SMD 0603/0805/1206: mehr Zwischenwerte (56p, 82p, 560p) ||||| ||||&lt;br /&gt;
* Kleine Niedervolt-Polyproplyenkondis mit mehr Kapazität ||||&lt;br /&gt;
* Low-ESR Elkos (definiertes Fabrikat/Typ, und nicht einfach irgendwelche! (Rubycon?)) {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Low-ESR Elkos RM 3,5mm 1.000µF 6,3V (Mainboardaustausch Elko) |||||     &lt;br /&gt;
* Low-ESR SMD Tantal-Elkos (definiertes Fabrikat/Typ, und nicht einfach irgendwelche! (AVX?, Epcos?)) ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Radiale Elkos für 400V |&lt;br /&gt;
* Radiale Elkos 63V/2200µF |&lt;br /&gt;
* Sanyo OS-Con bedrahtet und SMD |||&lt;br /&gt;
* Wima FKP02 ||&lt;br /&gt;
* Wima FKP2 ||&lt;br /&gt;
* Wima MKP3-X2 (~275V, klein und ideal für Kondensatornetzteile) |||&lt;br /&gt;
* Wima MKP4 ||||| |&lt;br /&gt;
* SMD-Keramik/HF in 0402 |&lt;br /&gt;
* Bipolare Elkos bis ca. 100µF ||&lt;br /&gt;
* Impulskondensatoren mit hoher Spannungsfestigkeit von mehr als 2000v |&lt;br /&gt;
&lt;br /&gt;
=== Widerstände und Potis ===&lt;br /&gt;
* Shunt ( ISABELLENHÜTTE ) PBV 5mOhm |||&lt;br /&gt;
* Shunt ( ISABELLENHÜTTE ) BVE 2mOhm |||&lt;br /&gt;
* 25/50/100W Hochlast-Widerstände (~20/50Ω auch weniger) ||||| ||||| ||||| ||||&lt;br /&gt;
* Digitalpoti AD5160 mit SPI in SOT23 ||&lt;br /&gt;
* Digital-Potentiometer (z.&amp;amp;nbsp;B. 2-Wire MAX546x, AD526x, X9C10x) ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Durchsteck-Widerstände in kleiner Bauform 0204. ||||| ||||| ||||&lt;br /&gt;
* Endlospotis als Motorgeber ||&lt;br /&gt;
* Erneut die 10k-Ohm SMD-Potis |||||&lt;br /&gt;
* Größere Auswahl an (Stereo-)Schiebepotis in log und lin, insbesondere jenseits 100K |||&lt;br /&gt;
* Hochlast NTC, z.&amp;amp;nbsp;B. 80-220Ω/1-4A (EPCOS, Ametherm) ||&lt;br /&gt;
* Hochspannungs-Widerstände (z.&amp;amp;nbsp;B. 330M/10kV) |||&lt;br /&gt;
* iPod-Wheel z.B. QT511-ISSG  ||||| ||||| |||||&lt;br /&gt;
* Kleine Ein-Gang-Trimmer unterhalb 250Ω |&lt;br /&gt;
* Leitplastikpotis im Servogehäuse |&lt;br /&gt;
* Linear- und 360° Soft-Pots (iPod-Wheel) wie von spectrasymbol ||||| |||&lt;br /&gt;
* Niederohm-Widerstände (Shunts ab 1mOhm im guten Gehäuse z.&amp;amp;nbsp;B. TO220) ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Null-Ohm Widerstände (Drahtbrücken) Baugröße wie 1/4W ||||| ||||| ||||| |&lt;br /&gt;
* Präzisions-Spannungsteilernetzwerke ||||| ||||| ||&lt;br /&gt;
* Präzisionsspannungsteiler 1:10, 1:100, 1:1000 (10MOhm Gesamtwiderstand) |||&lt;br /&gt;
* Präzisionswiderstände 0,05% und besser, ev. drahtgewickelt ||||| ||||| ||||| ||||| |&lt;br /&gt;
* R2R-Widerstandsnetzwerke (z. B. 10/20kOhm für DA-Wandler an Microcontrollern) ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* SMD-Präzisionswiderstände (0,1% TC10ppm/K =&amp;gt;0,1W indukt.arm) ||||| ||||| ||||| |||||&lt;br /&gt;
* SMD-Widerstände 0805 auch aus der E24-Reihe ||||| ||||| ||||| ||||| |&lt;br /&gt;
* SMD-Widerstände 0805 und 1206 auch unterhalb von 1Ω ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* SMD-Widerstände unterhalb 1Ω, andere Gehäuse als 0805/1206 (leichter erfüllbarer Wunsch) ||||| ||||| ||||| ||||&lt;br /&gt;
* statt Radiohm-Potis bitte Prehostat oder Alphastat 16 63256-026xx ||||| ||||| ||||| ||&lt;br /&gt;
* Widerstände &amp;gt; 10MOhm (möglichst bis 100GOhm) |||||&lt;br /&gt;
* Widerstandsnetzwerke 11-Pin (für 10er Bargraphanzeige) ||||&lt;br /&gt;
&lt;br /&gt;
=== Quarze, Quarzoszillatoren und Resonatoren ===&lt;br /&gt;
&lt;br /&gt;
* Murata Keramik-Resonator CSTLS16M0X, CSTLS20M0X (obwohl 3. OW, direkt mit µC verwendbar) |&lt;br /&gt;
* Quarze 6,500000 MHz (HF-Anwendung) ||&lt;br /&gt;
* Quarze 32 MHz 10ppm Oscillatorfrequenz 0 bis +70°C |&lt;br /&gt;
* Quarz mit 3,200 MHz  ||&lt;br /&gt;
* Quarzoszillator 9,8304 MHz  |||&lt;br /&gt;
* SMD Quarze/ Oszillatoren in flachen, kleinen SMD Gehäusen (SMX-A/-B) |||||&lt;br /&gt;
* SMD-Quarze mit Standardgehäuse (z.&amp;amp;nbsp;B. HC49/US &amp;amp; HC49/UP) ||||| ||||&lt;br /&gt;
* SMD Oszillator CFPS-72 16 MHz, für AVR-Anwendungen |&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
&lt;br /&gt;
* Lötfähige (SMD-) Kühlkörper (Fischer) ||||| ||||| ||||| |||&lt;br /&gt;
* Metallbrückengleichrichter für 50A |||||&lt;br /&gt;
* Netzfilter FFP Reihe Schurter ||&lt;br /&gt;
* Suppressordioden mit Spannungsbereich zwischen 15V und 30V |||&lt;br /&gt;
* Übertrager FB2022 oder 20F-001N (passend zu RTL8019AS)||&lt;br /&gt;
* Übertrager passend zu ENC28J60 |&lt;br /&gt;
* Varistoren 14V auch als bedrahtetes Bauteil (für KFZ-Bordnetz)-&amp;gt; 1,5KE 18CA oder S10K14 und S14K14 ||||| ||||| |||&lt;br /&gt;
* ESD Schutzdiodenarray für CAN, USB,... z.B. PESD2CAN ||&lt;br /&gt;
&lt;br /&gt;
== HF-Baumaterialien ==&lt;br /&gt;
&lt;br /&gt;
* HF Übertrager/Balun´s ala TC1-1-13m+ (möglichst Breitbandig) |&lt;br /&gt;
* Durchführungskondensatoren 1nF/160V (waren Ende &#039;06 noch im Programm) |||||&lt;br /&gt;
* Filter SFE10.7MA19 360khz SZP2026 |&lt;br /&gt;
* H155 (HF-Kabel) ||||| |&lt;br /&gt;
* HF-Litze(n) |&lt;br /&gt;
* Keramik / Teflon Leiterplatinen |&lt;br /&gt;
* Keramische Filter CFM455... ganzes Sortiment |||||&lt;br /&gt;
* MC68160FB&lt;br /&gt;
* MC68EN302PV20&lt;br /&gt;
* MICRF002/022, MICRF102/103 von Micrel  ||||| |&lt;br /&gt;
* MMICs und Ringmischer von Mini-Circuits |&lt;br /&gt;
* UPC1678 / SGA-3286 (UHF MMICs) | &lt;br /&gt;
* PLL ICs z.&amp;amp;nbsp;B. von NXP und National für HF-UHF ||&lt;br /&gt;
* S3C4510B&lt;br /&gt;
* Transistoren MRFG35010 |&lt;br /&gt;
* U.FL bzw. IPEX Steckbuchsen zum Selbstkonfektionieren von HF-Kabeln ||&lt;br /&gt;
* ZF-Quarzfilter für versch. Frequenzen (10, 20, 40 MHz) ||&lt;br /&gt;
* Zirkulatoren ALD4302SB statt LM239 &lt;br /&gt;
* µP Compatible CTCSS Encoder,Decoder FX 365&lt;br /&gt;
&lt;br /&gt;
== Optoelektronik und Leuchtmittel ==&lt;br /&gt;
&lt;br /&gt;
=== Einzel-LEDs ===&lt;br /&gt;
&lt;br /&gt;
* DycoLeds (SMD RGB Leds mit integriertem Controller) |&lt;br /&gt;
* Acriche 230V~ LEDs&lt;br /&gt;
* Edison Opto LEDs: pinkompatibel mit diversen abgekündigten LEDs von Luxeon und Co, aber deutlich günstiger im Preis und leuchtstärker da u.A. Cree LED DIEs verwendet werden&lt;br /&gt;
** Edison Opto ARC / Edixeon LEDs (da ja Luxeons abgekündigt sind) ||||&lt;br /&gt;
** Edison Opto Federal (Luxeon Rebel artig) ||||&lt;br /&gt;
** Edison Opto KLC8 (Luxeon Bauform mit Cree Die) ||||&lt;br /&gt;
** Edison S Serie -&amp;gt; Lumiled kompatibles Gehäuse aber viel leuchtstärker |||&lt;br /&gt;
** Edison Exixeon Serie -&amp;gt; Lumiled kompatibles Gehäuse aber viel leuchtstärker ||&lt;br /&gt;
** Edison Edixeon RGB |||&lt;br /&gt;
* Generell: Z-Power LEDs von Seoul (günstiger und heller als Luxeon) ||||| ||&lt;br /&gt;
* IR-Diode mit viel Power ttp://www.lc-led.com/Catalog/department/36/category/49/1 ||&lt;br /&gt;
* Low Current SMD-LEDs (z.&amp;amp;nbsp;B. Osram LG T679 - Anm.: hier gleich die neuen Varianten Lx T67K bestellen, nicht die alten 9er) ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Luxeon Rebel weiß (180 lm) auf Star-, Mini- oder normaler Platine ||&lt;br /&gt;
* Nichia 3 und 5 mm LEDs&lt;br /&gt;
* OSRAM Hyper TOPLEDS gelb LY T676-S1T1-26 ||&lt;br /&gt;
* OSRAM Hyper TOPLEDS weiss LW T67C-T2U2-5K8L ||&lt;br /&gt;
* Reflektoren für 10mm LEDs ||&lt;br /&gt;
* Samsung SLS RGB W815 TS (PLCC6 RGB-LED)|&lt;br /&gt;
* Seoul Z-LED RGB auf Platine ||&lt;br /&gt;
* Seoul Zled P4 (100lm bei 350mA, 240lm bei 1A!) ||||| |||||&lt;br /&gt;
* SMD-IR-LEDs in 0603/0805/SOT23 + dazu passende IR-Fotodioden in gleicher Größe ||&lt;br /&gt;
* SMD-LED Bauform 0402 rot/gelb/grün/blau/weiss  ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Superflux RGB-LED ||||&lt;br /&gt;
&lt;br /&gt;
=== Anzeigen und Displays ===&lt;br /&gt;
&lt;br /&gt;
* 4-Stellige Dot-Matrix LED-Anzeigen Siemens SLG 2016 oder von HP oder ähnliches ||||| |&lt;br /&gt;
* 7-Segment-Anzeige 4 DIGIT mit und ohne Doppelpunkt ||||| ||&lt;br /&gt;
* 7-Segment-Anzeige, allgemein Low-Current bzw. High Efficiency Versionen anbieten ||||| ||||| ||&lt;br /&gt;
* 7-Segment-Anzeige, weiss, gem. Anode ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* 7-Segment-Anzeige, weiss, gem. Kathode ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Generell alle 7-Segment-Anzeigen auch in Blau und bis zu 100mm Höhe ||&lt;br /&gt;
* Kingbright PSC Serie (16 Segment LED-Display, insbesondere PSC08 und PSC12) |&lt;br /&gt;
* LED Punktmatrix Anzeigen 8x8 superrot 3mm (z.&amp;amp;nbsp;B. Everlight ELM-1883SRWA) ||&lt;br /&gt;
* LED Punktmatrix bicolor 1.9mm (z.b. Betlux BL-M 07A881SG-XX )&lt;br /&gt;
* LED Punktmatrix (Dot-Matrix) 8x8 RGB (z.B. Betlux BL-M 23B881RGB-11) |&lt;br /&gt;
* TFT/OLED Farb-Displays, wie die bereits abgekündigten OSRAM OLEDs |||||&lt;br /&gt;
* Vakuum-Fluoreszenz-Displays (Dot Matrix mit Standardcontroller, z.&amp;amp;nbsp;B. Futaba &amp;quot;LCD Emulators&amp;quot;)  ||||| ||||| ||||&lt;br /&gt;
&lt;br /&gt;
=== andere Leuchtmittel ===&lt;br /&gt;
&lt;br /&gt;
* OSRAM Halogen Decostar 51 12V 20W GU5,3 statt des billigen NoName Zeugs ||&lt;br /&gt;
&lt;br /&gt;
=== sonstige Optoelektronik ===&lt;br /&gt;
&lt;br /&gt;
* BPW 34 F / FS (aus dem Sortiment gefallen, PIN-Fotodiode) |&lt;br /&gt;
* IL207AT (SMD Optokoppler von Infineon) ||||| |||&lt;br /&gt;
* ILD256T (SMD AC-Optokoppler)  ||||| |||||&lt;br /&gt;
* ILD620 (DIP Optokoppler) ||||| ||||| ||||| |||||&lt;br /&gt;
* IrDA-Tranceiver TFDS4500 (oder TFDU4100) wieder anbieten - war im 07/2005er Katalog noch drin) ||||| ||||&lt;br /&gt;
* PC923 (Opto MOSFET Gate Treiber auch für High Side) |&lt;br /&gt;
* SHARP PC400 / PC900 (Digital Ouput Type OPIC Photocoupler, für Datenübertragung) ||||||&lt;br /&gt;
* H11L1 (Optoisolator Logic Output, Fairchild) |&lt;br /&gt;
* SFH6106, SFH6206 4 Pin Optokoppler SMD ||||| |&lt;br /&gt;
* TLP 3617 Photo-Triac&lt;br /&gt;
* TLP113 (SMD Optokoppler) |||||&lt;br /&gt;
* TLP250 (Opto MOSFET Gate Treiber auch für High Side)||||&lt;br /&gt;
* TORX 178 Fiberoptik-Receiver |&lt;br /&gt;
* TOTX177PL und TORX177PL (Fiberoptik-Transmitter) als Ersatz für TOTX173 und TORX173 (zwar anderes Footprint, aber dafür auch kleiner und günstiger)&lt;br /&gt;
* TSOP 1140 Infrarot-Receiver  (oder andere 40 kHz IR-Empfänger) |||&lt;br /&gt;
* TSOP 1730 Infrarot-Receiver [Achtung! TSOP17xx sind Auslaufmodelle bei Vishay] ||&lt;br /&gt;
* TSOP98200 (Breitband IR-Empfangsmodul 20-455 KHz) ||||&lt;br /&gt;
* TSOP98260 (Breitband IR-Empfangsmodul 20-60 kHz) |||||&lt;br /&gt;
* Vactrol Optokoppler (mit Fotowiderstand zur Analogsignalregelung) |||||&lt;br /&gt;
&lt;br /&gt;
== Mechanisches ==&lt;br /&gt;
&lt;br /&gt;
=== Schalter/Taster/Eingabegeräte, Relais ===&lt;br /&gt;
&lt;br /&gt;
* bistabile Relais mit 2 Wicklungen ||||| ||||| ||||| &lt;br /&gt;
* Drehimpulsgeber DDM Hopt+Schuler 427 SMD (evt auch normal, stehend &amp;amp; liegend) ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Drehschalter Serie DS in allen Versionen nur vom Hersteller C&amp;amp;K; auch brückende Versionen anbieten  ||||| |||||&lt;br /&gt;
* Drucktastenfeld Matrix 3x4 ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Grayhill Series 60A Joysticks mit USB-Adapter |&lt;br /&gt;
* Hohlwellen-Drehgeber (z.&amp;amp;nbsp;B. EC35B-Serie von Alps) ||&lt;br /&gt;
* kleiner Joystick wie beim Atmel Butterfly  ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* mehrpolige Fußschalter, FS 35 bitte bei Druckschalter einordnen ||||&lt;br /&gt;
* Miniaturkippschalter mit Verriegelung ||||&lt;br /&gt;
* möglichst kleine und flache Druckschalter rastend!  |||||&lt;br /&gt;
* passende Touchpanels für die coolen Blue-Line-Grafikdisplays ||||| ||||| ||&lt;br /&gt;
* Relais mit hohen Wirkungsgrad (daher nur geringer Spulenstrom nötig) ||&lt;br /&gt;
* SMD-Schiebeschalter |||||&lt;br /&gt;
* Taster Radiohm ST-1034 in rot, grün, gelb, blau, grau und schwarz |&lt;br /&gt;
* Taster und Kappen aus der Multimec-Reihe |||&lt;br /&gt;
* Taster, Schalter und LED-Fassungen aus der Mentor FEL-Reihe ||||&lt;br /&gt;
* Tastköpfe für Taster9308, wie zb Omron B32-2000 oder B32-2010 ||&lt;br /&gt;
* PhotoMOS Relay (z.&amp;amp;nbsp;B. AQV257 AQY221 AQY225 von Panasonic ||||&lt;br /&gt;
&lt;br /&gt;
=== (Steck-) Verbindungen PC- und Audiotechnik ===&lt;br /&gt;
&lt;br /&gt;
* 2.5mm-Stereo-Klinkenbuchsen (3-polig) SMD ||||&lt;br /&gt;
* Adapter 3,5mm-Klinkenbuchse auf 3,5mm-Klinkenbuchse ||&lt;br /&gt;
* Cablesharing-Adapter 2x RJ45-Buchsen(1x Ethernet 1x ISDN)1xStecker |http://www.btr-netcom.com/Products/upload/ATCH-002661.pdf&lt;br /&gt;
* Floppy-Stromversorgungstecker 3,5&amp;quot; Printausführung ||||| ||&lt;br /&gt;
* Günstigere SD/MMC-Steckverbinder z.&amp;amp;nbsp;B.SDBMF-00915B0T2 von MULTICOMP(selbst bei Farnell für 1,80 Euro) ||||| |||&lt;br /&gt;
* Hochwertigere 1/4&amp;quot;-Klinkenbuchsen, z.&amp;amp;nbsp;B. von Rean oder Cliff |||||&lt;br /&gt;
* Höherwertige 3,5mm-Klinkenbuchsen / -stecker (statt &amp;quot;EBS35&amp;quot; oder &amp;quot;KK(S/M) ..&amp;quot;) ||||| ||||| ||||&lt;br /&gt;
&lt;br /&gt;
* Höherwertige Adapter für Klinke (die bisherigen 3,5 auf 6,3mm-Adapter sind nach ~2 mal Stecken völlig ausgeleiert) ||&lt;br /&gt;
&lt;br /&gt;
* microSD- / Transflash-Sockel mit Push-Push-Technik (ist nervig die immer für teuren versand aus amiland kommen zu lassen) ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* MiniSD Card-Connector mit Auswurffunktion für Oberflächenmontage  ||||| |&lt;br /&gt;
* Modulare Buchse RJ45 mit Übertrager und LEDs für Ethernet 10/100, z.&amp;amp;nbsp;B. SI-40138 MagJack von BEL-STEWART oder Taimag RJLBC-060TC1 {{Reichelt50|FF0000}}||||&lt;br /&gt;
* Modulare Buchse RJ45 ohne Übertrager mit LEDs (oder Lichtleiter für SMD-LEDs) ||||| |||&lt;br /&gt;
* RJ45-Stecker 90° nach unten oder zur Seite gewinkelt ||&lt;br /&gt;
* RJ11-Stecker (6-polig) mit seitlich versetzter Nase (im TK-Bereich häufig) |&lt;br /&gt;
* Molex Steckerreihe Minifit Jr 4,2mm Rastermaß (verwendet als Stromstecker in Computern, Mainboard, PCI-E, P4/EPS ...) |&lt;br /&gt;
* Ordentliche Lautsprecherbuchsen &amp;quot;Strich-Punkt&amp;quot; (Print oder Wand) (die Stecker sind OK) |&lt;br /&gt;
* SATA-Stromstecker/ -Buchsen für Kabel/ Printmontage ||||&lt;br /&gt;
* USB3-, e-SATA-, eSATAp (Power e-SATA)-Stecker in Printausführung (gerade und gewinkelt) [die gibts aber inzwischen, z.b. USB3 AEB] ||||&lt;br /&gt;
* Vernünftige Koax-Stecker und -Kupplungen z. Bsp. von Hirschmann ||&lt;br /&gt;
* WOL-Verbindungskabel / -Stecker / -Print-Connectoren: ||||| |&lt;br /&gt;
* Micro-USB-Buchse in Print oder SMD: ||||&lt;br /&gt;
&lt;br /&gt;
=== (Steck-) Verbindungen Platinen und ICs ===&lt;br /&gt;
* Buchsenleiste Fischer BL5  |&lt;br /&gt;
* Buchsenleisten zum Crimpen (allseitig anreihbar!, 1x1, 1x2, z.&amp;amp;nbsp;B. [http://www.newproduct.molex.com/datasheet.aspx?ProductID=92125 Molex 2081 ?] oder Harwin M20 )  ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Carrier-IC-Sockel&lt;br /&gt;
* Die PSK-Kontakte in anderen Packungen als 20/10k.100Stk. wäre z.B. gut.1k auch. ||||| ||||&lt;br /&gt;
* mehrpolige, hochwertige Miniatursteckverbinder (z.&amp;amp;nbsp;B. http://www.binder-connector.de/pdfs/serien/711.pdf) |||&lt;br /&gt;
* Molex C-Grid SL einreihig 2 bis &amp;gt;6 polig: Stecker, Buchsen, Buchsen-SMD, Crimp-Werkzeug ||&lt;br /&gt;
* Nullkraftsockel (TEXTOOL, ARIES, Yamaichi,..) für 6-Pin SOT23 (SOT23-6) |||||&lt;br /&gt;
* Nullkraftsockel (TEXTOOL, ARIES, Yamaichi,..) für DIL20 ||||| |||||&lt;br /&gt;
* Nullkraftsockel (TEXTOOL, ARIES, Yamaichi,..) für DIL28 ||&lt;br /&gt;
* Nullkraftsockel (TEXTOOL, ARIES, Yamaichi,..) für PLCC-44 ||||| ||||| |||||&lt;br /&gt;
* Nullkraftsockel (TEXTOOL, ARIES, Yamaichi,..) für andere SO- oder TQFP-Gehäuse ||||| ||||| ||||| |||&lt;br /&gt;
* Stapelleiste AMP 2–0827730–0, 20polig, A 24,2 mm |&lt;br /&gt;
* Stiftleisten im Rastermaß 1 mm (z.&amp;amp;nbsp;B.: Samtec FTMH-120-03-F-DV-ES) |&lt;br /&gt;
* Wannenstecker 2,54mm Raster auch als SMD ||||| ||||| ||&lt;br /&gt;
* Gehäuse Serie CG einreihig, RM 2,54 mm + Crimpkontakte female&lt;br /&gt;
* 1.27mm Wannenstecker oder Stiftleiste mit Codierung SMD z.B. MPE-Garry 361-3  |&lt;br /&gt;
* Sandwich Verbinder / Stapelbare Buchsenleisten (wie: http://www.watterott.com/de/Stapelbare-Buchsenleisten )   |||&lt;br /&gt;
&lt;br /&gt;
=== (Steck-) Verbindungen sonstige ===&lt;br /&gt;
* Wannenstecker 2,54mm Rastermaß in SMD (wie WSL 2x05SMD 2,00) |&lt;br /&gt;
* Adapterprogramm SMA auf SMB ausbauen ||&lt;br /&gt;
* BNC-Stecker (wie UG 88U, Lötmontage) aber für RG174-Kabel ||||| |&lt;br /&gt;
* Chipkartenkontaktiereinrichtung, die die Kontakte anhebt (keine Schleifkontakte) ||||| ||||| |&lt;br /&gt;
* E10-Schraubsockel, wie sie Glühbirnen haben, mit Lötstiften (Achtung es ist nicht die Fassung gemeint) |||||&lt;br /&gt;
* Euro-Einbausteckdose (230V~, gab&#039;s früher mal) ||||| |||&lt;br /&gt;
* Foliensteckverbinder (FFC) RM1,25 (z.&amp;amp;nbsp;B. 9pol, 11pol ...) |||||&lt;br /&gt;
* Für LC-Displays: Adapterplatine mit Anschlüssen im Raster 2,54mm (EA 9907-DIP) siehe http://www.lcd-module.de/ ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Hohlstecker für Laptops 1,7 x 4,75mm gelb |||&lt;br /&gt;
* Hohlstecker für Acer-Laptops 1,7 x 5,5mm |&lt;br /&gt;
* Hohlstecker-Buchsen, ganz kleine, passend zu Handy-Netzteilen z.B.von Nokia |&lt;br /&gt;
* JST HR-Steckverbinder |||&lt;br /&gt;
* Krokodilklemmen-Verbinder mit anständigem Kabelquerschnitt und haltbarer Ausführung. MK 612S ist nur als Strombegrenzer (1Ω) zu gebrauchen |&lt;br /&gt;
* Lüsterklemmen kleiner LÜK 2,5, also z.B. LÜK 1,5: ||||&lt;br /&gt;
* Mini-Schraubklemmen Phoenix Contact MPT-Reihe RM2,54, z.B. MPT0,5/12-2,54 f. 12polig |||&lt;br /&gt;
* OBD-Stecker. |||||&lt;br /&gt;
* Polklemmen Hirschmann PKNI 10B (max. 63A), zumindest Schwarz und Weiß ||&lt;br /&gt;
* preiswerte! Hochspannungssteckverbinder &amp;gt;2kV ||||&lt;br /&gt;
* Steckverbinder für PICTIVA OLED-Display-Folienkabel |||||&lt;br /&gt;
* Triaxstecker /-buchse (Coax mit 2. Schirm als 3. Kontakt) ||&lt;br /&gt;
* Deutsche Stecker für PKW, LKW, LoF ||&lt;br /&gt;
* Anderson PowerPoles oder ähnlich günstige, variable, simple Hochstrom-Steckverbinder&lt;br /&gt;
* JST-EH Steckverbinder aufnehmen |&lt;br /&gt;
* SMA Leiterplattenbuchse abgewinkelt |&lt;br /&gt;
* Miniatursteckverbinder Fa. Binder  z.B. Serie 711 |&lt;br /&gt;
* Aderendhülsen für weniger als 0,5mm² (0,14/0,25/0,34) |&lt;br /&gt;
&lt;br /&gt;
=== Kabel, Drähte etc. ===&lt;br /&gt;
&lt;br /&gt;
* angebotene Schaltlitze (H05VK, H07VK) um weitere Farben erweitern ||||| |||&lt;br /&gt;
* BNC-Kabel (50Ω, RG58) in mehr Varianten, nicht nur 2m |&lt;br /&gt;
* das qualitativ mangelhafte 4mm Laborsteckerprogramm rausnehmen und nur noch Hirschmann anbieten  ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* dickere Mantel(Feuchtraum)leitungen, z.&amp;amp;nbsp;B. NYM J5x10 ||&lt;br /&gt;
* Dünner Schaltdraht (&amp;lt; 1mm Durchmesser, isoliert mit Tefzel oder Kynar)  {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Stinknormaler dünner isolierter Schaltdraht 0,3mm, 0,5mm, 0,6mm, 0,75mm in verschiedenen Farben ||||| ||||| |||||&lt;br /&gt;
* Flachbandkabel im 1,00mm-Raster, passend für Pfostenverbinder PL 2X25G 2,00 . Wird für Notebookplatten benötigt. Ohne das ist die gesamte 2,0mm-Wannensteckerproduktgruppe sinnlos. ||||| ||||| |&lt;br /&gt;
* Flachbandkabel im 2,54mm-Raster und dazu passende Aufpressstecker und -buchsen ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Flexible Einzellitze, 0,5² in verschiedenen Farben ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Folienflachkabel (FFC) RM 0,8 (z.&amp;amp;nbsp;B. 30pol., Länge 125mm) für 8&amp;quot; TFT-Monitor |&lt;br /&gt;
* Folienflachkabel (FFC) RM1,25 (z.&amp;amp;nbsp;B. 9pol, 11pol ... /Länge 20cm) ||&lt;br /&gt;
* Heizdraht zB.: Kanthal A1  ||||| ||||&lt;br /&gt;
* Litze, LiY 0,25mm^2, diverse Farben (beispielsweise von Lapp Kabel) ||&lt;br /&gt;
* Low-Loss-Kabel (evtl. aus diesem Programm http://www.elspec.de/hf-kabel-technologie/download-hf-technik/hf-lowloss-kabel.html)&lt;br /&gt;
* LYIF-Litze (verschiedene Farben) ||||| |&lt;br /&gt;
* Patchkabel (PATCH-C6) zusätzliche Zwischengröße z.B. 35 oder 40cm, wenn 025 zu kurz und 050 zu lang ist... |&lt;br /&gt;
* RG214 |&lt;br /&gt;
* Schnepp &amp;quot;Laborkabel&amp;quot;-Messleitungen ||||| |&lt;br /&gt;
* versilberten Kupferdraht auch &amp;lt; 0,6mm und alle Stärken in grösserer VPE (z.&amp;amp;nbsp;B. 500g-Rolle) ||||| ||||| ||||| |||||&lt;br /&gt;
* Zwillingslitze 2x0.14mm, z.&amp;amp;nbsp;B.  Artikel: ZL214SWW-10M Kessler Elektronik ||||| ||||| |&lt;br /&gt;
* &amp;quot;Dicke&amp;quot; Kabel mit Querschnitt &amp;gt; 8² mm |&lt;br /&gt;
&lt;br /&gt;
=== Gehäuse und Gehäusetechnik ===&lt;br /&gt;
&lt;br /&gt;
* Alucorex Frontplatten von Bungard |&lt;br /&gt;
* Batteriehalter für 18650er Lithiumzellen (ähnlich dealextreme sku 100996/100997/100999, oder viel besser: 359552/359558/359499) |||||&lt;br /&gt;
* Batteriehalter für 3 Mignonzellen mit Lötfahne (statt Druckknopf)  |&lt;br /&gt;
* Batteriehalter für 4 Mignonzellen mit Lötfahne (statt Druckknopf)  |||&lt;br /&gt;
* Bopla ABP oder ABPH 800-100 (10cm) Aluprofil Gehäuse |||&lt;br /&gt;
* Distanzbolzen M2,5 (SW4) in verschiedenen Längen aus Messing |||&lt;br /&gt;
* Distanzhülsen/-bolzen M3 in verschiedenen Längen aus Kunststoff ||||&lt;br /&gt;
* Gewindebolzen zur Sub-D Frontplattenmontage, z.B. &amp;quot;160X10329X&amp;quot; |&lt;br /&gt;
* Käfigmuttern (alleine) in größeren Packs, z.B. Rittal 2092.500 (M5), 2094.200 (M6) |&lt;br /&gt;
* Kunststoff-Beilagscheiben (Polyamid), ähnlich DIN 125 (natur ist verbreitet, schwarz wäre cool) |&lt;br /&gt;
* mehr und v.a. kleine (Hand-) Gehäuse  {{Reichelt50|FF0000}}||||| ||||| ||||| |||&lt;br /&gt;
* Muttern M2 |||||&lt;br /&gt;
* Preiswertere Alu Druckgussgehäuse, wie z.&amp;amp;nbsp;B. von Hammond Manufacturing ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Stopmuttern M2 |&lt;br /&gt;
* Strangpreßprofilgehäuse von Fischer |&lt;br /&gt;
* USB-Leergehäuse (z.&amp;amp;nbsp;B. wie USB-Stick, WLAN-Dongle, o.ä.) ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Zylinderkopfschrauben M2,5 x 12mm ||||| |&lt;br /&gt;
* Zylinderkopfschrauben M2,5 x 20mm |||||&lt;br /&gt;
* Zylinderkopfschrauben M2,5 x 30mm |||||&lt;br /&gt;
* Zylinderkopfschrauben M3 x 25mm ||||| |&lt;br /&gt;
* Gewindewürfel M3 wie z.B. von Ettinger oder Bürklin |&lt;br /&gt;
* Selbstschneidende Schrauben für Kunststoffe ||&lt;br /&gt;
* SD Kartenhalter/Einbauslot (micro SD sowie SD)!!!!! ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
&lt;br /&gt;
=== Kühlkörper ===&lt;br /&gt;
* SK574 100 SA |&lt;br /&gt;
&lt;br /&gt;
== Prototypenbau, Platinen und Chemie ==&lt;br /&gt;
&lt;br /&gt;
* Adapter QSOP (versch. Pinzahlen) auf DIL/QIL ||||| ||||| |||&lt;br /&gt;
* Adapter TQFP (versch. Pinzahlen) auf DIL/QIL ||||| ||||| ||||| ||||| ||||| | ||||| ||||| ||||| |&lt;br /&gt;
* Adapter RJ45 und RS232 auf Klemmen o.ä. (Breakoutboards, ähnlich Pollin 810 087) |&lt;br /&gt;
* Arbeitsschalen zum Entwickeln und Ätzen von Platinen(*)(ist im Starterkit enthalten) ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Ballistol Universalöl ||||| |||||&lt;br /&gt;
* Bungard Green Coat ||&lt;br /&gt;
* Bungard Sur-Tin |||&lt;br /&gt;
* Bungard-Fotoplatinen auch in 80x100mm (halbes Euroformat), nicht nur 75x100mm ||||| ||||| ||||| |||||&lt;br /&gt;
* Bungard-Fotoplatinen BLAU div. Formate ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Bungard-Fotoplatinen SCHWARZ div. Formate |&lt;br /&gt;
* Cadsoft Eagle ||||| ||||| ||&lt;br /&gt;
* chemisches Zinnbad ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Entwickler NaOH-Frei von Bungard (SENO 4007 Universalentwickler) |||&lt;br /&gt;
* Fotoplatinen aus Hartpapier von Markenhersteller |||&lt;br /&gt;
* Fotoplatinen, zweiseitig, Hartpapier(!) |||||&lt;br /&gt;
* Hohlkehlenlötspitzen (Ersa 0832HD) ||||| |&lt;br /&gt;
* Hohlkehlenlötspitzen f. Weller MLR21 ||||| ||||| |&lt;br /&gt;
* Kapton-Baender, evtl auch mit Kupferbeschichtung (Flex-PCB) ||||| |&lt;br /&gt;
* Lötstopplaminat ||||| ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* LPKF Durchkontaktierungspaste |||&lt;br /&gt;
* Messingblech/Kupferblech 0.1mm (wenn möglich Photobeschichtet) ||||| |&lt;br /&gt;
* Natriumpersulfat 2 kg Packung ||||| ||||&lt;br /&gt;
* PCI-Express x1 Laborkarte (wie RE 430EP) ||&lt;br /&gt;
* PIC_BASIC_II || Programm mit HardwareKey [z.&amp;amp;nbsp;B. für Azubi&#039;s]&lt;br /&gt;
* SMD Testplatine (3x3 Felder) wie bei Conrad |||&lt;br /&gt;
* SOIC auf PDIP Gehäuse-Adapter zwecks Prototypen-Bau ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Spitzenhülsen WSP-/MPR 80 (Weller) ||&lt;br /&gt;
* Steckplatinen (Breadboards) ohne Grundplatte und ohne Versorgungsleiste (wie Conrad 526827; STECKBOARD 1K2V hat beidseitig Leisten und ist daher nicht anreihbar / ist anreihbar, aber danach sind die beiden Leisten jeweils übrig) |&lt;br /&gt;
* Steckplatinenen (STECKBOARDS) im 84 x 54 Format (gibts bei Conrad ist da aber viel zu teuer) |||&lt;br /&gt;
* [http://www.sugru.com/de Sugru] |&lt;br /&gt;
* Target 3001 V15 Autorouter verschiedene Lizenzen |&lt;br /&gt;
* Tonerverdichter (www.Huber-Troisdorf.com) ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* www.schmartboard.com hat super einfach zu lötende SMD-Adapter in allen Größen, nur leider keinen Vertriebspartner in Deutschland (doch: ELV (wo?)). Wie wäre es mit Reichelt? ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Blanko Katalogseiten &amp;quot;weiß&amp;quot; für die Toner direkt Methode (oder 2-3 Seiten im Katalog leer lassen) |||&lt;br /&gt;
* Leiterplattenmaterial/Platinen mit Stärke &amp;lt; 1,5mm (z.B. 0,8mm; 1mm) |&lt;br /&gt;
* Eisen(III)-Chlorid |&lt;br /&gt;
&lt;br /&gt;
== Werkzeug und Zubehör ==&lt;br /&gt;
&lt;br /&gt;
* einzelne Hartmetallbohrer in diversen Grössen (z.&amp;amp;nbsp;B. 0,8 1,0 1,3 1,5) {{Reichelt50|FF0000}}||||| ||||| ||||| |&lt;br /&gt;
* ESD-Erdungspunkte 4mm/10mm für Schuko, wie Vermason J6100 (alt) / 231125 (neu) ||||&lt;br /&gt;
* Gewindebohrer M2 und M2,5 ||||| ||||| ||&lt;br /&gt;
* hochwertige 9mm Abbrechklingen |||&lt;br /&gt;
* Konturenfräser/Gravurstichel, etc. zum Fräsen von Platinenprototypen (z.&amp;amp;nbsp;B. Bungard G60N/G30N) ||||| ||||| ||||&lt;br /&gt;
* M2 Gewindebohrer und Senker ||||&lt;br /&gt;
* robuste Allzweck- und Teppichmesser ||||| |||||&lt;br /&gt;
* Schneidmatten (schnittfeste, temperaturbeständige Unterlage, meist mit cm/mm-Raster) ||&lt;br /&gt;
* Sortimentskasten H1 und evtl. H2-Serie |||&lt;br /&gt;
* Tri-Wing Schraubendreher ||||&lt;br /&gt;
* Torx tamper resistant/tamper proof (die mit Loch) als Set und in Aufbewahrungsbox, z.B. Lindy 43015 |&lt;br /&gt;
* zöllische Gewindeschneider g1/4&amp;quot; und g 1/8&amp;quot; insbesondere interessant für Wasserkühlungen ||||| ||||&lt;br /&gt;
* Wiederlösbare Kabelbinder mit einfachem Verschluss (keine Knotenbänder oder Kabelbänder) ||&lt;br /&gt;
* Bindegarn zum Kabel binden |&lt;br /&gt;
* Really Useful Boxes (http://www.reallyusefulproducts.co.uk/germany/html/boxdetails.php) (schöne stabile Kunststoffboxen mit Deckel und in zig Größen) ||&lt;br /&gt;
&lt;br /&gt;
== Messgeräte, Diagnose und Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
* FS300 Messgerät Antennenanalyzer Massenpreis 50000 Stück ||&lt;br /&gt;
* Günstigere Oszilloskope z.&amp;amp;nbsp;B. Multimetrix oder Grundig ||||| ||||| |&lt;br /&gt;
* LiPoly-Zellen (aufladbare Lithiumakkus, &amp;quot;Suppentüten&amp;quot; oder prismatische Zellen) ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Neuere, bessere NiMH-Akkus (z.b. GP1100 2/3A, GP2000 AF, GP2200 4/5SubC) ||||| ||||| ||&lt;br /&gt;
* OBD2 Kabel auf RJ45 Stecker ||||| |&lt;br /&gt;
* Smart Tweezer (SMD-Pinzette mit Komponentenmessung) siehe [http://www.trgcomponents.de/TrgDE/Internet/ProductShow.aspx?ItemID=680&amp;amp;CategoryID=2426] ||||&lt;br /&gt;
* Tektronix TDS Series Osziloskope |||&lt;br /&gt;
* Vorschaltgeräte mit G23 Fassung (zum Bau von UV-Belichtern geeigent)|||&lt;br /&gt;
&lt;br /&gt;
== Auswahl, Bestellung und Versand ==&lt;br /&gt;
&lt;br /&gt;
* bei über 10kg Gewicht nicht gleich die Versandkosten verdoppeln, sondern geringerer oder keinen Aufschlag ||||| |||&lt;br /&gt;
* Filialen in Österreich  und der Schweiz :-) {{Reichelt50|FF0000}}||||| | (man beachte das &amp;quot;:-)&amp;quot;, es gibt auch in D keine &amp;quot;Filialen&amp;quot; - mt)||&lt;br /&gt;
* Günstige Versandkonditionen für die EU ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* In Bereichen wie Multimedia etc. (z.&amp;amp;nbsp;B. Spielekonsolen) ein aktuelleres Angebot, und nicht wie z.&amp;amp;nbsp;B. bei der PS2 erst wenn schon fast das Nachfolgemodell draussen ist (Multimedia ist hier nur ein Beispiel, einfach mal an der Konkurrenz orientieren (Zum beispiel am grossen C) |&lt;br /&gt;
* Kein Mindestbestellwert (ich bezahle eh&#039; Porto) ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Kundenkarte so wie bei ELV (Grundgebühr für ein Jahr, keine Versandkosten, evtl kleiner Rabatt) {{Reichelt50|FF0000}}{{Reichelt50|00FF00}}||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* mehr Verpackungsmaterial z.&amp;amp;nbsp;B. kleine Schachteln oder die Plastik IC-&amp;quot;Schienen&amp;quot; einzeln (und unzerschnitten) verkaufen ||||| ||||| |||&lt;br /&gt;
* Möglichkeit für Selbstabholen eine Bestellung unter 10 Euro abzuliefern.  |&lt;br /&gt;
* Nicht so viele Tackerklammern/Gummibänder/Tesafilm/Beutel in die Verpackungstüten machen, das nervt beim Auspacken (die kaputten Tüten kann dann auch keiner mehr brauchen, die wenigen nicht kaputt getackerten hebe ich aber gerne auf! Aber bitte weiterhin alles getrennt verpacken... oder wenigstens nicht den Zip-Verschluss tackern) {{Reichelt50|FF0000}}||||| ||||| ||||| &lt;br /&gt;
* nicht wie die Konkurrenz jetzt schon im April den Juli-Katalog rausbringen ||||| ||||| ||||| ||||&lt;br /&gt;
* Parametrische Suche aller Elektronikartikel, speziell erstmal Halbleiter, so wie bei Maxim-ic.com ||||| ||||&lt;br /&gt;
* Selbstabholer-Option bei der Bestellung. Vergisst man es unter &amp;quot;Bemerkung&amp;quot; kommt es per Post :(   |||||  (für Plz 26xxx kommt eine Option für Abholer, Tip: falsche Plz eintragen)&lt;br /&gt;
* Skalierbarer Warenkorb für mehrfachen Aufbau gleicher Platinen ||||| ||&lt;br /&gt;
* Versand von Kleinteilen als Maxibrief, zwecks niedrigerem Versand {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Warenkorb immer in gleicher Reihenfolge sortiert, nicht bei jedem Aufruf anders ||||| ||||| ||||| ||||&lt;br /&gt;
* Vergleichen von Ergebnissen einer Suchanfrage möglich machen |&lt;br /&gt;
* Beim Bestellvorgang neben dem Häckchen &amp;quot;Legen Sie einen aktuellen Reichelt-Katalog der Sendung bei&amp;quot; einen zweiten mit der Aufschrift &amp;quot;Legen Sie KEINEN aktuellen Reichelt-Katalog der Sendung bei&amp;quot; anbringen. Das erste Häckchen scheint nicht zu funktionieren. ||&lt;br /&gt;
&lt;br /&gt;
== Unsortiert/Unspezifisch ==&lt;br /&gt;
&lt;br /&gt;
* mehr, aber als solche gekennzeichnete billig-Alternativprodukte, nicht nur High-End ||||| ||&lt;br /&gt;
* Modellbau und Zubehör (Wird immer mehr, man sieht, Reichelt hört dankenswerterweise auf diese Wishlist!!) ||||| ||||| ||||| ||| &lt;br /&gt;
* Toner für Laserdrucker Kyocera FS-1010 TK17 (ist ja eigentlich der gängigste Kyocera Toner) ||||| ||  &lt;br /&gt;
* Toner für Kyocera FS800-S |&lt;br /&gt;
* Speicherkarten-Adapter von SD auf CF (bzw. CFII) |||||&lt;br /&gt;
* ein Abendessen mit Angela :-) (hier dürfte wohl Angelika gemeint sein) ||| bzw. mit der Blondine von der Katalogseite mit den Servicenummern ||||&lt;br /&gt;
* Beamer Casio YC-400 |&lt;br /&gt;
* PCMCIA WLAN-Karten (Linux-kompatibel) mit externem Antennenanschluss |&lt;br /&gt;
* Reichelt T-Shirt ||||| ||||| |||&lt;br /&gt;
* Röhrensortiment mit den wichtigsten Typen wie z.B. EL34; KT88 einführen + Sockel ||||&lt;br /&gt;
* Produktmanager, die des Deutschen mächtig sind. Die Rechtschreibung / Grammatik der Produktbeschreibungen ist eine Katastrophe. ||||| |&lt;br /&gt;
* Schnittstellenkarte USB3.0 mit Stromversorgung über PCIe (keine mit Extrastecker, davon sind schon ein Dutzend im Programm), z.B. WDBFNJ0000NNC |&lt;br /&gt;
* GlobalTop PA6H, GPS Receiver(MediaTek MT3339)|&lt;br /&gt;
* GlobalTop GPA externe GPS Antenne (SMA, 2 m) FGPANE1RHA2 |&lt;br /&gt;
&lt;br /&gt;
= Bereits im Sortiment =&lt;br /&gt;
&lt;br /&gt;
* http://www.reichelt.de/?ARTICLE=159330 (25,0000 MHz &#039;&#039;&#039;Grundton&#039;&#039;&#039;-Quarz, wird benötigt für Microchip TCP/IP Controller ENC28J60) {{Reichelt50|FF0000}}{{Reichelt50|00FF00}} ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||  (inzwischen als Keramik-SMD-Quarze 25,000000-MJ, 25,000000-MQ, 25,000000-MT, 25,000000-X22, also div. Groessen, verfügbar))&lt;br /&gt;
* LM3886 (68W Audioverstärker) ||||| |&lt;br /&gt;
* Laser-Folien für die Druckformerstellung(Zweckform 3491) ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Atmel AT91SAM7S32 53x gewünscht  (=&amp;gt; Best.: AT 91SAM7S64-AU)&lt;br /&gt;
* Atmel AT91R40008 (32bit controller 256KB-RAM 100-lead TQFP) ||||| ||||| |  (=&amp;gt; Best.: AT 91R40008)&lt;br /&gt;
* LCD: auch ein- und dreizeilige Variante der DOG-Serie (EA DOGM081 &amp;amp; 163) |||||&lt;br /&gt;
* Platinen Basismaterial, einseitig Cu-beschichtet, 0,5..1 mm dick ||||| ||||| ||| --&amp;gt;0,8mm: BEL 160x100-1-8&lt;br /&gt;
* Atmel ATtiny45 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| =&amp;gt; ATTINY 45-20PU, ATTINY 45-20SU, ATTINY 45V-10PU, ATTINY 45V-10SU&lt;br /&gt;
* Atmel ATMEGA48 TQFP ||||| |||| =&amp;gt; ATMEGA 48-20 AU&lt;br /&gt;
* Atmel ATMEGA 88 || =&amp;gt; ATMEGA 88-20 AU, ATMEGA 88-20 PU, ATMEGA 88V-10 AU, ATMEGA 88V-10 PU&lt;br /&gt;
* Atmel ATMEGA644 ||||| ||||| ||||| ||||| =&amp;gt; ATMEGA 644-20 AU, ATMEGA 644-20 PU, ATMEGA 644V-10AU, ATMEGA 644V-10MU, ATMEGA 644V-10PU&lt;br /&gt;
* Atmel ATMEGA2560 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| || =&amp;gt; ATMEGA 2560-16AU, ATMEGA 2560V-8AU&lt;br /&gt;
* Atmel ATMEGA2561 ||||| | =&amp;gt; ATMEGA 2561-16AU, ATMEGA 2561V-8AU&lt;br /&gt;
* Atmel ATmega 1284P PDIP |||&lt;br /&gt;
* Atmel ATmega 168PA, 88PA, etc. ||||| ||||&lt;br /&gt;
* Atmel ATmega 16A und 32A in TQFP und PDIP ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Atmel ATmega328P in TQFP und PDIP {{Reichelt50|FF0000}} ||||| |||||&lt;br /&gt;
* Philips LPC2000-Serie ARM7-Controller (LPC214x, LPC213X, LPC21xx und LPC22xx) 57x gewünscht =&amp;gt; Bauelemente, aktiv / Controller, Speicher / Controller, Prozessoren / Philips-Controller 80C51 / 87LPC.. / 89C51&lt;br /&gt;
* TI MSP430F2xxx (Typen mit 16 MIPS) ||||| ||||| | =&amp;gt; Bauelemente, aktiv / Controller, Speicher / Controller, Prozessoren / Texas MSP430 Controller&lt;br /&gt;
* Breadboards/&amp;quot;Steckbretter&amp;quot; 115x gewünscht =&amp;gt; STECKBOARD 1K2V, STECKBOARD 2K1V, STECKBOARD 2K4V, STECKBOARD 3K5V, STECKBOARD 4K7V (zu finden unter &#039;Diverses/Spielwaren&#039; :)&lt;br /&gt;
* RS485 ESD fest: MAX3086E oder 75180 oder ISL83086E ||||| || =&amp;gt;MAX485ECPA &lt;br /&gt;
* Microchip PIC 18F2550  || =&amp;gt; PIC 18F2550-I/P&lt;br /&gt;
* Microchip PIC 16F88  ||||| | =&amp;gt; PIC 16F88-I/P&lt;br /&gt;
* Microchip dsPIC ||||| ||||| ||||| ||||| | =&amp;gt; PIC 30F2010-30 SP/SO&lt;br /&gt;
* Logicanalyzer | =&amp;gt; ME ANT 8 und ME ANT 16&lt;br /&gt;
* Atmel ATMEGA8 TQFP |||| =&amp;gt; ATMEGA 8-16 TQ&lt;br /&gt;
* 3,3V Laengsregler (LT1086-Serie z.&amp;amp;nbsp;B.)  ||||| =&amp;gt; vgl z.&amp;amp;nbsp;B. [http://reichelt.de/?ARTIKEL=LT%201086%20CM3%2C3 LT 1086 CM3,3] (SMD) oder [http://reichelt.de/?ARTIKEL=LT%201086%20CT3%2C3 LT 1086 CT3,3] (TO-220) bei Reichelt&lt;br /&gt;
* Flexible Messleitungen: Wie gesagt Reichelt bietet ja die ganze Palette an Bananen/Laborsteckern, Krokodilklemmen usw. an, nur die Leitungen dazu fehlen im Programm.  (Sind schon im Sortiment. Fertig konfektionierte z.&amp;amp;nbsp;B.: ML 100 SW, Meterware z.&amp;amp;nbsp;B.: MESSLEITUNG 10SW)&lt;br /&gt;
* FTDI USB Chips  ||||| ||||| ||||| ||||| ||||| ||| =&amp;gt; Best-Nr. FT232BL, FT232RL (sehr interessant), FT245BM und FT2232BM (2xUART auf USB)(noch nicht unter USB einsortiert)&lt;br /&gt;
* CAN-Bus Controller MCP2515  |||||&lt;br /&gt;
* VLSI MP3 Decoder  ||||| ||||| ||||| | z.Zt. unter CAN-Bus(!) einsortiert. Bitte auch die neuen Gehäuse (ROHS) und Typen mit ins Angebot nehmen.&lt;br /&gt;
* Atmel AT90CAN128 ||||| |&lt;br /&gt;
* MMC / SDC slot 50x gewünscht ==&amp;gt; Bestell-Nr.: CONNECTOR MMC 11, CONNECTOR MMC 12, CONNECTOR SD 21 und CONNECTOR SD 22&lt;br /&gt;
* lineare Potentiometer als Schiebepoti ||||| | - Bestell-Nr. PSM-LIN* (&amp;quot;mono&amp;quot;) PSS-LIN* (&amp;quot;stereo&amp;quot;)&lt;br /&gt;
* Echtzeituhr DALAS DS1307 (auch SMD) ||||| || - Bestell-Nr. DS1307/DS1307Z&lt;br /&gt;
* Konkret: Neuer PIC ... und PIC18F2550 ||||| ||| &lt;br /&gt;
* MSP430F1232 |&lt;br /&gt;
* Fädelstift, Draht und Kämme ||||| ||| - Bestell-Nr. Fädelstift/Fädeldraht/Fädelkamm (Warum sind diese Stifte ùnd der Draht nur so &amp;quot;erschreckend&amp;quot; teuer? =&amp;gt; immerhin billiger als bei C...) (vielleicht weil jeder die nur 1x kauft und dann mit Draht aus anderen Quellen selber neu bewickelt?? ;-)&lt;br /&gt;
* Mini-GPS-Module ||||| ||||| ||||| ||||| ||| - Bestell-Nr. GPS ET 102/GPS ET 202/GPS EM 401&lt;br /&gt;
* Atmel ATmega48, ATmega168, ATtiny13 ||||| ||||| ||||| | (im neuen katalog und online verfügbar!)&lt;br /&gt;
* CompactFlash Stecker ||||| ||||| ||||| || - Bestell-Nr. connector CF 01/ Connector CF 02 &lt;br /&gt;
* DCF77 Empfangsmodule 60x gewünscht (DCF77 Modul) (4.5.2005 ist jetzt verfügbar unter DCF77 MODUL, aber leider 50% teurer als bei der Konkurenz, störempfindlicher, grotesk schwache Ausgangstreiber)&lt;br /&gt;
* Microchip PIC 12F683 (8pin PIC mit PWM !) =&amp;gt; Bereits im Sortiment: Best. Nr PIC 12F683-I/P bzw. PIC 12F683-I/SN &lt;br /&gt;
* MSP430F135 ||||| ||||| ||||| |  (MSP430F135 im Programm Bestellnr.: MSP430F135 IPM)&lt;br /&gt;
* SMD 0Ω in Bauform 0805 |||| -&amp;gt; SMD-0805 0,00&lt;br /&gt;
* Shunt-Widerstände  ||||| ||||| ||||| ||||| |  (neu im Sortiment: Widerstandsdraht, Best.-Nr. &amp;quot;RD100/x,xx&amp;quot;, Leider nur in teuren 100g Spulen)&lt;br /&gt;
* dünner isolierter Draht, wie Klingeldraht nur dünner, vielleicht 0.2-0.3mm zum Fädeln von Platinen |||| =&amp;gt; Fädeldraht nun im Sortiment&lt;br /&gt;
* dünner Silberdraht zur Verdrahtung auf Lochrasterplatinen ||||| |   (mögl. bereits im Sortiment &amp;quot;SILBER 0,6MM&amp;quot; ???)Kupferlackdraht geht nicht?&lt;br /&gt;
* Hartmetallbohrer in mehr verschiedenen Größen (z.&amp;amp;nbsp;B. 0,6mm 0,8mm 1,1mm 1,2mm etc.) ||||| |||| =&amp;gt; Gibt es beides Bestellnummern: &amp;quot;Bohrerset&amp;quot; oder für einzelne Bohrer &amp;quot;Bohrer + Größe in mm&amp;quot; Bsp: &amp;quot;Bohrer 0,6&amp;quot; =&amp;gt; die kosten aber einiges, eine etwas preiswertere Alternative wäre auch nicht schlecht...&lt;br /&gt;
* 68HC908GP32 |&lt;br /&gt;
* überhaupt: Freescale 68HC908- und vor allem 68HCS08-Mikrocontroller fehlen total im Sortiment!&lt;br /&gt;
* RJ45-Buchse ||| - schon im Sortiment: MEBP 8-8&#039;&#039;x&#039;&#039; unter Modular-Stecker bei TK&lt;br /&gt;
* Elektromotoren ||||| |||| (Suche: Gleichstommotor)&lt;br /&gt;
* Microchip ICD2 || =&amp;gt; Bestell-Nr.: DV 164005 &amp;lt;= Fehlt im Papierkatalog&lt;br /&gt;
* 14,7456 MHz Quarze ||||| ||||| ||||| ||||| ||| (Bst: 14,7456-HC18)&lt;br /&gt;
* SMD Widerstande in Bauform 1206 (SMD 1/4W...)&lt;br /&gt;
* Atmel Atmega 128 in TQFP || (ATMEGA 128-16 TQ)&lt;br /&gt;
* Atmel Atmega 169 in TQFP || (ATMEGA 169-16 TQ)&lt;br /&gt;
* Atmel ATMEGA1280 ||||| ||||| ||||| |||| (ATMEGA 1280-16AU, ATMEGA 1280V-8AU)&lt;br /&gt;
* Atmel ATMEGA8515 | (ATMEGA 8515-*)&lt;br /&gt;
* Atmel ATtiny24/44 ||||| ||||| (ATTINY 24-*, ATTINY 44-*)&lt;br /&gt;
* Atmel ATtiny25/85 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| | (ATTINY-25-*, ATTINY-85-* gelistet aber erst verfuegbar ab II/07)&lt;br /&gt;
* Atmel AT91SAM7S64, AT91SAM7S256 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||| (suche AT91*)&lt;br /&gt;
* Atmel AT91SAM7X64-256 ||||| ||| (suche AT91*)&lt;br /&gt;
* TI MSP430F1611 (10k RAM, 48k Flash) ||||| ||||| ||||| ||||| ||||| ||||| || (MSP430F1611 IPM)&lt;br /&gt;
* PCA9306  Dual Bi-Directional I2C-Bus and SMBus Voltage Level-Translator ||&lt;br /&gt;
* PCA9531D  8Bit I2C_BUS LED-Dimmer ||||| |||||&lt;br /&gt;
* PCA9551D  8Bit I2C-BUS LED-Blinker ||||| ||||&lt;br /&gt;
* PCA9530D  2Bit I2C_BUS LED-Dimmer ||||| |&lt;br /&gt;
* PCA9532D 16Bit I2C_BUS LED-Dimmer ||||| |||||&lt;br /&gt;
* PCA9533D  4Bit I2C_BUS LED-Dimmer ||||| ||||&lt;br /&gt;
* PCA9550D  2Bit I2C-BUS LED-Blinker ||||| |&lt;br /&gt;
* PCA9553D  4Bit I2C-BUS LED-Blinker ||||| ||&lt;br /&gt;
* PCA9552D 16Bit I2C-BUS LED-Blinker ||||| |||&lt;br /&gt;
* Microchip PIC 18F2550 (USB, 32 KBytes Flash) | (bereits im Sortiment)&lt;br /&gt;
* Microchip PIC 16F628A (weil: besser als 16F628) ||||&lt;br /&gt;
* Microchip PIC 16F648 (weil mehr Programmspeicher, als 16F628) |||||&lt;br /&gt;
* Microchip PIC 16F684 ||||| &lt;br /&gt;
* Microchip PIC 16F688 ||||| ||&lt;br /&gt;
* Microchip PIC 16F690 ||||| ||||| |||&lt;br /&gt;
* Atmel ATtiny84 ||||| ||||| |||| (gelistet aber erst verfuegbar ab II/07)&lt;br /&gt;
* TI MSP430F169 |&lt;br /&gt;
* FT245RL (alt bekannte FTDI Chips in neuer und besserer Version, FT232RL bereits vorhanden) ||||| ||&lt;br /&gt;
* 3,3V Längsregler SMD Ultra Low drop |||| (-&amp;gt; Zetex)&lt;br /&gt;
* Schiebepotis mit passenden Knöpfen | (Bestell-Nr. PSM-LIN* (&amp;quot;mono&amp;quot;) PSS-LIN* (&amp;quot;stereo&amp;quot;) nicht passed?) |&lt;br /&gt;
* OLED-Displays (zum Beispiel: [http://www.litearray.com/products-oled.php]) || (Reichelt hat jetzt Osram Pictiva Oleds im Programm. Nach &amp;quot;Pictiva&amp;quot; suchen)&lt;br /&gt;
* OSRAM &amp;quot;Golden Dragon&amp;quot; LEDs (http://www.osram-os.com/goldendragon) ||||&lt;br /&gt;
* Microcontroller mit USB-Anschluss (von Cypress oder Atmel in PDIP z.&amp;amp;nbsp;B. AT89C5131, AT43USB355, CY7C637xx) ||||| ||||| ||||| ||||| |||||  -&amp;gt;Bereits im Sortiment: Cypress EZ-USB TQFP-44 Best. Nr AN2131 SC, Atmel AT89C5131 SO-28/PLCC-52&lt;br /&gt;
* Renesas R8C &lt;br /&gt;
* zu Schaltreglern LM257x u.a. passende Speicherspulen mit hohem L , niedrigem R und großer Strombelastbarkeit (zB. Würth WE-PD4) (keine &amp;quot;Entstörspulen&amp;quot;) 96x gewünscht (suche L-PIS*)&lt;br /&gt;
* IL300 (linear Optokoppler z.&amp;amp;nbsp;B. von Vishay egal ob DIP oder SMD) ||||| ||||&lt;br /&gt;
* IL300H (linear Optokoppler von Siemens als DIP) - andere IL300 Varianten im Programm |||&lt;br /&gt;
* &amp;quot;optische&amp;quot; Drehgeber Fabrikat Grayhill sind lieferbar (Bst. ENC 62P22-*)&lt;br /&gt;
* mechanische Drehimpulsgeber von Alps im Programm (suche STEC*)&lt;br /&gt;
** Drehimpulsgeber (konkreter Vorschlag von O.R.: PEC16-4220F-S0024 von Bourns) 173x gewünscht&lt;br /&gt;
** Drehimpulsgeber- weiterer Vorschlag: ALPS Encoder ST EC 11B  64x gewünscht Im Programm (STEC11B01)&lt;br /&gt;
* PCA9633D16 4-bit I2C-bus LED driver ||&lt;br /&gt;
* I²C-Bus to 1-Wire DALLAS DS2482-100 bzw. DS2482-800  ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Step-Down-Konverter in SMD Bauform (z.b. MC 34063): ||||| (-&amp;gt;Artikel-Nr: MC 34063 AD)&lt;br /&gt;
* Preiswerte Kontaktierungen für SD/MMC  ||| (Bereits im Programm: Bestell-Nummern:  CONNECTOR MMC 11 / CONNECTOR MMC 12 / CONNECTOR SD 21 / CONNECTOR SD 22) // ~9 EUR sind wohl kaum preiswert!&lt;br /&gt;
* Eisen(III)-Chlorid  115x gewünscht&lt;br /&gt;
* EA DOG-M128 128x64 Grafikdisplay aufbau ähnlich EA DOGM162 |||||&lt;br /&gt;
* 3,3V-Längsregler SMD zu vernünfitgen Preisen (Bsp: LF33 --&amp;gt; Best.Nr.: LF 33 CV, Preis: 0,76&amp;amp;#8364;)(der LT1086 kostet 4 Euro) ||||| ||||| ||||| ||||| |||||	||||| ||||| ||||| || -&amp;gt; LT1117 CST-3.3V für 1.55 €&lt;br /&gt;
* Spannungsregler in SMD-Version (7805 etc., nicht nur der 78L05) ||||| ||||| ||||| ||||| ||||| ||||| ||| -&amp;gt; LT1117-ADJ für 1.55€&lt;br /&gt;
* TSic Temperatursensoren von ZMD ||| -&amp;gt; TSIC&lt;br /&gt;
* Leiterplattenbuchse Hirschmann 4mm auch in *rot* (gab es schonmal als &amp;quot;PB 4 RT) || -&amp;gt; wieder als PB 4 RT erhältlich, letzte Woche 3 Stück geliefert bekommen; Stückpreis 1,25€&lt;br /&gt;
* MCP25050 CAN-Bus Input/Output Expander ||||| |||| (MCP 25050-I/*)&lt;br /&gt;
* Ethernet-Controller RTL8019AS 337x gewünscht (erhältlich: RTL 8019AS)&lt;br /&gt;
* SPI-Ethernet-Controller ENC28J60 (erhältlich: ENC 28J60-I/*)&lt;br /&gt;
* Microchip PIC 18F4550 (PIC mit USB) ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Microchip PIC 18F2585 ||||&lt;br /&gt;
* gleicher Mindestbestellwert in Österreich und in der Schweiz wie in Deutschland &#039;&#039;&#039; Seit 1.12.10 umgesetzt&#039;&#039;&#039; ||&lt;br /&gt;
* gleicher Mindestbestellwert in den Niederlanden wie in Deutschland | (mittlerweile überall 10€)&lt;br /&gt;
* Versand nach Österreich über GLS oder sonstigen Paketdienst &amp;amp; auf Rechnung, damit die Spesen halbwegs im Rahmen bleiben (bei der letzten Bestellung ca. EUR 40) ||||| ||||| ||||| ||||| ||||| ||||| ||| &#039;&#039;&#039;Anm.: Versand nach AT inzwischen ab 9,90&#039;&#039;&#039;&lt;br /&gt;
* Pakete nach Österreich in EINER Lieferung schicken, und nicht aus &amp;quot;logistischen Gründen&amp;quot; trennen. Würde zumindest die Hälfte der Verandkosten sparen (letztes mal fast 70€ pro Paket (!) ||&lt;br /&gt;
* Digitale Speicherosziloskope für PC ||||| ||||| || (Picoscope, PC-Oszilloskop)&lt;br /&gt;
* Hameg HM2008 Oziloscope || ( ist möglich über Service -&amp;gt; Produktservice -&amp;gt; neue Artikel anfragen)&lt;br /&gt;
* Microchip dsPIC30F ||||| ||||| |||&lt;br /&gt;
* Microchip PIC 16F883 und 16F886 |||&lt;br /&gt;
* Microchip PIC 18F4523 (12/2007: PIC mit 12-Bit A/D-Wandler) ||&lt;br /&gt;
* Microchip PIC 18F6585 |&lt;br /&gt;
* Microchip PIC 18F6720 |&lt;br /&gt;
* Microchip PIC 18F8720 |&lt;br /&gt;
* Microchip PIC 24FJ64GB002-I/SP (USB-OTG im DIP28 Gehäuse) |&lt;br /&gt;
* Atmel XMega-Typen, z.B. ATXMega64A4, ATXMega128A1 ||||| ||&lt;br /&gt;
* 7-Segment-Anzeige, blau, gem. Kathode ||||| ||||| ||||| ||||| ||||| ||||| || (SC 52-11 BL)&lt;br /&gt;
* 7-Segment-Anzeige, blau, gem. Anode ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||| (SA 52-11 BL, SA 56-11 BL)&lt;br /&gt;
* EA DOG-L128 128x64 Grafikdisplay zzgl Touch-Folie und Beleuchtung | --&amp;gt; ist ab Katalog 06/2009 drinn&lt;br /&gt;
* LTC 1661 N8 10 Bit Dual Dac mit SPI Interface | (LT C1661 CMS8)&lt;br /&gt;
* Microchip PIC 10F2xx (+ Programmiergerät) ||||| ||||| ||||| ||| (einige Varianten erhältlich, Programmiergerät nicht sicher)&lt;br /&gt;
* Microchip PIC 24 ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Microchip PIC32 (MIPS) ||||| ||||| ||||| |||&lt;br /&gt;
* Microchip dsPIC33 ||||| ||||| ||||&lt;br /&gt;
* WAGO 215-4mm-Stecker (Bananenstecker mit Käfigzugklemme) zur schnellen Montage bei Versuchsaufbauten ||||| ||||| ||||| ||||| ||| (dieser Wunsch wurde erhört, Hurraa! Best.-Nr. Wago 215-x11, Vielen Dank an Reichelt.)&lt;br /&gt;
* Philips PCA9555 (I2C IO, 16 Bit par. I/O, c&#039;t Project Soundcheck II) |||||&lt;br /&gt;
* ADuM 1201 o. ADuM1401, bzw. andere ADuMxxxx oder ISOxxxx - Digitale Übertrager mit galvanischer Trennung |||&lt;br /&gt;
* LM2675 SimpleSwitcher Step-Down-Konverter in SO-8 Bauform&lt;br /&gt;
* Sharp Entfernungssensoren (zb den GP2D120 oder den GP2D12) 51x gewünscht---- siehe Reichelt Artikel : GP2-0430 und GP2-1080&lt;br /&gt;
* TSOP31238 (Besserer Ersatz (2,5-5,5V) für den nicht mehr Lieferbaren TSOP1738) || --- Artikel-Nr. &amp;quot;TSOP 31238&amp;quot;&lt;br /&gt;
* ERSA Lötspitzen der Serie 842 (besonders die feinen) Reichelt führt bis jetzt nur 832, die feinen davon sind aber recht unbrauchbar |||| --- sind nach einer freundlichen Mail in den Katalog aufgenommen worden. Artikel-Nr. &amp;quot;SPITZE 842&amp;quot;&lt;br /&gt;
* Atmel ATSTK600 von [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4254 Atmel] |||| (AVR STK 600)&lt;br /&gt;
* Atmel AVR Dragon von [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3891 Atmel] ||||| ||||| ||||| ||||| ||| (AT AVR DRAGON)&lt;br /&gt;
* Option zum anklicken beim Versand, &amp;quot;nichtverfügbare Artikel automatisch streichen&amp;quot;, wenn man das ins Kommentarfeld schreibt wirds nicht beachtet, oder bis das jemand liest dauert es wieder mehrere tage. (In der Zwischenzeit realisiert!!) ||||| ||||| ||||| || (oder klare Anzeige wie viel noch vorhanden ist)&lt;br /&gt;
* AVR mit USB: AT90USB1287 (AT 90USB1287 TQ, TQFP64), dazu passendes Demoboard AT 90USB KEY; AT90USB162TQ (AT 90USB162 TQ, TQFP32), AT90USB646 (AT 90USB646 TQ, TQFP64), AT90USB1286QFN (AT 90USB1286 QFN, QFN64), ATmega32u2 (ATMEGA 32-U2 TQ, TQFP44)&lt;br /&gt;
* Buchsenleisten 2.54mm (z.&amp;amp;nbsp;B. BL 1X...G 2,54) TEILBAR, *zum Auseinanderbrechen* (laut Anfrage vom 26.10.2009 nicht im Sortiment) (SPL 64?) {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* TLE 4905L :: Hallsensor, 3,8-24V ist lieferbar (20.12.11)&lt;br /&gt;
* Atmel DataFlash, z.&amp;amp;nbsp;B. AT45DB081B (8 MBit Flash-Speicher an seriellen Bus im 8poligen Gehäuse) {{Reichelt50|FF0000}}{{Reichelt50|00FF00}}||||| |&lt;br /&gt;
* Kupferlackdraht auf Spulen statt lose (Artikelbild ist irreführend!) ||||| (zu haben unter CUL 100 und CUL 500 von 0,1 bis 2mm Durchmesser)&lt;br /&gt;
* IRC540 (HEXFET) | (kann ggf. durch bereits vorhandenen IRCZ 44 ersetzt werden)&lt;br /&gt;
* Niederohm-FETs in SO8, N und P ||||| ||||| ||&lt;br /&gt;
* generell Spannungsregler, LOW-DROP, SMD (DPAK, D2PAK) &lt;br /&gt;
* Spannungsregler SMD in DPAK ||||| ||||| ||||| ||||| |||| (u.a. MC 78M05 CDTG)&lt;br /&gt;
* MCP23016 16Bit I²C I/O Expander ||||| ||||| ||| (verfügbar)&lt;br /&gt;
* MCP23S17 16Bit SPI I/O Expander (aber ohne Schmidt-triggerd Eingänge wie der 23x16) ||&lt;br /&gt;
* LT-1117-CST-5 als Sot223 (adj und 3.3 gibts schon, 5 fehlt noch) |&lt;br /&gt;
* UM232 FTDI USB - RS232 Modul für DIL sockel |||||&lt;br /&gt;
* TI eZ430-Chronos ||&lt;br /&gt;
* Generell SMD-Kerkos im Wert &amp;gt; 100nF (unter 1206/1210 High-Cap zu finden) {{Reichelt50|FF0000}} {{Reichelt50|00FF00}} |&lt;br /&gt;
* Zum MAX232 so20 passende SMD-Kerkos im Wert 1µF (0805, 0603, 1206) ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Kühlerplatinen für Power-LEDs im Star-Format oder vergleichbar |&lt;br /&gt;
* warmweiße LED ||||| ||||| ||||| ||||&lt;br /&gt;
* weiße SMD-LED Bauform 0603 ||||| ||||| |||||&lt;br /&gt;
* Folientastaturen {{Reichelt50|FF0000}}||||| ||||| |||||&lt;br /&gt;
* Micro-USB-Steckverbinder ||||| |||| &lt;br /&gt;
* Einpolige Steckerleiste 2.54 ||||| |||&lt;br /&gt;
* gängige Platinenverbinder einreihig RM 2mm mit 2-15 Kontakten (in vielen Geräten verwendet, z.&amp;amp;nbsp;B. [http://www.newproduct.molex.com/datasheet.aspx?ProductID=19945 Molex 51004, 53015]): ||||| Molex 71226 |||&lt;br /&gt;
* Platinensteckverbinder für Rastermass 2,00mm ||||&lt;br /&gt;
* Wannenstecker 6-Pol. gewinkelt, gibt nur gerade (WSL 6W, aber derzeit nicht lieferbar) ||||&lt;br /&gt;
* Wannenstecker (gerade) + Pfostensteckverbinder 6-Pol. (Pfostenbuchsen gibt es 6-Pol.) ( z.&amp;amp;nbsp;B. Harting SEK 18 Serie http://www.harting.com/en/en/de/sol/verbtech/prod/ios/description/03005/index.de.html) (Lieferbar: PFL 6 und WSL 6G) ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* RP-SMA-Buchse/-Stecker (gewinkelt/gerade) ||||&lt;br /&gt;
* Schuko-Einbausteckdose (Maschinensteckdose) (mit oder ohne Klappdeckel); Flanschmaß möglichst klein (50mmx50mm); div. Farben (sw,grau,...) ||||| ||||| |||&lt;br /&gt;
* Distanzbolzen mit 2 M2,5-Innengewinden versch. Längen ||&lt;br /&gt;
* Flachbandkabel im 1,27 mm-Raster, 6-polig ||||&lt;br /&gt;
* kurze (10cm, 30cm, 50cm)-Kabel zB.: USB A-&amp;gt;B, A-&amp;gt;Bmini, A-&amp;gt;Bmicro; Klinke/Cinchkabel ||||&lt;br /&gt;
* hochwertige MicroUSB-Kabel (AK 676-AB rupft einem fast die Buchse aus dem Handy) ||| &lt;br /&gt;
* PATCHKABEL xx WS: Cat5 Patchkabel SF/UTP auch in weiß (deutlich dünner, flexibler und auch günstiger als die Cat6 PiMF) |&lt;br /&gt;
* der Reichelt Katalog auf CD/DVD (durch pdf-download überflüssig:) |||||&lt;br /&gt;
* Reichelt Katalog als PDF zum Download (siehe [[Reichelt PDF Katalog]] ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Reichelt-Gutscheine sollten bei Online-Bestellung einlösbar sein (wie bei z.&amp;amp;nbsp;B. Amazon) ||||| ||||| |||||&lt;br /&gt;
* Sortieren und Spezifizieren der Angebotsliste in Transistoren / FET (bessere Übersicht) ||||| ||||| ||||| ||||| || z.&amp;amp;nbsp;B. 400V/6A würde schonmal ganz grob helfen und senkt außerdem unnötigen Traffic, weil nicht extra jedes Datenblatt angeschaut wird&lt;br /&gt;
* Raspberry Pi ||||| |||&lt;br /&gt;
* J-FET BF545 A,B,C (entspricht BF245 in SMD ) |&lt;br /&gt;
* Everlight SMD-RGB (fullcolor) 19-337/R6GHBHC-A01/2T |||||&lt;br /&gt;
&lt;br /&gt;
= Sonstiges =&lt;br /&gt;
&lt;br /&gt;
== zur Webseite ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Eine Möglichkeit das User Eagle-Libs zu den Bauteilen hochladen können.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In &amp;quot;Neu in unserem Shop&amp;quot;/Neue Artikel werden unter Bauelemente u.a. Computerkabel und PC-Speicher angezeigt (Anlass Stand 5/2010, ist aber schon früher aufgefallen). Diese Teile würden zumindest etwas besser in PC-Technik passen. (...und die Freude des Elektronikbastlers über eine Anzahl neuer Bauelemente würde auch nach Auswahl der Details anhalten, wenn es nicht &amp;quot;nur&amp;quot; so etwas wie USB-Kabel sind.)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
myReichelt ermöglicht: &lt;br /&gt;
* Warenkorbspeicherung&lt;br /&gt;
* öffentlicher Warenkorb&lt;br /&gt;
* CSV-Import, -Export&lt;br /&gt;
&lt;br /&gt;
zu myReichelt siehe auch http://www.mikrocontroller.net/topic/62628&lt;br /&gt;
&lt;br /&gt;
Eine Webseite ohne Frames ist eigentlich heute Stand der Technik. Oder vielleicht ist es das auch nicht mehr - ich weiss es nicht aber nach meiner Auffassung sollte es Stand der Technik sein. Denn dann hat man für jedes Produkt auch einen eindeutigen Link und kann ggf. auch in Beiträgen, Mails und Anfragen darauf verlinken.&lt;br /&gt;
&lt;br /&gt;
Anmerkung dazu:&lt;br /&gt;
Verlinken auf Artikel geht schon, und zwar in der Form:&lt;br /&gt;
http://www.reichelt.de/?ARTIKEL=ATMEGA%208-16%20DIP&lt;br /&gt;
bzw.&lt;br /&gt;
http://www.reichelt.de/index.html?ARTIKEL=ATMEGA%208-16%20DIP&lt;br /&gt;
&lt;br /&gt;
Neu zu lesen unter &amp;quot;Info zum Shop&amp;quot;:&lt;br /&gt;
Zitat:&lt;br /&gt;
&amp;quot;Frames&lt;br /&gt;
In vielen Votings wurden wir auf die Verwendung von Frames hingewiesen und dass diese Technik nicht mehr -State Of The Art- sei. Dieser Meinung schliessen wir uns in vollem Umfang an. In unserem neuen Shop werden KEINE FRAMES verwendet.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Reichelt selbst macht das in seinen PDF-Prospekten auch so. Das Problem liegt nur darin, die URL jedesmal von Hand zusammenzubauen (und dabei auf die Ersetzung der Leerzeichen durch %20 zu achten) oder von einer kopierten URL alles überflüssige zu entfernen.&lt;br /&gt;
&lt;br /&gt;
Einfach mal einen &amp;quot;Permalink&amp;quot; button neben &amp;quot;Artikel empfehlen&amp;quot; ? Oder zurück mit der früheren Druckansicht.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Viele Browser ersetzen Leerzeichen im Adressfeld automatisch durch %20. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ferner sollte es möglich sein, Bestellungen, welche noch nicht bearbeitet werden zu verändern, also z.&amp;amp;nbsp;B. was hinzuzufügen oder zu entfernen. Bei einer Wartezeit von ca. 3 Tagen bis zum Versand fällt einem doch noch was ein :-)&lt;br /&gt;
&lt;br /&gt;
Das wird bereits gemacht! Einfach E-Mail an service@reichelt.de mit den Bauteilen, die man noch haben will. I-Net-Nummer nicht vergessen.&lt;br /&gt;
&lt;br /&gt;
Andere Möglichkeit ist anrufen, das mache ich eh immer, um eventuell nicht lieferbare Dinge zu streichen oder zu ersetzen. Geht immer, es sei denn Lieferung wird schon verpackt.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Shopprogramm: Wäre es nicht komfortabel, ein Programm auf dem heimischen Rechner zu haben, welches das aktuelle Sortiment mit den aktuellen Preisen führt, wo dann auch offline Bestellungen zusammengestellt und hochgeladen werden können? So ließen sich die Merklisten auch besser verwalten.&lt;br /&gt;
&lt;br /&gt;
Ja, das fände ich auch sehr toll, sollte man mal drüber nachdenken.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Passwortschutz: Die derzeitige Lösung der Anmeldung im Shop ist für den heutigen Stand der Dinge recht unsicher. Ein zur Kundennummer gehörendes Passwort sollte schon sein. Was soll schon passieren, die Versandadresse ist ja bekannt, und wenn jemand anderes auf meinen Namen bestellt. lässt er sich über die Versandadresse herrausfinden, außerdem weiß ja auch nicht jeder meine Kundennummer.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Eine Art Lagerbestand im Onlineshop wäre sinnvoll. Es ist mehr als ärgerlich, wenn bei einer Bestellung z.&amp;amp;nbsp;B. Kleinteile wie Kondensatoren oder Schalter fehlen, weil sie nicht auf Lager waren. Dabei gibt es gerade bei solchen Teilen genug Alternativen, sei es Farbe, Bauart oder Wert, auf die man umsteigen könnte, damit die Bestellung vollständig ist. Es würde ja vollkommen ausreichen den Bestand in Form einer Ampel, wie bei anderen Shops, mit grün, gelb und rot zu realisieren.&lt;br /&gt;
&lt;br /&gt;
Im Warenkorb werden Artikel, die nicht auf Lager sind, mittlerweile auch so gekennzeichnet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Früher würden neue Artikel mit einem gelben &amp;quot;NEU&amp;quot; gekennzeichnet, jetzt ist das nicht mehr so. Hätte gerne wieder einen Überblick, was neu hinzugekommen ist ohne jede Artikelgruppe aufrufen zu müssen. ||&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Artikelsuche: Bitte standardmäßig in der Liste alle Suchergebnisse anzeigen, nicht nur 16 Stück (oder wenigstens eine vernünftige Anzahl). Die Zeiten der 56k-Modems sind vorbei. |||&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Eine vernünftige Suchfunktion. Beispiel: Ich suche nach &amp;quot;Schnurschalter&amp;quot;. Dann will ich auch Schnurschalter sehen und nicht alle Produkte, in denen der Begriff &amp;quot;Schalter&amp;quot; vorkommt. Sowas ist doch wirklich vorsinflutlich. |&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Nummerierung der Bauteile: Warum wird der Warenkorb nicht nummeriert. Ich hasse es wenn ich manuell mit Hand zählen muss! Das ist auch nervig wenn man manuell per Hand vergleichen will!&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Virtuelle Bauteilekisten (vbox): Wer bei Reichelt bestellt, ordert oft viele viele Kleinteile. Wenn man nun ein Gerät zum wiederholten mal baut, muss man alle Teile erneut eingeben. Könnte ich nun neben dem Warenkorb auch noch virtuelle Bauteilekisten füllen, würde das neue Bestellungen sehr beschleunigen. Der Kunde als Wiederholungstäter sozusagen.&lt;br /&gt;
&lt;br /&gt;
Konkret:&lt;br /&gt;
Ich habe vier verschiedene Elektronikprojekte entwickelt.Für jedes dieser Projekte lege ich bei Reichelt.de eine virtuelle Bauteilekiste mit eigenem Namen an. Die Zusammenstellung der Artikel funktioniert wie beim normalen Warenkorb. Wenn ich nun ein Projekt erneut bauen möchte, kopiere ich einfach den Inhalt der virtuellen Bauteilekiste per Knopfdruck in meinen Warenkorb. Wenn ich Projekt2 also dreimal nachbauen möchte kopiere ich die virtuelle Bauteilebox &amp;quot;Projekt2&amp;quot; dreifach in den Warenkorb.&lt;br /&gt;
Schön wäre es auch die virtuellen Bauteilekisten mit Schaltplan und ev. Eagle  - Dateien veröffentlichen zu können.&lt;br /&gt;
&lt;br /&gt;
Und wieso ist der Login, den es früher mal gab weg? Da konnte man zumindest den aktuellen Warenkorb speichern soweit ich mich erinnern kann, aber seit der neuen Website gibt&#039;s den Login nicht mehr. Ausserdem muss ich jetzt jedesmal meine Kundennummer rauskramen um meine Bestellung abzusenden - Conrad löst das beispielsweise besser. (dafür haben die aber auch ne besch...eidene Suchfunktion und nen unübersichtlichen Shop)&lt;br /&gt;
&lt;br /&gt;
Nebenanregung:&lt;br /&gt;
Damit die &amp;quot;Bauteilekisten&amp;quot; nicht unmengen Platz beim Anbieter verschwenden könnte man diese auslagern.&lt;br /&gt;
Also Nach erstellen Download als einfaches File und bei Bedarf einfach bei Bestellung übertragen.&lt;br /&gt;
So könnte sie jeder in Ruhe offline vorbereiten und verwalten.&lt;br /&gt;
&lt;br /&gt;
IDEE: Offenlegung der Datenbank: Offenlegung der Datenbank oder zumindest Export für die User. Somit koennten die Datenbank in eine Art Datenbank gespeichert werden. Als Katalogprogramm koennte dann soetwas ähnliches wie das von Segor zum Einsatz kommen. Gibt es einen Standard dann koennten  Reichelt, Conrad, Segor, etc. mit einem Programm genutzt und verglichen werden:&lt;br /&gt;
siehe auch http://www.mikrocontroller.net/forum/read-7-363596.html&lt;br /&gt;
Programmierunterstuetzung findet sich bestimmt. Abgesehen davon haben die Distributoren den Vorteil die Katalogdaten übers Internet upzudaten.&lt;br /&gt;
&lt;br /&gt;
Zum offenlegen der Datenbank: Wie wäre es mit einem Webservice, mit dem man über SOAP auf die Datenbank zugreifen kann? Ähnlich wie bei Amazon oder auch Google.&lt;br /&gt;
&lt;br /&gt;
Lösung in HTML:&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich hatte für das Projekt [http://www.mikrocontroller.net/topic/82127 &amp;quot;Webserver ATmega32/644DIP ENC28J60&amp;quot;] ein Bestellformular ([http://www.mikrocontroller.net/attachment/29451/reichelt.htm reichelt.htm] &amp;lt;span style=&amp;quot;font-size: 0.8em;&amp;quot;&amp;gt;[Version vom 22.12.2007]&amp;lt;/span&amp;gt;) gebastelt um schnell alle nötigen teile in den Reichelt – Warenkorb zulegen. Mit etwas HTML-Kenntnis dürfte eine Anpassung nicht das Problem darstellen.&amp;lt;br/&amp;gt;&lt;br /&gt;
In JavaScript, des &#039;&#039;&#039;reichelt.htm&#039;&#039;&#039; Bestellformulars, die Funktion &amp;lt;code&amp;gt;&#039;&#039;&#039;send()&#039;&#039;&#039; &#039;&#039;Zeile 42:&#039;&#039; var maxElements = 40;&amp;lt;/code&amp;gt; die &#039;&#039;&#039;40&#039;&#039;&#039; durch die Anzahl der unterschiedlichen Bauteile Anpassen.&lt;br /&gt;
&lt;br /&gt;
== zu Artikeln ==&lt;br /&gt;
&lt;br /&gt;
* Spitze fände ich eine verbesserte Suche für Gehäuse. Oft stehe ich vor dem Problem, meine Baugruppe ist so-und-so groß und ich brauche ein Gehäuse, in das diese Baugruppe hineinpasst. Zur Zeit muss ich mich manuell durch alle Gehäusegrößen &amp;quot;durchwühlen&amp;quot;, bis ich ein passendes gefunden habe. Die Suche stelle ich mir so vor: Ich gebe die Maße ein, die das Gehäuse mindestens haben &#039;&#039;muss&#039;&#039;, und bekomme alle Gehäuse angezeigt, die genau so groß oder etwas größer sind als meine Vorgaben.     --&amp;gt; schau mal bei den Gehäuse-Herstellern - bei [http://www.tekogehaeuse.de/ teko] gibts das und dann einfach mit der Bestellnummer in Reichelt suchen - die meisten gibts..&lt;br /&gt;
&lt;br /&gt;
== Abwicklung ==&lt;br /&gt;
&lt;br /&gt;
* Sammelbestellung: Wenn ich etwas bei Reichelt bestelle, bestelle ich für meine Kollegen auch immer etwas mit. Wenn dann das Päckchen kommt, heisst es sortieren. Wer hatte von was, wie viel? Danach kommt das rechnen dran. Ein besonderes Highlight, sind die Nettopreise. Und auch das Verteilen der Versandkosten ist nicht ohne. Währe es nicht möglich, im Bestellvorgang eine Zuordnung zu Personen oder Projekten zu realisieren, und die Zwischensummen der Personen oder Projekte auf der Rechnung oder per Mail anzugeben. Ein Schmankerl wäre die Angabe der Bruttopreise inklusive der anteiligen Versandkosten.&lt;br /&gt;
** Wahrscheinlich nicht möglich, siehe AGB-Klausel zu Massenbestellungen. &amp;quot;Garantieberechtigt&amp;quot; ist auch immer nur der ursprüngliche Besteller.&lt;br /&gt;
** Welche Klausel? Mir fällt nur 13.3 ins Auge...&lt;br /&gt;
&lt;br /&gt;
* Abpackgrößen bei SMD-Bauteilen auf 5- oder 10er-Schritte beschränken. Die meisten sind eh im Cent-Bereich und es dürfte logistisch einfacher/schneller sein, feste Stückzahlen vorzuhalten, was man preislich sicher an die Kunden weitergeben kann ;)&lt;br /&gt;
&lt;br /&gt;
* Private Bestellungen an den Arbeitsplatz: Da ich oft nicht zur Post gehen kann, wenn eine private Bestellung von DHL niedergelegt wird, will ich als Lieferanschrift den Firmennamen und in der zweiten Zeile meinen eigenen Namen angeben können. So kann ich die Lieferung an meinem Arbeitsplatz entgegennehmen.&lt;br /&gt;
In grossen Firmen ist aber eine Voraussetzung dafür, das die Anschrift in korrektem Format angegeben werden kann.&lt;br /&gt;
&lt;br /&gt;
Z.B.&lt;br /&gt;
&lt;br /&gt;
Firma Time Machines&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
z.Hd. Max Mustermann          /* oder auch &amp;quot;c/o Max Musterman&amp;quot; oder nur &amp;quot;Max &lt;br /&gt;
Mustermann&amp;quot; */&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Sowiesostr. 17&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
12345 Musterstädtchen&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehlt die Angabe des Namens, so wird der Wareneingang die Annahme entweder gleich verweigern, weil die Sendung nicht erwartet wird, herumfragen wer eine Sendung erwartet oder das Päckchen öffnen. In den beiden letztere Fällen hat man spätestens nach zweimaligen Auftreten einen Rüffel vom Chef zu erwarten, wegen des Aufwandes den man verursacht. Das meine private Post geöffnet wird, mag ich auch nicht (wenn hier der Wareneingang auch durchaus berechtigt ist, das zu tun).&lt;br /&gt;
&lt;br /&gt;
Problem 1: Das Bestellformular erlaubt es aber nicht die Lieferanschrift korrekt formatiert einzugeben. Die unter Vorname und Name/Firmenname angebotenen Felder werden in einer Zeile zusammengezogen. Das aber ist geeignet zu suggerieren, das der Name Teil des Firmennamens ist (mit allen rechtlichen Konsequenzen). Gibt man in die beiden unbenannten Zeilen unter Name/Firmenname etwas ein so wird diese Eingabe bei der Anzeige der Bestelldaten nicht angezeigt.&lt;br /&gt;
&lt;br /&gt;
Problem 2: Ich habe nun mindestens zwei Mal in die Bemerkungen bei der Bestellung die korrekt formatierte Anschrift (wie oben) eingegeben. Das Problem ist aber, das in der Bestellbestätigung in der Lieferanschrift die zweite Zeile fehlt.&lt;br /&gt;
&lt;br /&gt;
Problem 3: Auf meine telefonische Nachfrage wird mir erst erklärt, das ja auf dem Lieferschein die komplette Eingabe ausgedruckt ist. Auf meine Einwendung, das die Sendung ja dann nicht mir persönlich zuzuordnen ist und evtl. entweder gleich abgewiesen oder geöffnet wird, wurde erklärt, dass auch der Adressaufkleber diese Angabe enthält. Auf meine weitere Einwendung, das dies aber in der Bestellbestätigung nicht erkennbar ist, wurde erklärt, das zwischen dem Adressaufkleber und der Bestellbestätigung Unterschiede bestehen.&lt;br /&gt;
Auf meine vierte Einwendung, das man das doch bitte abstellen solle, um unnötige Nachfragen zu vermeiden, wurde das verweigert.&lt;br /&gt;
&lt;br /&gt;
Ich wünsche mir alle vier Probleme abgestellt. Vor allem da ich das nun schon mindestens vor einem Jahr mal bei Reichelt angezeigt habe. ||&lt;br /&gt;
&lt;br /&gt;
Nicht sehr kundenfreundlich und eigentlich Reichelt-untypisch&lt;br /&gt;
&lt;br /&gt;
== Rücksendungen / Reklamationen ==&lt;br /&gt;
&lt;br /&gt;
wurden nach unseren Erfahrungen früher (unter dere alten Chefin) viel kulanter gehandhabt. Seit ein paar Jahren wird bei Rücksendungen peinlich genau zwischen privat und Gewerbekunden unterschieden. Als Gewerbekunde mache wir 5 stellige Umsätze und kommen regelmässig in einen Rabatt für Warengruppe 1. Da passiert es natürlich schon mal, daß etwas versehentlich falsch bestellt wird und auch nicht gleich verarbeitet. Wegen dem Rücksendeporto ist das ok, aber obwohl originalverpackt, wurde jetzt bereits nach 8 Wochen eine Rücksendung verweigert so daß man das Zeugs jetzt wohl oder übel wegwerfen oder in Ebay vertickern muss. Entspricht natürlich den gesetzlichen Vorgaben bzw. übertrifft diese sogar weil bei Vollkaufleuten gar nix zurückgenommen werden muss. Solche Vorgänge sind bei Bürklin oder Schukat aber regelmäßig kein Problem.&lt;br /&gt;
&lt;br /&gt;
== zu dieser Wunschliste ==&lt;br /&gt;
&lt;br /&gt;
(gehört eigentlich in Diskussion)&lt;br /&gt;
&lt;br /&gt;
* Wäre es möglich ein Script zu bauen, welches man ab und zu über diesen Artikel jagt und das die Einträge nach Anzahl der Striche ordnet? =&amp;gt; Formatierung als Tabelle (1. Spalte: das Teil, 2. Spalte: die Striche) würde auch schon helfen.&lt;br /&gt;
** Das geht kaum, weil | ein SOnderzeichen in Vorlagen ist.&lt;br /&gt;
&lt;br /&gt;
* Dass hier jeder immer nur einen Strich macht, glaube ich nicht! Ein Script was pro IP nur einen Strich zulässt wäre gut. -&amp;gt; Naja, alle 24h spätestens gibt es eigendlich eine neue IP...   Antwort: Lässt sich sehr leicht überprüfen mit Artikel -&amp;gt; Versionen&lt;br /&gt;
&lt;br /&gt;
* Warum macht der 5te nicht anstelle |||| ein V :-) und anstelle vom nächsten V kommt dann ein X ....Daniel [[Benutzer:84.179.17.164|84.179.17.164]] 20:11, 4. Feb 2006 (CET)&lt;br /&gt;
::Sehr clever. Das würde es Reichelt bestimmt enorm erleichtern, stark nachgefragte Artikel schnell zu erkennen. *facepalm* ;-)&lt;br /&gt;
&lt;br /&gt;
* Wenn Reichelt was aus der Liste neu ins Programm aufnimmt wäre eine Benachrichtigung per Newsletter oder RSS nett. Oder zumindest eine Rubrik &amp;quot;Seit XX.XX.200X neu im Programm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Logbuch ==&lt;br /&gt;
&lt;br /&gt;
20.03.2012: Sensorik Aktorik: Merge und alphabetische Sortierung&lt;br /&gt;
&lt;br /&gt;
19.03.2012: Aufräumarbeiten (&amp;gt;50 eingefärbt, Blöcke &amp;gt;5 getrennt)&lt;br /&gt;
Dachte dafür gibts hier einen Bot, der dann auch am besten gleich nach Wunschhäufigkeit sortieren könnte...derweil habe ich den Bio-Bot gemacht...hoffe das geht OK, oder gibts da FESTE Zuständigkeiten?&lt;br /&gt;
&lt;br /&gt;
07.10.2011: Reichelt über Facebook drauf aufmerksam gemacht - man schaue sich die Liste regelmäßig durch :)&lt;br /&gt;
&lt;br /&gt;
01.10.2011: Umfangreiche Neuordnung der gesamten Wishlist: Neue Unterkategorien, alphabetische Sortierung, Zusammenführung gleicher Wünsche aus verschiedenen Kategorien, Fix diverse Falsch-Einsortierungen, Update inzwischen erhältlicher Teile, Ausbau einzelner Einträge für bessere Sortierung und mehr Info beim Lesen (nicht nur IC-Namen), etc. Vielleicht hat ja noch jemand nen Einfall für die Sichtbarmachung besonders nachgefragter Einträge, Fett- und Kursivdruck der &#039;&#039;&#039;&#039;&#039;|||||&#039;&#039;&#039;&#039;&#039;-Blöcke funktioniert ja leider nicht... &lt;br /&gt;
&lt;br /&gt;
...bei Ausrufezeichen funktionierts aber. Meinungen zur Farbe und der Auslagerung in eine Vorlage?--[[Benutzer:Bzzz|Bzzz]] 14:49, 1. Okt. 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
03.03.2011: E-Mail wurde an Reichelt-Verwaltung geschrieben.&lt;br /&gt;
&lt;br /&gt;
8.4.2010: Mail an Reichelt geschickt und an die Liste erinnert.&lt;br /&gt;
&lt;br /&gt;
2.10.2009: REVERT auf die Version vor dem 20.Jul.2009 12:47. Da der Artikel von 193.200.150.82 &amp;quot;verdoppelt&amp;quot; wurde. D.h. alles war doppelt vorhanden und die Einleitung gelöscht&lt;br /&gt;
&lt;br /&gt;
19.06.2009: Hab mal den Kram unter der Rubrik &amp;quot;Webseite&amp;quot; entfernt/zusammengefasst der schon realisiert wurde. -- Tobias&lt;br /&gt;
&lt;br /&gt;
12.03.2009: Da haben wir ja alle verpennt, Reichelt in 2008 mal wieder an die Liste zu erinnern. Ich hab das jetzt mal nachgeholt und eine Mail an Reichelt geschickt. -- [http://www.reintechnisch.de Winfried Mueller]&lt;br /&gt;
&lt;br /&gt;
03.08.2007: Das Feld für &amp;quot;neue Artikel&amp;quot; scheint aus dem Reichelt Shop entfernt worden zu sein, schade da man so schnell schauen konnte was neu im Programm ist, nun ist wieder Katalogblättern angesagt. - Nicht nachvollziehbar. siehe Startseite-&amp;gt;Service-&amp;gt;Neu in unserem Shop &lt;br /&gt;
&lt;br /&gt;
18.05.2007: Habe Reichelt an diese Liste erinnert. -- Robin Tönniges&lt;br /&gt;
&lt;br /&gt;
14.11.2006 Ich lese mir gerade euer Wishlist durch. Finde ich gut! Aber wie ihr &lt;br /&gt;
hier (Logbuch) über Reichelt kritisiert finde ich nicht fair! Die haben genug zu arbeiten! Bitte keine Vorurteile! Um das gehts mir hauptsächlich!&lt;br /&gt;
Macht weiter nur nicht so! &lt;br /&gt;
P.S. Schöne inforeiche Site&lt;br /&gt;
Steven&lt;br /&gt;
&lt;br /&gt;
6.8.2006 Habe eine umfassende Kritik zu Reichelts neuem Webshop geschrieben und dabei auf unsere Wünsche bzl. Webseite, insbesondere &amp;quot;Virtuelle Bauteilebox&amp;quot; und &amp;quot;Gehäusesuche&amp;quot; hingewiesen. Verlinkung auf diese Seite ist auch erwähnt worden.&lt;br /&gt;
&lt;br /&gt;
5.8.2006 Hurra, Reichelt bietet endlich den ATtiny13V an! Jetzt können wir  Batteriebetriebene Geräte (2,4-3V) bauen. By the way: Gibt es blaue LED&#039;s, die dazu passen?&lt;br /&gt;
&lt;br /&gt;
14.7.2006 Reichelt antwortete: (Zu lang, deshalb hier nur der Inhalt:) Wir haben                                                                                    ihre mail zur Kenntnis genommen (Forum wird angeblich ab und zu immer wieder kontrolliert). Entscheidender Satz (Original eines Mitarbeiters:)....Ich denke jedoch, dass die meisten und&lt;br /&gt;
wichtigsten Wünsche zum Herbstkatalog eingelistet werden.&lt;br /&gt;
&lt;br /&gt;
14.7.2006 Reichelt erneut auf diesen Beitrag aufmerksam gemacht, erwarte Antwort.&lt;br /&gt;
&lt;br /&gt;
3.7.2006: beitz-online.de eine verlinkung gemailt. Ich hoffe das ist erlaubt.&lt;br /&gt;
&lt;br /&gt;
5.3.2006: Verlinkung gemailt&lt;br /&gt;
&lt;br /&gt;
12.10.2005: Verlinkung gemailt und gebeten sich darum zu kümmern&lt;br /&gt;
&lt;br /&gt;
07.10.2005: Reichelt eine Verlinkung gemailt und speziell auf LOW ESR Elkos und 433 Mhz Funkmodule hingewiesen. Mal sehen was die Antworten.&lt;br /&gt;
&lt;br /&gt;
08.07.2005: Reichelt bescheid gegeben, man möge mal wieder hier rein schauen -- Thomas O.&lt;br /&gt;
&lt;br /&gt;
13.05.2005: Antwort von Reichelt: der Versand ins Ausland bleibt leider bei 150 Eur -- nurmi&lt;br /&gt;
&lt;br /&gt;
09.05.2005: Reichelt bescheid gegeben, man möge mal wieder hier rein schauen -- nurmi&lt;br /&gt;
&lt;br /&gt;
08.05.2005: Pflege der Liste hier: Wenn ihr was in der Liste seht, was bereits schon im Angebot ist, löscht es bitte! Sonst ist das hier bald ein unüberschaubares Chaos. -- [http://www.reintechnisch.de Winfried Mueller]&lt;br /&gt;
&lt;br /&gt;
08.02.2005: Positives Feedback von Reichelt. Freuen sich über diese Form der Anregung. In der 2. Märzhälfte sollen weitere Produkte in den neuen Katalog einfließen. -- [http://www.reintechnisch.de Winfried Mueller]&lt;br /&gt;
&lt;br /&gt;
07.02.2005: Reichelt bescheid gegeben, man möge mal wieder hier rein schauen -- [http://www.reintechnisch.de Winfried Mueller]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Lieferanten]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=92556</id>
		<title>SMD Löten</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=SMD_L%C3%B6ten&amp;diff=92556"/>
		<updated>2016-03-22T09:10:49Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Löten]]&lt;br /&gt;
== Einlöten von SMD-Bauteilen ==&lt;br /&gt;
&lt;br /&gt;
Irgendwann ist man an dem Punkt angelangt, an dem man ein Bauteil braucht, das nur in [[SMD]] verfügbar ist. [[TI]] zum Beispiel bietet einige [[MSP430]]-[[Mikrocontroller]] ausschließlich in [[SMD]] an. Ein weiterer, nicht zu unterschätzender, Vorteil ist, daß die PCB-Größe deutlich kleiner, und damit auch von professionellen Lieferanten erschwinglich wird. Das ist dann der Zeitpunkt an dem man sich fragt: &amp;quot;Wie lötet man sowas?&amp;quot; Nun, eigentlich ist es gar nicht so schwer, sobald man den richtigen Trick dabei mal raus hat. &lt;br /&gt;
&lt;br /&gt;
=== Handlöten ===&lt;br /&gt;
&lt;br /&gt;
==== Voraussetzungen ====&lt;br /&gt;
&lt;br /&gt;
* Grundvoraussetzung ist ein Lötkolben mit entsprechender Lötspitze.&lt;br /&gt;
**Der Lötkolben sollte am besten der einer geregelten Lötstation sein. Die Einstellung der Lötstation sollte man halbwegs beherrschen. (Lötversuche an einer alten Platine sind in diesem Fall sehr hilfreich).&lt;br /&gt;
**Der Lötkolben sollte möglichst leicht und der vordere (heiße) Teil möglichst kurz sein. Je länger, desto mehr wird ein eventuelles Zittern der Hand verstärkt.&lt;br /&gt;
** Die Lötspitze sollte so dick sein, wie es noch gerade für die Aufgabe vertretbar ist. Nicht etwa die dünnste aufzutreibende Lötspitze. Was auf den ersten Blick widersprüchlich klingt (so dick wie es gerade noch geht), hat einen einfachen Grund: Die an der Spitze ankommende Wärme, die Wärmekapazität der Spitze und die Wärmeübertragung sind bei größeren Spitzen entsprechend besser. Daher geht das Löten mit einer größeren Spitze besser. Natürlich sollte man es nicht übertreiben, aber die 0,8-mm-Spitze ist häufig die falsche Wahl. Eine Meißelform mit ca. 1,3mm hat sich bewährt. Damit ist auch QFN lötbar, nur auf die Methode kommt es an.&lt;br /&gt;
** Die Lötspitze sollte in einem guten bis erstklassigen Zustand sein.&lt;br /&gt;
&lt;br /&gt;
* Außerdem braucht man noch Entlötlitze. Hier sollte man die dünnste nehmen, die man bekommen kann. Breiter als 1,5 mm sollte sie nicht sein, eher dünner. Hat man keine passende zur Hand oder herrscht Geldmangel, so lassen sich auch die feinen Litzen eines abisolierten, flexiblen Silikonkabels für diesen Zweck missbrauchen. &#039;&#039;[http://www.reichelt.de/Entloetpumpen-litze/ENTL-TLITZE-00/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=7388&amp;amp;GROUPID=556&amp;amp;artnr=ENTL%C3%96TLITZE+00&amp;amp;SEARCH=entl%F6tlitze Entlötlitze]&#039;&#039; ist definitiv die Investition wert&lt;br /&gt;
&lt;br /&gt;
* Natürlich braucht man auch noch das Lötzinn, bestenfalls mit Flussmittel im Kern. 1mm ist für kleinere Strukturen schon recht groß, 0,5 mm ist praktikabel, 0,23 mm ist bei kleinerem Pitch sehr zu empfehlen aber nicht unbedingt nötig.&lt;br /&gt;
&lt;br /&gt;
* Flüssiges &#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039; in Stiftform mit eingebautem Pinsel oder Flussmittelgel aus der Spritze tun gute Dienste.&lt;br /&gt;
&lt;br /&gt;
* Schließlich ist auch noch eine Leiterplatte (PCB) vonnöten. Hier hat man entweder die Möglichkeit, sich eine bei den verschiedenen PCB-Herstellern fertigen zu lassen oder sie selber zu belichten und zu ätzen. Besonders bei Chips mit kleinem Pin-Abstand hilft eine Lötstoppmaske und die Vorverzinnung der Pads; die kleine Menge Zinn, die bei industriell gefertigten Platinen auf den Pads ist, reicht völlig aus, man braucht dann kein oder nicht viel extra Lötzinn.&lt;br /&gt;
&lt;br /&gt;
* Feine &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039;. Billige tun es eher weniger.&lt;br /&gt;
&lt;br /&gt;
* Eine &#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039; (Empfehlung: 5-fache Vergrößerung). Diese dient in erster Linie zur Kontrolle. Löten ist unter einer einfachen Lupe eher unangenehm und ein Notbehelf, da die Perspektive verloren geht. Eine Lupenbrille (gute können recht teuer sein) oder ein Stereomikroskop (teuer bis sehr teuer) wäre zum Löten die bessere Wahl.&lt;br /&gt;
&lt;br /&gt;
==== Löten von Widerständen, Kondensatoren und anderen 2-Pinnern ====&lt;br /&gt;
&lt;br /&gt;
Es gibt diese Bauteile hauptsächlich in diesen Bauformen:&lt;br /&gt;
* 1206:  Länge: 3,20 mm  Breite: 1,60 mm (klobig, laufen langsam aus)&lt;br /&gt;
* 0805:  Länge: 2,00 mm  Breite: 1,25 mm ⇒ Empfohlene Baugröße, minimale Baugröße zum Schwalllöten&lt;br /&gt;
* 0603:  Länge: 1,60 mm  Breite: 0,80 mm (derzeit in der Industrie aktuell) ⇒ &#039;&#039;noch&#039;&#039; von Hand lötbar, für die, die es gerne etwas kleiner mögen&lt;br /&gt;
* 0402:  Länge: 1,00 mm  Breite: 0,50 mm (wird derzeit Standard in der Industrie)  ⇒ nicht mehr schön zu verarbeiten, u.a. weil die Widerstände unbeschriftet sind&lt;br /&gt;
* 0201:  Länge: 0,50 mm  Breite: 0,25 mm (im Handy)&lt;br /&gt;
* 01005: Länge: 0,25 mm  Breite: 0,13 mm (im Handy)&lt;br /&gt;
&lt;br /&gt;
Das Einlöten von 2-Pinnern ist sehr einfach. Es gibt eigentlich bloß einen kleinen Trick:&lt;br /&gt;
&lt;br /&gt;
# Ein Pad auf der Leiterplatte verzinnen.&lt;br /&gt;
# Das Bauteil mit einer Pinzette in Endposition halten und leicht an beide Pads andrücken.&lt;br /&gt;
# Dabei das verzinnte Pad mit dem Lötkolben erwärmen. Darauf achten, daß das Bauteil eben aufliegt. Das Bauteil ist nun einseitig eingelötet.&lt;br /&gt;
# Das zweite Pad normal löten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und schon hat man das Bauteil eingelötet.&lt;br /&gt;
&lt;br /&gt;
Als &#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; empfiehlt sich eine mit ca. 1 mm breiter Spitze, die als SMD-Pinzette (meist schwarz brüniert) ab ca. 10.- angeboten werden. Hier zu sparen lohnt nicht.&lt;br /&gt;
&lt;br /&gt;
==== Lötpaste ====&lt;br /&gt;
ist eine Mischung aus Lötzinn-Kügelchen und Flussmittel.&lt;br /&gt;
&lt;br /&gt;
==== Löten von Bauteilen im SO-Package ====&lt;br /&gt;
&lt;br /&gt;
Das Löten von Bauteilen im SO Package gestaltet sich fast genauso einfach wie das Löten von Widerständen: Wichtig dabei ist, daß man sich die Zeit nimmt, die man braucht. &lt;br /&gt;
Sehr hilfreich ist die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Den IC platzieren.&lt;br /&gt;
# Den IC mit einem Finger leicht nach unten drücken. (Manchem fällt es leichter, den IC z.B. mit einem Stück Tesafilm zu fixieren.)&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten, den Tesafilm dann ggf. entfernen.&lt;br /&gt;
# Alle anderen Pads verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen.&lt;br /&gt;
# Die Zinnbrücken mit Hilfe von Entlötlitze entfernen. Dazu hält man die Entlötlitze an die betroffenen Pads und erwärmt sie. Das Zinn geht dann automatisch auf die Entlötlitze und es gibt keine Brücken mehr. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen. &#039;&#039;&#039;Alternativ&#039;&#039;&#039; kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zu den Pins hin wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&lt;br /&gt;
==== Löten von (T)SSOPs und QFPs ====&lt;br /&gt;
&lt;br /&gt;
War es bei Bauteilen im SO-Package mit einer ruhigen Hand noch möglich die Pins ohne Zinnbrücken zu verlöten, ist das bei TSSOPs oft nicht mehr möglich, da der Abstand der Pins einfach zu klein ist. Hier wird die Verwendung eines &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittels]&#039;&#039;&#039; dringend empfohlen. Des Weiteren ist eine mit Lötstopplack versehene Platine hierbei eine sehr große Hilfe. Selbstgemachte Platinen mit QFP sind noch sehr gut, mit TSSOP noch gut möglich.&lt;br /&gt;
&lt;br /&gt;
# Ein Pad, das an einer Ecke des ICs liegt, verzinnen.&lt;br /&gt;
# Flussmittel über alle Pins verteilen&lt;br /&gt;
# Platzieren des Bauteils.&lt;br /&gt;
# Das Bauteil irgendwie fixieren (&#039;&#039;[http://www.reichelt.de/Pinzetten/EP-150/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=40414&amp;amp;GROUPID=574&amp;amp;artnr=EP+150&amp;amp;SEARCH=pinzette+smd Pinzette]&#039;&#039; oder vorsichtig mit dem Zeigefinger etc.). Tesafilm ist recht praktisch und lässt sich leicht wieder entfernen.&lt;br /&gt;
# Das Pad erwärmen, bis das Zinn aufschmilzt, und den Pin gut benetzt. Sollte der IC jetzt nicht richtig sitzen, einfach nochmal das Zinn erwärmen und den IC sehr vorsichtig verschieben bis er sitzt. Allerdings muss man dabei aufpassen, den IC nicht zu stark zu erwärmen, gegebenenfalls eine Pause einlegen. Der Finger bzw. Tesafilm ist ein guter &amp;quot;Indikator&amp;quot; bei zuviel Hitze, solange es um einen Pin geht. ;-) &lt;br /&gt;
# Das dem ersten gelöteten Pad diagonal gegenüberliegende Pad löten&lt;br /&gt;
# Jetzt kann man das Bauteil loslassen, da es genügend fixiert ist, bzw. den Tesafilm entfernen.&lt;br /&gt;
# Überprüfen, ob der Chip wirklich richtig auf der Platine liegt (vorallem: liegt Pin 1 auch auf Pad 1?), jetzt sind Korrekturen noch möglich.&lt;br /&gt;
# Die restlichen zwei Pins an den Ecken des ICs verlöten.&lt;br /&gt;
# &#039;&#039;&#039;Entweder&#039;&#039;&#039; alle anderen Pads einzeln mit einer feinen Spitze verlöten. Es ist nicht schlimm, wenn Zinnbrücken entstehen. &#039;&#039;&#039;Oder&#039;&#039;&#039; unter Verwendung von &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;: Mit den frisch verzinnten Lötkolben über die erste Seite des Gehäuses fahren, dabei ggf noch &#039;&#039;etwas&#039;&#039; Lötzinn zugeben. Den Lötkolben dabei mit einer Geschwindigkeit von ca. 2 - 4 Pins pro Sekunde (Abhängig von Zinn und Temperatur) vorwärts bewegen. Dabei spielt es keine Rolle, ob Brücken entstehen, solange des Zinn sauber verfliest. Wenn man vorverzinnte Pads und Lötstopplack hat, entstehen normalerweise keine oder sehr wenige Brücken. Die Oberflächenspannung sammelt &#039;&#039;geringe&#039;&#039; Menge Zinn an Pad und Pin, so dass es zu wenig Zinn für eine Brücke ist, aber auch dabei ist es kein Problem wenn Brücken entstehen. &lt;br /&gt;
# IC abkühlen lassen&lt;br /&gt;
# Mit dem Lötkolben über die andere(n) Seite(n) fahren.&lt;br /&gt;
# Überflüssiges Zinn mit Entlötsauglitze entfernen. (Eine Hand-Entlötsaugpumpe ist ungeeignet, da diese beim Auslösen einen kleinen Schlag gegen das Bauteil auslöst.)&lt;br /&gt;
# Zum Abschluss &#039;&#039;&#039;muss&#039;&#039;&#039; man mit einer &#039;&#039;&#039;[http://www.conrad.de/ce/de/product/818819/Uhrmacherlupe-50-x-25-mm-Eschenbach-11245?ref=searchDetail Lupe]&#039;&#039;&#039; (Empfehlung: 5-fache Vergrößerung) die Lötstellen einzeln prüfen. Mit einer Nadel kann der Pin leicht bewegt werden, dann sieht man ob der wirklich fest verbunden ist.&lt;br /&gt;
&lt;br /&gt;
Alternativ zur Entlötlitzentechnik gibt es auch Lötspitzen mit Hohlkehle.&lt;br /&gt;
&lt;br /&gt;
# Zuerst das Bauteil an zwei diagonalen Pins mit Lötzinn fixieren und die Ausrichtung prüfen. Ob Lötbrücken entstehen, ist zu diesem Zeitpunkt nicht wichtig.&lt;br /&gt;
# Dann genügend Flussmittel über die zu lötenden Pins streichen.&lt;br /&gt;
# Die Hohlkehle mit wenig Lötzinn füllen und über eine Seite des ICs führen.&lt;br /&gt;
# Jetzt hat man an einigen Stellen (meist am Ende der Seite, die man gelötet hat) einige Lötbrücken.&lt;br /&gt;
# Die Hohlkehle von Lötzinn reinigen und mit leerer Hohlkehle über die Lötbrücken fahren. Vorher nochmal genug Flussmittel draufgeben.&lt;br /&gt;
# Meist sind schon nach dem ersten mal keine Brücken mehr vorhanden. Falls doch, nochmals mit Flussmittel benetzen und an den entsprechenden Stellen mit der Hohlkehlspitze Lötzinn entfernen.&lt;br /&gt;
&lt;br /&gt;
Vorsicht! Immer wieder eine Pause einlegen, so dass der Chip nicht zu Heiß und bereits beim Löten beschädigt wird!&lt;br /&gt;
&lt;br /&gt;
==== QFN &amp;amp; HTSSOP====&lt;br /&gt;
&lt;br /&gt;
Beim QFN ist das Verfahren gleich zum TSSOP, außer dass man 4 Seiten bearbeiten muss. Hier besonders auf darauf achten, daß der IC nicht überhitzt, und zwischen den 4 Seiten eine Pause einlegen. In den Bibliotheken der Layout-Programmen ist ein QFN - laut JDEC - mit sehr kurzen Pads ausgestattet, die nur wenig unter dem Gehäuse hervorstehen. Macht man seine Platinen selbst, wird das Löten sehr stark vereinfacht, wenn man die Pads um gut 1mm weiter nach &#039;&#039;außen&#039;&#039; stehen läßt, die Pads also nach außen verlängert. Damit wird die Wärmeeinbringung an der richtigen Stelle stark vereinfacht.&lt;br /&gt;
&lt;br /&gt;
===== Löten des Centerpads von QFN &amp;amp; HTSSOP =====&lt;br /&gt;
&lt;br /&gt;
Das Centerpad beim QFN (oder der Heatslug beim HTSSOP) benötigt einen elektrischen, und/oder thermischen Kontakt. Beim Löten ohne Paste ist es aber auch ohne Heißluftstation ganz einfach dies Pad richtig anzubinden. Die hier geschilderte Methode findet man im Internet.&lt;br /&gt;
Dazu benötigt man:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.reichelt.de/Flussmittel-Loetpasten/EDSYN-FL-22/3/index.html?&amp;amp;ACTION=3&amp;amp;LA=446&amp;amp;ARTICLE=32673&amp;amp;GROUPID=4132&amp;amp;artnr=EDSYN+FL+22&amp;amp;SEARCH=FLUSSMITTEL+edsyn Flussmittel]&#039;&#039;&#039;&lt;br /&gt;
* Eine schnell zuheizende Lötstation&lt;br /&gt;
* Eine Durchkontaktierung unter dem Centerpad die groß genug ist Deine Lötspitze aufzunehmen (1,6mm haben sich bewährt). Bei HTSSOP kann es Sinn machen zwei oder drei Dukos anzulegen. Bei HTSSOP20 und QFN32 war &#039;&#039;eine&#039;&#039; Duko mit 1,6mm ausreichend.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# VOR dem Verlöten der Pads das Centerpad/Heatslug mit dem Lötkolben hauchfein verzinnen, entfällt bei verzinnten PCBs. Dabei darauf achten, daß nur wenig Zinn aufgebracht wird, größere Beulen sind zu entfernen.&lt;br /&gt;
# Flussmittel auf den IC &#039;&#039;und&#039;&#039; die PCB auftragen&lt;br /&gt;
# Den IC wie gewöhnlich verlöten&lt;br /&gt;
# Abkühlen lassen&lt;br /&gt;
# Eine entsprechende Unterlage bereitlegen, die es ermöglicht die PCB mit dem Gehäuse auf diese Unterlage zu pressen. Bei wenig Übung &#039;&#039;könnte&#039;&#039; es vorkommen, daß sich der komplette IC von der PCB aufgrund von Überhitzung ablöst (ist aber kein Problem, alles säubern und wieder von vorn ;-) )&lt;br /&gt;
# Die Duko mit Lötzinn füllen, und die Lötspitze in der Duko belassen&lt;br /&gt;
# Wenn das Lot aufgeschmolzen richtig ist, noch ein paar Millimeter Lot nachführen und dann die PCB auf die Unterlage pressen und &#039;&#039;ruhig&#039;&#039; halten.&lt;br /&gt;
# Sobald das IC-Pad benetzt, wird das Lot aus der Duko in den Spalt zwichen IC und PCB gesaugt, und der &amp;quot;Lotstand&amp;quot; im Lötauge nimmt ab. Jetzt ca. 1-2s warten und dann den Lötkolben entfernen&lt;br /&gt;
# Die PCB mindestens 10s nicht bewegen.&lt;br /&gt;
&lt;br /&gt;
==== Der Trick mit der Entlötlitze ====&lt;br /&gt;
&lt;br /&gt;
Bei kleinen SMD-Bauteilen kann es passieren, dass man beim Löten Zinnbrücken verursacht. Diese lassen sich recht einfach mittels Entlötlitze entfernen. Dabei sollte man direkt mit dem Ende der Litze entlöten und nicht der Mitte. Hilfreich kann bei wenig Platz auch ein schräges Anschneiden der Litze sein. Scharfe Schneidwerkzeuge, die ein Ausfransen der Litze verhindern, sind unverzichtbar (Tipp: SMD-Werkzeuge markieren, damit sie nicht versehentlich für grobe Arbeiten verwendet werden).&lt;br /&gt;
&lt;br /&gt;
Es empfiehlt sich die Entlötlitze vorher leicht mit Flussmittel zu tränken, damit das Zinn besser aufgenommen werden kann.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich sollte man beim Arbeiten mit Entlötlitze, ob an SMD- oder anderen Bauteilen, etwas Vorsicht walten lassen. Entlötlitze ist ein sehr guter Wärmeleiter. Daher kann man sich beim Entlöten, wenn man die Litze direkt mit den Fingern hält, böse verbrennen. Über 300° vom Lötkolben über die Litze zu den Fingern übertragen sind kein Pappenstiel. Leider kann das Führen der Litze mit einer Pinzette oder kleinen Flachzange gerade bei SMD-Bauteilen zu ungenau sein, so dass man verleitet wird, die Finger zu nehmen.&lt;br /&gt;
&lt;br /&gt;
Trotzdem sollte man eher nicht zur Lötzinn-Absaug-Pumpe greifen. Das mag zwar einfacher und bei anderen Lötvorgängen durchaus praktisch sein, die kleinen SMD-Bauteile werden jedoch leicht mit abgesaugt und kommen dann nur als Brösel oder gar nicht mehr raus. Manche Hersteller bieten SMD-Überwurfspitzen für ihre Entlötpumpen an, die diese Gefahr verringern. Das vereinfacht die Sache ein wenig, man muss aber genau zielen und den Lötkolben kurz wegnehmen. Hier sollte man also eher zur Entlötlitze greifen.&lt;br /&gt;
&lt;br /&gt;
==== Trick 17 mit der Entlötlitze ====&lt;br /&gt;
&lt;br /&gt;
Mit der &amp;quot;Invertierte-Entlötlitzen-Methode&amp;quot; kann man auch mechanisch empfindliche Pins auf sehr kleinem Raster &#039;&#039;&#039;verlöten&#039;&#039;&#039;, indem man mit der Entlötlitze Lötzinn an das Pin/Pad-Paar zuführt. ([http://www.mikrocontroller.net/topic/94451#833286 Forumsbeitrag von Ulrich]).&lt;br /&gt;
&lt;br /&gt;
==== Wie entferne ich Zinnbrücken: ====&lt;br /&gt;
- Die Zinnbrücken können mit Hilfe von Entlötlitze entfernt werden. Dazu hält man die Entlötlitze an die betroffenen Pads und erwärmt sie. Das Zinn geht dann automatisch auf die Entlötlitze und es gibt keine Brücken mehr. Achtung: Bei zu langer &amp;quot;Entlötzeit&amp;quot; ist fast kein Zinn mehr unter dem Pad, hier ggf. nachverzinnen. Oft hilft es auch die Litze sehr Spitz anzuschneiden und nur diese Spitze auf die Pins zu legen, und/oder die Litze mit Flußmittel zu tränken. &lt;br /&gt;
&lt;br /&gt;
- Alternativ kann man unter Vewendung eine sehr feinen Metallteiles - z.B. eines Schraubendrehers, einer Lötnadel, eine Stecknadel - die Stelle kurz erwärmen und das Metallteil kurz zwischen die Pins direkt am IC legen und zwischen den Pins wegziehen (nicht kratzen). Das Lötzinn benetzt das kalte Metall nicht, und damit ist die Zinnbrücke aufgrund der Oberflächenspannung des Zinns getrennt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reflow-Techniken ===&lt;br /&gt;
&lt;br /&gt;
Bei Reflow-Lötverfahren wird vor der Bestückung auf die Lötpunkte der Platine eine Lötpaste aufgetragen. Die Anschlüsse der zu lötenden Bauteile werden dann in diese Paste positioniert. Nach dieser Bestückung wird die Platine mit den Bauteilen erhitzt. Die Lötpaste schmilzt auf. Sind alle Lötpunkte aufgeschmolzen wird die Platine abgekühlt, das Lot erstarrt und die Bauteile sind verlötet.&lt;br /&gt;
&lt;br /&gt;
Reflow-Techniken galten lange Zeit als zu aufwendig für Amateure. Dies änderte sich, nachdem sich gezeigt hat, dass auch etwas hemdsärmelige Methoden zum Ziel führen. Auch diese setzen etwas Aufwand voraus, daher sind sie im folgenden nur kurz beschrieben.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich ist die Art der Wärmezufuhr problemabhängig zu klären:&lt;br /&gt;
* Erwärmung der Platine von unten hat den Vorteil, dass die Bauteile zuerst an ihren Lötpads erwärmt werden. Dies ist für wärmeempfindliche Bauelemente wie SMD-Elektrolytkondensatoren oder SMD-Steckverbinder die beste Lösung. (Grundsätzlich sollte man genau diese Art von SMD-Bauteilen vermeiden; nicht umsonst bestücken die Chinesen Steckverbinder und erst recht Elkos als Durchsteckbauteil.) Dagegen spricht eine doppelseitige Bestückung oder billiges Platinenmaterial aus Hartpappe.&lt;br /&gt;
* Erwärmung von oben hat den Vorteil, die Platine und deren Unterseite zu schonen. Große wärmeempfindliche Bauelemente nehmen aber zu viel Wärme auf. Beim Arbeiten mit Wärmestrahlung werden obendrein schwarze Flächen bevorzugt erwärmt (IC-Gehäuse, DC/DC-Wandler), nicht die reflektierenden Pads. Dies kann zum Platzen von Elkos, zum Verformen von Steckverbindern und zum Platzen (Popcorn-Effekt) von Chips führen.&lt;br /&gt;
* Die Erwärmung von beiden Seiten ist eine gute und schonende Lösung, etwa das Vorwärmen von unten bis knapp unter den Schmelzpunkt und „etwas“ Heißluft von oben für das entsprechende Bauteil. Dies ist auch für BGA die bevorzugte Methode.&lt;br /&gt;
&lt;br /&gt;
==== Schablone fertigen ====&lt;br /&gt;
&lt;br /&gt;
Neben der externen Fertigung oder dem Ätzen von Metallplatten kann man SMD-Schablonen aus Polymerfolie selbst zu Hause anfertigen. Man benötigt dazu einen Schneidplotter, der GPGL versteht, sowie die freie Software gerber2graphtec. Als Schablonenmaterial eignen sich bspw. Mylarfolien, die es in verschiedenen Stärken beim Airbrushbedarf zu erwerben gibt. Aus dem Layoutprogramm exportiert man den Lötpastenlayer (tCream und bCream in Eagle) in das Gerberformat und übergibt dieses dem gerber2graphtec - Skript. Alternativ gibt ein GUI mit dem Namen g2g_gui.py, welches diese Aufgabe erledigt. Bei geringer Geschwindigkeit und optimiertem Schneidablauf (cut_mode 0) entstehen nach einiger Zeit recht saubere Schnitte, wie auf den folgenden Bildern zu sehen:&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil1.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Schablone für Atmega328, sowie zwei 1206 Bauteile&#039;&#039; Bild: Verfasser&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil2.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme der Schablone für den Atmega, Pitch: 0,8mm&#039;&#039; Bild: Verfasser&lt;br /&gt;
==== Lötpaste auftragen ====&lt;br /&gt;
&lt;br /&gt;
In der industriellen Fertigung wird die Lötpaste zum Beispiel mittels einer Schablone aufgetragen. (Eine solche kann man beispielsweise bei PCB-Pool kostenlos zur Platine hinzubestellen.) Alternativ kann man seine eigene Schablone mit Hilfe eines Schneidplotters fertigen. Oft bleibt aber nur, die Lötpaste von Hand aufzutragen. Für diese Zwecke ist Lötpaste in Spritzen erhältlich. Die Preise für Lötpaste sind horrend. Mit ein bis zwei Euro pro Gramm (!) muss man rechnen. Allerdings benötigt man nur sehr geringe Mengen pro Platine und Lötpaste ist nicht unbegrenzt lagerbar. Um die schleichende Entmischung zu verlangsamen sollte man Lötpaste im Kühlschrank aufbewahren. Es sollte eine &amp;quot;no clean&amp;quot;-Paste verwendet werden. &amp;quot;No clean&amp;quot; bedeutet, dass die Platine nicht von Flussmittelresten gereinigt werden muss. Solange man die Platinen nicht verkauft ist bleihaltige Lötpaste angenehmer in der Verarbeitung. Besonders niedrigschmelzende Paste, etwa wismuthaltige, ist nicht erforderlich, macht aber das Prozedere und insbesondere das Auslöten im Reparaturfall viel einfacher. Wismut ist kein Blei und beim Verkauf erlaubt.&lt;br /&gt;
&lt;br /&gt;
Vor dem Auftragen der Paste ist die Platine zu säubern, und nochmal zu säubern, und nochmal... Dann wird eine sehr kleine Menge der Paste auf jeden Lötpunkt aufgetragen.&lt;br /&gt;
&lt;br /&gt;
Ein häufiges Problem ist, dass sich die Paste ungern auf dem Pad niederlässt; also beim Entfernen der Spritze lieber an selbiger haften bleibt. Hier hilft ein leichtes Erwärmen der Platine auf ca. 40 °C. Die Paste wird sich dadurch gerne auf dem Pad niederlassen und auch einen ordentlich rundlichen Klecks bilden, statt einer Zipfelmütze. Zu beachten ist hierbei, dass die Kleckse bei zu langer Wartezeit etwas schneller austrocknen als bei niedrigeren Temperaturen. Also besser gleich nach dem Einbringen der Paste die Temperaturzufuhr unterbrechen und die SMD Bauteile bestücken.&lt;br /&gt;
&lt;br /&gt;
==== Bauteile bestücken ====&lt;br /&gt;
&lt;br /&gt;
Die Anschlüsse der Bauteile werden in die Lötpaste gesetzt. Bei bleihaltiger Lötpaste muss die Ausrichtung nicht 100% genau sein, da die Bauteile beim Schmelzen der Paste durch die Oberflächenspannung in Position gezogen werden. Bei bleifreier Lötpaste ist dieser Effekt kaum vorhanden. Daher müssen die Bauteile in diesem Fall genau ausgerichtet sein.&lt;br /&gt;
&lt;br /&gt;
==== Umgebauter Pizzaofen ====&lt;br /&gt;
&lt;br /&gt;
Als Standardmethode für Amateure scheint sich die Verwendung eines umgebauten Pizzaofens durchzusetzen. Ein Elektro-Pizzaofen/Miniofen für den Hausgebrauch für vielleicht 20€ bis 50€ wird mit einer Mikrocontroller-Temperatursteuerung versehen. Mit dieser Steuerung werden die gewünschten Heiz- und Abkühl-Temperaturkurven gesteuert. Beim Umbau ist Vorsicht walten zu lassen, da die Heizung und Temperaturregelung solcher Öfen mit Netzspannung erfolgt.&lt;br /&gt;
&lt;br /&gt;
Aus Gesundheitsgründen darf ein zum Reflow-Löten verwendeter Ofen nicht mehr für Nahrungsmittel verwendet werden. Erweitern kann man seinen Pizzaofen mit einer Rauchabsaugung, realisiert mit einer kleinen Luftpumpe (min. 2l/min), etwas Schlauch und einem Kupferrohr mit kleinem Durchmesser (3-4mm). Das hilft, die gesundheitsschädliche Abluft zum Fenster hinaus zu befördern und vermeidet außerdem unschöne Ablagerungen/Verfärbungen der Lötpads. Die Abluft sollte vor Eintritt in die Pumpe gekühlt werden, indem man das Rohr z.B. durch ein Wasserglas führt. &lt;br /&gt;
&lt;br /&gt;
Im Ergebnis kann man auch Finepitch ohne Lotbrücken erhalten. Die Paste wurde hier zuvor sparsam mit Hilfe der oben gezeigten Mylarfolienmethode aufgetragen.&lt;br /&gt;
&lt;br /&gt;
http://www.sternwartezwickau.de/img/ext/stencil3.jpg&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nahaufnahme Atmega, Pitch: 0,8mm, gelötet im DIY Reflowofen&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Elektro-Pfanne ====&lt;br /&gt;
&lt;br /&gt;
Statt eines mit einer Temperatursteuerung nachgerüsteten Pizzaofens wird gelegentlich einfach eine teflonbeschichtete Elektro-Pfanne verwendet. Elektro-Pfannen, manchmal auch Party-Pfannen genannt, sind in Deutschland eher selten in Haushalten zu finden. Es handelt sich dabei im Prinzip um eine Elektro-Heizplatte, die jedoch nicht flach, sondern deren Oberseite als Pfanne ausgeformt ist.&lt;br /&gt;
&lt;br /&gt;
Zum Reflowlöten wird eine bestückte Platine in die kalte Pfanne gelegt, mit der Lötseite, also den Bauelementen nach oben. Die Pfanne wird aufgeheizt und dabei die Platine beobachtet, bis die Lötpaste an allen Lötpunkten aufgeschmolzen ist. Da eine Elektro-Pfanne nicht überall gleichmäßig heizt, wird gelegentlich vorsichtiges Schwenken der Platine in der Pfanne vorgeschlagen, um die Platine gleichmäßig zu erwärmen. Ist die Lötpaste überall aufgeschmolzen wird die Elektro-Pfanne abgestellt. Die Platine bleibt in der Pfanne und kühlt dort langsam mit der Pfanne aus.&lt;br /&gt;
&lt;br /&gt;
Bei dieser Methode hat man keine Kontrolle über die Temperaturkurve. Selbige hängt nicht nur von der Bauart der Pfanne, sondern auch von der Umgebungstemperatur und der eigenen Reaktionszeit ab.&lt;br /&gt;
&lt;br /&gt;
Aus Gesundheitsgründen sollte eine zum Reflow-Löten verwendete Elektro-Pfanne nicht mehr für Nahrungsmittel verwendet werden, da Rückstände an der Pfanne haften bleiben können und zudem übermäßig erwärmte Teflonpfannen ausgasen und fortan Stoffe an das Kochgut abgegeben, insbesondere, wenn die Oberfläche durch Kratzer beschädigt wurde.&lt;br /&gt;
&lt;br /&gt;
==== Heißluft ====&lt;br /&gt;
&lt;br /&gt;
Die Geister scheiden sich daran, ob man mit Heißluft wirklich gut löten kann (beim Entlöten ist das anders). Viele bevorzugen noch den Lötkolben dem Heißluftgerät, andere haben mit Heißluftlöten keine Probleme.&lt;br /&gt;
&lt;br /&gt;
Mit Heißluft lötet man eine Platine bereichsweise. Auf die Lötpads in einem Bereich werden kleine Mengen Lötpaste aufgetragen und die Bauteile aufgesetzt. Die Lötpaste wird dann mittels Heißluft erwärmt und geschmolzen. Dabei muss man sowohl aufpassen, dass Bauteile und Platine nicht überhitzt werden und dass man die in der Lötpaste sitzenden Bauteile nicht verschiebt oder sogar von der Platine bläst. Nebenbei muss man natürlich aufpassen, dass man sich nicht an der Heißluft verbrennt.&lt;br /&gt;
&lt;br /&gt;
Entsprechende Heißluftgeräte (Hot-Air Stations, häufig auch Rework-Stations genannt) waren relativ teuer. Einige Marken sind mittlerweile jedoch für den Hobbyisten erschwinglich. Mit Übung lässt sich auch eine einfache Heißluft-Pistole verwenden. Allerdings ermöglichen deren Düsen kein sonderlich genaues Arbeiten..&lt;br /&gt;
&lt;br /&gt;
Hot-Air-Station sind derzeit reichlich zu erschwinglichen Preisen verfügbar,zb. Reichelt,Pollin oder aoyue.eu. &lt;br /&gt;
&lt;br /&gt;
http://images.wiltec.info/90/90852/90852.jpg&lt;br /&gt;
&lt;br /&gt;
(Bildquelle: http://www.aoyue.eu)&lt;br /&gt;
&lt;br /&gt;
Ab ca.65,-€ bei Pollin ,aber man sollte ruhig 80,-..100,-€ einplanen,um etwas solides zu bekommen. Dave Jones hat einen Beitrag zur Atten 858D+: http://www.eevblog.com/2011/04/25/eevblog-167-atten-858d-hot-air-rework-review/ Die Station gibt es (bzw. möglicherweise eine Kopie davon) bei eBay für unter 40 Euro als &amp;quot;TBI 858D+&amp;quot;.&lt;br /&gt;
Es ist unter den Methoden, die dem Hobbyelektroniker zu Verfügung stehen die exakteste Allroundmethode.&lt;br /&gt;
Zugegeben, etwas Übung ist schon erforderlich . Die eigenet man sich am besten an, in dem man sich eine defekte Platine eines uralt-PC&lt;br /&gt;
nimmt (ist eh schon defekt) und versucht diverse Bauteile vom Widerstand / Kondensator angefangen bis zum 128-poligen IC ab- und wieder&lt;br /&gt;
sauber aufzulöten (ggf.inkl.säubern/nachbehandeln der Platine nach dem Ablöten).&lt;br /&gt;
Hier kann man ersteinmal trainieren wieviel Temperatur / Luftstrom nötig ist.&lt;br /&gt;
&lt;br /&gt;
==== Herdplatte ====&lt;br /&gt;
&lt;br /&gt;
Mit etwas Erfahrung kann man auch sehr gut auf der Herdplatte löten. Die Herdplatte wird dabei rund eine halbe Stunde vorgeheizt, damit die Temperatur einigermaßen konstant bleibt. Mit etwas Lötzinn kann getestet werden, ob die Löttemperatur erreicht wurde. Die Herdplatte sollte nicht zu heiß eingestellt werden, damit der Lötstopplack sowie das Epoxyd nicht verheizt wird. &lt;br /&gt;
Die bestückte Platine wird mit einer Pinzette auf die Herdplatte gelegt. Schon nach kurzer Zeit sollte das Lötzinn anfangen zu schmelzen. Wenn alle Lötstellen verlötet sind, kann die Platine wieder heruntergenommen werden und abkühlen.&lt;br /&gt;
&lt;br /&gt;
==== Kochtopf mit mehrschichtigem Boden ====&lt;br /&gt;
&lt;br /&gt;
In vielen Küchen sind heute keine Gusseisenkochplatten mehr verbaut sondern Glasskeramikkochfelder. Bei diesen darf die Platine nicht direkt beheizt werden, da diese schnell eine enorme Hitze erzeugen. Damit eine konstante Temperatur erhalten wird, kann ein Kochtopf mit einem mehrschichtigen Boden verwendet werden. Dazu wird die Platine in den Kochtopf gelegt und auf dem Glasskeramikkochfeld aufgeheizt. Ist die Lötpaste geschmolzen und sind alle Lötstellen verlötet, kann die Platte abgestellt und der Kochtopf zum Abkühlen zur Seite geschoben werden.&lt;br /&gt;
&lt;br /&gt;
== Entlöten von SMD-Bauteilen ==&lt;br /&gt;
&lt;br /&gt;
Leider halten ICs nicht ewig und irgendwann muss jeder einmal SMD-Bauteile wieder auslöten. Das Entlöten gestaltet sich im Grunde genauso einfach wie das Einlöten.&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei einfache Fälle: Entweder soll der Chip überleben oder die Platine. Der dritte Fall ist die erstrebenswerteste Methode: Chip und Platine überleben.&lt;br /&gt;
&lt;br /&gt;
=== Die einfachste Methode ===&lt;br /&gt;
&lt;br /&gt;
Die einfachste Methode ist das Auslöten mit einem Heissluftfön. Fön vorheizen und danach Bauteil halten und warten bis es sich bewegen lässt. Sonst, den Lötkolben auf maximale Temperatur zu stellen und dann, mit etwas Lötzinn für besseren Wärmekontakt, auf die Mitte des auszulötenden ICs zu legen (mit der Spitze und dem Lötzinn darunter).&lt;br /&gt;
&lt;br /&gt;
Der IC stirbt dabei durch die rund 400 °C des Lötkolbens sicherlich den Hitzetod, aber durch die Wärmeleitung schmilzt an den Beinchen des ICs das Lötzinn nach rund einer Minute und man kann den IC mit einer Pinzette dann abheben. Hierzu sollte man alle paar Sekunden testweise anheben und den Lötkolben nur leicht aufdrücken, um so ganz sicher alle anderen Bauteile heil zu lassen.&lt;br /&gt;
&lt;br /&gt;
Das auf der Platine verlaufene Lötzinn entfernt man, indem man mit der gereinigten Lötspitze (bei 200 °C) über die nun geleerten Pads geht. Zubehör wie Entlötlitze ist überflüssig.&lt;br /&gt;
&lt;br /&gt;
So kann man beispielsweise einen USB-RS232-Adapter in einen USB-UART-Adapter umwandeln ;-) (irreführend)&lt;br /&gt;
&lt;br /&gt;
Getestet habe ich es bisher mit einem SD213 (28 Pins) und einem FT232 (32 Pins), aber etwas größere ICs, bis zum MSP430 mit 100 Pins, müssten auch möglich sein.&lt;br /&gt;
Durch Umdrehen der Platine sollten auch noch größere ICs so auslötbar sein (wobei man wegen der Schwerkraft dann die Pinzette einsparen kann), weil dann durch die Konvektion noch mehr Wärme übertragen wird.&lt;br /&gt;
&lt;br /&gt;
=== Chip Quik-Methode ===&lt;br /&gt;
[http://www.chipquik.com/ Chip Quik] bietet ein Set an mit dem sich SMD-Bauteile sehr einfach und zerstörungsfrei entlöten lassen.&lt;br /&gt;
&lt;br /&gt;
Dabei wird auf die Beinchen reichlich Flussmittel aufgetragen. Danach eine große Menge speziellen Lötzinns, das eine sehr geringe Schmelztemperatur hat. Dieses verbindet sich mit dem normalen Lötzinn und bleibt lange flüssig. Die Temperatur der Schmelze ist so gering, dass das Bauteil überlebt.&lt;br /&gt;
Wenn alle Beinchen in dem Lötzinn-Blob stehen, fällt das Bauteil fast von alleine ab.&lt;br /&gt;
&lt;br /&gt;
Diese Methode wird in dem Make-Magazine Video gezeigt, das unten verlinkt ist.&lt;br /&gt;
&lt;br /&gt;
Die Chip Quick-Legierung besteht laut dem Sicherheitsdatenblatt, dass unter [http://datasheet.octopart.com/SMD16NL-Chip-Quik-datasheet-10489078.pdf] zu finden ist, aus Zinn, Bismut und Indium, in Gewichtsanteilen ähnlich dem Roses Metall, jedoch mit Indium statt Blei.&lt;br /&gt;
Bei tmp-loettechnik.de bekommt man Roses Metall, allerdings nur als Barren. Mit dieser Legierung (Schmelzpunkt 98 °C) kann man auch Teile zur mechanischen Bearbeitung eingießen und im kochenden Wasser wieder befreien. &amp;quot;Flüssiger Schraubstock&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Breite Lötspitze ===&lt;br /&gt;
&lt;br /&gt;
Mit einem leistungsstarken Lötkolben (z.B. 100 Watt), einer etwa 5mm breiten Lötspitze und etwas Lötzinn kann man bei SO8 ICs alle Pins auf einer Seite gleichzeitig erhitzen.&lt;br /&gt;
Wenn man das auf beiden Seiten abwechselnd macht löst sich der Chip in wenigen Sekunden von der Platine. IC und Platine überleben das meistens.&lt;br /&gt;
&lt;br /&gt;
Auch bei größeren ICs kann diese Methode funktionieren; weil die Lötspitze da aber nicht alle Anschlüsse gleichzeitig erreicht muss man abwechselnd an beiden Seiten des Chips über die Pins streichen bis er sich löst. Dabei wird der Chip stark erhitzt; wenn er auf jeden Fall heil bleiben soll sollte man eine andere Methode wählen.&lt;br /&gt;
Vorteilhaft an dieser Methode ist dass das Entlöten sehr schnell geht und man kein Spezialwerkzeug braucht.&lt;br /&gt;
&lt;br /&gt;
=== Die Zahnarztmethode ===&lt;br /&gt;
&lt;br /&gt;
==== Benötigtes Werkzeug ====&lt;br /&gt;
&lt;br /&gt;
* Lötkolben&lt;br /&gt;
* Lötzinn &lt;br /&gt;
* Ablöthebel &lt;br /&gt;
* Entlötlitze&lt;br /&gt;
&lt;br /&gt;
==== Ablöthebel u.ä ====&lt;br /&gt;
&lt;br /&gt;
Ein Ablöthebel oder verwandte Werkzeuge sehen so aus, als ob sie aus der Praxis eines Zahnarztes (Zahnsonde) oder der Werkstatt eines Zahntechnikers stammen. Dabei handelt es sich um Metallhaken, eventuell (in der einfachen, nicht medizinischen Ausführung) mit Plastikgriff. Es gibt sie in verschiedenen Formen und Größen. &lt;br /&gt;
&lt;br /&gt;
Als Werkzeug zum Entlöten findet sich eine Form unter der bereits erwähnten Bezeichnung &#039;&#039;Ablöthebel&#039;&#039;, ebenso findet man ähnliche Werkzeuge als Teil von sogenannten &#039;&#039;Platinen-Reinigungsbestecken&#039;&#039; (z. B. Conrad Bestellnummer 588239). Im Englischen heißen entsprechende Werkzeuge &#039;&#039;soldering aid hook&#039;&#039; (Haken), &#039;&#039;soldering aid fork&#039;&#039; (Haken/Hebel mit gespaltener Klinge. Wenn als Hebel ausgeführt ein &#039;&#039;Ablöthebel&#039;&#039;), oder &#039;&#039;soldering aid spike&#039;&#039;, &#039;&#039;reamer&#039;&#039; oder &#039;&#039;probe&#039;&#039; (gebogene oder ungebogene Tastspitze).&lt;br /&gt;
&lt;br /&gt;
Ein solcher Hebel oder Haken ist ein nützliches Werkzeug beim Auslöten von SMD-Bauteilen. Vorsichtig eingesetzt kann er durchaus beim zerstörungsfreien Entlöten verwendet werden, zum Beispiel bei der Verwendung von [[#Heißluft|Heißluft]]. Im Folgenden wird allerdings eine zerstörende Methode beschrieben.&lt;br /&gt;
&lt;br /&gt;
==== Der Entlötvorgang ====&lt;br /&gt;
&lt;br /&gt;
Das Entlöten ist bei fast allen SMD-Bauteilen gleich, egal welcher Pinabstand und wie viele Pins. &#039;&#039;&#039;Achtung&#039;&#039;&#039;, der IC geht dabei kaputt.&lt;br /&gt;
&lt;br /&gt;
# Man bringt eine dicke Zinnwurst auf alle Pins auf.&lt;br /&gt;
# Erwärmen des Zinns mit dem Lötkolben.&lt;br /&gt;
# Ausheben der Pins mithilfe des Hebels oder Hakens. Hier kann man bei den Bauteilen mit kleinem Pinabstand gleichzeitig mehrere hochheben.&lt;br /&gt;
# Solange wiederholen, bis alles raus ist.&lt;br /&gt;
# Entfernen der Zinnreste mit Entlötlitze.&lt;br /&gt;
&lt;br /&gt;
=== Die 2-Lötkolben-Methode ===&lt;br /&gt;
&lt;br /&gt;
Diese Methode eignet sich für alle SMD-Bauteile mit 2 gelöteten Seiten: Widerstände, Kondensatoren, kurze ICs (z.&amp;amp;nbsp;B. 2x8 Pins). Bei den Widerständen und Kondensatoren ist alles klar. Von jeder Seite einen Lötkolben anhalten, das Bauteil löst sich ab und bleibt meist an einem der Kolben kleben, wo man es abschütteln kann. Bei ICs verzinnt man zunächst beide Pin-Reihen ordentlich, danach versucht man mit den Kolben das Zinn auf beiden Reihen und der gesamten Länge flüssig zu bekommen, evtl. muss man die Lötkolben dabei etwas bewegen. Ist das Zinn komplett flüssig, kann man das IC beiseite schieben. Das geht besonders gut bei Platinen mit Lötstopplack. Bei dieser Methode kann man die Bauteile in der Regel anschließend weiter verwenden. Überflüssiges Zinn an den Pins mit Lötsauglitze entfernen.&lt;br /&gt;
&lt;br /&gt;
=== Die Rohrstückmethode ===&lt;br /&gt;
&lt;br /&gt;
Diese Methode eignet sich für ICs mit Pins an zwei Seiten (SO-Gehäuse). Chip und Platine haben Chancen zu überleben. Man nehme ein Stück Kupferrohr der passenden Länge und sägt es der Länge nach durch, so dass man zwei Halbschalen hat. Eine der Halbschalen befestigt man an einer alten Lötspitze, z.&amp;amp;nbsp;B. indem man ein Gewinde schneidet oder hartlötet.  Nun kann man alle Pins gleichzeitig erwärmen und das IC abnehmen.&lt;br /&gt;
&lt;br /&gt;
=== Die Kupferdraht-Haken-Methode ===&lt;br /&gt;
&lt;br /&gt;
Die Methode funktioniert ähnlich wie die zuvor beschriebenen &#039;&#039;Rohrstückmethode&#039;&#039;. Das Erstellen des Hilfsmittels ist wesentlich einfacher, allerdings ist es keine Dauerlösung. Die Methode eignet sich für kleine Bauteile (Widerstände, etc.) mit Pins an zwei Seiten.&lt;br /&gt;
&lt;br /&gt;
Das Ende eines Stück blanken Kupferdrahts wird mittels einer kleinen Flachzange zu einem U-förmigen Haken abgebogen. Dabei wählt man die Lichte Weite des Hakens so, dass man mit zwei Seiten des Hakens die Pins des zu entlötenden Bauteils gleichzeitig erreichen kann. Das andere Ende des Kupferdrahts wickelt man mehrfach um die Spitze eines kalten (!) Lötkolbens. Das Ende mit dem Haken sollte dabei nicht mehr als vielleicht 2 cm über die Lötkolbenspitze hinausreichen. Der Draht wird so gebogen (gekröpft), dass man den Lötkolben bequem führen kann um den Haken flach am Bauteil anzulegen. Um Missverständnisse zu vermeiden:  Der Haken soll am Bauteil angelegt und nicht etwa in irgendeiner Weise unter das Bauteil geschoben werden.&lt;br /&gt;
&lt;br /&gt;
Nun wird der Lötkolben und damit der Haken erhitzt. Ist die Hakenspitze heiß genug, legt man den Haken am Bauteil an. Sobald das Lötzinn an den Pins geschmolzen ist, zieht man das Bauteil von den Pads. Bauteile haben dabei die Angewohnheit, für immer auf dem Fußboden verloren zu gehen. Benötigt man das Teil noch, so sollte man etwas Vorsicht walten lassen.&lt;br /&gt;
&lt;br /&gt;
=== Die dicke Kupferdrahtmethode ===&lt;br /&gt;
&lt;br /&gt;
1,5 - 2,5 mm² Massivdraht so zurechtbiegen, dass er exakt und plan auf die Pins passt. Dann mit viel Zinn schnell verlöten. Das geht am besten mit zwei oder drei stärkeren Lötkolben und einer zweiten Person. Ich habe aber auch schon alleine mit 2 Kolben 160-Poler ausgelötet, ohne IC oder Platine zu beschädigen.&lt;br /&gt;
&lt;br /&gt;
IC am besten mit einer Pinzette oder einem Vakuumsauger (z.&amp;amp;nbsp;B. Kontaklinsensauger für harte KL aus Silikon) abheben und noch im heißen Zustand den dicken Draht samt Zinn abklopfen. Danach das IC möglichst schonend (gleichmäßig und schnell) abkühlen, evtl. schon vor dem Löten einen kleinen Kühlkörper auf das IC legen / kleben.&lt;br /&gt;
&lt;br /&gt;
Die Methode kombiniert sich gut mit der Bügeleisen- oder Glaskeramikfeld-Vorwärm-Methode.&lt;br /&gt;
&lt;br /&gt;
=== Der Trick mit dem Platinensicherungshalter ===&lt;br /&gt;
&lt;br /&gt;
Speziell zum Auslöten von SO-ICs mit 2x4 Beinchen kann man den einzelnen Clip eines Platinensicherungshalters (Durchstecktechnik, für 5 x 20 mm Sicherungen) benutzen. Mit einer feinen Zange biegt man zunächst die sich nach außen öffnenden Enden des Clips etwas nach innen. Auf diese Weise entsteht eine Mini-Zange, die genauso breit ist wie die Beinreihe des IC und sich aufgrund ihrer Vorspannung am IC festhalten kann. Den modifizierten Clip klemmt man von oben über den IC und erhitzt seine Bodenplatte mit dem Lötkolben (16 Watt). Anstelle der oben beschrieben Zinn-Wurst-Methode bildet nun der Clip die Wärmebrücke, ähnlich der oben beschriebenen Rohrstückmethode. Der Clip wird mit einer Pinzette abgehoben und nimmt den IC mit.&lt;br /&gt;
&lt;br /&gt;
Die Platine und der IC bleiben ganz.&lt;br /&gt;
&lt;br /&gt;
=== Lötkolbeneinsätze ===&lt;br /&gt;
&lt;br /&gt;
Für einige SMD-Bauformen gibt es Lötkolbeneinsätze, mit denen man alle Anschlüsse eines Bauteils gleichzeitig erhitzen kann. Allerdings sind diese relativ teuer, man braucht für jede Bauform einen eigenen Einsatz und es gibt IC-Bauformen, bei denen die Anschlüsse so angeordnet sind, dass man dafür keinen Einsatz bauen kann.&lt;br /&gt;
&lt;br /&gt;
=== Zangenlötkolben ===&lt;br /&gt;
&lt;br /&gt;
Ein Zangenlötkolben (auch engl. &#039;&#039;Tweezer&#039;&#039;) genannt, ist ein Lötkolben, der zwei beheizte Spitzen besitzt, die ähnlich wie bei einer Pinzette verbunden sind, und der wie eine Pinzette bedient wird. Die Spitzen sind als flache, Einsätze gestaltet, die ggf. je nach Breite des auszulötenden Bauteils ausgetauscht werden können. Mit dem Zangenlötkolben kann man sehr einfach Anschlüsse von Bauteilen mit zwei gegenüberliegenden Anschlüssen (Widerstände, etc.) oder Anschlussreihen erhitzen und das Bauteil dann direkt mit dem Zangenlötkolben von der Platine nehmen. Es empfiehlt sich dabei, eine zusätzliche Pinzette zur Hand zu nehmen, um das Bauteil von der Platine zu heben, da teilweise maschinell bestückte SMD mit einem Klebepunkt auf der Platine fixiert werden.&lt;br /&gt;
&lt;br /&gt;
Ein Nachteil beim Entlöten mit dem Zangenlötkolben ist, dass das entlötete Bauteil relativ lange erwärmt wird, da es mit der Zange abgehoben und dann weiter erwärmt wird, bis man es aus der Zange entfernt. Ein weiterer Nachteil ist, dass sich der Zangenlötkolben nur für zweireihige Bauteile eignet.&lt;br /&gt;
&lt;br /&gt;
Der große Vorteil des Zangenlötkolbens ist die schnelle und einfache Funktion. Muss man mehrere Widerstände gleicher Bauform von einer Platine entfernen, kann dieses sogar ohne Absetzen in einem Durchgang geschehen. Die bereits entlöteten Widerstände behält man dabei einfach zwischen den Zangenbacken und schiebt sie mit dem nächsten Widerstand etwas nach hinten.&lt;br /&gt;
&lt;br /&gt;
=== Mit Draht ===&lt;br /&gt;
==== Kupferlackdraht ====&lt;br /&gt;
&lt;br /&gt;
Eine weitere sehr elegante Möglichkeit, um auch größere SMD-ICs zerstörungsfrei von einer Platine zu bekommen, ist die &amp;quot;Kupferlackdraht-Methode&amp;quot;. Man benötigt lediglich etwas Kupferlackdraht (0,2 - 0,3 mm) und natürlich einen Lötkolben. Die einzige Bedingung ist, dass man den Kupferlackdraht auch unter den Pins bzw. dem Bauteilgehäuse durchfädeln kann.&lt;br /&gt;
&lt;br /&gt;
===== Vorgehensweise =====&lt;br /&gt;
&lt;br /&gt;
# Kupferlackdraht unter den Pins durchfädeln&lt;br /&gt;
# Jeden einzelnen Pin kurz mit dem Lötkolben leicht berühren und gleichzeitig den Kupferlackdraht zwischen Platine und Pin durchziehen&lt;br /&gt;
# Eventuell den Kupferlackdraht erneut unter den Pins durchfädeln und die Pins, bei denen der Kupferlackdraht beim Durchziehen &amp;quot;hängen bleibt&amp;quot;, nochmals mit dem Lötkolben antippen&lt;br /&gt;
&lt;br /&gt;
Es gibt aber auch dünnen Stahldraht (D = 0,2 mm) für diesen Zweck zu kaufen.&lt;br /&gt;
Das Optimum ist dünnes Bandblech aus Edelstahl, ca 4 bis 5 mm breit, ebenfalls etwa 0,2 mm dick. Die in akustomagnetischen Warensicherungsetiketten enthaltenen Blechstreifen eignen sich gut. Auch einen Skalpellhalter mit Einmalklingen kann man hierfür verwenden. Die Spitze des Skalpells wird hinter dem Pin angesetzt (in der Lücke zwischen Pin und Gehäuse), nach unten und vorn gedrückt und der Pin wird mit dem Lötkolben erwärmt. Sobald das Lötzinn geschmolzen ist, rutscht das Skalpell zum nächsten Pin weiter. Hinterher müssen lediglich die Pins wieder geradegebogen werden.&lt;br /&gt;
&lt;br /&gt;
==== Schaltdraht ====&lt;br /&gt;
&lt;br /&gt;
Eine interessante Methode zeigt Silicon Labs in ihrer Application Note AN114 [http://www.silabs.com/Support%20Documents/TechnicalDocs/an114.pdf Hand Soldering Tutorial for Fine Pitch QFP Devices]. Dabei wird, ähnlich wie bei der Kupferlackdrahtmethode, ein Schaltdraht unter den Pins durchgezogen, an einem benachbarten Bauteil &amp;quot;verankert&amp;quot; und dann ziemlich kräftig geheizt und gezogen. Je nach Vorgehensweise kann man damit sowohl Bauteil als auch Leiterplatte retten. Dies braucht aber entsprechend viel Gefühl und vermutlich Übung.&lt;br /&gt;
In der Appnote hat das nicht ganz geklappt. Die Fotodokumentation zeigt einen zerstörten Chip und ein abgelöstes Pad.&lt;br /&gt;
&lt;br /&gt;
=== Mechanisch abtrennen ===&lt;br /&gt;
&lt;br /&gt;
==== Die Cuttermethode ====&lt;br /&gt;
&lt;br /&gt;
Eine weitere Möglichkeit, ein SMD IC von einer Platine zu entfernen, besteht darin, die Beinchen vor dem Entlöten zu durchtrennen. Dazu nimmt man ein Cuttermesser mit Abbrechklingen oder ein Bastelmesser mit auswechselbarer Skalpellklinge (z.&amp;amp;nbsp;B. X-Acto Klinge #16, #17 oder #19), setzt es so nah wie möglich am Gehäuse auf ein paar der IC-Beinchen auf und drückt gerade &#039;&#039;&#039;ohne Seitwärtsbewegung&#039;&#039;&#039; nach unten. Dies durchtrennt die Beine ohne darunterliegende Leiterbahnen zu verletzen. Ein wenig Gefühl ist dabei natürlich nötig. Üben auf einem alten PC-Mainboard lohnt sich. Nachdem auf diese Weise alle Beine vom IC abgetrennt sind, kann man die auf der Platine verbliebenen Reste der Beinchen einfach mit dem Lötkolben &amp;quot;abwischen&amp;quot; und die Lötzinnreste mit Entlötlitze entfernen. Die Wärmebelastung der Platine ist bei dieser Methode wesentlich geringer als bei anderen Methoden. Allerdings besteht die latente Möglichkeit, dabei Leiterbahnen zu durchtrennen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; Es hat sich dabei bewährt, vorher alle Pins mit einer relativ dicken Schicht Lötzinn zu verbinden. So werden abgerissene Leiterbahnen durch versehentliche Seitwärtsbewegungen verhindert. Es muss allerdings darauf geachtet werden, dass das Lötzinn nicht ganz bis ans Gehäuse reicht, da sonst das Schneiden nahezu unmöglich ist.&lt;br /&gt;
&lt;br /&gt;
==== Die Mini-Trennscheiben-Methode ====&lt;br /&gt;
&lt;br /&gt;
Man nehme eine sehr schnelle, kleine Handbohrmaschine (Proxxon, Dremel oder dergleichen), setze eine kleine Trennscheibe auf und flexe unter der Lupenbrille vorsichtig die Beinchen nahe dem Gehäuse ab. Das Gehäuse fällt irgendwann ab, die Beinchen werden mit einem Lötkolben weggewischt.&lt;br /&gt;
&lt;br /&gt;
==== Die Abschlagmethode ====&lt;br /&gt;
&lt;br /&gt;
Wenn man SMD-ICs von einer Platine retten möchte, die Platine aber später in den Müll wandert, kann man das IC mit seinem Körper auch auf eine harte Kante legen (die Platine ist dabei mehr oder weniger senkrecht).  Dann ein beherzter Schlag mit dem Handballen auf die Platinenkante und der Chip wird von der Platine abgerissen.  Die Beinchen muss man nachher etwas richten, aber normalerweise funktioniert diese Methode sehr zuverlässig, besonders bei maschinell gelöteten Platinen.  Diese Methode funktioniert sowohl mit SO-Gehäusen als auch mit radiergummigroßen DC/DC Wandlern.&lt;br /&gt;
&lt;br /&gt;
==== Alternative: Die Stechbeitelmethode ====&lt;br /&gt;
&lt;br /&gt;
Hier gilt das gleiche Prinzip wie bei der Abschlagmethode: Zuerst knicken die Beinchen ein und reißen dann von den Leiterbahnen ab. Sie lassen sich aber leicht zurückbiegen und das IC wird garantiert nicht überhitzt :-D. Der Beitel sollte ca. 8 - 15 mm breit sein. Ein alter, angeschliffener Schraubendreher mit großem Griff tut&#039;s auch. Dann die Platine flach vor sich auf den Tisch legen. Das IC liegt senkrecht zur Tischkante. Den Beitel senkrecht zur Platine mit der flachen Seite an das IC anlegen. Die linke Ecke der Schneide liegt dabei auf der Stirnseite in Höhe der Mittellinie. Die rechte Ecke der Schneide wird als Widerlager in die Platine gepresst. Den Beitel dafür etwas nach rechts kippen, mit Gewicht fest in die Platine drücken und mit Gefühl im Uhrzeigersinn drehen. So wird das IC in Längsrichtung und parallel zur Platine weggehebelt. Die dafür benötigte Kraft kann man sehr gut dimensionieren. Wenn man das raus hat, braucht man ca. 1 bis 2 Sekunden pro IC.&lt;br /&gt;
&lt;br /&gt;
=== Heißluft ===&lt;br /&gt;
&lt;br /&gt;
Heißluft ist eigentlich das Mittel der Wahl für SMD-Entlöten. Heißluft erfordert etwas Übung, egal welche Methode man im Einzelfall anwendet. Das Arbeiten mit einer speziell für die Elektronik gemachten Heißluftstation ist dabei am bequemsten. Daher wird dies hier zuerst beschrieben.&lt;br /&gt;
&lt;br /&gt;
==== Heißluftstation / Hot-Air Station / Rework-Station ====&lt;br /&gt;
&lt;br /&gt;
Heißluftgeräte waren früher relativ teuer. Einige Marken, meist chinesische Produkte, sind mittlerweile jedoch für den Hobbyisten erschwinglich (ab ca. 60 bis 70 Euro aufwärts, Stand 2009) und brauchbar, auch wenn es einen deutlichen Unterschied zwischen diesen Produkten und High-End-Geräten gibt. So sind die Handgriffe wesentlich unhandlicher und die Regelung ist ungenauer. Trotzdem kann man mit den einfachen Geräten vernünftig arbeiten. &lt;br /&gt;
&lt;br /&gt;
Theoretisch sollte man zum Entlöten jeweils einen genau auf die Bauform des Bauteils passenden Heißluft-Einsatz verwenden. Nun gibt es allerdings sehr viele unterschiedliche Bauformen und je nach Station sind die Einsätze relativ teuer (ausgenommen vielleicht die für chinesische Produkte, die meist alle vergleichbare und bezahlbare 22 mm Einsätze haben). Daher ist es nicht unüblich, für viele Anwendungen einfach eine runde 5 mm Düse zu verwenden, wie sie normalerweise schon in der Grundausstattung einer Heißluftstation enthalten ist. &lt;br /&gt;
Die Pins eines Bauteils erhitzt man dann mit einer kreisförmige Bewegung aus ca. 2 cm Abstand. Dabei prüft man immer mal wieder mit einer Pinzette oder ähnlichem Werkzeug ob sich das Bauteil schon abheben lässt. Dabei sollte man das Werkzeug nicht ständig in den Luftstrom halten, da es dabei eventuell zu heiß werden kann.&lt;br /&gt;
&lt;br /&gt;
An einer Heißluftstation gibt es zwei wichtige Einstellungen:&lt;br /&gt;
* Temperatur&lt;br /&gt;
* Luftstrom&lt;br /&gt;
&lt;br /&gt;
Mit beiden Einstellungen muss man etwas üben. Zum Start kann man es mit ca. 400 °C und ca. 20 l/min versuchen.&lt;br /&gt;
&lt;br /&gt;
Neben dieser einfachen Methode (rumkreisen, bis sich was bewegt), gibt es relativ aufwendige Verfahren beim Arbeiten mit Heißluft, zum Beispiel muss bei bestimmten Trägermaterialien die Platine vorgeheizt werden. Ohne entsprechende Schulung ist es schwer, sich solche Methoden selber anzueignen.&lt;br /&gt;
&lt;br /&gt;
==== Gaslötkolben mit Heißluftdüse ====&lt;br /&gt;
&lt;br /&gt;
Man kaufe für ca. 60 € einen Gaslötkolben mit Heißluftdüse. Wenn man den Gaslötkolben mit Heißluftdüse auf volle Leistung stellt, soll dieser angeblich  Warmluft bis 600 °C abgeben, was mehr als genug zum Entlöten ist. Damit das SMD-Bauteil durch kreisförmige Bewegung rundherum an den Pins mit 2 cm Abstand gezielt erhitzen. Das dauert ca. 2 Minuten. Das Bauteil lässt sich dann abnehmen, wegschieben oder abschlagen. Teilweise werden wenige eng am Bauteil bestückte Blockkondensatoren ebenfalls ausgelötet.&lt;br /&gt;
&lt;br /&gt;
Es lassen sich SMDs jeder Größe und Pinabstand ohne Beschädigung auslöten. Die ausgelöteten Bauteile lassen sich problemlos wieder verwenden. Die Platine mit Lötsauglitze und Aceton säubern und neues Bauteil drauf. Habe so während der Entwicklung FPGAS und Treiber ICs auf einer Platine schon bis zu fünf mal getauscht.&lt;br /&gt;
&lt;br /&gt;
==== Heißluftpistole ====&lt;br /&gt;
&lt;br /&gt;
Eine Heißluftpistole, wie man sie im Baumarkt zum Abbrennen alter Farbe u.ä. erhältlich ist, kann gute Dienste beim SMD-Löten leisten. Empfehlenswert sind solche mit Temperaturregler.Aber selbst die einfachsten Varianten, die in der Regel nur zwei Stufen haben (mit denen man sowohl die Gebläsegeschwindigkeit als auch die Heizleistung umschaltet), sind für viele Zwecke brauchbarer als man auf den ersten Blick annimmt.&lt;br /&gt;
&lt;br /&gt;
Einfach die Platine einspannen und mit der Heißluftpistole langsam und gleichmäßig erwärmen. Dabei nicht zu heiß arbeiten. Etwas mehr Zeit für die Arbeit schadet Platine und Bauteilen weniger, als mit zu großer Temperatur alles zu verbrennen.  Wenn man vorsichtig arbeitet und den Punkt gut herausfindet, an dem sich das fragliche Bauteil ablösen lässt, taugt die Methode sogar für Reparaturlötungen, d.h., sowohl Platine als auch Bauteil bleiben dabei ganz.  Damit ist die Methode auch durchaus dazu geeignet, alten Elektronikschrott zu recyclen, um auf diese Weise preiswert zu einem Grundstock an diversem SMD-&amp;quot;Hühnerfutter&amp;quot; (Widerstände, Kondensatoren, oft auch Tantal-Elkos,  teilweise auch Standard-ICs  wie 74xxx und LM358 u.ä.) zu gelangen.&lt;br /&gt;
&lt;br /&gt;
Vermutlich lassen sich Pertinax-Platinen danach nicht mehr verwenden, aber diese haben bei den schmalen Leiterzugbreiten von SMD ohnehin kaum eine Überlebenschance.  Besser gleich trotz des höheren Preises alles auf Epoxyd anfertigen -- gerade bei den hobbytypischen Einzelstücken ist andernfalls die verschwendete Arbeitszeit sehr viel ärgerlicher als der höhere Preis der Epoxyd-Platine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Die Platine mit einem Stück Alufolie so abdecken, dass nur das auszulötende Bauteil im Luftstrom ist (an der Stelle ein Loch in die Folie machen). &#039;&#039;Ehrlich gesagt, der Tipp hat noch nie richtig funktioniert. Entweder bläst man die Folie weg oder die heiße Luft wird unter die Folie geblasen, wo sie sich dank der Folie besonders gut hält und die Bauteile drunter ausgelötet werden. Ein Stück Alufolie schützt die umliegenden Bauteile überhaupt nicht.&#039;&#039; Eine andere Möglichkeit ist das Abkleben der Platine mit Kaptonband (selbstklebend, in Breiten bis 50 mm erhältlich). Dieses Band aus durchsichtigem Kunststoff ist bis 400°C hitzebeständig und schützt die darunter liegenden Bauteile eine gewisse Zeit vor dem Luftstrom und der Hitze.&lt;br /&gt;
&lt;br /&gt;
Falls das Überleben der Platine wirklich völlig egal ist, kann man auch die Rückseite der Platine mit der Heißluftpistole erhitzen, bis die Vorderseite so heiß ist, dass die SMD-Chips einfach abfallen. Zwei Vorteile ergeben sich aus diesem Verfahren für die Überlebenswahrscheinlichkeit der Bauteile:&lt;br /&gt;
&lt;br /&gt;
* Der Temperaturgradient ist so gerichtet, dass die Beine des Chips die höchste Temperatur haben und nicht der Chip selbst, wenn man von oben auf das Gehäuse bläst&lt;br /&gt;
* Die, wenn auch geringe, Wärmeleitung der Platine sorgt für eine gleichmäßigere Temperaturverteilung auf der Vorderseite.&lt;br /&gt;
&lt;br /&gt;
Von Nachteil allerdings ist, dass die Platine evtl. auf der Rückseite so heiß wird, dass sie anfängt, sich zu zersetzen. Das ist sicherlich nicht gesund und daher sollte man hier vorsichtig sein (langsam erhitzen, frische Luft). Bei einseitigen Pertinax-Platinen ist diese Gefahr besonders groß (vermutlich wegen der schlechten Wärmeleitfähigkeit des Materials) - Epoxy-Platinen, insbesondere Multilayer, überstehen diese Prozedur aber normalerweise unbeschadet. &lt;br /&gt;
&lt;br /&gt;
Bei Multilayer-Platinen mit großen Kupferflächen (z.B. PC-Mainboards) solle man beachten dass das Kupfer die Wärme auf eine große Fläche verteilt. Man muss sie ziemlich lang und stark erhitzen damit das Lötzinn auf der Oberseite flüssig wird, und dann fängt das Zinn auf einer großen Fläche fast gleichzeitig zu schmelzen an.&lt;br /&gt;
&lt;br /&gt;
Alternativ geht es auch mit der Heißluftdüse eines Gaslötkolbens (z.&amp;amp;nbsp;B. von Ersa). Dabei geht man zügig mit dem heißen Luftstrom über die Pins des ICs und erwärmt diese, bis sich das IC gewaltfrei abheben lässt. Richtig gemacht überleben IC und Platine.&lt;br /&gt;
&lt;br /&gt;
=== Komplette Platine erhitzen ===&lt;br /&gt;
&lt;br /&gt;
Wenn man alle Bauteile von einer Platine auf einmal ablösen möchte bietet es sich an, die gesamte Platine mit den Bauteilen so weit zu erhitzen bis das Lot überall geschmolzen ist. Die Bauteile können dann mit einem Schlag von der Platine abgeschlagen werden.&lt;br /&gt;
&lt;br /&gt;
==== Reflow-Ofen ====&lt;br /&gt;
&lt;br /&gt;
Was zum Löten taugt, taugt auch zum Entlöten. Die Platine mit den Bauteilen wird im Reflow-Ofen erhitzt.&lt;br /&gt;
&lt;br /&gt;
==== Backofen ====&lt;br /&gt;
&lt;br /&gt;
Wie in Reflow-Ofen. Man sollte sich allerdings gut überlegen, ob man das in einem Ofen macht, der noch für Nahrungsmittel verwendet wird.&lt;br /&gt;
&lt;br /&gt;
==== Gasherdmethode ====&lt;br /&gt;
&lt;br /&gt;
Auf einer einseitig bestückten SMD-Platine kann man Bauteil und Platine  zerstörungsfrei wie folgt trennen: Von der großen Gasflamme die Abdeckung herunternehmen, diese Abdeckung z.&amp;amp;nbsp;B. mit Hilfe des Halters für kleine Töpfe über die kleine Gasflamme legen (natürlich geht das auch mit einem anderem Stück Metall, Hauptsache gerade) und dann mit der kleinen Gasflamme die Metallplatte/Abdeckung darüber erwärmen. Mit einem Stück Lötzinn probieren, ob es schon heiß genug ist (Lötzinn muss schmelzen, perlen und abtropfen).&lt;br /&gt;
&lt;br /&gt;
Wenn ja: Flamme ausmachen, Platine mit der nicht bestückten Seite auf das heiße Metall drücken, ein paar Sekunden warten, bis die Wärme von unten durch die Platine gewandert ist, und das Bauteil mit einer Pinzette abnehmen. Getestet mit Epoxyd-Platine. Sie hat überlebt, nur etwas dunkel verfärbt. Es empfiehlt sich, mit einer unkritischen Platine etwas zu üben.&lt;br /&gt;
&lt;br /&gt;
==== Bügeleisenmethode ====&lt;br /&gt;
&lt;br /&gt;
Ein Bügeleisen umgekehrt in einen Schraubstock spannen, eventuell mit einem&lt;br /&gt;
Tuch am Griff vor Kratzern schützen und die Gleitfläche mit Alufolie abdecken - um Ärger mit der besseren Hälfte zu vermeiden ;-) Auf maximale Temperatur stellen (Leinen), Platine mit der nicht bestückten Seite auflegen und warten, bis das Lot flüssig wird. Bauteile mit einer Pinzette abheben. Platine nach und nach verschieben um alle Stellen zu erhitzen.&lt;br /&gt;
&lt;br /&gt;
==== Benzinfeuerzeugmethode ====&lt;br /&gt;
&lt;br /&gt;
Benzinfeuerzeuge wie das &amp;quot;Zippo&amp;quot; eignen sich auch sehr gut um ICs von Platinen zu entfernen, im Normalfall bleiben Bauteile sowie Platine ganz. Das Feuerzeug wird angemacht und die Platine wird darüber gehalten (Vorsicht: heiß, am besten zum halten eine Zange verwenden) nun löst sich nach ein paar Sekunden das Lötzinn an den Pins und der IC kann mit einem Zahnstocher oder ähnlichem von der Platine geschoben werden, mal sollte mit der Flamme nicht an den Rand der Platine kommen, sonst fängt sie an anzuschmoren, die Platine wird in vielen Fällen unten schwarz, dies kommt vom Kohlenstoff welcher durch die Verbrennung des Benzins sich am PCB absetzt, es lässt sich mit vielen Lösungsmitteln entfernen. Die Methode ist aber nur für einseitige Platinen zu gebrauchen, da die Flamme Bauteile auf der unten liegenden Seite zerstören kann.&lt;br /&gt;
&lt;br /&gt;
==== Glaskeramik-Herd ====&lt;br /&gt;
&lt;br /&gt;
Geht nur bei einseitig bestückten Platinen! Ähnelt der Bügeleisen-Methode. Ist wegen der IR-Strahlung jedoch besser.&lt;br /&gt;
&lt;br /&gt;
Platine auf das Glaskeramikfeld legen. Dann das Feld ca. alle 1 - 2 Sekunden ein- und ausschalten. Dabei das An-Intervall langsam erhöhen. Dies so lange durchführen, bis das Zinn geschmolzen ist. Nun die gewünschten Bauelemente verschieben oder abheben. Darauf achten, dass das Glas frei von Zinn und anderen Stoffen bleibt.&lt;br /&gt;
&lt;br /&gt;
Achtung: Das Glas wird ungleichmäßig heiß, da die Heizwendeln lokal angeordnet sind.&lt;br /&gt;
&lt;br /&gt;
Wichtig: Die Platine ist über ihrer Glastemperatur, also biegsam. Die Platine einfach auf dem Glaskeramikherd auf eine kalte Platte legen und abkühlen lassen.&lt;br /&gt;
&lt;br /&gt;
Eignet sich gut zum Vorwärmen auf ca. 100 °C - 150 °C, auch bei beidseitig bestückten Boards, in Verbindung mit anderen Methoden (z.&amp;amp;nbsp;B. Heißluft). Ähnliche Vorwärmplatten gibt es speziell für die Löttechnik.&lt;br /&gt;
&lt;br /&gt;
Alternative:&lt;br /&gt;
&lt;br /&gt;
Platine mit einer geeigneten Zange in einem Abstand von ca. 2 bis 4 cm über das Glaskeramikfeld halten. Dabei die Herdplatte auf Maximum stellen (am Besten Anheizstufe). Nach einigen Sekunden ist das Zinn geschmolzen und man kann die Bauteile entnehmen bzw. verrücken.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil liegt in der hohen Strahlungswärme von Glaskeramikkochfeldern. Im Gegensatz zum &amp;quot;darauf legen&amp;quot; wird die Platine gleichmäßig erwährt und lokale Überhitzungen werden vermieden, was letztendlich Platine und Bauteile schont. Das nervige Ein- und Ausschalten entfällt außerdem.&lt;br /&gt;
&lt;br /&gt;
Eignet sich auch bedingt für doppelseitig bestückte Leiterplatten zum Auslöten. Man muss allerdings damit rechnen, dass Bauteile auf das heiße Glaskeramikfeld fallen.&lt;br /&gt;
&lt;br /&gt;
=== Recycelte Chips wiederaufbereiten ===&lt;br /&gt;
&lt;br /&gt;
* Zuerst müssen die Lötzinnreste entfernt werden. &lt;br /&gt;
In Alkohol gelöstes Kolophonium wirkt da Wunder. Einfach den Chip in dieses Flussmittel tauchen, welches man vorher z.&amp;amp;nbsp;B. auf einen kleinen Unterteller oder -tasse in kleinen Mengen vergossen hat. &lt;br /&gt;
* Dann mit sauberer Lötspitze an den Pins entlangziehen und das überflüssige Lötzinn an einem Schwamm oder Zellstoff (-Taschentuch) abstreifen. &lt;br /&gt;
* Verklebte Pins mittels dünner Lötspitze auseinander bringen. Auch ein Zahnstocher aus Holz leistet wertvolle Dienste.&lt;br /&gt;
* Bei Pins, die enger als 0,6 mm sind, hilft zusätzlich Entlötsauglitze. Anstelle von Entlötsauglitze kann auch ein dünnes, abisoliertes Litzenkabel (möglichst feindrahtig) dienen.&lt;br /&gt;
:Man sollte aber immer daran denken, dass die Gefahr des Ausfalls durch Überhitzung besteht. &lt;br /&gt;
&lt;br /&gt;
Eine zweite Möglichkeit besteht darin, das Lötzinn &amp;quot;abzudremeln&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Dazu eine kleine rotierende Messingbürste in den Dremel (Multifunktions-Schleifer) und an den Pins von innen nach außen entlangziehen.&lt;br /&gt;
&lt;br /&gt;
* Stahlbürsten sind mit Vorsicht zu genießen, weil sie einfach zu hart sind. &lt;br /&gt;
* Kunststoffbürsten hingegen können sich elektrostatisch aufladen!&lt;br /&gt;
* Eine &amp;quot;dritte Hand&amp;quot; oder Einspannvorrichtung erleichtert das Recyceln erheblich.&lt;br /&gt;
&lt;br /&gt;
Eine weitere dritte Möglichkeit ist mit Graphit: Lötzinn und Bleistift sind von Natur aus Feinde. Warmmachen, und Zinn mit Bleistift &amp;quot;wegdrängeln&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Das Ausrichten und Geradebiegen der Pins überlasse ich den eigenen Fähigkeiten.&lt;br /&gt;
&lt;br /&gt;
== Schlusswort ==&lt;br /&gt;
&lt;br /&gt;
Man sollte nicht glauben, dass man jetzt sofort jegliches SMD-Bauteil einlöten kann, mal abgesehen von Widerständen. Alles benötigt eine gewisse Übung und es empfiehlt sich, erst mit den einfacheren SO-Packages anzufangen und einige TSSOPS einzulöten, bevor man sich an TQFP oder ähnliches heranwagt. Außerdem sollte man sich für die ersten Versuche nicht unbedingt einen 10 Euro teuren Chip hernehmen. Wenn man aber nicht zwei linke Hände hat, sollten alle Packages beim zweiten oder dritten Lötversuch einigermaßen sauber eingelötet sein. Und besonders bei den TSSOPs und TQFPs sieht es dann fast wie Industriefertigung aus.&lt;br /&gt;
&lt;br /&gt;
==== Kontrollieren von Lötstellen ====&lt;br /&gt;
&lt;br /&gt;
Zur Kontrolle der gelöteten Bauteile sollte man, wie schon erwähnt, eine gute Lupe - besser noch Lupenleuchte - benutzen oder auch schon preiswert über diverse Internetauktionen zu ersteigernde &amp;quot;USB Mikroskope&amp;quot;, die an einen PC oder Laptop angeschlossen werden können. Das kann böse Überraschungen bei der Inbetriebnahme der gelöteten Platine vermeiden. Unabdingbar ist immer eine gute Ausleuchtung des Arbeitsplatzes.&lt;br /&gt;
&lt;br /&gt;
Auslöten kann man gut an defekten Platinen, z.&amp;amp;nbsp;B. aus Computern, üben.&lt;br /&gt;
&lt;br /&gt;
Alles wird gut :D&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[SMD]]&lt;br /&gt;
* [[IC-Gehäuseformen#Adapterplatinen für SMD-ICs|Adapterplatinen für SMD-ICs]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* How-to Videos &lt;br /&gt;
** [http://www.youtube.com/watch?v=wQXhny3R7lk Professionelles SMD Löten leicht gemacht, engl. Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=3NN7UGWYmBY SMD Soldering without expensive tools, engl. Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=KOoOpHZmIiA SMD Löten 0805+0603, deutsches Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=eApVG5GjLbU&amp;amp;NR=1 SMD Löten von SOIC, Pin für Pin, Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=NALwJ6OnwNw SMD Löten von QFP, Pin Für Pin, Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=YzI31gfCjJE SMD Löten von TSOP mit der Ziehmethode, Youtube-Video]&lt;br /&gt;
** [http://www.youtube.com/watch?v=YSdihwWegIg Löten von SOIC mit Lötpaste und Heißluft, YouTube-Video]&lt;br /&gt;
** [http://www.makezine.com/blog/archive/2007/01/soldering_tutor_1.html MAKE-Magazine Podcast Löt- und Entlöttips]&lt;br /&gt;
&lt;br /&gt;
* Anleitungen&lt;br /&gt;
** [http://www.seattlerobotics.org/encoder/200006/oven_art.htm SMD-Löten im Toastofen (englisch)] &lt;br /&gt;
** [http://www.elv-downloads.de/downloads/journal/SMD-Anleitung.pdf SMD-Anleitung von ELV praktische Tips] &lt;br /&gt;
** [http://www.bimbel.de/artikel/artikel-17.html Bilder und kleine Anleitung]&lt;br /&gt;
** [http://www.ulrichradig.de/ SMD-ICs ein-/auslöten (unter Tipps&amp;amp;Tricks)]&lt;br /&gt;
** [http://www.gadgetpool.de/nuke/modules.php?name=News&amp;amp;file=article&amp;amp;sid=23 SMD-Löten für jedermann]&lt;br /&gt;
** [http://www.circuitrework.com/guides/guides.shtml Circuit Technology Center - Surgeon grade rework and repair, by the book and guaranteed.]&lt;br /&gt;
** [http://iwenzo.de/wiki/SMD_Bauteile_l%C3%B6ten SMD Bauteile löten]&lt;br /&gt;
** [http://frickelpower.bplaced.net/index.php?page=smdesolder SMD entlöten mit selbstgebastelter Heißluftpistole]&lt;br /&gt;
&lt;br /&gt;
* Werkzeuge&lt;br /&gt;
** [http://www.qrpbuilder.com/downloads/smd%20device%20041510.pdf Homemade SMD Component Placement Device] (PDF)&lt;br /&gt;
** [http://thomaspfeifer.net/ SMD löten/entlöten und Reflow Ofen Selbstbau (unter Trickkiste und AVR Projekte)]&lt;br /&gt;
**[http://www.sef.de Reflowlötanlagen]&lt;br /&gt;
**[http://www.martin-smt.de SMD Bearbeitungsgeräte - Reworksysteme]&lt;br /&gt;
**[http://www.fritsch-smt.de Bestückungsautomaten / Siebdruckgeräte]&lt;br /&gt;
&lt;br /&gt;
* Fertige Universalplatinen&lt;br /&gt;
** [http://www.shop.display3000.com/wichtiges-zubehoer/elektronikmodule/sot-tssop-qfn-lga-universalplatine.html Universalplatine für SO, SO-wide, TSSOP, QFN, LGA]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Transistortester&amp;diff=92555</id>
		<title>AVR Transistortester</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Transistortester&amp;diff=92555"/>
		<updated>2016-03-22T09:10:34Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Original Entwurf: http://www.mikrocontroller.net/articles/AVR-Transistortester&lt;br /&gt;
&lt;br /&gt;
Weiterentwickelt von Karl-Heinz Kübbeler&lt;br /&gt;
&lt;br /&gt;
Ich habe das Transistortester Projekt von Markus Frejek weitergeführt und speziell die Software weiterentwickelt.&lt;br /&gt;
Aufgrund der verbesserten Eigenschaften wurde schon der Name Komponententester vorgeschlagen. Ich selbst sehe aber immer noch die herausragende Eigenschaft in der automatischen Bestimmung von Transistortyp und Eigenschaft, wie sie von&lt;br /&gt;
Markus Frejek entwickelt wurde.&lt;br /&gt;
&lt;br /&gt;
Hier möchte ich die wichtigsten &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; aufführen&lt;br /&gt;
&lt;br /&gt;
* Arbeitet mit ATmega8, ATmega168 und ATmega328 Prozessoren.&lt;br /&gt;
* Anzeige der Meßergebnisse auf ein 2x16 Zeichen LCD.&lt;br /&gt;
* Statt dem 2x16 Zeichen LCD kann auch ein graphisches Display mit ST7565 Controller benutzt werden. Auch ein Anschluß eines OLED Display mit SSD1306 Controller ist mit SPI oder I2C Schnittstelle möglich.&lt;br /&gt;
* Ein-Tastenbedienung mit automatischer Abschaltung.&lt;br /&gt;
* Das Gerät besitzt drei universelle Meßports (Test Pin).&lt;br /&gt;
* Automatische Erkennung von NPN, PNP, N- und P-Kanal MOSFET, JFET, Dioden und Kleinsignal Thyristor und TRIAC.&lt;br /&gt;
* Automatische Erkennung der Pin-Belegung der Bauteile, die Bauelemente können beliebig angeschlossen werden.&lt;br /&gt;
* Messung des Stromverstärkungsfaktors und der Basis-Emitter Spannung für bipolare Transistoren, auch für Darlingtontransistoren.&lt;br /&gt;
* Automatische Erkennung eine Schutzdiode für bipolare Transistoren und MOSFETs.&lt;br /&gt;
* Bei bipolaren Transistoren mit Schutzdiode wird ein parasitärer Transistor erkannt (NPNp = NPN + parasitär PNP).&lt;br /&gt;
* Bis zu zwei Widerstände werden in einer Messung mit einer Auflösung von bis zu 0,1 Ohm gemessen, wobei der Meßbereich bis über 50 MOhm reicht. Widerstandswerte unter 10 Ohm werden für den ATmega168/328 mit der ESR-Meßmethode mit einer Auflösung von 0.01 Ohm angezeigt.&lt;br /&gt;
* Ein angeschlossener Kondensator kann gemessen werden im Bereich 35pF bis 100mF mit einer Auflösung von bis zu 1 pF.&lt;br /&gt;
* Widerstände und Kondensatoren werden mit ihren Symbolen dargestellt, umgeben von den gefundenen Anschlußpin Nummern.&lt;br /&gt;
* Die Widerstands und Kondensator-Werte werden mit bis zu vier Dezimalstellen in der richtigen Dimension angezeigt.&lt;br /&gt;
* Bis zu zwei Dioden werden ebenfalls mit ihrer Symboldarstellung flußrichtungsrichtig angezeigt, umgeben von den Anschlußpin Nummern und der zusätzlichen Angabe der Flußspannung.&lt;br /&gt;
* Bei einzelnen Dioden wird zusätzlich der Kapazitätswert und ab Version 1.08k auch der Strom in Sperr-Richtung gemessen.&lt;br /&gt;
* Für ATmega168/328 ist eine Kalibration der Nullkapazität, des Nullwiderstandes und weiterer Parameter im Selbsttest-Zweig möglich.&lt;br /&gt;
* Für ATmega168/328 können auch Induktivitäten von etwa 0.01mH bis über 20H erkannt und gemessen werden.&lt;br /&gt;
* Für ATmega168/328 ist eine ESR-Messung (Equivalent Series Resistance) für Kondensatoren über 90 nF mit einer Auflösung von 0.01 Ohm integriert.&lt;br /&gt;
* für ATmega168/328 wird für Kondensatoren über 5 nF der Spannungsverlust Vloss nach einem Ladepuls untersucht. Damit läßt sich die Güte der Kondensatoren abschätzen.&lt;br /&gt;
* für ATmega328 sind mit einer Menüfunktion, die mit einem längeren Tastendruck (&amp;gt; 0.5 s) aufgerufen werden kann, weitere Funktionen aus einer Liste möglich. Ein kurzer Tastendruck zeigt die nächste Funktion. Ein längerer Tastendruck startet die angezeigte Funktion. Nachfolgend die Liste der bisher eingebauten Zusatzfunktionen:&lt;br /&gt;
** Frequenzmessung an dem PD4 Pin, der aber auch für den LCD-Anschluß benutzt wird. Der Pin wird für die Messung auf Eingang umgeschaltet. Die anliegende Frequenz wird zunächst für 1 Sekunde ausgezählt. Wenn die Frequenz unter 25 kHz liegt, wird auch eine mittlere Periode gemessen und daraus eine Frequenz berechnet mit einer Auflösung von bis zu 0.001 mHz.&lt;br /&gt;
** Spannungsmessung am PC3 Pin, wenn dieser nicht für die serielle Ausgabe benutzt wird. Bei ATmega328 mit 32 Pins (PLCC) kann aber auch der ADC6 oder ADC7 Pin benutzt werden. Da ein 10:1 Teiler am Eingang benutzt wird, können Spannungen bis zu 50V gemessen werden. Mit einer Erweiterung der Schaltung (DC-DC Konverter) können auch Zenerdioden gemessen werden.&lt;br /&gt;
** Frequenzerzeugung am TP2 Port. Über den am PB2 Pin angeschlossenen 680 Ohm Widerstand kann ein Signal mit einer aus einer Liste einstellbaren Frequenz von 1 Hz bis 2 MHz am TP2 Port ausgegeben werden. Der TP1 Port ist dabei auf Masse geschaltet.&lt;br /&gt;
** Pulsweitenmodulation mit fester Frequenz und einstellbarer Pulsweite auf dem TP2 Port. Der Zähler 1 wird für diese Funktion als 10-Bit Zähler benutzt. Der TP1 Port ist auf Masse geschaltet. Die Pulsweite kann durch kurzen Tastendruck um 1% und durch längeren Tastendruck um 10% erhöht werden.&lt;br /&gt;
** Mit einer separaten Kapazitäts- und ESR-Messung können an TP1 und TP3 angeschlossene Kondensatoren mit einer Kapazität von etwa 2µF bis 50mF meist auch in der Schaltung gemessen werden. Hierbei sollte aber immer sichergestellt sein, daß die Kondensatoren keine Restladung mehr haben.&lt;br /&gt;
&lt;br /&gt;
Die zusätzlichen Funktionen sind zeitbegrenzt wie die Dialogfunktion selbst auch, wenn die POWER_OFF Option in der Konfigurationsdatei (Makefile) eingeschaltet ist.&lt;br /&gt;
Ausführlichere Informationen mit Meßbeispielen kann man in den pdf-Dokumentationen in deutscher und englischer Sprache nachlesen. Auch russische Übersetzung der Dokumentationen sind verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Software wurde basierend auf der Arbeit von Markus F. weiterentwickelt.&lt;br /&gt;
Der Teil für die Kondensatormessung wurde komplett neu geschrieben und auch die Widerstandsmessung wurde erheblich überarbeitet. Bei Schwierigkeiten und Problemen sollte man mich über E-mail oder über den Diskussionsteil (thread) benachrichtigen.  Nur wenn ich von Problemen weiß, kann ich hoffentlich Abhilfe schaffen.&lt;br /&gt;
&lt;br /&gt;
Weitere Einzelheiten sowie Beschreibung der einzelnen Meßverfahren und Beispiel-Ergebnisse habe ich in der pdf-Dokumentation (deutsche und englische Version) beschrieben. Hier findet man auch Hinweise zum Konfigurieren der Software mit Makefile Parametern und Optionen. &lt;br /&gt;
Die Kommentare im Quellcode sind in englischer Sprache.&lt;br /&gt;
Neu eingebaut in der Software ist eine Selbsttest-Funktion, in der die Funktion des Testers gemessen wird. In diesen Selbsttest ist auch ein Kalibrationsteil integriert.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Im Prinzip ist die neue Software so zu konfigurieren, daß sie auf der bereits von Markus F. vorgestellten Hardware ohne Änderungen läuft.&lt;br /&gt;
&lt;br /&gt;
Sinnvoll sind dennoch einige Änderungen:&lt;br /&gt;
&lt;br /&gt;
* Der Prozessor sollte auf einen 8 MHz Taktfrequenz umgestellt werden, am besten mit einem externen Quarz. Dazu müssen die fuses des ATmega geändert werden.&lt;br /&gt;
* Ein &amp;quot;pull up&amp;quot; Widerstand von etwa 27 kOhm sollte von Pin 13 (PD7) des ATmega nach VCC nachgerüstet werden.&lt;br /&gt;
* Der 100 nF Kondensator am Pin 21 (AREF) kann entweder ganz entfernt werden oder besser durch einen 1 nF Kondensator ersetzt werden.&lt;br /&gt;
* Wenn die elektronische Einschaltung des Testers Probleme macht, sollte wenigstens der C2 Kondensator an der Basis von Transistor T1 auf 10 nF reduziert werden und ggf. auch der Widerstand R7 auf 3,3 kOhm reduziert werden. Das komplette Schaltbild und Einzelheiten dazu findet man in der PDF Dokumentation.&lt;br /&gt;
&lt;br /&gt;
Die Gründe und die Einzelheiten für diese Änderungen sowie weitere Hinweise für einen Neuaufbau sind im Hardware-Kapitel meiner pdf-Dokumentation beschrieben. Empfohlen wird ein ATmega168 Prozessor oder auch ein ATmega328 Prozessor, weil der ADC mit der Autoscale Funktion im Bedarfsfall von der 5V Referenz (VCC) auf die interne Referenz-Spannung umgeschaltet wird. Die interne Referenz hat für der ATmega8 eine Spannung von 2,56V, für die anderen Prozessoren aber 1,1 Volt. Mit 1,1 V kann eine bessere Auflösung des ADC für gemessene Spannungen unter 1 Volt erreicht werden.&lt;br /&gt;
Man kann den ATmega8 ohne Hardwareänderung gegen einen ATmega168 oder ATmega328 austauschen!&lt;br /&gt;
Hier ist der Teil der Schaltung, der für die Messung erforderlich ist.&lt;br /&gt;
Die Elektronik für die Batterieversorgung und die automatische Abschaltung fehlt in diesem Schaltbild.[[Datei:TransistorTesterVC1.png|miniatur|Schaltbild ohne Stromversorgung]]&lt;br /&gt;
&lt;br /&gt;
Die rot markierten Bauteile sind nicht unbedingt erforderlich, können aber zu einer Verbesserung der Messgenauigkeit beitragen. Die grün markierten Bauteile sind gegenüber dem ersten Entwurf von Markus F. geändert.&lt;br /&gt;
Die Eagle Dateien von Asko B. für drei Varianten sind im Thread zu finden bei der Adresse: http://www.mikrocontroller.net/topic/248078?page=4#2891344&lt;br /&gt;
&lt;br /&gt;
Hier ist der Artikel der 1. Transistortester Version von Markus F. zu finden: [[AVR-Transistortester]]&lt;br /&gt;
&lt;br /&gt;
== Diskussionen zur neuen Version ==&lt;br /&gt;
Der Thread mit meinen älteren Software-Versionen und einigen Problemfällen sowie Hardware-Vorschlägen ist unter [https://www.mikrocontroller.net/topic/248078#new https://www.mikrocontroller.net/topic/248078#new] zu finden.&lt;br /&gt;
&lt;br /&gt;
== Downloads (deutsch) ==&lt;br /&gt;
Alle Versionen von der Software und der Doku sind im SVN gespeichert.&lt;br /&gt;
&lt;br /&gt;
[[Media:ttinfo_ger111k.pdf|Kurzbeschreibung (deutsch) Version 1.11k (2015-01-30)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ttester_ger111k.pdf|Anleitung (deutsch) Version 1.11k (2015-02-08)]]&lt;br /&gt;
&lt;br /&gt;
Die Benutzer können über den svnbrowser [https://www.mikrocontroller.net/svnbrowser/transistortester/ https://www.mikrocontroller.net/svnbrowser/transistortester/] das gewählte Verzeichnis als &amp;quot;GNU tarball&amp;quot; runterladen.&lt;br /&gt;
Beim Aufruf des svnbrowsers steht dazu unter der Datei/Verzeichnis Liste der Eintrag &amp;quot;Download GNU tarball&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zum Auspacken der heruntergeladenen transistortester*.tar.gz Datei benötigen Windows Benutzer eine geeignete Software wie das Freeware Paket [http://www.7-zip.org/ 7-Zip].&lt;br /&gt;
Nach dem Auspacken hat man den vorher mit dem svnbrowser ausgewählten Verzeichnisbaum auf seinem eigenen Rechner.&lt;br /&gt;
Ein direkter Zugriff auf die Dateien mit dem svnbrowser ist nicht möglich!&lt;br /&gt;
&lt;br /&gt;
Eine andere Methode auf den Inhalt des svn Archivs zuzugreifen besteht mit der Installation des TortoiseSVN Plugins für den Windows Explorer.&lt;br /&gt;
Damit ist dann der Zugriff über [svn://mikrocontroller.net/transistortester svn://mikrocontroller.net/transistortester] direkt auf das Archiv mit dem Browser möglich.&lt;br /&gt;
&lt;br /&gt;
Linux Benutzer können auch direkt über svn auf das Archiv zugreifen.&lt;br /&gt;
&lt;br /&gt;
== Downloads (russisch) - Загрузки (русский) ==&lt;br /&gt;
Для загрузок доступны все версии программного обеспечения и документации, хранящиеся в SVN&lt;br /&gt;
&lt;br /&gt;
[[Media:ttinfo_rus111k.pdf|краткое описание (русский) Версия 1.11k (2015-01-11)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ttester_rus111k.pdf|инструкции (русский) Версия 1.11k (2015-02-07)]]&lt;br /&gt;
&lt;br /&gt;
Пользователь может загрузить выбранный каталог в качестве &amp;quot;GNU архива&amp;quot; через svnbrowser [https://www.mikrocontroller.net/svnbrowser/transistortester/ https://www.mikrocontroller.net/svnbrowser/transistortester/].&lt;br /&gt;
&lt;br /&gt;
При вызове svnbrowsers, смотрите в список файлов / каталогов, запись &amp;quot;Скачать GNU архив&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Для распаковки загруженного файла * .tar.gz пользователи Windows могут воспользоваться любым подходящим программным обеспечением, таким как бесплатная программа [http://www.7-zip.org/ 7-Zip].&lt;br /&gt;
&lt;br /&gt;
После распаковки архива у вас на компьютере будет архив с заранее выбранным через svnbrowser содержимым в дереве каталогов.&lt;br /&gt;
&lt;br /&gt;
Прямой доступ к файлам через svnbrowser невозможен!&lt;br /&gt;
&lt;br /&gt;
Еще один способ получить доступ к содержимому хранилища SVN состоит в установке TortoiseSVN плагина для Windows Explorer. Это затем кнопкой [svn://mikrocontroller.net/transistortester svn://mikrocontroller.net/transistortester] прямо в вашем архиве, используя браузер.&lt;br /&gt;
&lt;br /&gt;
Пользователи Linux могут получить доступ непосредственно из SVN к архиву.&lt;br /&gt;
&lt;br /&gt;
== Downloads (english) ==&lt;br /&gt;
All versions of the software and documentation are saved in the SVN archive.&lt;br /&gt;
&lt;br /&gt;
[[Media:ttinfo_eng111k.pdf|Short description (english) Version 1.11k (2015-01-05)]]&lt;br /&gt;
&lt;br /&gt;
[[Media:ttester_eng111k.pdf|Manual (english) Version 1.11k (2015-02-08)]]&lt;br /&gt;
&lt;br /&gt;
Users can download a &amp;quot;GNU tarball&amp;quot; of the previous selected directory with the svnbrowser [https://www.mikrocontroller.net/svnbrowser/transistortester/ https://www.mikrocontroller.net/svnbrowser/transistortester/].&lt;br /&gt;
&lt;br /&gt;
Windows users need a additional tool like the freeware [http://www.7-zip.org/ 7-Zip] to unpack the downloaded transistortester*.tar.gz file.&lt;br /&gt;
After unpacking you have a copy of the selected directory at your own computer.&lt;br /&gt;
The direct access is not possible with the svnbrowser!&lt;br /&gt;
&lt;br /&gt;
Another way to get access to the SVN data is to install the TortoiseSVN plugin for the windows explorer. After installing you can access the data with [svn://mikrocontroller.net/transistortester svn://mikrocontroller.net/transistortester].&lt;br /&gt;
&lt;br /&gt;
Linux users can also access the data with svn directly.&lt;br /&gt;
&lt;br /&gt;
== Downloads (Português - Brasil) ==&lt;br /&gt;
&lt;br /&gt;
Todas as versões de software e documentação estão salvas no arquivador SVN.&lt;br /&gt;
&lt;br /&gt;
Usuários podem descarregar um pacote &amp;quot;GNU&amp;quot; de todos os diretórios anteriores com o svnbrowser [https://www.mikrocontroller.net/svnbrowser/transistortester/ https://www.mikrocontroller.net/svnbrowser/transistortester/].&lt;br /&gt;
&lt;br /&gt;
Usuários de Windows precisam de uma ferramenta adicional como o freeware [http://www.7-zip.org/ 7-Zip] para descompactar o arquivo transistortester*.tar.gz. Depois de descompactado você terá uma cópia do diretório selecionado no seu computador. O acesso direto não é possível com o svnbrowser!&lt;br /&gt;
&lt;br /&gt;
Outra forma de acessar os dados no SVN é instalar o TortoiseSVN plugin para Windows Exporer. Depois de instalar você pode acessar soa dados com o endereçco [svn://mikrocontroller.net/transistortester svn://mikrocontroller.net/transistortester].&lt;br /&gt;
&lt;br /&gt;
Usuários Linux podem acessar os dados com svn diretamente.&lt;br /&gt;
&lt;br /&gt;
== Downloads (Español) ==&lt;br /&gt;
Todas la versiones del software y la documentación están en SVN.&lt;br /&gt;
&lt;br /&gt;
Los usuarios pueden descargar un &amp;quot;GNU tarball&amp;quot; del directorio seleccionado utlizando svnbrowser [https://www.mikrocontroller.net/svnbrowser/transistortester/ https://www.mikrocontroller.net/svnbrowser/transistortester/]&lt;br /&gt;
&lt;br /&gt;
Los usuarios de Windows requieren de una herramienta adicional como el freeware [http://www.7-zip.org/ 7-Zip] (gratis) para desempacar el archivo descargado, transistortester*.tar.gz.&lt;br /&gt;
&lt;br /&gt;
Luego de desempacar el archivo, tendrá en su computador una copia completa del directorio seleccionado.&lt;br /&gt;
Acceso directo no es posible con svnbrowser.&lt;br /&gt;
&lt;br /&gt;
La otra manera de accesar el respositorio SVN es instalando el plugin TortoiseSVN; éste le permitirá acceso a la información con el URI: [svn://mikrocontroller.net/transistortester svn://mikrocontroller.net/transistortester]&lt;br /&gt;
&lt;br /&gt;
Los usuarios de Linux pueden, por supuesto, accesar SVN directamente.&lt;br /&gt;
&lt;br /&gt;
== Downloads (Slovak) ==&lt;br /&gt;
&lt;br /&gt;
Všetky verzie softvéru a dokumentácie sú uložené v SVN archíve.&lt;br /&gt;
&lt;br /&gt;
Prostredníctvom &#039;&#039;svnbrowsera&#039;&#039;, ktorý sa nachádza na adrese [https://www.mikrocontroller.net/svnbrowser/transistortester/ https://www.mikrocontroller.net/svnbrowser/transistortester/] je možné kliknutím na odkaz &#039;&#039;&amp;quot;Download GNU tarball&amp;quot;&#039;&#039; stiahnuť kompletný obsah aktuálne zobrazeného adresára.&lt;br /&gt;
&lt;br /&gt;
Na rozbalenie stiahnutého súboru &#039;&#039;transistortester*.tar.gz&#039;&#039; pod systémom Windows je možné použiť bezplatný software &#039;&#039;[http://www.7-zip.org/ 7-Zip]&#039;&#039;. Po extrahovaní je na lokálnom PC k dispozícii kópia vybraného adresára. Priamy prístup k jednotlivým súborom SVN archívu cez &#039;&#039;svnbrowser&#039;&#039; nie je možný!&lt;br /&gt;
&lt;br /&gt;
Alternatívnym spôsobom prístupu k SVN archívu je inštalácia a použitie pluginu &#039;&#039;TortoiseSVN&#039;&#039; pre Windows Explorer. Potom je možné pristupovať k dátam prostredníctvom odkazu [svn://mikrocontroller.net/transistortester svn://mikrocontroller.net/transistortester].&lt;br /&gt;
&lt;br /&gt;
Užívatelia systému Linux môžu k SVN dátam pristupovať priamo.&lt;br /&gt;
&lt;br /&gt;
== 下载 (中文) ==&lt;br /&gt;
&lt;br /&gt;
所有文档和软件都可以在SVN上找到。&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/wikifiles/0/0b/Ttinfo_eng111k.pdf 简述（英文版）1.11k（2015—01—05）]&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/wikifiles/8/8f/Ttester_eng111k.pdf 手册（英文版）1.11k（2015—02—08）]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 方法1 &#039;&#039;&#039;&lt;br /&gt;
在[https://www.mikrocontroller.net/svnbrowser/transistortester/ SVN浏览器]中进入你要下载的目录，点击&#039;&#039;&#039;Download GNU tarball&#039;&#039;&#039;就可以下载到这个目录的压缩包。使用你喜欢的压缩软件解压这个压缩包，就能得到你想要的文件了。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 方法2 &#039;&#039;&#039;&lt;br /&gt;
使用SVN软件直接Checkout这个SVN库就行。如果你是Windows用户，你可能需要安装TortoiseSVN来进行这个操作。&lt;br /&gt;
&lt;br /&gt;
SVN地址是 svn://mikrocontroller.net/transistortester&lt;br /&gt;
&lt;br /&gt;
== Downloads (your-language) ==&lt;br /&gt;
You can put a translation &#039;&#039;here&#039;&#039;, but only if its done by yourself, not Google Translate.&lt;br /&gt;
You can also put a translation of the whole article here, if its done by yourself.&lt;br /&gt;
&lt;br /&gt;
Only little understanding of the Wiki-Syntax is needed therefore.&lt;br /&gt;
&lt;br /&gt;
== Verzeichnisstruktur des SVN ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Ordnerstruktur und Beschreibung der  &#039;&#039;Pfade&#039;&#039; im SVN&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background-color:#B3B7FF&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align:center&amp;quot; colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Ordner/directory&#039;&#039;&#039; || &#039;&#039;&#039;Dateien/files&#039;&#039;&#039; || &#039;&#039;&#039;Beschreibung/description&#039;&#039;&#039;&lt;br /&gt;
|-   style=&amp;quot;background-color:#B9FFC5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Doku&#039;&#039;&#039; || || || Enthält die Dokumentation als PDF und als pdflatex-Quelltext&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk&#039;&#039;&#039; || || Letzter Entwicklungsstand der Dokumentation inclusive Bilder und Diagrammen&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/pdftex/german&#039;&#039;&#039; || || enthält die deutschen Texte, Makefile und PDF-Dokumentation der Entwicklerversion&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/pdftex/english&#039;&#039;&#039; || || contains the English text, Makefile and PDF documentation of the developer version&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/pdftex/russian&#039;&#039;&#039; || || contains the Russian text, Makefile and PDF documentation of the developer version&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;tags&#039;&#039;&#039; ||&#039;&#039;changelog.txt&#039;&#039; || &#039;&#039;Hier sollte jede Änderung mit Versionsnummer eingetragen werden&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;tags/german&#039;&#039;&#039; || || &#039;&#039;Aktuelle PDF Dokumentation in deutsch&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;tags/english&#039;&#039;&#039; || || &#039;&#039;Current PDF documentation in English&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;tags/russian&#039;&#039;&#039; || || &#039;&#039;Current PDF documentation in Russian language&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;tags/old/german&#039;&#039;&#039; || || &#039;&#039;PDF Dokumentationen zu früheren Softwareversionen&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;tags/old/english&#039;&#039;&#039; || || &#039;&#039;PDF documentation for earlier software versions&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:#B9FFC5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Hardware&#039;&#039;&#039; || || || Hardware Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;strip_grid&#039;&#039;&#039; || || Verzeichnis für eine Streifenleiterplatine&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;strip_grid/ttester_strip_grid.diy&#039;&#039;&#039; || || Beispiel einer Streifenleiterplatine, DIYLC-Datei&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;strip_grid/TTester_strip.pdf&#039;&#039;&#039; || || Ergebnis der Streifenleiterplatine im PDF Format&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;strip_grid/LiesMich.txt&#039;&#039;&#039; || || Kurzdokumentation für Streifenleiter-Platine&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;strip_grid/ReadMe.txt&#039;&#039;&#039; || || Short documentation for the strip grid board&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Markus&#039;&#039;&#039; || || Entwurf von Markus R. mit LED-Dimmer im Eagle 6.4.0 Format&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:#B9FFC5&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Software&#039;&#039;&#039; || || || Software für AVR-GCC 4.8.2&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk&#039;&#039;&#039; || || Aktueller Software-Entwicklungszweig&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/default&#039;&#039;&#039; || || Makefile und Programmierdaten für ATmega168 mit Standard-Layout&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega168_1.9V&#039;&#039;&#039; || || Makefile und Daten für ATmega168 mit Knopfzellenbetrieb (FiFi)&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega168_3.3V&#039;&#039;&#039; || || Makefile und Daten für ATmega168 mit LiPo-Akkubetrieb (FiFi)&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega168_strip_grid&#039;&#039;&#039; || || Makefile und Daten für ATmega168 für Streifenleiter-Platine&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328&#039;&#039;&#039; || || Makefile und Daten für ATmega328 mit Standard-Layout (ab Version 1.08k)&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_1.9V&#039;&#039;&#039; || || Makefile und Daten für ATmega328 mit Knopfzellenbetrieb (Funkamateur)&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_3.3V&#039;&#039;&#039; || || Makefile und Daten für ATmega328 mit LiPo-Akkubetrieb (Funkamateur)&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_2X16_menu&#039;&#039;&#039; || || Makefile und Daten für ATmega328, 2x16 Zeichen Textdisplay, Impulsdrehgeber + Spannungsmessung&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_dogm&#039;&#039;&#039; || || Makefile und Daten für ATmega328 mit Standard-Layout, 2x16 Zeichen DOG-M LCD&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_strip_grid&#039;&#039;&#039; || || Makefile und Daten für ATmega328 für Streifenleiter-Platine (ab Version 1.08k)&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_strip_grid_dogm&#039;&#039;&#039; || || Makefile und Daten für ATmega328 für Streifenleiter-Platine mit DOG-M Display&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_st7565&#039;&#039;&#039; || || Makefile und Daten für ATmega328 mit Standard-Layout, 126x64 Pixel LCD, ST7565 Controller&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_st7108&#039;&#039;&#039; || || Makefile und Daten für ATmega328 mit Standard-Layout, 126x64 Pixel LCD, ST7108 Controller&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_st7920&#039;&#039;&#039; || || Makefile und Daten für ATmega328 mit Standard-Layout, 126x64 Pixel LCD, ST7920 Controller&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_fish8840&#039;&#039;&#039; || || Makefile und Daten für chinesische Fish8840 Version, ATmega328, 126x64 Pixel LCD, ST7565 Controller&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_wei_st7565&#039;&#039;&#039; || || Makefile und Daten für chinesische WEI_M8_LGTST Version, 126x64 Pixel LCD, ST7565 Controller, LiIon Accu&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_GM328&#039;&#039;&#039; || || Makefile und Daten für chinesische GM328 Version, ATmega328, 126x64 Pixel LCD, ST7565 Controller&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_T3_T4_st7565&#039;&#039;&#039; || || Makefile und Daten für chinesische T3 oder T4 Version, ATmega328, 126x64 Pixel LCD, ST7565 Controller&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_T5_st7565&#039;&#039;&#039; || || Makefile und Daten für chinesische T5 Version, ATmega328, 126x64 Pixel LCD, ST7565 Controller, LiIon Accu&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_ssd1306I2C&#039;&#039;&#039; || || Makefile und Daten für ATmega328 mit Standard-Layout, 126x64 Pixel OLED, SSD1306 Controller, I2C Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega328_ssd1306SPI&#039;&#039;&#039; || || Makefile und Daten für ATmega328 mit Standard-Layout, 126x64 Pixel OLED, SSD1306 Controller, SPI Schnittstelle&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega644_LCD2004&#039;&#039;&#039; || || Makefile und Daten für ATmega644/1284 mit 4x20 Zeichen LCD&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/arduino_m2560&#039;&#039;&#039; || || Makefile und Daten für Arduino Mega (ATmega2560) mit 2x16 Zeichen LCD &lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;trunk/mega8&#039;&#039;&#039; || || Makefile und Daten für ATmega8. Ab Version 1.00k ist der Selbsttest für den ATmega8 nicht mehr konfigurierbar.&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;tags&#039;&#039;&#039; || || Fertige Software Versionen als ZIP gepackt&lt;br /&gt;
|-&lt;br /&gt;
| || || &#039;&#039;changelog.txt&#039;&#039; || &#039;&#039;Hier sollte jede Änderung mit Versionsnummer eingetragen werden&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| || &#039;&#039;&#039;Markus&#039;&#039;&#039; || || Alternative Software von Markus R., bitte README beachten! Die Software wurde aufgeräumt und ist viel besser strukturiert, läuft aber nur auf einem ATmega168 oder ATmega328. Die Software läuft nur auf dem Standard-Layout.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=K%C3%BChlk%C3%B6rper&amp;diff=92425</id>
		<title>Kühlkörper</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=K%C3%BChlk%C3%B6rper&amp;diff=92425"/>
		<updated>2016-03-17T05:56:54Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel versteht sich als Unterpunkt zum Artikel [[Leistungselektronik]].&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Ein Kühlkörper (engl. &#039;&#039;heat sink&#039;&#039;) dient der Begrenzung der Betriebstemperatur elektronischer Bauteile. Er wird immer dann benötigt, wenn die Verlustleistung so hoch ist, dass die sich aufgrund der herrschenden Randbedingungen wie Wärmeleitfähigkeit, Luftkonvektion und Umgebungstemperatur einstellende Bauteiltemperatur den  höchst zulässigen Wert übersteigen würde. Der Kühlkörper hat dabei die Aufgabe, die entstehende Wärme möglichst gut auf eine große Fläche zu verteilen, um sie besser an die Umgebung abgeben zu können. Damit wird der Unterschied zwischen Lufttemperatur und Bauteiltemperatur gesenkt. Technisch spricht man hierbei von einer Verringerung des Temperaturwiderstandes.&lt;br /&gt;
&lt;br /&gt;
[[bild: Rippenkuehlkoerper.png | thumb | 300px| Rippenkühlkörper, Schnittdarstellung]]&lt;br /&gt;
&lt;br /&gt;
Das grundlegende Prinzip sieht man an jedem Rippenkühlkörper. An der Stelle, wo das Kühlobjekt angeschraubt/gepresst ist (rotes Viereck), ist ein dicker &amp;quot;Klumpen&amp;quot; Material, der erstmal die Wärme auf eine etwas größere Fläche verteilen soll. Bei CPU-Lüftern ist dort teilweise Kupfer eingepresst, weil das noch besser als Aluminium Wärme leitet (engl. heat spreader, Wärmespreizer). Danach folgen viele, nach aussen dünner werdende Rippen. In der Mitte noch dick, dort muss die Wärme ja verlustarm durchgeleitet werden, aussen dünn, dort ist fast alle Wärme schon abgegeben. Ein guter Kühlkörper hat eine möglichst große Oberfläche bei möglichst kleiner Masse. Zudem sind sie so gefertigt und platziert, dass die Luftkonvektion unterstützt wird. Viele Kühlkörper werden aus preiswerten [http://de.wikipedia.org/wiki/Strangpressen Strangpressprofilen] hergestellt.&lt;br /&gt;
&lt;br /&gt;
== Wärmewiderstand ==&lt;br /&gt;
&lt;br /&gt;
Die wichtigste Kennzahl eines Kühlkörpers ist der Wärmewiderstand. Er gibt an, um wie viel Kelvin sich die Temperatur zwischen Wärmequelle und Umgebung unterscheidet, wenn eine bestimmte Wärmeleistung abgeführt werden muss. Die Einheit ist K/W, Kelvin pro Watt. (Hinweis: Oft wird die Einheit °C/W angegeben, das ist allerdings nicht ganz korrekt. Temperaturdifferenzen werden in Kelvin angegeben). Je niedriger der Wärmewiderstand, umso besser der Kühlkörper, weil er die gleiche Wärmeleistung mit einem kleineren Temperaturunterschied abführen kann. Dadurch bleibt das Bauteil kühler, was der Lebensdauer und Funktionssicherheit zu Gute kommt.&lt;br /&gt;
&lt;br /&gt;
Allgemein gilt die Formel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Delta T = P_{\theta} \cdot R_{\theta}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;\Delta T&amp;lt;/math&amp;gt; - Temperaturdifferenz zwischen Wärmequelle und Umgebung in K&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{\theta}&amp;lt;/math&amp;gt; - Wärmeleistung in W&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{\theta}&amp;lt;/math&amp;gt; - Wärmewiderstand in K/W&lt;br /&gt;
&lt;br /&gt;
Der griechische Buchstabe Theta wird als Symbol für Wärmekenngrößen verwendet, denn es geht bei diesen Rechnungen um Wärmewiderstände und Wärmeleistungen, keine elektrischen Widerstände und elektrische Leistungen.&lt;br /&gt;
&lt;br /&gt;
== Berechnung des Wärmewiderstands ==&lt;br /&gt;
&lt;br /&gt;
Für einen Kühlkörper ist der Wärmewiderstand im Datenblatt angegeben. Diesen rein aus dem Aufbau zu berechnen ist sehr schwierig, auch das Messen ist nicht so einfach. Was man jedoch berechnen kann und muss ist der Wärmewiderstand eines Gesamtaufbaus, d.h. Bauteil + Kühlkörper. Dazu muss man im Wesentlichen zwei Fälle unterscheiden.&lt;br /&gt;
&lt;br /&gt;
=== Bauteil ohne Kühlkörper ===&lt;br /&gt;
&lt;br /&gt;
Ohne Kühlkörper kann ein Bauteil seine Wärme über zwei Wege abgeben. Über das Gehäuse direkt an die Luft (Abstrahlung und Konvektion) oder über die Anschlüsse auf die Platine (Wärmeleitung). Dies alles findet parallel statt, aber je nach Gehäusetyp und Platinengestaltung ist die Verteilung auf die Kühlwege verschieden. Transistoren im Metallgehäuse (z.&amp;amp;nbsp;B. TO-3) oder mit Metallfahne (z.&amp;amp;nbsp;B. TO220) können recht viel Wärme über das Gehäuse abgeben (Konvektion). Effektive Abstrahlung braucht immer recht hohe Temperaturdifferenzen von 100K und mehr, wie sie meist nur von Leistungswiderständen und Elektronenröhren erreicht werden. Leistungsdioden im Plastikgehäuse hingegen können den Großteil der Wärme nur über die Anschlüsse abgeben. Deshalb sollten diese möglichst kurz sein, und auf der Platine an dicke Leiterbahnen oder gar Kupferflächen angeschlossen werden. Ähnliches gilt für leistungsverstärkte DIL- oder SOIC-[[IC-Gehäuseformen | Gehäuse]], welche oft für [[H-Brücken_Übersicht | Leistungstreiber]] oder [[FET | MOSFETs]] verwendet werden. In diesen Fällen sollten die Pins direkt an Kupferflächen &#039;&#039;&#039;ohne&#039;&#039;&#039; Wärmefallen ([https://de.wikipedia.org/wiki/Thermal_Pad Thermal Pad]) angeschlossen werden, auch wenn dadurch das [[Löten]] erschwert wird. &lt;br /&gt;
&lt;br /&gt;
Für die meisten Bauteile ist im Datenblatt der Wärmewiderstand zwischen dem eigentlichen Chip und der Umgebung angegeben.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{\theta JA}&amp;lt;/math&amp;gt; - Wärmewiderstand (griechisches Zeichen [https://de.wikipedia.org/wiki/Theta Groß-Theta]) zwischen Sperrschicht und Umgebung ohne zusätzlichen Kühlkörper in K/W&lt;br /&gt;
&lt;br /&gt;
Damit kann man direkt in die oben genannte Formel gehen und die Temperaturdifferenz ausrechnen. Die Temperatur der Sperrschicht errechnet sich einfach aus der maximalen Umgebungstemperatur (meist Luft) und dem errechneten Temperaturunterschied.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;T_J = T_A + \Delta T &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;T_J&amp;lt;/math&amp;gt; - Temperatur der Sperrschicht in °C (engl. &amp;quot;&#039;&#039;&#039;j&#039;&#039;&#039;unction&amp;quot;)&lt;br /&gt;
*&amp;lt;math&amp;gt;T_A&amp;lt;/math&amp;gt; - Temperatur der Umgebung in °C (engl. &amp;quot;&#039;&#039;&#039;a&#039;&#039;&#039;mbient&amp;quot;)&lt;br /&gt;
*&amp;lt;math&amp;gt;\Delta T&amp;lt;/math&amp;gt; - Temperaturdifferenz zwischen Wärmequelle und Umgebung in K&lt;br /&gt;
&lt;br /&gt;
=== Bauteil mit Kühlkörper ===&lt;br /&gt;
&lt;br /&gt;
Will man mit einem IC größere Verlustleistungen umsetzen (Linearer Spannungsregler, [[Transistor]], etc.] muss meist ein Kühlkörper her. Die jeweiligen Gehäuse besitzen dazu meist eine Kühlfahne, an die man den Kühlkörper anschrauben kann. Bei anderen gibt es Klemmen, die den Kühlkörper fest klemmen. Hier gibt es einiges zu beachten. Der Kühlkörper darf nicht zu schwach angeschraubt werden, sonst ist der Wärmewiderstand zwischen Gehäuse und Kühlkörper zu gross. Er darf aber auch nicht zu stark angeschraubt/angepresst werden, um das Gehäuse nicht zu deformieren. Wichtig ist der Übergang zwischen IC und Kühlkörper. Hier muss bei größeren Leistungen (&amp;gt;5W) Wärmeleitpaste verwendet werden. Ihre Aufgabe ist es, die Luft zwischen den Oberflächen zu verdrängen, welche sich in den mikroskopischen Unebenheiten befindet und den Wärmewiderstand &#039;&#039;&#039;deutlich&#039;&#039;&#039; erhöht. Dabei sollte die Schicht sehr dünn sein, denn die Wärmeleitpaste ist im Vergleich zu Aluminium oder Kupfer ein schlechter Wärmeleiter, allerdings deutlich besser als Luft. Das oft verwendete TO220 Gehäuse hat ca. 1cm^2 Kühlfläche. Wird ein Kühlkörper ohne Wärmeleitpaste aufgeschraubt und entsteht dabei ein angenommener Luftspalt von 10µm, hat dieser einen Wärmewiderstand von ca. 4K/W! Mit Wärmeleitpaste sind es rein rechnerisch nur 1/150tel, also etwa 0,026 K/W. Real muss man jedoch eher mit 0,5-1K/W rechnen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! Material || Wärmeleitfähigkeit&amp;lt;br/&amp;gt;[W/(m*K)]&lt;br /&gt;
|-&lt;br /&gt;
| Luft            || 0,026&lt;br /&gt;
|-&lt;br /&gt;
| Wärmeleitpaste  ||   4 -  10&lt;br /&gt;
|-&lt;br /&gt;
| Aluminium       || 221*&lt;br /&gt;
|-&lt;br /&gt;
| ALMg3           || 140 - 160&lt;br /&gt;
|-&lt;br /&gt;
| ALMg4,5Mn       || 120 - 140&lt;br /&gt;
|-&lt;br /&gt;
| ALMgSi1         || 170 - 220&lt;br /&gt;
|-&lt;br /&gt;
| ALCuMg1         || 160 - 200&lt;br /&gt;
|-&lt;br /&gt;
| ALCu6,5Mn0,3    ||   95 - 130&lt;br /&gt;
|-&lt;br /&gt;
| Kupfer          || 370*&lt;br /&gt;
|-&lt;br /&gt;
| Messing MS60    ||   90 - 113&lt;br /&gt;
|- &lt;br /&gt;
| Cu Be 2         ||   92 - 125&lt;br /&gt;
|-&lt;br /&gt;
| Cu Co 2 Be      || 192 - 239&lt;br /&gt;
|-&lt;br /&gt;
| Cu Cr 1 Zr      || 167 - 320&lt;br /&gt;
|-&lt;br /&gt;
| Cu Ni 2 Si      ||   67 - 120&lt;br /&gt;
|-&lt;br /&gt;
| Stahl 0,2%C     ||   50&lt;br /&gt;
|-&lt;br /&gt;
| Stahl 8%Cr      ||   21&lt;br /&gt;
|-&lt;br /&gt;
| Zinn            ||   65&lt;br /&gt;
|-&lt;br /&gt;
| Blei            ||   35&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Werte DIN V 4108-4, Achtung: bei den verfügbaren Legierungen sind weit geringere Wärmeleitfähigkeiten zu erwarten!&lt;br /&gt;
&lt;br /&gt;
Für die Berechnung des gesamten Wärmewiderstandes müssen hier drei Widerstände in Reihe betrachtet werden. Der Erste ist im Datenblatt zwischen Chip und Gehäuse angeben (engl. junction to case). Danach kommt der Übergang Gehäuse-Kühlkörper. Dieser ist von der Oberflächengüte und der Wärmeleitpaste abhängig und ist bei einigen Leistungsbauteilen im Datenblatt angegeben, manchmal kann er nur abgeschätzt werden. Ein TO220 Gehäuse mit dünner Schicht Wärmeleitpaste hat hier ca. 0,5-1K/W. Zum Schluss muss noch der Wärmewiderstand des Kühlkörpers addiert werden, dieser ist im Datenblatt angegeben. Vorsicht, bei größeren Kühlkörpern mit großen Rippen ist die Einbaulage wichtig, damit der Luftstrom frei strömen und gut kühlen kann (freie Konvektion, warme Luft strömt nach oben und kalte strömt unten nach). Die drei Wärmewiderstände werden addiert und über die oben angegebene Formel der Gesamtwärmewiderstand und damit die Temperaturerhöhung der Sperrschicht berechnet.&lt;br /&gt;
Dabei muss man aufpassen, dass man nicht aus Versehen den Wärmewiderstand ohne Kühlkörper (&amp;lt;math&amp;gt;R_{\theta JA}&amp;lt;/math&amp;gt;) in die Formel einsetzt!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_{\theta} = R_{\theta JC} + R_{\theta CS} + R_{\theta S}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{\theta}&amp;lt;/math&amp;gt; - Gesamtwärmewiderstand in K/W&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{\theta JC}&amp;lt;/math&amp;gt; - Wärmewiderstand zwischen Sperrschicht und Gehäuse (engl. &#039;&#039;&#039;j&#039;&#039;&#039;unction - &#039;&#039;&#039;c&#039;&#039;&#039;ase)&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{\theta CS}&amp;lt;/math&amp;gt; - Wärmewiderstand zwischen Gehäuse und Kühlkörper (engl. &#039;&#039;&#039;c&#039;&#039;&#039;ase - heat &#039;&#039;&#039;s&#039;&#039;&#039;ink)&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{\theta S}&amp;lt;/math&amp;gt; - Wärmewiderstand des Kühlkörpers (engl. heat &#039;&#039;&#039;s&#039;&#039;&#039;ink)&lt;br /&gt;
&lt;br /&gt;
Wird eine Schaltung in einem Gehäuse eingesetzt, muss man dafür sorgen dass die warme Luft abgeführt wird, vor allem in Kunststoffgehäusen. Ansonsten gibt es einen Wärmestau und die Temperatur steigt deutlich!&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
Gesucht:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{\theta S}&amp;lt;/math&amp;gt; - max. Wärmewiderstand des Kühlkörpers&lt;br /&gt;
&lt;br /&gt;
Gegeben:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{\theta}&amp;lt;/math&amp;gt; : 10 W&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{\theta JC}&amp;lt;/math&amp;gt; : 3 K/W&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{\theta CS}&amp;lt;/math&amp;gt; : 0,5 K/W&lt;br /&gt;
*&amp;lt;math&amp;gt;T_J&amp;lt;/math&amp;gt; : 130 °C&lt;br /&gt;
*&amp;lt;math&amp;gt;T_A&amp;lt;/math&amp;gt; : 40 °C&lt;br /&gt;
&lt;br /&gt;
Rechnung:&lt;br /&gt;
&lt;br /&gt;
Um die Berechnung durchführen zu können, müssen wir zuerst die maximal zulässige  Temperaturdifferenz zwischen Sperrschicht und Umgebung festlegen. Je größer man diesen Wert wählt, umso kleiner kann der Kühlkörper sein, aber umso heißer wird auch das Bauteil im Inneren betrieben.&lt;br /&gt;
Eine Angabe dazu findet man manchmal im Datenblatt (Operating junction temperature). Achtung, manchmal wird nur die zulässige Umgebungstemperatur genannt (Operationg temperature)! Wenn nicht, kann man sich an folgenden Angaben orientieren&lt;br /&gt;
* Leistungsbauteile wie [[Transistor]]en, [[TRIAC]]s etc. sind meist bis 150°C Sperrschichttemperatur ausgelegt, teilweise auch bis 200°C&lt;br /&gt;
* Leistungs-LEDs verkraften dauerhaft nur um die 80°C&lt;br /&gt;
* Man sollte die maximalen Betriebstemperaturen nicht ausreizen, wenn man eine hohe Lebensdauer und Funktionssicherheit anstrebt und 10-30K unter den Maximalwerten bleiben&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Delta T = T_J - T_A = 130 ^\circ C - 40 ^\circ C = 90 K&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_{\theta} = \frac { \Delta T}{P_{\theta}}  = \frac {90K}{10W} = 9 K/W  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_{\theta S} = R_{\theta} - R_{\theta JC} - R_{\theta CS} = 9 K/W - 3 K/W - 0,5K/W = 5,5 K/W&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_{\theta S} \leqq 5,5 K/W&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Kühlkörper darf einen maximalen Wärmewiderstand von 5,5 K/W haben, wenn die oben genannten Bedingungen eingehalten werden sollen. Ein Kühlkörper mit einem kleineren Wärmewiderstand hält das Bauteil kühler.&lt;br /&gt;
&lt;br /&gt;
=== Zwangskühlung  ===&lt;br /&gt;
&lt;br /&gt;
Natürlich muss der Kühlkörper die Wärme auch abführen können. Was aber, wenn der für den Wärmeabtransport benötigte Kühlkörper mechanisch nicht ins Gehäuse paßt oder die entstehende Eigenkonvektion zu gering ist?&lt;br /&gt;
&lt;br /&gt;
Hier kommen die Lüfter zum Einsatz, das Ganze nennt sich dann Zwangskühlung. Der Effekt beruht darauf, dass wesentlich mehr Luft am Kühlkörper vorbeiströmen kann und damit (bei gleicher Temperaturerhöhung des Luftvolumenelementes) insgesamt mehr Wärme abgegeben werden kann.&lt;br /&gt;
&lt;br /&gt;
Durch den Einsatz eines Lüfters lässt sich der effektive Wärmewiderstand eines Kühlkörpers etwa um mehrere Faktoren verbessern, bzw. der Kühlkörper kann in der Größe entsprechend reduziert werden. Dabei sind je nach Einbausituation des Kühlers und des Lüfters Faktoren zwischen 3-10 möglich. Ein typischer Wert, der sich bei durchschnittlich dimensionierten Kühlkörpern ergibt, ist ein Faktor 4-5. Die Temperaturüberhöhung schrumpft dabei z.B. von 80 Grad auf 20 Grad zusammen. Dies sind jedoch nur Richtwerte für den ersten Entwurf, eine Prüfung durch Messung ist unbedingt erforderlich. &lt;br /&gt;
&lt;br /&gt;
Beim Einsatz eines Lüfters ist auch daran zu denken, daß sowohl die Ansaugöffnung als auch der Kühlkörper verschmutzen und regelmäßig gereinigt werden müssen. Weiterhin erzeugt ein Lüfter natürlich auch Lärm. Je kleiner der Lüfter und je größer die benötigte Luftlieferleistung, umso lauter wird der Lüfter. Umgekehrt kann man aber mit einem großen, eher langsam laufenden Lüfter den Geräuschpegel stark absenken. Letztendlich kann ein Lüfter auch kaputt gehen, womit die Kühlung deutlich verschlechtert wird und das Bauteil überhitzt. Hier empfiehlt sich bei wertvolleren Objekten eine Lüfterüberwachung, wie sie seit längerem bei PCs eingesetzt wird oder das Verbauen mehrerer Lüfter, sodass der Ausfall eines einzigen nicht sofort zu einem Geräteausfall führt.&lt;br /&gt;
&lt;br /&gt;
==== Physikalischer Hintergrund der Zwangskühlung mit Luft ====&lt;br /&gt;
&lt;br /&gt;
Luft hat eine Wärmekapazität von ungefähr 1kJ/kg/K was bedeutet, daß für die Erwärmung von 1kg Luft um 1K eine Energiemenge von 1kJ = 1000Ws erforderlich ist. D.h. für den kontinuierlichen Abtransport von 100W Wärme werden mindestens 100g Luft pro Sekunde benötigt, wenn man diese nur um 1K erwärmen will. &lt;br /&gt;
Um also 100W von einem Kühlkörper abzuführen, der sich hier im Beispiel um 8K erwärmen darf, sind  100W / 8K  = 12,5g Luft pro Sekunde erforderlich. Ein Gramm Luft hat ein Volumen von etwa 0,77l, d.h. bei 12,5 g muss der Lüfter 9,6 l/s bzw. 34,5 m³/h liefern, die dann auch durch den gesamten Kühlkörper geblasen werden müssen.&lt;br /&gt;
&lt;br /&gt;
Diese Werte sind jedoch nur theoretisch von Interesse, da die Praxis gezeigt hat, dass die effektive Kühlwirkung sehr stark von den sich einstellenden Mikroturbulenzen am Bauteil abhängt. Diese sind für den Wärmegradienten zwischen Kühleroberfläche und Umgebungsluft verantwortlich. Durch eine stark laminare = gleichförmig strömende Luft wird ein Bauteil eher schlecht gekühlt. Bestimmte Bauformen von Bauelementen und Kühlern begünstigen die Turbulenzbildung, behindern damit zwar den Luftstrom, da der Widerstand steigt, kühlen aber letztlich besser. So ist es zu erklären, dass manche Bauteile ohne Kühlung auskommen, da sie die Eigenkonvektion fördern und günstig im Luftstrom sitzen und von einem Kühler weniger profitieren, als andere Problembauteile.&lt;br /&gt;
&lt;br /&gt;
Generell kann man sagen, dass flache, breite Bauteile zunehmend schlechter selbstkühlend sind, je größer sie werden und damit eher einen KK brauchen. FPGAs und Grafikchips sind solche Kandidaten. Hier empfehlen sich teilweise eigene Chipkühler. Auch RAM-Riegel mit sehr flachen Chips können so sehr effektiv kühl gehalten werden.&lt;br /&gt;
&lt;br /&gt;
== Die Platine als Kühlkörper ==&lt;br /&gt;
&lt;br /&gt;
Bei kleineren Leistungen (&amp;lt; 5W) kann man auch die Platine als Kühlkörper benutzten. Dabei muss jedoch die Wärme vom Bauteil möglichst schnell auf eine größere Fläche verteilt werden. Dazu nutzt man große Kupferflächen direkt am Bauteil. Diese werden teilweise beidseitig angebracht. Die Wärme muss man dann jedoch mit vielen Vias von der einen Seite, auf der das Bauteil sitzt, auf die andere geleitet werden. Diese Vias heißen thermische Vias, da sie nicht als elektrische Verbindung sondern als Wärmeleiter dienen. Das funktioniert deshalb so gut, weil die Vias innen mit Kupfer beschichtet sind, welches die Wärme wesentlich besser leitet als das Material der Leiterplatte (FR2, FR4).&lt;br /&gt;
Verfügt ein SMD-Bauteil über eine sogenannte &amp;quot;heat slug&amp;quot; oder thermal pad auf der Unterseite, muss dieses zur Wärmeableitung unbedingt angelötet werden. Dies ist mit einem normalen Lötkolben möglich, wenn die Platine an dieser Stelle mehrere Durchkontaktierungen mit einem Durchmesser von ca. 1,5mm aufweist. Durch diese Durchkontaktierungen kann genug Lötzinn auf die andere Seite fließen um diese Fläche mit der Platine zu verlöten. &lt;br /&gt;
&lt;br /&gt;
Mit modernen Technologien ist es auch möglich, deutlich größere Wärmeleistungen von der Platine abzuführen. Dazu werden z.&amp;amp;nbsp;B. Platinen mit Aluminium- oder Kupferkern  oder auf einen Metallträger laminierte PCBs benutzt (IMS = &#039;&#039;&#039;I&#039;&#039;&#039;nsulated &#039;&#039;&#039;M&#039;&#039;&#039;etal &#039;&#039;&#039;S&#039;&#039;&#039;ubstrat). Diese kommen z.&amp;amp;nbsp;B. bei Hochleistungs-[[LED]]s zum Einsatz. Für Hobbyzwecke sind sie aber noch wesentlich zu teuer, vor allem bei Einzelstücken.&lt;br /&gt;
&lt;br /&gt;
== Peltierelement ==&lt;br /&gt;
&lt;br /&gt;
Ein [http://de.wikipedia.org/wiki/Peltier-Element Peltierelement] arbeitet nach dem [http://de.wikipedia.org/wiki/Thermoelektrizit%C3%A4t#Peltier-Effekt Peltier-Effekt]. Dabei wird in einem Halbleiter durch Stromfluss eine Seite des Elements kalt, die andere heiß. Damit kann man ein kleines Objekt beliebig kühlen oder heizen. Allerdings sind Peltierelemente nur in eher kleinen Abmessungen und Leistung verfügbar (bis einige Dutzend Watt) und deren Effizienz ist auch nicht sonderlich hoch. Die allgemeine Auffassung, die könnten Wärme einfach verschwinden lassen ist falsch. Denn die heiße Seite muss klassisch gekühlt werden, je nach Temperaturunterschied mit mehr als der doppelten Kühlleistung als auf der kalten Seite an Wärme abgeführt wird.&lt;br /&gt;
&lt;br /&gt;
== Heat pipe ==&lt;br /&gt;
&lt;br /&gt;
Eine [http://de.wikipedia.org/wiki/Heatpipe Heat pipe],auf deutsch Wärmerohr genannt, ist ein Rohr, welches mit einer leicht verdampfenden Flüssigkeit gefüllt ist. Wird ein Ende erhitzt, verdampft die Flüssigkeit und nimmt dabei sehr viel Wärme auf. Der Dampf steigt im Rohr ans andere Ende, kondensiert dort und gibt dabei seine Wärme wieder ab.&lt;br /&gt;
&lt;br /&gt;
Heat pipes werden auch als Wärmesuperleiter bezeichnet, weil sie Wärme 100-10.000 mal besser leiten als ein massiver Kupferstab mit gleichen Abmessungen.&lt;br /&gt;
&lt;br /&gt;
Auch hier muss gesagt werden, dass eine Heat pipe allein &#039;&#039;&#039;kein&#039;&#039;&#039; Kühlsystem ist, denn die Seite, auf der das Wärmetransportmedium wieder kondensiert, muss auch wieder klassisch gekühlt werden. Der grosse Vorteil ist die Abführung großer Wärmemengen auf engstem Raum, wie z.&amp;amp;nbsp;B. bei CPUs in Laptops.&lt;br /&gt;
&lt;br /&gt;
== Flüssigkühlung ==&lt;br /&gt;
&lt;br /&gt;
Im PC-Bereich ist es unter einigen Enthusiasten verbreitet, den Rechner entweder zu übertakten, um eine höhere Leistung zu erzielen oder super leise zu machen, um angenehmer arbeiten oder spielen zu können. In beiden Fällen muss eine große Wärmemenge abgeführt werden. Dabei wird die sehr hohe Wärmekapazität von Wasser genutzt, um auf kleinem Raum die Wärme von CPU, GPU, Festplatten etc. abzuführen. Aber auch hier ist zu beachten, dass am Ende einer Flüssigkühlung praktisch immer ein klassischer Wärmetauscher steht, welcher die Wärme an die Umgebungsluft abgibt. Dieser kann sich aber deutlich weiter entfernt vom zu kühlenden Objekt befinden als ein einfacher, direkt montierter Kühlkörper. &lt;br /&gt;
&lt;br /&gt;
Bei der Verwendung von Wasser statt Luft als Kühlmedium reduziert sich die Durchflußmasse in etwa um den Faktor 4,2, da die Wärmekapazität von Wasser bei ca. 4,182 kJ/kg/K liegt. Da Wasser aber auch eine deutlich höhere Dichte als Luft besitzt (Wasser = 1g/cm³; Luft = 1,3mg/cm³) kommt noch der Faktor von ~770 dazu, woraus sich ein Gesamtfaktor für das Durchflußvolumen von ~3230 ergibt.&lt;br /&gt;
&lt;br /&gt;
D.h. die Durchflußmenge in unserem oben genannten Beispiel (100W) sinkt auf ca. 2,9 ml/s bzw. 10,7 l/h.&lt;br /&gt;
&lt;br /&gt;
Vorteile&lt;br /&gt;
*Abtransport großer Wärmemengen auf kleinstem Raum&lt;br /&gt;
*nahezu lautlos&lt;br /&gt;
&lt;br /&gt;
Nachteile&lt;br /&gt;
*höherer Aufwand und Kosten&lt;br /&gt;
*Gefahr durch auslaufendes Kühlmittel&lt;br /&gt;
&lt;br /&gt;
Im Bereich der Leistungselektronik wird Flüssigkühlung eingesetzt, im Hobbybereich nahezu nicht.&lt;br /&gt;
&lt;br /&gt;
== Bauteilmontage auf dem Kühlkörper ==&lt;br /&gt;
&lt;br /&gt;
Die Montage der klassischen Halbleitergehäuse nach TO220 und ähnlichen gestaltet sich augenscheinlich simpel: Die Kühlfahne hat ein Loch. Da ist es doch sehr verlockend, das Bauteil mit einer Schraube durch ebendieses Loch auf dem Kühlkörper zu befestigen...&lt;br /&gt;
&lt;br /&gt;
Bei fachgerechter Ausführung spricht auch wenig gegen diese Montageweise. Dazu gehört dann auch das richtige Anzugsmoment für die Schraube. Zu lose angezogen und zwischen Bauteilgehäuse und wärmeabführender Oberfläche entsteht ein Luftspalt. Ein Wärmeleitpad oder Wärmeleitpaste schaffen zwar Abhilfe, aber die Wärmeleitfähigkeit dieser Stoffe liegt um Größenordnungen unter der von Aluminium (Kühlkörper) und Kupfer (Kühlfahne). Ein vorhandenes Wärmeleitpad wird mitunter auch nicht weit genug zusammengedrückt, sodass auch noch Optimierung möglich wäre. Nämlich durch festeres Anziehen der Schraube.&lt;br /&gt;
Zu fest angezogen und die Kühlfahne wölbt sich minimal. Dabei hebt der Bauteilkörper von der Oberfläche des Kühlkörpers ab und es entsteht wieder ein Spalt. Ungünstigerweise liegt aber genau dort der Usprung des Wärmeflusses (Silizium-Chip). Bei Conrad gibt es [http://www.conrad.de/ce/de/overview/0205045/Transistor-Halteklammern-Haltefedern Klammern] zur Befestigung von Transistoren von [http://www.fischerelektronik.de/web_fischer/de_DE/K%C3%BChlk%C3%B6rper/A06/Transistorhaltefedern/$search_result_naviActualPage/1/$search_result_naviLinesPerPage/100/search.xhtml;jsessionid=2C868850DA0202334B26912FF6948496#search_result_naviPoint Fischer].&lt;br /&gt;
&lt;br /&gt;
[[Datei: kuehlkoerper-montage.jpeg | thumb | 300px | Montagebeispiel]] Weitaus einfacher zu handhaben ist folgende Montageweise: Die Bauteile werden, ungeachtet der Montagebohrung, lose auf den Kühlkörper gelegt. Falls notwending natürlich mit Isolierstoff dazwischen und in jedem Fall hauchdünn mit einem Wärmeleitmittel bestrichen. Über die Bauteile wird dann ein Aluminiumprofil gelegt und erst dieses wird, weiterhin mit einer Schraube pro Bauteil, auf den Kühlkörper gespannt. Abgesehen davon, dass so auch SMD-Bauteile (IPAK!) auf einem Kühlkörper Platz finden, entsteht Druck genau über dem Hot Spot.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Weitere Hinweise ==&lt;br /&gt;
&lt;br /&gt;
*Große Hochlastwiderstände mit Keramikgehäuse werden im Normalbetrieb recht heiß (200-350°C). Diese Temperaturen sollten nicht auf die Platine kommen, denn das macht das Material nicht lange mit. Hier muss genau das Gegenteil von dem gemacht werden, was weiter oben für Bauteile ohne Kühlkörper empfohlen wurde. Die Anschlüsse müssen möglichst lang sein, damit wenig Wärme über sie abgegeben werden kann. Die Kühlung erfolgt nahezu nur über den Keramikkörper durch Wärmestrahlung und Konvektion.&lt;br /&gt;
* Ein TO220 Gehäuse kann ca. 1W ohne Kühlkörper abgeben.&lt;br /&gt;
* Bei der Dimensionierung des Kühlkörpers sollte man sich nicht an der maximal zulässigen Sperrschichttemperatur orientieren, sondern möglichst um 10..50K kühler bleiben. Das verbessert die Funktionssicherheit und vor allem die Lebensdauer erheblich!&lt;br /&gt;
* Merksatz über den dicken Daumen: Pro 10 Grad Temperaturerhöhung halbiert sich die Lebenserwartung eines Bauteils. (Arrheniusgesetz, RGT-Regel, 10-Grad-Gesetz)&lt;br /&gt;
* Temperaturzyklen verkürzen die Lebensdauer von Schaltungen erheblich&lt;br /&gt;
* Meist sind mehrere kleine Kühlkkörper deutlich kleiner und billiger als ein Großer.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [[Leistungselektronik]]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/84303 Forumsbeitrag]: Beispielrechnung&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/308826?goto=3325027#3325027 Forumsbeitrag]: Wärmewiderstand und Sperrschichttemperatur messen&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/351187#3905083 Forumsbeitrag]: Dicker MOSFET, dünnes Anschlusspin?&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/205307#4091697 Forumsbeitrag]: Wärmewiderstand einfacher Bleche&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://sound.westhost.com/heatsinks.htm The Design of Heat sinks]. Eine ausführliche Seite zum Thema Kühlkörper, englisch&lt;br /&gt;
* [http://ludens.cl/Electron/Thermal.html Thermal Design], englisch&lt;br /&gt;
* [http://wiki.oliverbetz.de/owiki.php/FormelSammlung Universelle Formelsammlung], mit kurzen Erklärungen&lt;br /&gt;
* [http://www.thermoconsult.de/01_TechInfo/Physik.pdf Grundlagen zur Kühlung], inhaltlich gut, Formatierung eher mies&lt;br /&gt;
* [http://tangentsoft.net/elec/diy-hs.html DIY Heat Sinks]&lt;br /&gt;
* [http://www.fischerelektronik.de/ Kühlkörper] bei Fischer Elektronik&lt;br /&gt;
* [http://www.leiton.de/leiterplatten_teaser_alu.html Leiterplatten mit Alukern] bei Leiton&lt;br /&gt;
*[http://www.shop.display3000.com/mikrocontrollerloesungen/uc-mit-21-tft/d074-mikrocontroller-atmega-tft-farbdisplay-212.html Berechnung in der Praxis]: Unter Downloads das Handbuch laden, dann Seite 14&lt;br /&gt;
* [http://www.zabex.de/site/kurios.html#wafeila Ungewöhnliche Hochlastwiderstände im Eigenbau]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Leistungselektronik]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Timer&amp;diff=91343</id>
		<title>AVR-Tutorial: Timer</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Timer&amp;diff=91343"/>
		<updated>2016-01-14T12:10:53Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Timer sind eines der Hauptarbeitspferde in unserem Mikrocontroller. Mit ihrer Hilfe ist es möglich, in regelmäßigen Zeitabständen Aktionen zu veranlassen. Aber Timer können noch mehr!&lt;br /&gt;
* Timer können mit einem externen Pin hochgezählt werden&lt;br /&gt;
* Es gibt Möglichkeiten, bei bestimmten Zählerständen einen Interrupt auslösen zu lassen&lt;br /&gt;
* Timer können aber auch völlig selbstständig Signale an einem Ausgabepin erzeugen&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Aber der Reihe nach und kurz zur Erinnerung: Die Beispiele passen zu einem ATmega8 und ggf. einer Reihe anderer AVR, können bei einigen Typen aber abweichen. &lt;br /&gt;
&lt;br /&gt;
==Was ist ein Timer?==&lt;br /&gt;
&lt;br /&gt;
Ein Timer ist im Grunde nichts anderes als ein bestimmtes Register im Mikrocontroller, das hardwaregesteuert fortlaufend um 1 erhöht (oder verringert) wird (statt &amp;lt;i&amp;gt;um 1 erhöhen&amp;lt;/i&amp;gt; sagt man auch &#039;&#039;&#039;inkrementieren&#039;&#039;&#039;, und das Gegenstück, &#039;&#039;&#039;dekrementieren&#039;&#039;&#039;, bedeutet &amp;lt;i&amp;gt;um 1 verringern&amp;lt;/i&amp;gt;). Anstatt also Befehle im Programm vorzusehen, die regelmäßig ausgeführt werden und ein Register inkrementieren, erledigt dies der Mikrocontroller ganz von alleine. Dazu ist es möglich, den Timer mit dem Systemtakt zu verbinden und so die Genauigkeit des Quarzes auszunutzen, um ein Register regelmäßig und vor allen Dingen unabhängig vom restlichen Programmfluss (!) hochzählen zu lassen.&lt;br /&gt;
&lt;br /&gt;
Davon alleine hätte man aber noch keinen großen Gewinn. Nützlich wird das Ganze erst dann, wenn man bei bestimmten Zählerständen eine Aktion ausführen lassen kann. Einer der &#039;bestimmten Zählerstände&#039; ist zum Beispiel der &#039;&#039;&#039;Overflow&#039;&#039;&#039;. Das Zählregister eines Timers kann natürlich nicht beliebig lange inkrementiert werden – z. B. ist der höchste Zählerstand, den ein 8-Bit-Timer erreichen kann, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt; – 1 = 255. Beim nächsten Inkrementierschritt tritt ein Überlauf (engl. Overflow) auf, der den Timerstand wieder zu 0 werden lässt. Und hier liegt der springende Punkt. Wir können uns nämlich an diesen Overflow &amp;quot;anhängen&amp;quot; und den Controller so konfigurieren, dass beim Auftreten des Timer-Overflows ein Interrupt ausgelöst wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die kann auch alles nochmal im Datenblatt von Atmel zu einigen ATMega Datenblättern nachgelesen werden: http://www.atmel.com/Images/doc8161.pdf&lt;br /&gt;
&lt;br /&gt;
==Der Vorteiler (Prescaler)==&lt;br /&gt;
&lt;br /&gt;
Wenn also der Quarzoszillator mit 4 MHz schwingt, dann würde auch der Timer 4 Millionen mal in der Sekunde erhöht werden. Da der Timer jedes Mal von 0 bis 255 zählt, bevor ein Overflow auftritt, heißt das auch, dass in einer Sekunde 4000000 / 256 = 15625 Overflows vorkommen. Ganz schön schnell! Nur: Oft ist das nicht sinnvoll. Um diese Raten zu verzögern, gibt es den Vorteiler, oder auf Englisch, Prescaler. Er kann z.B. auf die Werte 1, 8, 64, 256 oder 1024 eingestellt werden, je nach Timer (Bitte Datenblatt konsultieren!). Seine Aufgabe ist es, den Systemtakt um den angegebenen Faktor zu teilen. Steht der Vorteiler also auf 1024, so wird nur bei jedem 1024-ten Impuls vom Systemtakt das Timerregister um 1 erhöht. Entsprechend weniger häufig kommen dann natürlich die Overflows. Der Systemtakt sei wieder 4000000. Dann wird der Timer in 1 Sekunde 4000000 / 1024 = 3906,25 mal erhöht. Da der Timer wieder jedesmal bis 255 zählen muss bis ein Overflow auftritt, bedeutet dies, dass in 1 Sekunde 3906,25 / 256 = 15,25 Overflows auftreten.&lt;br /&gt;
&lt;br /&gt;
Systemtakt: 4Mhz&lt;br /&gt;
&lt;br /&gt;
  Vorteiler    Overflows/Sekunde      Zeit zwischen&lt;br /&gt;
                                      2 Overflows [s]&lt;br /&gt;
&lt;br /&gt;
      1            15625                0.000064  =  64 µs&lt;br /&gt;
      8             1953.125            0.000512  = 512 µs&lt;br /&gt;
     64              244.1406           0.004096  ≈   4,1 ms&lt;br /&gt;
    256               61.0351           0.016384  ≈  16,4 ms&lt;br /&gt;
   1024               15.2587           0.065536  ≈  65,5 ms&lt;br /&gt;
&lt;br /&gt;
Die Zeit (in Sekunden) zwischen 2 Overflows lässt sich sehr leicht berechnen:&lt;br /&gt;
&amp;lt;math&amp;gt;t=\frac{2^\text{Bit des Timers} \cdot \text{Vorteiler}}{\text{Systemtakt in Hz}}&amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
==Erste Tests==&lt;br /&gt;
&lt;br /&gt;
Ein Programm, das einen Timer Overflow in Aktion zeigt, könnte z.&amp;amp;nbsp;B. so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.def temp = r16&lt;br /&gt;
.def leds = r17&lt;br /&gt;
&lt;br /&gt;
.org 0x0000&lt;br /&gt;
        rjmp    main                  ; Reset Handler&lt;br /&gt;
.org OVF0addr&lt;br /&gt;
        rjmp    timer0_overflow       ; Timer Overflow Handler&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
        ; Stackpointer initialisieren&lt;br /&gt;
        ldi     temp, HIGH(RAMEND)&lt;br /&gt;
        out     SPH, temp&lt;br /&gt;
        ldi     temp, LOW(RAMEND)     &lt;br /&gt;
        out     SPL, temp&lt;br /&gt;
	&lt;br /&gt;
        ldi     temp, 0xFF            ; Port B auf Ausgang&lt;br /&gt;
        out     DDRB, temp&lt;br /&gt;
&lt;br /&gt;
        ldi     leds, 0xFF&lt;br /&gt;
&lt;br /&gt;
        ldi     temp, (1&amp;lt;&amp;lt;CS00)       ; CS00 setzen: Teiler 1&lt;br /&gt;
        out     TCCR0, temp&lt;br /&gt;
&lt;br /&gt;
        ldi     temp, (1&amp;lt;&amp;lt;TOIE0)      ; TOIE0: Interrupt bei Timer Overflow&lt;br /&gt;
        out     TIMSK, temp&lt;br /&gt;
&lt;br /&gt;
        sei&lt;br /&gt;
&lt;br /&gt;
loop:   rjmp    loop&lt;br /&gt;
&lt;br /&gt;
timer0_overflow:                      ; Timer 0 Overflow Handler&lt;br /&gt;
        out     PORTB, leds&lt;br /&gt;
        com     leds&lt;br /&gt;
        reti&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Programm beginnt mit der [[AVR-Tutorial:_Interrupts|Interrupt-Vektoren-Tabelle]]. Dort ist an der Adresse &amp;lt;i&amp;gt;OVF0Addr&amp;lt;/i&amp;gt; ein Sprung zur Marke &amp;lt;i&amp;gt;timer0_overflow&amp;lt;/i&amp;gt; eingetragen. Wenn also ein Overflow Interrupt vom Timer 0 auftritt, so wird dieser Interrupt durch den &#039;&#039;&#039;rjmp&#039;&#039;&#039; weitergeleitet an die Stelle &amp;lt;i&amp;gt;timer0_overflow&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das Hauptprogramm beginnt ganz normal mit der Belegung des Stackpointers. Danach wird der Port B auf Ausgang geschaltet, wir wollen hier wieder die LED anschliessen.&lt;br /&gt;
&lt;br /&gt;
Durch Beschreiben von TCCR0 mit dem Bitmuster 0b00000001, hier ausgedrückt durch (1&amp;lt;&amp;lt;CS00), wird der Vorteiler auf 1 gesetzt. Für die ersten Versuche empfiehlt es sich, das Programm mit dem AVR-Studio zunächst zu simulieren. Würden wir einen größeren Vorteiler benutzen, so müsste man ziemlich oft mittels F11 einen simulierten Schritt ausführen, um eine Änderung im Timerregister zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Die nächsten Anweisungen setzen im TIMSK Register das TOIE0 Bit. Sinn der Sache ist es, dem Timer zu erlauben, bei Erreichen eines Overflow einen Interrupt auszulösen.&lt;br /&gt;
&lt;br /&gt;
Zum Schluss noch die Interrupts generell mittels &#039;&#039;&#039;sei&#039;&#039;&#039; freigeben. Dieser Schritt ist obligatorisch. Im Mikrocontroller können viele Quellen einen Interrupt auslösen. Daraus folgt: Für jede mögliche Quelle muss festgelegt werden, ob sie einen Interrupt erzeugen darf oder nicht. Die Oberhoheit hat aber das globale Interrupt Flag. Mit ihm können alle Interrupts, egal von welcher Quelle sie kommen, unterdrückt werden.&lt;br /&gt;
&lt;br /&gt;
Damit ist die Initialisierung beendet und das Hauptprogramm kann sich schlafen legen. Die &#039;&#039;&#039;loop: rjmp loop&#039;&#039;&#039; Schleife macht genau dieses.&lt;br /&gt;
&lt;br /&gt;
Tritt nun ein Overflow am Timer auf, so wird über den Umweg über die Interrupt Vektor Tabelle der Programmteil &amp;lt;i&amp;gt;timer0_overflow&amp;lt;/i&amp;gt; angesprungen. Dieser gibt einfach nur den Inhalt des Registers leds am Port B aus. Danach wird das leds Register mit einer &#039;&#039;&#039;com&#039;&#039;&#039; Operation negiert, so dass aus allen 0 Bits eine 1 wird und umgekehrt. Die Overflow Behandlung ist damit beendet und mittels &#039;&#039;&#039;reti&#039;&#039;&#039; wird der Interrupt Handler wieder verlassen.&lt;br /&gt;
&lt;br /&gt;
==Simulation im AVR-Studio==&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich, den ganzen Vorgang im AVR-Studio simulieren zu lassen. Dazu am besten in der linken I/O View Ansicht die Einträge für PORTB und TIMER_COUNTER_0 öffnen. Wird mittels F11 durch das Programm gegangen, so sieht man, dass ab dem Moment, ab dem der Vorteiler auf 1 gesetzt wird, der Timer 0 im TCNT0 Register zu zählen anfängt. Mit jedem Druck auf F11 erhöht sich der Zählerstand. Irgendwann ist dann die Endlosschleife loop erreicht. Drücken Sie weiterhin F11 und beobachten sie, wie TCNT0 immer höher zählt, bis der Overflow erreicht wird. In dem Moment, in dem der Overflow erreicht wird, wird der Interrupt ausgelöst (hierfür muss für das Debuggen im AVR-Studio &amp;quot;Mask interrupts while stepping&amp;quot; deaktiviert sein, zu finden in Tools -&amp;gt; Options). Mit dem nächsten F11 landen sie in der Interrupt Vektor Tabelle und von dort geht es weiter zu timer_0_overflow. Weitere Tastendrücke von F11 erledigen dann die Ausgabe auf den Port B, das Invertieren des Registers r17 und der Interrupt ist damit behandelt. Nach dem &#039;&#039;&#039;reti&#039;&#039;&#039; macht der Microcontroller genau an der Stelle weiter, an der er vom Interrupt unterbrochen wurde. Und der Timer 0 hat in der Zwischenzeit weitergezählt! Nach exakt weiteren 256 Schritten, vom Auftreten des ersten Overflows an gerechnet, wird der nächste Overflow ausgelöst.&lt;br /&gt;
&lt;br /&gt;
==Wie schnell schaltet der Port?==&lt;br /&gt;
&lt;br /&gt;
Eine berechtigte Frage. Dazu müssen wir etwas rechnen. Keine Angst, es ist nicht schwer, und wer das Prinzip bisher verstanden hat, der sollte keine Schwierigkeiten haben, die Berechnung nachzuvollziehen.&lt;br /&gt;
&lt;br /&gt;
Der Quarzoszillator schwingt mit 4 MHz. Das heißt, in 1 Sekunde werden 4000000 Taktzyklen generiert. Durch die Wahl des Vorteilers von 1 bedeutet das auch, dass der Timer 4000000 mal in der Sekunde erhöht wird. Von einem Overflow zum nächsten muss der Timer 256 Zählvorgänge ausführen. Also werden in 1 Sekunde 4000000 / 256 = 15625 Overflows generiert. Bei jedem Overflow schalten wir die LEDs jeweils in den anderen Zustand. D.h die LEDs blinken mit einer Frequenz von 7812.5 Hz. Das ist zuviel als dass wir es noch sehen könnten.&lt;br /&gt;
&lt;br /&gt;
Was können wir also tun, um diese Blinkfrequenz zu verringern? Im Moment ist unsere einzige Einflussgröße der Vorteiler. Wie sieht die Rechnung aus, wenn wir einen Vorteiler von 1024 wählen?&lt;br /&gt;
&lt;br /&gt;
Wiederum: Der Systemtakt sei 4 MHz. Durch den Vorteiler von 1024 werden daraus 4000000 / 1024 = 3906.25 Pulse pro Sekunde für den Timer. Der zählt wiederum 256 Zustände von einem Overflow zum nächsten. 3906.25 / 256 = 15.2587. Und wiederum: Im Overflow werden die LEDs ja abwechselnd ein und ausgeschaltet, also dividieren wir noch durch 2: 15.2587 / 2 = 7.629. Also knapp 7 Hz. Diese Frequenz müsste man schon mit freiem Auge sehen. Die LEDs werden ziemlich schnell vor sich hin blinken.&lt;br /&gt;
&lt;br /&gt;
Reicht diese Verzögerung noch immer nicht, dann haben wir 2 Möglichkeiten:&lt;br /&gt;
* Entweder wir benutzen einen anderen Timer. Timer 1 beispielsweise ist ein 16 Bit Timer. Der Timer zählt also nicht von 0 bis 255 sondern von 0 bis 65535. Bei entsprechender Umarbeitung des Programms und einem Vorteiler von 1024 bedeutet das, dass die LEDs einen Ein/Aus Zyklus in 33 Sekunden absolvieren.&lt;br /&gt;
* Oder wir schalten die LEDs nicht bei jedem Timer Overflow um. Man könnte zum Beispiel in einem Register bis 7 zählen und nur dann, wenn dieses Register 7 erreicht hat, wird&lt;br /&gt;
** das Register wieder auf 0 gesetzt und&lt;br /&gt;
** die LEDs umgeschaltet.&lt;br /&gt;
&lt;br /&gt;
==Timer 0==&lt;br /&gt;
&lt;br /&gt;
Timer 0 ist ein 8 Bit Timer.&lt;br /&gt;
&lt;br /&gt;
* Overflow Interrupt&lt;br /&gt;
&lt;br /&gt;
===TCCR0===&lt;br /&gt;
====TCCR - Timer/Counter Control Register====&lt;br /&gt;
{{Byte |TCCR0 |      |      |      |      |      | CS02 | CS01 | CS00 }}&lt;br /&gt;
&lt;br /&gt;
====CS02/CS00 - Clock Select====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! CS02 || CS01 || CS00 || Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||keine (Der Timer ist angehalten)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 8&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 64&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 256&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1024&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T0, fallende Flanke&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T0, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===TIMSK===&lt;br /&gt;
====TIMSK - Timer/Counter Interrupt Mask Register====&lt;br /&gt;
&lt;br /&gt;
{{Byte|TIMSK|      |      |      |      |      |      | OCIE0 | TOIE0 }}&lt;br /&gt;
&lt;br /&gt;
====TOIE0 - Timer 0 Overflow Interrupt Enable====&lt;br /&gt;
Ist dieses Bit gesetzt, so wird beim Auftreten eines Overflows am Timer ein Interrupt ausgelöst.&lt;br /&gt;
&lt;br /&gt;
Anstatt der Schreibweise&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
        ldi     temp, 0b00000001      ; TOIE0: Interrupt bei Timer Overflow&lt;br /&gt;
        out     TIMSK, temp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ist es besser, die Schreibweise&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
        ldi     temp, 1 &amp;lt;&amp;lt; TOIE0&lt;br /&gt;
        out     TIMSK, temp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
zu wählen, da hier unmittelbar aus dem Ladekommando hervorgeht, welche Bedeutung das gesetzte Bit hat. Die vorher inkludierte m8def.inc definiert dazu alles Notwendige.&lt;br /&gt;
&lt;br /&gt;
==Timer 1==&lt;br /&gt;
&lt;br /&gt;
Timer 1 ist ein 16 Bit Timer&lt;br /&gt;
&lt;br /&gt;
* Overflow Interrupt&lt;br /&gt;
* Clear Timer on Compare Match&lt;br /&gt;
* Input Capture&lt;br /&gt;
* 2 Compare Einheiten&lt;br /&gt;
* div. PWM Modi&lt;br /&gt;
&lt;br /&gt;
===TCCR1B===&lt;br /&gt;
&lt;br /&gt;
{{Byte|TCCR1B| ICNC1| ICES1|      | WGM13| WGM12| CS12 | CS11 | CS10 }}&lt;br /&gt;
&lt;br /&gt;
====CS12/CS10 - Clock Select====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! CS12 || CS11 || CS10 || Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||keine (Der Timer ist angehalten)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 8&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 64&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 256&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1024&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T1, fallende Flanke&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T1, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====ICES1 - Input Capture Edge Select====&lt;br /&gt;
ICES1 = 0 , falling edge&lt;br /&gt;
ICES1 = 1 , rising edge&lt;br /&gt;
&lt;br /&gt;
====ICNC1 - Input Capture Noise Canceler====&lt;br /&gt;
&lt;br /&gt;
===TCCR1A===&lt;br /&gt;
&lt;br /&gt;
{{Byte|TCCR1A|COM1A1|COM1A0|COM1B1|COM1B0|FOC1A |FOC1B |WGM11 |WGM10 }}&lt;br /&gt;
&lt;br /&gt;
===OCR1A===&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===OCR1B===&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===ICR1===&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===TIMSK1===&lt;br /&gt;
{{Byte|TIMSK|      |      |TICIE1|OCIE1A|OCIE1B|TOIE1 |      |}}&lt;br /&gt;
&lt;br /&gt;
====TICIE1 - Timer 1 Input Capture Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
====OCIE1A - Timer 1 Output Compare A Match Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
====OCIE1B - Timer 1 Output Compare B Match Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
====TOIE1 - Timer 1 Overflow Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
==Timer 2==&lt;br /&gt;
Timer 2 ist ein 8 Bit Timer.&lt;br /&gt;
&lt;br /&gt;
* Overflow Interrupt&lt;br /&gt;
* Compare Match Interrupt&lt;br /&gt;
* Clear Timer on Compare Match&lt;br /&gt;
* Phasen korrekte PWM&lt;br /&gt;
&lt;br /&gt;
===TCCR2===&lt;br /&gt;
&lt;br /&gt;
{{Byte|TCCR2| FOC2 | WGM20| COM21| COM20| WGM21| CS22 | CS21 | CS20 }}&lt;br /&gt;
&lt;br /&gt;
====WGM21 - Waveform Generator Mode====&lt;br /&gt;
&lt;br /&gt;
Ist diese Option Aktiviert dann wird das Zählregister des Timers (TCNT2) wieder auf 0 gesetzt,&lt;br /&gt;
sobal das Register as Output Compare Register (OCR2) und TCNT2 übereinstimmen.&lt;br /&gt;
Zu beachten ist dabei das wenn das Register kleiner als 255 gestellt ist, wird&lt;br /&gt;
der Timer nicht mehr überschritten und der Interrupt für den Overflow (TIMER2_OVF_vect) nicht mehr ausgelöst.&lt;br /&gt;
Stattdessen gibt es den Interrupt für Compare Match (TIMER2_COMP_vect)&lt;br /&gt;
Die Frequenz für die Interruptauslösung lässt sich dann wie folgt berechnen:&lt;br /&gt;
ISR_Freq = F_CPU : ( Prescaler * ORC2 )&lt;br /&gt;
&lt;br /&gt;
====CS22/CS20 - Clock Select====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! CS22 || CS21 || CS20 || Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||keine (Der Timer ist angehalten)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 8&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 32&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 64&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 128&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 256&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===OCR2===&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===TIMSK2===&lt;br /&gt;
{{Byte|TIMSK| OCIE2| TOIE2|      |      |      |      |      |      }}&lt;br /&gt;
&lt;br /&gt;
====OCIE2 - Timer 2 Output Compare Interrupt Enable====&lt;br /&gt;
====TOIE2   Timer 2 Overflow Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
==Was geht noch mit einem Timer?==&lt;br /&gt;
&lt;br /&gt;
Timer sind sehr universelle Microcontroller-Bestandteile. Für weitergehende Studien ist es daher unerlässlich, das entsprechende Datenblatt des Microcontrollers zu studieren. Oft ist es z.&amp;amp;nbsp;B. möglich, dass der Timer bei Erreichen von bestimmten Zählerständen einen Ausgabe-Pin von sich aus ein-/aus-/umschaltet. Er erledigt dann das, was wir oben noch mit einem Interrupt gemacht haben, eigenständig komplett in Hardware. Bei einigen Timern ist es möglich, damit eine [[PWM]] (Pulsweiten-Modulation) aufzubauen.&lt;br /&gt;
&lt;br /&gt;
Ein paar der Timermodule lassen sich auch als Counter verwenden. Damit kann man z.&amp;amp;nbsp;B. die Anzahl externer Ereignisse wie Schaltvorgänge eines Inkrementalgebers bestimmen.&lt;br /&gt;
&lt;br /&gt;
Andere bieten die Möglichkeit, über einen externen Uhrenquarz getaktet zu werden (Anwendung z.&amp;amp;nbsp;B. eine &amp;quot;Echtzeituhr&amp;quot; oder als &amp;quot;Weckfunktion&amp;quot; aus einem Standby/Powerdownmodus).&lt;br /&gt;
&lt;br /&gt;
Durch geschickte Umprogrammierung in Echtzeit lässt sich mit einem Timer eine [[PLL]] aufbauen, die sich fortwährend auf einen Eingangstakt synchronisiert. Damit wird vermieden, dass der Controller ein Signal ständig abfragen (&amp;quot;pollen&amp;quot;) muss, sondern das Signal wird per Timer-Interrupt verarbeitet. Maßgeblich ist die Messung der aktuellen und Schätzung der kommenden Flanke mithilfe eines einstellbaren [[Taktteiler]]-Verhältnisses.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.uni-koblenz.de/~physik/informatik/MCU/Timer.pdf Timer/Counter und PWM beim ATMega16 Mikrocontroller] Proseminar von Marcel Jakobs, September 2006 (PDF)&lt;br /&gt;
* [http://frank.circleofcurrent.com/cache/avrtimercalc.htm AVR Timer Calculator]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Navigation_zurückhochvor|&lt;br /&gt;
zurücktext=Speicher|&lt;br /&gt;
zurücklink=AVR-Tutorial: Speicher|&lt;br /&gt;
hochtext=Inhaltsverzeichnis|&lt;br /&gt;
hochlink=AVR-Tutorial|&lt;br /&gt;
vortext=Uhr|&lt;br /&gt;
vorlink=AVR-Tutorial: Uhr}}&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Tutorial|Timer]]&lt;br /&gt;
[[Category:Timer und Uhren]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Timer&amp;diff=91342</id>
		<title>AVR-Tutorial: Timer</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR-Tutorial:_Timer&amp;diff=91342"/>
		<updated>2016-01-14T12:09:39Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Timer sind eines der Hauptarbeitspferde in unserem Mikrocontroller. Mit ihrer Hilfe ist es möglich, in regelmäßigen Zeitabständen Aktionen zu veranlassen. Aber Timer können noch mehr!&lt;br /&gt;
* Timer können mit einem externen Pin hochgezählt werden&lt;br /&gt;
* Es gibt Möglichkeiten, bei bestimmten Zählerständen einen Interrupt auslösen zu lassen&lt;br /&gt;
* Timer können aber auch völlig selbstständig Signale an einem Ausgabepin erzeugen&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Aber der Reihe nach und kurz zur Erinnerung: Die Beispiele passen zu einem ATmega8 und ggf. einer Reihe anderer AVR, können bei einigen Typen aber abweichen. &lt;br /&gt;
&lt;br /&gt;
==Was ist ein Timer?==&lt;br /&gt;
&lt;br /&gt;
Ein Timer ist im Grunde nichts anderes als ein bestimmtes Register im Mikrocontroller, das hardwaregesteuert fortlaufend um 1 erhöht (oder verringert) wird (statt &amp;lt;i&amp;gt;um 1 erhöhen&amp;lt;/i&amp;gt; sagt man auch &#039;&#039;&#039;inkrementieren&#039;&#039;&#039;, und das Gegenstück, &#039;&#039;&#039;dekrementieren&#039;&#039;&#039;, bedeutet &amp;lt;i&amp;gt;um 1 verringern&amp;lt;/i&amp;gt;). Anstatt also Befehle im Programm vorzusehen, die regelmäßig ausgeführt werden und ein Register inkrementieren, erledigt dies der Mikrocontroller ganz von alleine. Dazu ist es möglich, den Timer mit dem Systemtakt zu verbinden und so die Genauigkeit des Quarzes auszunutzen, um ein Register regelmäßig und vor allen Dingen unabhängig vom restlichen Programmfluss (!) hochzählen zu lassen.&lt;br /&gt;
&lt;br /&gt;
Davon alleine hätte man aber noch keinen großen Gewinn. Nützlich wird das Ganze erst dann, wenn man bei bestimmten Zählerständen eine Aktion ausführen lassen kann. Einer der &#039;bestimmten Zählerstände&#039; ist zum Beispiel der &#039;&#039;&#039;Overflow&#039;&#039;&#039;. Das Zählregister eines Timers kann natürlich nicht beliebig lange inkrementiert werden – z. B. ist der höchste Zählerstand, den ein 8-Bit-Timer erreichen kann, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt; – 1 = 255. Beim nächsten Inkrementierschritt tritt ein Überlauf (engl. Overflow) auf, der den Timerstand wieder zu 0 werden lässt. Und hier liegt der springende Punkt. Wir können uns nämlich an diesen Overflow &amp;quot;anhängen&amp;quot; und den Controller so konfigurieren, dass beim Auftreten des Timer-Overflows ein Interrupt ausgelöst wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die kann auch alles nochmal im Datenblatt von Atmel zu einigen ATMega Datenblättern nachgelesen werden: http://www.atmel.com/Images/doc8161.pdf&lt;br /&gt;
&lt;br /&gt;
==Der Vorteiler (Prescaler)==&lt;br /&gt;
&lt;br /&gt;
Wenn also der Quarzoszillator mit 4 MHz schwingt, dann würde auch der Timer 4 Millionen mal in der Sekunde erhöht werden. Da der Timer jedes Mal von 0 bis 255 zählt, bevor ein Overflow auftritt, heißt das auch, dass in einer Sekunde 4000000 / 256 = 15625 Overflows vorkommen. Ganz schön schnell! Nur: Oft ist das nicht sinnvoll. Um diese Raten zu verzögern, gibt es den Vorteiler, oder auf Englisch, Prescaler. Er kann z.B. auf die Werte 1, 8, 64, 256 oder 1024 eingestellt werden, je nach Timer (Bitte Datenblatt konsultieren!). Seine Aufgabe ist es, den Systemtakt um den angegebenen Faktor zu teilen. Steht der Vorteiler also auf 1024, so wird nur bei jedem 1024-ten Impuls vom Systemtakt das Timerregister um 1 erhöht. Entsprechend weniger häufig kommen dann natürlich die Overflows. Der Systemtakt sei wieder 4000000. Dann wird der Timer in 1 Sekunde 4000000 / 1024 = 3906,25 mal erhöht. Da der Timer wieder jedesmal bis 255 zählen muss bis ein Overflow auftritt, bedeutet dies, dass in 1 Sekunde 3906,25 / 256 = 15,25 Overflows auftreten.&lt;br /&gt;
&lt;br /&gt;
Systemtakt: 4Mhz&lt;br /&gt;
&lt;br /&gt;
  Vorteiler    Overflows/Sekunde      Zeit zwischen&lt;br /&gt;
                                      2 Overflows [s]&lt;br /&gt;
&lt;br /&gt;
      1            15625                0.000064  =  64 µs&lt;br /&gt;
      8             1953.125            0.000512  = 512 µs&lt;br /&gt;
     64              244.1406           0.004096  ≈   4,1 ms&lt;br /&gt;
    256               61.0351           0.016384  ≈  16,4 ms&lt;br /&gt;
   1024               15.2587           0.065536  ≈  65,5 ms&lt;br /&gt;
&lt;br /&gt;
Die Zeit (in Sekunden) zwischen 2 Overflows lässt sich sehr leicht berechnen:&lt;br /&gt;
&amp;lt;math&amp;gt;t=\frac{2^\text{Bit des Timers} \cdot \text{Vorteiler}}{\text{Systemtakt in Hz}}&amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
==Erste Tests==&lt;br /&gt;
&lt;br /&gt;
Ein Programm, das einen Timer Overflow in Aktion zeigt, könnte z.&amp;amp;nbsp;B. so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
.include &amp;quot;m8def.inc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.def temp = r16&lt;br /&gt;
.def leds = r17&lt;br /&gt;
&lt;br /&gt;
.org 0x0000&lt;br /&gt;
        rjmp    main                  ; Reset Handler&lt;br /&gt;
.org OVF0addr&lt;br /&gt;
        rjmp    timer0_overflow       ; Timer Overflow Handler&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
        ; Stackpointer initialisieren&lt;br /&gt;
        ldi     temp, HIGH(RAMEND)&lt;br /&gt;
        out     SPH, temp&lt;br /&gt;
        ldi     temp, LOW(RAMEND)     &lt;br /&gt;
        out     SPL, temp&lt;br /&gt;
	&lt;br /&gt;
        ldi     temp, 0xFF            ; Port B auf Ausgang&lt;br /&gt;
        out     DDRB, temp&lt;br /&gt;
&lt;br /&gt;
        ldi     leds, 0xFF&lt;br /&gt;
&lt;br /&gt;
        ldi     temp, (1&amp;lt;&amp;lt;CS00)       ; CS00 setzen: Teiler 1&lt;br /&gt;
        out     TCCR0, temp&lt;br /&gt;
&lt;br /&gt;
        ldi     temp, (1&amp;lt;&amp;lt;TOIE0)      ; TOIE0: Interrupt bei Timer Overflow&lt;br /&gt;
        out     TIMSK, temp&lt;br /&gt;
&lt;br /&gt;
        sei&lt;br /&gt;
&lt;br /&gt;
loop:   rjmp    loop&lt;br /&gt;
&lt;br /&gt;
timer0_overflow:                      ; Timer 0 Overflow Handler&lt;br /&gt;
        out     PORTB, leds&lt;br /&gt;
        com     leds&lt;br /&gt;
        reti&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Programm beginnt mit der [[AVR-Tutorial:_Interrupts|Interrupt-Vektoren-Tabelle]]. Dort ist an der Adresse &amp;lt;i&amp;gt;OVF0Addr&amp;lt;/i&amp;gt; ein Sprung zur Marke &amp;lt;i&amp;gt;timer0_overflow&amp;lt;/i&amp;gt; eingetragen. Wenn also ein Overflow Interrupt vom Timer 0 auftritt, so wird dieser Interrupt durch den &#039;&#039;&#039;rjmp&#039;&#039;&#039; weitergeleitet an die Stelle &amp;lt;i&amp;gt;timer0_overflow&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das Hauptprogramm beginnt ganz normal mit der Belegung des Stackpointers. Danach wird der Port B auf Ausgang geschaltet, wir wollen hier wieder die LED anschliessen.&lt;br /&gt;
&lt;br /&gt;
Durch Beschreiben von TCCR0 mit dem Bitmuster 0b00000001, hier ausgedrückt durch (1&amp;lt;&amp;lt;CS00), wird der Vorteiler auf 1 gesetzt. Für die ersten Versuche empfiehlt es sich, das Programm mit dem AVR-Studio zunächst zu simulieren. Würden wir einen größeren Vorteiler benutzen, so müsste man ziemlich oft mittels F11 einen simulierten Schritt ausführen, um eine Änderung im Timerregister zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Die nächsten Anweisungen setzen im TIMSK Register das TOIE0 Bit. Sinn der Sache ist es, dem Timer zu erlauben, bei Erreichen eines Overflow einen Interrupt auszulösen.&lt;br /&gt;
&lt;br /&gt;
Zum Schluss noch die Interrupts generell mittels &#039;&#039;&#039;sei&#039;&#039;&#039; freigeben. Dieser Schritt ist obligatorisch. Im Mikrocontroller können viele Quellen einen Interrupt auslösen. Daraus folgt: Für jede mögliche Quelle muss festgelegt werden, ob sie einen Interrupt erzeugen darf oder nicht. Die Oberhoheit hat aber das globale Interrupt Flag. Mit ihm können alle Interrupts, egal von welcher Quelle sie kommen, unterdrückt werden.&lt;br /&gt;
&lt;br /&gt;
Damit ist die Initialisierung beendet und das Hauptprogramm kann sich schlafen legen. Die &#039;&#039;&#039;loop: rjmp loop&#039;&#039;&#039; Schleife macht genau dieses.&lt;br /&gt;
&lt;br /&gt;
Tritt nun ein Overflow am Timer auf, so wird über den Umweg über die Interrupt Vektor Tabelle der Programmteil &amp;lt;i&amp;gt;timer0_overflow&amp;lt;/i&amp;gt; angesprungen. Dieser gibt einfach nur den Inhalt des Registers leds am Port B aus. Danach wird das leds Register mit einer &#039;&#039;&#039;com&#039;&#039;&#039; Operation negiert, so dass aus allen 0 Bits eine 1 wird und umgekehrt. Die Overflow Behandlung ist damit beendet und mittels &#039;&#039;&#039;reti&#039;&#039;&#039; wird der Interrupt Handler wieder verlassen.&lt;br /&gt;
&lt;br /&gt;
==Simulation im AVR-Studio==&lt;br /&gt;
&lt;br /&gt;
Es lohnt sich, den ganzen Vorgang im AVR-Studio simulieren zu lassen. Dazu am besten in der linken I/O View Ansicht die Einträge für PORTB und TIMER_COUNTER_0 öffnen. Wird mittels F11 durch das Programm gegangen, so sieht man, dass ab dem Moment, ab dem der Vorteiler auf 1 gesetzt wird, der Timer 0 im TCNT0 Register zu zählen anfängt. Mit jedem Druck auf F11 erhöht sich der Zählerstand. Irgendwann ist dann die Endlosschleife loop erreicht. Drücken Sie weiterhin F11 und beobachten sie, wie TCNT0 immer höher zählt, bis der Overflow erreicht wird. In dem Moment, in dem der Overflow erreicht wird, wird der Interrupt ausgelöst (hierfür muss für das Debuggen im AVR-Studio &amp;quot;Mask interrupts while stepping&amp;quot; deaktiviert sein, zu finden in Tools -&amp;gt; Options). Mit dem nächsten F11 landen sie in der Interrupt Vektor Tabelle und von dort geht es weiter zu timer_0_overflow. Weitere Tastendrücke von F11 erledigen dann die Ausgabe auf den Port B, das Invertieren des Registers r17 und der Interrupt ist damit behandelt. Nach dem &#039;&#039;&#039;reti&#039;&#039;&#039; macht der Microcontroller genau an der Stelle weiter, an der er vom Interrupt unterbrochen wurde. Und der Timer 0 hat in der Zwischenzeit weitergezählt! Nach exakt weiteren 256 Schritten, vom Auftreten des ersten Overflows an gerechnet, wird der nächste Overflow ausgelöst.&lt;br /&gt;
&lt;br /&gt;
==Wie schnell schaltet der Port?==&lt;br /&gt;
&lt;br /&gt;
Eine berechtigte Frage. Dazu müssen wir etwas rechnen. Keine Angst, es ist nicht schwer, und wer das Prinzip bisher verstanden hat, der sollte keine Schwierigkeiten haben, die Berechnung nachzuvollziehen.&lt;br /&gt;
&lt;br /&gt;
Der Quarzoszillator schwingt mit 4 MHz. Das heißt, in 1 Sekunde werden 4000000 Taktzyklen generiert. Durch die Wahl des Vorteilers von 1 bedeutet das auch, dass der Timer 4000000 mal in der Sekunde erhöht wird. Von einem Overflow zum nächsten muss der Timer 256 Zählvorgänge ausführen. Also werden in 1 Sekunde 4000000 / 256 = 15625 Overflows generiert. Bei jedem Overflow schalten wir die LEDs jeweils in den anderen Zustand. D.h die LEDs blinken mit einer Frequenz von 7812.5 Hz. Das ist zuviel als dass wir es noch sehen könnten.&lt;br /&gt;
&lt;br /&gt;
Was können wir also tun, um diese Blinkfrequenz zu verringern? Im Moment ist unsere einzige Einflussgröße der Vorteiler. Wie sieht die Rechnung aus, wenn wir einen Vorteiler von 1024 wählen?&lt;br /&gt;
&lt;br /&gt;
Wiederum: Der Systemtakt sei 4 MHz. Durch den Vorteiler von 1024 werden daraus 4000000 / 1024 = 3906.25 Pulse pro Sekunde für den Timer. Der zählt wiederum 256 Zustände von einem Overflow zum nächsten. 3906.25 / 256 = 15.2587. Und wiederum: Im Overflow werden die LEDs ja abwechselnd ein und ausgeschaltet, also dividieren wir noch durch 2: 15.2587 / 2 = 7.629. Also knapp 7 Hz. Diese Frequenz müsste man schon mit freiem Auge sehen. Die LEDs werden ziemlich schnell vor sich hin blinken.&lt;br /&gt;
&lt;br /&gt;
Reicht diese Verzögerung noch immer nicht, dann haben wir 2 Möglichkeiten:&lt;br /&gt;
* Entweder wir benutzen einen anderen Timer. Timer 1 beispielsweise ist ein 16 Bit Timer. Der Timer zählt also nicht von 0 bis 255 sondern von 0 bis 65535. Bei entsprechender Umarbeitung des Programms und einem Vorteiler von 1024 bedeutet das, dass die LEDs einen Ein/Aus Zyklus in 33 Sekunden absolvieren.&lt;br /&gt;
* Oder wir schalten die LEDs nicht bei jedem Timer Overflow um. Man könnte zum Beispiel in einem Register bis 7 zählen und nur dann, wenn dieses Register 7 erreicht hat, wird&lt;br /&gt;
** das Register wieder auf 0 gesetzt und&lt;br /&gt;
** die LEDs umgeschaltet.&lt;br /&gt;
&lt;br /&gt;
==Timer 0==&lt;br /&gt;
&lt;br /&gt;
Timer 0 ist ein 8 Bit Timer.&lt;br /&gt;
&lt;br /&gt;
* Overflow Interrupt&lt;br /&gt;
&lt;br /&gt;
===TCCR0===&lt;br /&gt;
====TCCR - Timer/Counter Control Register====&lt;br /&gt;
{{Byte |TCCR0 |      |      |      |      |      | CS02 | CS01 | CS00 }}&lt;br /&gt;
&lt;br /&gt;
====CS02/CS00 - Clock Select====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! CS02 || CS01 || CS00 || Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||keine (Der Timer ist angehalten)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|9&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 8&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 64&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 256&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1024&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T0, fallende Flanke&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T0, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===TIMSK===&lt;br /&gt;
====TIMSK - Timer/Counter Interrupt Mask Register====&lt;br /&gt;
&lt;br /&gt;
{{Byte|TIMSK|      |      |      |      |      |      | OCIE0 | TOIE0 }}&lt;br /&gt;
&lt;br /&gt;
====TOIE0 - Timer 0 Overflow Interrupt Enable====&lt;br /&gt;
Ist dieses Bit gesetzt, so wird beim Auftreten eines Overflows am Timer ein Interrupt ausgelöst.&lt;br /&gt;
&lt;br /&gt;
Anstatt der Schreibweise&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
        ldi     temp, 0b00000001      ; TOIE0: Interrupt bei Timer Overflow&lt;br /&gt;
        out     TIMSK, temp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ist es besser, die Schreibweise&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;avrasm&amp;quot;&amp;gt; &lt;br /&gt;
        ldi     temp, 1 &amp;lt;&amp;lt; TOIE0&lt;br /&gt;
        out     TIMSK, temp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
zu wählen, da hier unmittelbar aus dem Ladekommando hervorgeht, welche Bedeutung das gesetzte Bit hat. Die vorher inkludierte m8def.inc definiert dazu alles Notwendige.&lt;br /&gt;
&lt;br /&gt;
==Timer 1==&lt;br /&gt;
&lt;br /&gt;
Timer 1 ist ein 16 Bit Timer&lt;br /&gt;
&lt;br /&gt;
* Overflow Interrupt&lt;br /&gt;
* Clear Timer on Compare Match&lt;br /&gt;
* Input Capture&lt;br /&gt;
* 2 Compare Einheiten&lt;br /&gt;
* div. PWM Modi&lt;br /&gt;
&lt;br /&gt;
===TCCR1B===&lt;br /&gt;
&lt;br /&gt;
{{Byte|TCCR1B| ICNC1| ICES1|      | WGM13| WGM12| CS12 | CS11 | CS10 }}&lt;br /&gt;
&lt;br /&gt;
====CS12/CS10 - Clock Select====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! CS12 || CS11 || CS10 || Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||keine (Der Timer ist angehalten)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 8&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 64&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 256&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1024&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T1, fallende Flanke&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: Externer Takt vom Pin T1, steigende Flanke&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====ICES1 - Input Capture Edge Select====&lt;br /&gt;
ICES1 = 0 , falling edge&lt;br /&gt;
ICES1 = 1 , rising edge&lt;br /&gt;
&lt;br /&gt;
====ICNC1 - Input Capture Noise Canceler====&lt;br /&gt;
&lt;br /&gt;
===TCCR1A===&lt;br /&gt;
&lt;br /&gt;
{{Byte|TCCR1A|COM1A1|COM1A0|COM1B1|COM1B0|FOC1A |FOC1B |WGM11 |WGM10 }}&lt;br /&gt;
&lt;br /&gt;
===OCR1A===&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===OCR1B===&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===ICR1===&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===TIMSK1===&lt;br /&gt;
{{Byte|TIMSK|      |      |TICIE1|OCIE1A|OCIE1B|TOIE1 |      |}}&lt;br /&gt;
&lt;br /&gt;
====TICIE1 - Timer 1 Input Capture Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
====OCIE1A - Timer 1 Output Compare A Match Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
====OCIE1B - Timer 1 Output Compare B Match Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
====TOIE1 - Timer 1 Overflow Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
==Timer 2==&lt;br /&gt;
Timer 2 ist ein 8 Bit Timer.&lt;br /&gt;
&lt;br /&gt;
* Overflow Interrupt&lt;br /&gt;
* Compare Match Interrupt&lt;br /&gt;
* Clear Timer on Compare Match&lt;br /&gt;
* Phasen korrekte PWM&lt;br /&gt;
&lt;br /&gt;
===TCCR2===&lt;br /&gt;
&lt;br /&gt;
{{Byte|TCCR2| FOC2 | WGM20| COM21| COM20| WGM21| CS22 | CS21 | CS20 }}&lt;br /&gt;
&lt;br /&gt;
====WGM21 - Waveform Generator Mode====&lt;br /&gt;
&lt;br /&gt;
Ist diese Option Aktiviert dann wird das Zählregister des Timers (TCNT2) wieder auf 0 gesetzt,&lt;br /&gt;
sobal das Register as Output Compare Register (OCR2) und TCNT2 übereinstimmen.&lt;br /&gt;
Zu beachten ist dabei das wenn das Register kleiner als 255 gestellt ist, wird&lt;br /&gt;
der Timer nicht mehr überschritten und der Interrupt für den Overflow (TIMER2_OVF_vect) nicht mehr ausgelöst.&lt;br /&gt;
Stattdessen gibt es den Interrupt für Compare Match (TIMER2_COMP_vect)&lt;br /&gt;
Die Frequenz für die Interruptauslösung lässt sich dann wie folgt berechnen:&lt;br /&gt;
ISR_Freq = F_CPU : ( Prescaler * ORC2 )&lt;br /&gt;
&lt;br /&gt;
====CS22/CS20 - Clock Select====&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}}&lt;br /&gt;
|-  style=&amp;quot;background-color:#ffddcc&amp;quot;&lt;br /&gt;
! CS22 || CS21 || CS20 || Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||keine (Der Timer ist angehalten)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 8&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 32&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 64&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 128&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0&lt;br /&gt;
||Vorteiler: 256&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
||Vorteiler: 1024&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===OCR2===&lt;br /&gt;
&lt;br /&gt;
{{Byte||&amp;amp;nbsp;|||||||}}&lt;br /&gt;
&lt;br /&gt;
===TIMSK2===&lt;br /&gt;
{{Byte|TIMSK| OCIE2| TOIE2|      |      |      |      |      |      }}&lt;br /&gt;
&lt;br /&gt;
====OCIE2 - Timer 2 Output Compare Interrupt Enable====&lt;br /&gt;
====TOIE2   Timer 2 Overflow Interrupt Enable====&lt;br /&gt;
&lt;br /&gt;
==Was geht noch mit einem Timer?==&lt;br /&gt;
&lt;br /&gt;
Timer sind sehr universelle Microcontroller-Bestandteile. Für weitergehende Studien ist es daher unerlässlich, das entsprechende Datenblatt des Microcontrollers zu studieren. Oft ist es z.&amp;amp;nbsp;B. möglich, dass der Timer bei Erreichen von bestimmten Zählerständen einen Ausgabe-Pin von sich aus ein-/aus-/umschaltet. Er erledigt dann das, was wir oben noch mit einem Interrupt gemacht haben, eigenständig komplett in Hardware. Bei einigen Timern ist es möglich, damit eine [[PWM]] (Pulsweiten-Modulation) aufzubauen.&lt;br /&gt;
&lt;br /&gt;
Ein paar der Timermodule lassen sich auch als Counter verwenden. Damit kann man z.&amp;amp;nbsp;B. die Anzahl externer Ereignisse wie Schaltvorgänge eines Inkrementalgebers bestimmen.&lt;br /&gt;
&lt;br /&gt;
Andere bieten die Möglichkeit, über einen externen Uhrenquarz getaktet zu werden (Anwendung z.&amp;amp;nbsp;B. eine &amp;quot;Echtzeituhr&amp;quot; oder als &amp;quot;Weckfunktion&amp;quot; aus einem Standby/Powerdownmodus).&lt;br /&gt;
&lt;br /&gt;
Durch geschickte Umprogrammierung in Echtzeit lässt sich mit einem Timer eine [[PLL]] aufbauen, die sich fortwährend auf einen Eingangstakt synchronisiert. Damit wird vermieden, dass der Controller ein Signal ständig abfragen (&amp;quot;pollen&amp;quot;) muss, sondern das Signal wird per Timer-Interrupt verarbeitet. Maßgeblich ist die Messung der aktuellen und Schätzung der kommenden Flanke mithilfe eines einstellbaren [[Taktteiler]]-Verhältnisses.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.uni-koblenz.de/~physik/informatik/MCU/Timer.pdf Timer/Counter und PWM beim ATMega16 Mikrocontroller] Proseminar von Marcel Jakobs, September 2006 (PDF)&lt;br /&gt;
* [http://frank.circleofcurrent.com/cache/avrtimercalc.htm AVR Timer Calculator]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Navigation_zurückhochvor|&lt;br /&gt;
zurücktext=Speicher|&lt;br /&gt;
zurücklink=AVR-Tutorial: Speicher|&lt;br /&gt;
hochtext=Inhaltsverzeichnis|&lt;br /&gt;
hochlink=AVR-Tutorial|&lt;br /&gt;
vortext=Uhr|&lt;br /&gt;
vorlink=AVR-Tutorial: Uhr}}&lt;br /&gt;
&lt;br /&gt;
[[Category:AVR-Tutorial|Timer]]&lt;br /&gt;
[[Category:Timer und Uhren]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Royer_Converter&amp;diff=90349</id>
		<title>Royer Converter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Royer_Converter&amp;diff=90349"/>
		<updated>2015-11-18T09:47:35Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Ein praktisches Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein Royer-Converter ist ein Sinus-Leistungsoszillator. Er wird im Wesentlichen als Schaltnetzteil verwendet.&lt;br /&gt;
&lt;br /&gt;
== Geschichtliches ==&lt;br /&gt;
&lt;br /&gt;
Der Name geht auf George Howard Royer zurück, welcher diese Schaltung im Jahr 1954 entwickelte (siehe US-Patent [http://www.google.com/patents/US2783384 2783384]). Die originale Schaltung arbeitet mit einem [http://de.wikipedia.org/wiki/Trafo Trafo] mit [http://de.wikipedia.org/wiki/Ferrite Ferritkern], welcher zum Umschalten in die Sättigung getrieben wird. Das Ausgangssignal ist rechteckförmig. Die hier vorgestellte Version, die auf Peter James Baxandall zurückgeht (siehe IEE-Paper [http://sophia-elektronica.com/0344_001_Baxandal.pdf Transistor Sine-Wave LC Oscillators], 1959), arbeitet jedoch mit einem Trafo, welcher nicht in die Sättigung geht und mittels LC-[http://de.wikipedia.org/wiki/Schwingkreis Schwingkreis] ein Sinussignal erzeugt. Der Trafo kann sogar als Luftspule ohne Kern ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
Der Aufbau ist sehr einfach und robust. Zwei Transistoren ([[FET|MOSFETs]] oder [[Transistor|Bipolar]]) werden wechselseitig geschaltet (Gegentaktbetrieb, engl. push pull), und damit abwechselnd die eine und die andere Spulenhälfte der Primärwicklung von Strom durchflossen. Die Schaltung ist selbstschwingend, d.h. das Steuersignal wird direkt aus dem Trafo zurückgewonnen. Damit schwingt sie immer optimal auf Resonanz, ohne Abgleich von Bauteiltoleranzen und auch bei Alterung oder Temperaturänderung. Allerdings ändert sich damit die Frequenz des [[Schwingkreis]]es und damit geringfügig die Effizienz. Die Frequenz wird durch die Induktivität der Primärwicklung und den Kondensator C2 bestimmt (Parallelschwingkreis). Die Drosselspule L1 sorgt dafür, dass die Betriebsspannung wechselspannungsmäßig von der Mittelanzapfung von TR1 entkoppelt wird, sie wirkt als [[Konstantstromquelle]].&lt;br /&gt;
&lt;br /&gt;
[[bild:royer_bipolar.png | thumb | 670px | left | Schaltplan des Royer Converters]]&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
*Einfacher, robuster Aufbau&lt;br /&gt;
*Sinusförmige Strom- und Spannungsverläufe&lt;br /&gt;
*Transistoren schalten im Nulldurchgang der Spannung, dadurch geringe Schaltverluste und Störstrahlung&lt;br /&gt;
*Bei ausreichend großer Streuinduktivität zwischen Primär- und Sekundärwicklung ist die Schaltung kurzschlussfest.&lt;br /&gt;
*Vollkommen unempfindlich gegenüber Streuinduktivitäten des Trafos (im Gegensatz zu den meisten anderen Schaltnetzteiltopologien)&lt;br /&gt;
&lt;br /&gt;
Besonders der letzte Punkt ist sehr interessant. Auf Grund des Aufbaus und der Funktion wird sämtliche Energie im Magnetfeld, welche nicht über die Sekundärspule ausgekoppelt wird, wieder in den Schwingkreis zurückgeführt. Damit geht nur sehr wenig Energie verloren, egal wie gut die Kopplung zwischen Sekundär- und Primärspule ist.&lt;br /&gt;
&lt;br /&gt;
Der Trafo TR1 kann sehr verschieden aufgebaut sein. In einem Inverter für [http://de.wikipedia.org/wiki/Leuchtr%C3%B6hre CCFLs] ist es ein normaler Trafo mit Ferritkern. In anderen Anwendungen kann es aber auch ein kernloser Trafo sein, bei dem es zwischen Primärspule und Sekundärspule einen großen Abstand gibt ([http://de.wikipedia.org/wiki/Induktive_%C3%9Cbertragung Kontaktlose Energieübertragung]).&lt;br /&gt;
&lt;br /&gt;
== Ein praktisches Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Auf Grund der Unempfindlichkeit der Schaltung gegenüber Streuinduktivitäten ist diese Schaltung ideal für einen Trafo ohne Kern und mit grossem Abstand zwischen Primär- und Sekundärspule. Damit kann kontaktlos recht viel Energie übertragen werden. Anwendungen sind z.&amp;amp;nbsp;B. die Ladestation elektrischer Zahnbürsten oder ein Rotationstrafo für eine [http://www.google.de/cse?q=propelleruhr Propelleruhr]. Für Letzteres soll dieses Beispiel hier dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
Die Schaltung benutzt einfach beschaffbare Bauteile. Der Trafo wird selber gewickelt, ist aber auch vollkommen unkritisch. Wie im Bild zu sehen, wurde absichtlich ein recht grosser Luftspalt zwischen Primär- und Sekundärspule gelassen, um die Leistungsfähigkeit der Schaltung zu demonstrieren. Die Primärwicklung ist [http://de.wikipedia.org/wiki/Bifilar bifilar] gewickelt, d.h. man nimmt den Draht doppelt und wickelt damit gleichzeitig beide Spulenhälften, das geschlossene Ende trennt man danach auf und verschaltet phasenrichtig. Es entstehen zwei verschachtelte Wicklungen (engl. interleaved windings), dadurch verbessert sich die Kopplung. Der Trafo hat folgende Parameter.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Wickeldaten&#039;&#039;&#039; &lt;br /&gt;
|- &lt;br /&gt;
! Wicklung       || Windungszahl || Drahtdurchmesser [mm] || Durchmesser [mm] || Induktivität [µH]&lt;br /&gt;
|-&lt;br /&gt;
| Primär         || 2x10           || 0,55   || 80 || 70&lt;br /&gt;
|-&lt;br /&gt;
| Steuer         || 1              || 0,2    || 80 || ---&lt;br /&gt;
|-&lt;br /&gt;
| Sekundär       || 13             || 0,55   || 65 || 23&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Stückliste&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Bauteil || Wert || Reichelt Bestellnummer&lt;br /&gt;
|-&lt;br /&gt;
| T1, T2  || BC337 || [http://www.reichelt.de/?;ARTICLE=4986; 337-25] &lt;br /&gt;
|-&lt;br /&gt;
| L1 || 330µH; 0,5A|| [http://www.reichelt.de/?ARTICLE=1123; 09P 330µ]&lt;br /&gt;
|-&lt;br /&gt;
| C1 || 100µF, 25V|| [http://www.reichelt.de/?ARTICLE=15102; RAD 100/25]&lt;br /&gt;
|-&lt;br /&gt;
| C2 || 33nF, 100V|| [http://www.reichelt.de/?ARTICLE=31975; MKP-10-630 33N]&lt;br /&gt;
|-&lt;br /&gt;
| C3 || 6,8µF, 50V|| [http://www.reichelt.de/?ARTICLE=31926; MKS-2 6,8µ]&lt;br /&gt;
|-&lt;br /&gt;
| R1 || 2k2, 1/4W|| [http://www.reichelt.de/?ARTICLE=11586; METALL 2,21K]&lt;br /&gt;
|-&lt;br /&gt;
| R2 || 22R, 5W|| [http://www.reichelt.de/?ARTICLE=2611; 5W AXIAL 22]&lt;br /&gt;
|-&lt;br /&gt;
| D1-4 || 1N5818|| [http://www.reichelt.de/?ARTICLE=41849; 1N 5818]&lt;br /&gt;
|-&lt;br /&gt;
| TR1 || CuL, 0,5mm || [http://www.reichelt.de/?;ARTICLE=57182 CUL 100/0,50] &lt;br /&gt;
|}&lt;br /&gt;
[[bild:royer_prop_aufbau.jpg | thumb | 640px | left | Praktischer Aufbau]]&lt;br /&gt;
{{Clear}}&lt;br /&gt;
Mit 12V Eingangsspannung beträgt die Spannung im Primärkreis ziemlich genau 38Vpp. Der Leerlaufstrom der Schaltung beträgt 36mA. ABER! Der Leerlaufstrom im Schwingkreis beträgt 583mA(eff), die Scheinleistung 15,7VA! Hier wird klar, warum sowohl die Primärspule als auch C2 sehr verlustarm sein müssen. Die Resonanzfrequenz beträgt 104.7 kHz. Damit wurden folgende Messwerte erreicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
!Belastung	|| Eingangsstrom&amp;lt;br&amp;gt;[mA] || Ausgangsstrom&amp;lt;br&amp;gt;[mA]	|| Ausgangsspannung&amp;lt;br&amp;gt;[Veff] || Ausgangsleistung&amp;lt;br&amp;gt;[W] || Wirkungsgrad&amp;lt;br&amp;gt;[%]&lt;br /&gt;
|-&lt;br /&gt;
| Leerlauf               || 36  || 	0  || 7,8 || 0 ||  0&lt;br /&gt;
|-&lt;br /&gt;
| 22 &amp;amp;Omega;                  || 220	|| 320	|| 7	|| 2,2 || 84&lt;br /&gt;
|-&lt;br /&gt;
| Gleichrichter + 22 &amp;amp;Omega; || 190	|| 270	|| 6	|| 1,6 || 71&lt;br /&gt;
|-&lt;br /&gt;
| 10 &amp;amp;Omega;                || 250 || 490  || 4,9  || 2,4 || 80&lt;br /&gt;
|-&lt;br /&gt;
| Kurzschluß             || 60  || 650  || 0    || 0 || 0&lt;br /&gt;
|}&lt;br /&gt;
Nach Gleichrichtung mit schnellen Schottkydioden und Filterung bleiben bei 22Ω Last noch ca. 6V Gleichspannung übrig, genug um mit einem Low Drop Spannungsregler stabile 5V für einen Mikrocontroller bereitzustellen. Selbst bei der recht hohen Ausgangsleistung bleiben alle Bauteile kühl. Dabei werden nur recht kleine Transistoren verwendet. Das zeigt umso mehr die Leistungsfähigkeit der Schaltung. Bei optimaler Leistungsanpassung mit 10 &amp;amp;Omega; Last kann man 2,4W aus dem Trafo entnehmen. Diese Leistung wird vor allem durch den recht geringen Koppelfaktor von nur 0,45 begrenzt. Dieser kommt allerdings dem Kurzschlussfall zu gute, hier beträgt die Stromaufnahme der Schaltung nur 60mA, die Resonanzfrequenz steigt nur mässig auf 123kHz. Prinzipiell ist diese Schaltung bis in den Bereich von mehreren kW Leistung skalierbar.&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
&lt;br /&gt;
* Beim ersten Einschalten unbedingt die &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;Strombegrenzung&amp;lt;/span&amp;gt; am Netzteil einstellen! Für die Beispielschaltung reichen 100mA.&lt;br /&gt;
*Schwingt die Schaltung nicht an, ist in den meisten Fällen die Steuerwicklung verpolt.&lt;br /&gt;
* Manchmal ist auch die Primärwicklung falsch angeschlossen. Beim [http://de.wikipedia.org/wiki/Bifilar bifilaren] Wickeln muss man das geschlossene Ende aufschneiden und das linke Ende der nun entstandenen Teilwicklung mit dem rechten Ende der zweiten Teilwicklung zur [http://www.mikrocontroller.net/topic/152785#1605883 Mittelanzapfung] verbinden.&lt;br /&gt;
*Der Kondensator C2 wird auch im Leerlauf von einem recht hohen Strom durchflossen. Deshalb muss hier auf jeden Fall ein verlustarmer Typ eingesetzt werden. Entweder ein [http://de.wikipedia.org/wiki/Folienkondensator Folienkondensator] mit Polypropylen als Dielektrikum (MKP oder FKP) oder ein [http://de.wikipedia.org/wiki/Keramikkondensator Keramikkondensator] aus C0G oder NP0. Andere Typen (Folie MKS, Keramik X7R, Z5U etc.) gehen &#039;&#039;&#039;nicht&#039;&#039;&#039;, denn hier werden zu hohe dielektrische Veluste im Kondensator erzeugt, welche diesen erhitzen und irgendwann zerstören. Die Verluste von X7R sind ca. 20mal höher als von NP0!&lt;br /&gt;
*Die Transistoren sollten nur mässig überdimensioniert sein, denn Transistoren mit sehr hohen Kollektorströmen sind meist auch recht langsam.&lt;br /&gt;
*Die Transistoren müssen mindestens eine Sperrspannung von &amp;lt;math&amp;gt;\pi \cdot U_{ein}&amp;lt;/math&amp;gt; aushalten, denn das ist die exakte Amplitude der Schwingung im Primärkreis. Praktisch sollte man aber mindestens 20% und mehr Reserve einplanen.&lt;br /&gt;
*Der [[Basiswiderstand]] muss experimentell ermittelt werden. Er muss so ausgelegt sein, dass die Transistoren beim Schalten nur &#039;&#039;&#039;schwach&#039;&#039;&#039; in die Sättigung gehen, um schneller wieder abschalten zu können (Stichwort Speicherzeit, engl. storage time).&lt;br /&gt;
*Die Drossel L1 sollte ca. den 2..3fachen Induktivitätswert der Primärwicklung haben. Je mehr, umso besser. Sie darf bei vollem Laststrom nicht in die Sättigung gehen, da dann ihre Induktivität stark absinkt.&lt;br /&gt;
* Man sollte &#039;&#039;&#039;keine&#039;&#039;&#039; [[Potentiometer | Drahtpotis]] zur Lastvariation nutzen. Die haben soviel Induktivität (im Test 12µH, =8&amp;amp;Omega; bei 105kHz), dass die dadurch den Maximalstrom ungewollt verringern. Selbst einfache Drahtwiderstände sind mit 3µH/2&amp;amp;Omega; induktivem Anteil schon ungünstig.&lt;br /&gt;
*Die Spitzenspannung der Steuerwicklung darf ca. 5V nicht überschreiten, weil diese als Sperrspannung für die Transistoren wirksam wird. Die meisten Bipolartransistoren verkraften max. 5V Sperrspannung zwischen Basis und Emitter.&lt;br /&gt;
*Im Kurzschlussfall der Sekundärwicklung reduziert sich die Induktivität der Primärwicklung auf die Streuinduktivität, was zu einer Frequenzerhöhung führt. Durch die höhere Frequenz stellt die Streuinduktivität einen höheren Blindwiderstand dar, welcher den Strom wirkungsvoll begrenzt. Aufgrund der höheren Frequenz fließt allerdings ein größerer Strom im Schwingkreis. Verwendet man also diesen Zustand, dann muss die Schaltung für die höheren Belastungen ausgelegt sein. Je kleiner der Koppelfaktor, umso besser die Kurzschlussfestigkeit. Die nachfolgende Tabelle gibt die Erhöhung des Eingangsstroms sowie der Resonanzfrequenz beim Kurzschluss in Abhängigkeit des Koppelfaktors an.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Koppelfaktor &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Faktor gegenüber Leerlauf&lt;br /&gt;
|-&lt;br /&gt;
! Resonanzfrequenz || Eingangsstrom&lt;br /&gt;
|-&lt;br /&gt;
|0,01 || 1,0 || 1,0&lt;br /&gt;
|-&lt;br /&gt;
|0,1 || 1,1 || 1,1&lt;br /&gt;
|-&lt;br /&gt;
|0,2 || 1,1 || 1,3&lt;br /&gt;
|-&lt;br /&gt;
|0,5 || 1,4 || 2,0&lt;br /&gt;
|-&lt;br /&gt;
|0,6 || 1,6 || 2,5&lt;br /&gt;
|-&lt;br /&gt;
|0,7 || 1,8 || 3,3&lt;br /&gt;
|-&lt;br /&gt;
|0,8 || 2,2 || 5&lt;br /&gt;
|-&lt;br /&gt;
|0,9 || 3,2 || 10&lt;br /&gt;
|-&lt;br /&gt;
|0,95 || 4,5 || 20&lt;br /&gt;
|-&lt;br /&gt;
|0,99 || 10 || 100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Formeln zum Royer Converter ==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;f_r=\frac{1}{2 \pi \sqrt{L_{pri} C_2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;U_p = \pi \cdot U_{ein}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;I_p = U_{ein} \cdot \pi \sqrt{\frac{C}{L}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;k = \frac {U_{aus}}{\pi \cdot U_{ein}} \cdot \frac {N_{pri}}{N_{sek}}&amp;lt;/math&amp;gt; (im Leerlauf gemessen)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;k = \sqrt{1-\frac{L_{Pri-K}}{L_{Pri-0}}}&amp;lt;/math&amp;gt; (mit L-Meter gemessen)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;R1 \sim \frac{\beta _{I_N} \cdot U_{ein}}{I_N}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N_{steu} \le \frac{5}{\pi \cdot U_{ein}}\cdot N_{Pri}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{max}=\frac{(\pi \cdot U_{ein} \cdot k)^2 \sqrt{L_{pri} \cdot C_2 (1-k^2)}}{4 \cdot L_{pri} \cdot (1-k^2)}&amp;lt;/math&amp;gt; (Näherungsformel)&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;R_{opt}=(1-k^2)(\frac{N_{sek}}{N_{pri}})^2 L_{pri} \cdot 2\pi \cdot f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|- &lt;br /&gt;
! Formelzeichen	|| Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, f_r&amp;lt;/math&amp;gt; || Resonanzfrequenz im Leerlauf &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, L_{Pri}&amp;lt;/math&amp;gt; || Induktivität der Primärwicklung &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, C2&amp;lt;/math&amp;gt; || Kapazität des Primärschwingkreises&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, U_p&amp;lt;/math&amp;gt; || Spitzenspannung im Resonanzkreis &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, I_p&amp;lt;/math&amp;gt; || Spitzenstrom im Resonanzkreis &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, k&amp;lt;/math&amp;gt; || Koppelfaktor zwischen Primär- und Sekundärwicklung &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, L_{Pri-0}&amp;lt;/math&amp;gt; || Primärinduktivität bei Leerlauf der Sekundärwicklung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, L_{Pri-K}&amp;lt;/math&amp;gt; || Primärinduktivität bei Kurzschluss der Sekundärwicklung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, U_{ein}&amp;lt;/math&amp;gt; || Eingangsspannung des Royer Converters (Gleichspannung)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, U_{aus}&amp;lt;/math&amp;gt; || Ausgangsspannung des Royer Converters (Wechselspannung, Spitzenwert)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, R1&amp;lt;/math&amp;gt; || Basiswiderstand&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, I_N&amp;lt;/math&amp;gt; || Nennstrom des Royer Converters am Eingang&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, \beta _{I_N}&amp;lt;/math&amp;gt; || Stromverstärkung der Transistoren bei Nennstrom&amp;lt;br&amp;gt;Achung! Die Stromverstärkung sinkt bei höheren Strömen deutlich, ins Datenblatt schauen.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, N_{steu}&amp;lt;/math&amp;gt; || Windungszahl der Steuerwicklung &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, P_{max}&amp;lt;/math&amp;gt; || Maximale Ausgangsleistung bei Leistungsanpassung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\!\, R_{opt}&amp;lt;/math&amp;gt; || Optimaler Lastwiderstand für Leistungsanpassung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das Ganze ist auch als [[media:Royer_Converter.xls | Exceltabelle]] zur leichten Anwendung verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Leistungsoptimierung ==&lt;br /&gt;
&lt;br /&gt;
Wie kann ich den Wirkungsgrad sowie die Ausgangsleistung für meine Anwendung optimieren?&lt;br /&gt;
&lt;br /&gt;
* Die Eingangsspannung soll möglichst hoch sein.&lt;br /&gt;
* Der Koppelfaktor soll möglichst hoch sein. Das erreicht man durch&lt;br /&gt;
** Flache Spulen mit grossem Durchmesser und kleinem Abstand (parallele Spulen)&lt;br /&gt;
** Konzentrische (ineinandergestapelte) Spulen mit geringem Luftspalt zwischen den Spulen&lt;br /&gt;
** Einsatz von Ferritkernen (Schalenkerne, Stäbe etc.) zur Bündelung des Magnetfeldes&lt;br /&gt;
* Wenn man die Sekundärwicklung mit einem parallel oder in Reihe geschalteten Kondensator auf Resonanz mit der Primärwicklung abgleicht, kann die Ausgangsleistung deutlich erhöht werden, weil dadurch die Streuinduktivität der Sekundärseite kompensiert wird. Man muss dabei beachten, dass bei Parallelschaltung die Ausgangsspannung ohne Last stark ansteigt (Prinzip der [http://de.wikipedia.org/wiki/Teslaspule Teslaspule]). Unter Last verhält sich der Ausgang dann nahezu wie eine [[Konstantstromquelle]]. Bei Reihenschaltung ist das nicht der Fall, hier bleibt die Leerlaufspannung niedrig. Auch für diesen zusätzlichen Kondensator gilt das Gleiche wie C2, er muss sehr verlustarm sein. Es gilt&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;C_{sek} = \frac{1}{(2 \pi f)^2 L_{sek}\sqrt{1-k^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Das Verhältnis &amp;lt;math&amp;gt;C/L&amp;lt;/math&amp;gt; soll möglichst hoch sein. Verdoppelt man die Kapazität und reduziert gleichzeitig die Primärinduktivität um den Faktor zwei (Windungszahl * 0,7), verdoppelt sich die maximal verfügbare Leistung. Der Preis dafür sind doppelt so hohe Leerlaufströme im Schwingkreis und damit ca. 2,8mal so hohe Leerlaufverluste (bei gleichem Drahtquerschnitt, P = I^2 * R).&lt;br /&gt;
* Die Resonanzfrequenz soll möglichst niedrig sein, daduch veringern sich die induktiven Widerstände der Streuinduktivitäten, welche den Strom und damit die Leistung begrenzen.&lt;br /&gt;
* Der Drahtquerschnitt der Primärwicklung muss möglichst gross sein, denn hier fließen sehr hohe Ströme. Allerdings bewirkt die meist recht hohe Resonanzfrequenz auf grund des [http://de.wikipedia.org/wiki/Skineffekt Skineffekts] eine Verringerung des effektiven Drahtquerschnitts. Ausserdem lassen sich dicke, massive Kupferdrähte eher schlecht wickeln. Darum verwendet man oft [http://de.wikipedia.org/wiki/Hochfrequenzlitze HF-Litze], welche aus sehr vielen, sehr dünnen, gegeneinander isolierten Drähten besteht. Diese lässt sich deutlich besser wickeln und wirkt dem Skineffekt entgegen.&lt;br /&gt;
* Bei einem 1:1 Transformator kann die Sekundärseite gleich aufgebaut werden wie die Primärseite (zwei kreuzgekoppelte Schalttransistoren). Die Transistoren arbeiten dann als Synchrongleichrichter und der Spannungsabfall der Gleichrichterdioden fällt weg (steigert den Wirkungsgrad). Achtung! Durch den symmetrischen Aufbau kann Energie in beide Richtungen übertragen werden.&lt;br /&gt;
&lt;br /&gt;
== MOSFET-Variante ==&lt;br /&gt;
[[Datei:WurthWE-WPCC.png| thumb | 300px | right | Auswahl bestimmter Würth WE-WPCC Ladespulen. Links unten die kleinste Ladespule mit 10µH, mittig oben 6.3µH, rechts unten 6.3µH mit einem Neodym-Magnet in der Mitte.]]&lt;br /&gt;
&lt;br /&gt;
Man kann die Primärseite des Trafos mit Mittelanzapfung und Steuerwicklung auch durch eine einfache Spule ersetzen, wenn man MOSFETs statt Bipolartransistoren nutzt und die Betriebsspannung über zwei Spulen an den Enden der Primärwicklung einspeist. Das vereinfacht den Aufbau der Primärspule deutlich, was u.a. bei höheren Leistungen günstig ist. Der Preis dafür ist, daß man zwei Spulen mit etwa der doppelten Induktivität benötigt. Ebenfalls werden dazu geeignete Flachspulen von Herstellern wie Würth, TDK, .. (siehe Abbildung rechts) produziert (Stichwort: Ladespule bzw. charging coil).&lt;br /&gt;
&lt;br /&gt;
Die unten abgebildete Mosfet-Schaltung baut auf [http://www.mikrocontroller.net/topic/278961#2948009 einem Beitrag aus dem Forum] auf, in dem auch weitere Erklärungen der Funktionsweise sowie zahlreiche Dimensionierungs-Beispiele enthalten sind. Eine dazugehörige Simulation in LTSpice kann unter [[Datei:LTSpiceRoyerMosfet.asc]] gefunden werden. Die Effizienz scheint in der Simulation niedriger als in der Realität zu liegen, jedoch eignet sich die Simulation ideal zum Verstehen sowie dem schnellem Testen der Auswirkungen unterschiedlicher Bauteilvarianten wie bspw. der Ermittlung der optimalen Eingangsinduktivität oder Gate-Widerstände.&lt;br /&gt;
[[Datei:Royer MOSFET.png| thumb | 600px | left | MOSFET-Schaltung des Royer Converters]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:Royer_MOSFET_Aufbau.jpg| thumb | 300px | right | Der beschriebene Aufbau mit Logic-Level MOSFETs. Von links nach rechts: Die Royer-Converter Schaltung an welche die kleine Würth Ladespule mit 10µH angeschlossen ist. Darüber die selbst gewickelte Empfangsspule sowie der Ferritkern welcher im Betrieb hinter die Empfangsspule befestigt wird. Die Empfangsspule ist mit dem Gleichrichter verbunden welcher den DC-DC Buck-Converter speist. Der Lastwiderstand ist rechts außen sichtbar. Im Betrieb sind beide Spulen parallel übereinander ausgerichtet im Abstand von 3mm, getrennt durch eine Acrylplatte. ]]&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
Beispieleinsatz:&lt;br /&gt;
&lt;br /&gt;
Die in obiger Schaltung verwendeten Bauteile sind für eine drahtlose Energieübertragung mit einer Eingangsspannung von 5V, einer Ausgangsspannung von 5V und Ausgangsleistung von 2.2W bei einem Abstand von 3mm ausgelegt. Als Primärspule wird eine Würth 10µH Ladespule verwendet, als Sekundärspule eine selbstgewickelte Flachspule mit 14mm Durchmesser und 14 Wicklungen auf deren Rückseite ein Pot Core Ferritkern (3H1) zur Leistungsverbesserung plaziert ist. Die hier verwendeten Mosfets sind Logic-Level-Mosfets und nicht für hohe Eingangsspannungen ausgelegt (im oben genannten Beitrag finden sich Beispiele für Eingangsspannungen &amp;gt;10V). Um die ungeregelte Ausgangsspannung auf 5V zu stabilisieren wird der Texas Instruments TPS54331 Buck-Converter verwendet (nicht in der Schaltung aufgeführt), der eine Ein-/Ausschalthysterese besitzt um nur bei geeigneter Orientierung der Spulen einzuschalten und dadurch stabile 5V erzeugen kann. Die komplette Schaltung ist mit SMD Bauteilen und 0.1µF NP0 50V Kondensatoren in der Bauform 1206 aufgebaut worden (siehe rechte Abbildung). Bei den Spulen L1 und L2 muss ein Mittelmaß zwischen Baugröße, Induktivität und Widerstand gefunden werden. Bei gleichbleibender Baugröße stellte 100µH die optimale Wahl im Vergleich zu 47µH (zu geringe Induktivität) und 220µH (zu hoher Widerstand) dar. Die so aufgebaute Schaltung arbeitet bei 115kHz und es wird momentan ein Wirkungsgrad von ca. 58% erreicht mit einer Last von 450mA am 5V Ausgang.&lt;br /&gt;
&lt;br /&gt;
Wie im Artikel beschrieben, kann die Effizienz gesteigert werden, indem die Fläche der Sekundärspule vergrößert wird, Lastanpassung vorgenommen wird, optimierte Ferritkerne verwendet werden etc. Bei identischer Primär- und Sekundärspule (Würth WE-WPCC 10µH) im Abstand von 5mm und einem Lastwiderstand von 68 &amp;amp;Omega; direkt am Delon-Brückengleichrichter angeschlossen (ohne DC-DC Converter) wurde in einem kurzen Versuch eine Effizienz von ca. 70% gemessen, bei einer Ausgangsleistung von ca. 4W (19V @ 220mA) mit sonst unveränderten Parametern (5V @ 1.2A Eingang). Da an der Schaltung nichts verändert wurde und auch der Lastwiderstand eher zufällig gewählt wurde ist es offensichtlich, dass der maximale Wirkungsgrad noch nicht erreicht ist und somit weiteres Potenzial im Aufbau steckt.&lt;br /&gt;
&lt;br /&gt;
Ein schneller Lochraster-Laboraufbau eines &amp;quot;Doppel Royer Converters&amp;quot; (gleicher Aufbau für die Sekundärseite wie für die Primärseite =&amp;gt; Synchrongleichrichtung) erreichte einen Wirkungsgrad von 92% bei einer übertragenen Leistung von 300W (R_Last = 2,1Ohm). Als Übertrager wurde ein PM87/70 N87 Ferritkern mit 6 Windungen 0,1mm*240 Hochfrequenzlitze verwendet. Der Abstand der beiden Ferritkerne betrug dabei 4mm (=&amp;gt; Luftspalt von 8mm). Die Resonanzkapazität von 1,2µF wurde auf Primär- und Sekundärseite gleichmässig aufgeteilt. Mit optimierten Aufbau erscheint ein Wirkungsgrad von ~95% möglich zu sein.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Spule]]&lt;br /&gt;
* [[Transformatoren und Spulen]]&lt;br /&gt;
&lt;br /&gt;
== Diskussionen im Forum ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/118124#new Verwendung in einem Induktionsofen, MOSFETs als Schalter]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/151538#new Verwendung in einem Induktionsofen, neuer Thread]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/263161#2734278 Dokumente über Induktionskochfelder]&lt;br /&gt;
*[http://www.mikrocontroller.net/attachment/61266/Induktive_Energie_bertragung.pdf Dokument über drahtlose Energieübertragung]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/80808#675198 Komplettes Projekt einer Propelleruhr und lange Diskussion]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/61706#489279 Noch eine Propelleruhr]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/155778#1529891 Royer Converter mit Schalenkernen und 20W Ausgangsleistung]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/152785#1540938 Royer Converter mit Luftspulen und 14W Ausgangsleistung]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/152785#1712213 Kleiner Royer Converter für einen Propellerglobus]&lt;br /&gt;
*[http://www.mikrocontroller.net/topic/214735#new Herleitung der Formeln im Artikel Royer Converter]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/219148?goto=2195298#2195298 berührungslos Bleigel Akku laden, 12V/1,6W]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/221845?goto=2238458#2238458 Kleiner Wandler für 5V/250mW]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/152785#2447793 Automatische Lasterkennung und Steuerung für den Royer Converter]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/278961#2948009 RFID Spulen für Leistungsübertragung?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2937446 Flachspule 1 mH -- wie selbst herstellen?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/297295 Leistungsverbesserung Royer Converter]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/263068#new WiTricity heute]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/322461?goto=3508850#3508850 Forumsbeitrag] Ferritplatten&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.serious-technology.de/kleiner-wandler.htm Kleiner Wandler]: Sehr ausführliche Beschreibung des Aufbaus und Berechnung der Komponenten&lt;br /&gt;
*[http://digitalcommons.calpoly.edu/theses/112/ Parallel-Resonant Push-Pull Converter] Jonathan David Paolucci - Master Thesis&lt;br /&gt;
*[http://www.serious-technology.de/ernsthafter_wandler.htm Ernsthafter Wandler]: Das Ganze nochmal in Groß&lt;br /&gt;
* [http://www.google.de/url?url=http://www.rrc-wireless-power.com/fileadmin/website_wireless_power/Dokumente/Whitepapers/RRC_WirelessPower_Kontaktlose_Energie___Datenuebertragung_D_E_Entwicklerforum_2008.pdf&amp;amp;rct=j&amp;amp;sa=U&amp;amp;ei=Fx7CUJXXJqSl4ASniIHoBg&amp;amp;ved=0CCUQFjACOAo&amp;amp;q=kontaktlose+energie%C3%BCbertragung&amp;amp;usg=AFQjCNE6dSlRmsaMDw8EnvLmJ3ovOZe2EA Dokument] zur kontaktlosen Energieübertragung&lt;br /&gt;
*[[media: an14.pdf | AN14]]: Application Note von Zetex, englisch&lt;br /&gt;
*[[media: dn164f.pdf | DN164]]: Design Note von Linear Technology, englisch&lt;br /&gt;
*[http://www.linear.com/docs/26421 Linear Technology Application Note 118:] High Voltage, Low Noise, DC/DC Converters (mit primärgeregeltem Royer-Converter)&lt;br /&gt;
*[http://4hv.org/e107_plugins/forum/forum_viewtopic.php?74096.0 Schönes Projekt zur kontaktlosen Energieübertragung] &amp;lt;---- Achtung: Seite hat einen Virus!!!&lt;br /&gt;
*[http://www.youtube.com/watch?v=2ODW-ntPHSU Video zum Projekt]&lt;br /&gt;
*[http://www.joretronik.de/Oszillatoren/Oszillatoren.html Royer-Hochleistungsoszillatoren mit MOSFETs und IGBTs]&lt;br /&gt;
*[http://www.joretronik.de/Web_NT_Buch/Kap11_2/Kapitel11_2.html Diverse Schaltungsbeispiele]&lt;br /&gt;
*[http://www.joretronik.de/Web_NT_Buch/Kap13_2/Kapitel13_2.html#13.2.2 Royer Oszillator für CCFL-Lampen]&lt;br /&gt;
* [http://men39server.men39.wien.funkfeuer.at/lvane/js_code/loop/loop.html Induktivität einer Kreisringspule]&lt;br /&gt;
* [http://sophia-elektronica.com/Baxandall_parallel-resonant_Class-D_oscillator1.htm The Baxandall parallel-resonant Class-D oscillator]&lt;br /&gt;
* [http://www.ti.com/ww/de/analog/wireless_power_solutions/index.shtml?DCMP=hpa_pmp_bq51013_de&amp;amp;HQS=Other+BA+bq51013-bpde bq51013], IC zur kontaklosen Energieübertragung von [http://www.ti.com TI], Evaluationboard verfügbar&lt;br /&gt;
* [http://www.wirelesspowerconsortium.com/ Wireless Power Consortium], definiert einen Standard zur kontaktlosen Energieübertragung (Qi)&lt;br /&gt;
* Kontaktlose Energieübertragungslösungen von Firmen&lt;br /&gt;
** [http://www.schleifring.de/de/Produkte/Technologien/Kontaktlose._.Uebertragung/energie.uebertragung.php Schleifring], 100W - 200kW&lt;br /&gt;
** [http://www.ist-sensorik.de IST Sensorik GmbH], Milliwatt bis 1kW&lt;br /&gt;
** [http://www.j-lasslop.de/produkte/kontaktlose-energie-und-datenuebertragung.html J-Lasselop], Mikrowatt bis 500kW&lt;br /&gt;
** [http://www.enasys.de/de/produkte/kontaktlose-energieuebertragung.html EnASYS], 60W-500kW&lt;br /&gt;
** [http://www.kontenda.de KONTENDA], 1W-2kW&lt;br /&gt;
** [http://www.mesa-systemtechnik.de MESA Systemtechnik], Power- und Sensortelemetrie&lt;br /&gt;
** [http://www.wirelesspower.cn Wirelesspower], Anbieter von verschiedenen ICs und Modulen von 1W-3kW&lt;br /&gt;
** [http://www.rrc-ps.de/de/produkte/kabellose-energieuebertragung/plattformen.html RRC Power Solutions] - Plattform Kabellose Energie- / Datenübertragung, 5W, Qi kompatibel&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Spannungsversorgung und Energiequellen]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=89471</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=89471"/>
		<updated>2015-08-04T09:10:40Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Lösung mit einem schnelleren Controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
Der AVR-ADC ist für hohe Drehzahlen zu langsam bzw. ist die PWM -und Samplefrequenz mit 10/5KHz zu langsam um ausreichen Auflösung für das Flussintegral zu bekommen. Die Problematik ist dann, dass nur 1-2 Samples pro Kommutierungsschritt zur Verfügung stehen, was vorn und hinten nicht ausreichen ist. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösungen:&#039;&#039;&#039;&lt;br /&gt;
* Man verwendet einen schnelleren externen ADC&lt;br /&gt;
* Man schaltet bei hohen Drehzahlen in den Komparatormodus&lt;br /&gt;
* Anderer µC mit schnellerem ADC verweden z.B. STM32F4 - Derivat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lösung mit einem schnelleren Controller ==&lt;br /&gt;
Der Controller wurde durch einen STM32F050K6 ersetzt. Dieser sampelt nun im Center-Aligned PWM Mode in der Pulsmittte alle Werte und schaufelt diese per DMA in einen Buffer. Die PWM Frequenz beträgt 20kHz.&lt;br /&gt;
Klappt alles prima.&lt;br /&gt;
Aufgrund der (m.M.n.) sehr hohen Gefahr durch die Luftschraube stelle ich alle weiteren Forschungen hier ein.&lt;br /&gt;
Ich verkaufe meine Hardware hier:&lt;br /&gt;
&lt;br /&gt;
https://www.mikrocontroller.net/topic/373059?goto=4217547#4217547&lt;br /&gt;
&lt;br /&gt;
Anbei hier noch das Programm für den STM32 (allerdings mit recht heißer Nadel gestrickt):&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm_STM32.zip|miniatur|links]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=89470</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=89470"/>
		<updated>2015-08-04T05:49:12Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Lösung mit einem schnelleren Controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
Der AVR-ADC ist für hohe Drehzahlen zu langsam bzw. ist die PWM -und Samplefrequenz mit 10/5KHz zu langsam um ausreichen Auflösung für das Flussintegral zu bekommen. Die Problematik ist dann, dass nur 1-2 Samples pro Kommutierungsschritt zur Verfügung stehen, was vorn und hinten nicht ausreichen ist. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösungen:&#039;&#039;&#039;&lt;br /&gt;
* Man verwendet einen schnelleren externen ADC&lt;br /&gt;
* Man schaltet bei hohen Drehzahlen in den Komparatormodus&lt;br /&gt;
* Anderer µC mit schnellerem ADC verweden z.B. STM32F4 - Derivat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lösung mit einem schnelleren Controller ==&lt;br /&gt;
Der Controller wurde durch einen STM32F050K6 ersetzt. Dieser sampelt nun im Center-Aligned PWM Mode in der Pulsmittte alle Werte und schaufelt diese per DMA in einen Buffer. Die PWM Frequenz beträgt 20kHz.&lt;br /&gt;
Klappt alles prima.&lt;br /&gt;
Aufgrund der (m.M.n.) sehr hohen Gefahr durch die Luftschraube stelle ich alle weiteren Forschungen hier ein.&lt;br /&gt;
Ich verkaufe meine Hardware hier:&lt;br /&gt;
&lt;br /&gt;
https://www.mikrocontroller.net/topic/373059?goto=4217547#4217547&lt;br /&gt;
&lt;br /&gt;
Anbei hier noch das Programm für den STM32:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm_STM32.zip|miniatur|links]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=89469</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=89469"/>
		<updated>2015-08-04T05:47:56Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Lösung mit einem schnelleren Controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
Der AVR-ADC ist für hohe Drehzahlen zu langsam bzw. ist die PWM -und Samplefrequenz mit 10/5KHz zu langsam um ausreichen Auflösung für das Flussintegral zu bekommen. Die Problematik ist dann, dass nur 1-2 Samples pro Kommutierungsschritt zur Verfügung stehen, was vorn und hinten nicht ausreichen ist. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösungen:&#039;&#039;&#039;&lt;br /&gt;
* Man verwendet einen schnelleren externen ADC&lt;br /&gt;
* Man schaltet bei hohen Drehzahlen in den Komparatormodus&lt;br /&gt;
* Anderer µC mit schnellerem ADC verweden z.B. STM32F4 - Derivat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lösung mit einem schnelleren Controller ==&lt;br /&gt;
Der Controller wurde durch einen STM32F050K6 ersetzt. Dieser sampelt nun im Center-Aligned PWM Mode in der Pulsmittte alle Werte und schaufelt diese per DMA in einen Buffer. Die PWM Frequenz beträgt 20kHz.&lt;br /&gt;
Klappt alles prima.&lt;br /&gt;
Aufgrund der (m.M.n.) sehr hohen Gefahr durch die Luftschraube stelle ich alle weiteren Forschungen hier ein.&lt;br /&gt;
Ich verkaufe meine Hardware hier:&lt;br /&gt;
https://www.mikrocontroller.net/topic/373059?goto=4217547#4217547&lt;br /&gt;
&lt;br /&gt;
Anbei hier noch das Programm für den STM32:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm_STM32.zip|miniatur|links]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Programm_STM32.zip&amp;diff=89468</id>
		<title>Datei:Programm STM32.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Programm_STM32.zip&amp;diff=89468"/>
		<updated>2015-08-04T05:46:47Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=89439</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=89439"/>
		<updated>2015-07-31T08:50:01Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
Der AVR-ADC ist für hohe Drehzahlen zu langsam bzw. ist die PWM -und Samplefrequenz mit 10/5KHz zu langsam um ausreichen Auflösung für das Flussintegral zu bekommen. Die Problematik ist dann, dass nur 1-2 Samples pro Kommutierungsschritt zur Verfügung stehen, was vorn und hinten nicht ausreichen ist. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösungen:&#039;&#039;&#039;&lt;br /&gt;
* Man verwendet einen schnelleren externen ADC&lt;br /&gt;
* Man schaltet bei hohen Drehzahlen in den Komparatormodus&lt;br /&gt;
* Anderer µC mit schnellerem ADC verweden z.B. STM32F4 - Derivat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lösung mit einem schnelleren Controller ==&lt;br /&gt;
Der Controller wurde durch einen STM32F050K6 ersetzt. Dieser sampelt nun im Center-Aligned PWM Mode in der Pulsmittte alle Werte und schaufelt diese per DMA in einen Buffer. Die PWM Frequenz beträgt 20kHz.&lt;br /&gt;
Klappt alles prima.&lt;br /&gt;
Aufgrund der (m.M.n.) sehr hohen Gefahr durch die Luftschraube stelle ich alle weiteren Forschungen hier ein.&lt;br /&gt;
Ich verkaufe meine Hardware hier:&lt;br /&gt;
https://www.mikrocontroller.net/topic/373059?goto=4217547#4217547&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=89438</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=89438"/>
		<updated>2015-07-31T08:47:34Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
Der AVR-ADC ist für hohe Drehzahlen zu langsam bzw. ist die PWM -und Samplefrequenz mit 10/5KHz zu langsam um ausreichen Auflösung für das Flussintegral zu bekommen. Die Problematik ist dann, dass nur 1-2 Samples pro Kommutierungsschritt zur Verfügung stehen, was vorn und hinten nicht ausreichen ist. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösungen:&#039;&#039;&#039;&lt;br /&gt;
* Man verwendet einen schnelleren externen ADC&lt;br /&gt;
* Man schaltet bei hohen Drehzahlen in den Komparatormodus&lt;br /&gt;
* Anderer µC mit schnellerem ADC verweden z.B. STM32F4 - Derivat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lösung mit einem schnelleren Controller ==&lt;br /&gt;
Der Controller wurde durch einen STM32F050K6 ersetzt. Dieser sampelt nun im Center-Aligned PWM Mode in der Pulsmittte alle Werte und schaufelt diese per DMA in einen Buffer. Die PWM Frequenz beträgt 20kHz.&lt;br /&gt;
Klappt alles prima.&lt;br /&gt;
Aufgrund der (m.M.n.) sehr hohen Gefahr durch die Luftschraube stelle ich alle weiteren Forschungen hier ein.&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer_Diskussion:Eagle38106&amp;diff=87881</id>
		<title>Benutzer Diskussion:Eagle38106</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer_Diskussion:Eagle38106&amp;diff=87881"/>
		<updated>2015-03-12T14:41:46Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitte nur Änderungen an Artikeln vornehmen, wenn du sicher bist dass sie richtig sind!&lt;br /&gt;
--[[Benutzer:Andreas|andreas]] ([[Benutzer Diskussion:Andreas|Diskussion]]) 21:20, 10. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Ja, da bin ich mir zu 100% sicher! Die Drehzahl eines Drehstrommotors oder BLDC wird &#039;&#039;&#039;immer&#039;&#039;&#039; über die Frequenz eingestellt. Nicht über das Tastverhältnis der PWM. Damit ändert man nur die Spannung der Stützstelle.&lt;br /&gt;
[[Benutzer:Eagle38106|eagle38106]] ([[Benutzer Diskussion:Eagle38106|Diskussion]]) 23:01, 10. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Ich bin mir da nicht so ganz sicher. Wenn Du einen Asynchronmotor mit zuwenig Spannung betreibst, wird sein Drehmoment kleiner, und damit sein Schlupf größer, wodurch ersteinmal wieder das Drehmoment steigt, bis wieder ein neues Gleichgewicht mit der Last gefunden ist (falls sich ein solches Gleichgewicht noch finden lässt). Das heisst aber, das seine Drehzahl geringer geworden ist. Damit wäre ein Gegenbeispiel für einen Drehstrommotor gegeben. --[[Benutzer:Berndwiebus|Berndwiebus]] ([[Benutzer Diskussion:Berndwiebus|Diskussion]]) 00:31, 11. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Wir reden hier über einen zwangskommutierten Motor ohne Schlupf. Das geht nur über die Frequenz.&lt;br /&gt;
[[Benutzer:Eagle38106|eagle38106]] ([[Benutzer Diskussion:Eagle38106|Diskussion]]) 09:07, 11. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Es gibt keine Zwangskommutation (nur beim Anlaufen), sondern diese findet immer bei der selben Rotorposition statt. Die Spannung (=das Tastverhältnis) zu diesem Zeitpunkt beeinflusst, wie stark der Rotor vom Feld &amp;quot;beschleunigt&amp;quot; wird. Durch diese Beschleunigung ergibt sich indirekt die Kommutierungsfrequenz bzw. Drehzahl. --[[Benutzer:Andreas|andreas]] ([[Benutzer Diskussion:Andreas|Diskussion]]) 17:09, 11. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Gut stimmt in dem Punkt: Zwangskommutiert wird nur beim Anlauf, bis ein Feedback-Signal aus der abgeschalteten Pahse gewonnen werden kann.&lt;br /&gt;
&lt;br /&gt;
Aber über die PWM bzw. das Tastverhältnis wird nur die Spannung am Strang eingestellt. Die Schaltfrequenz mit der die einzelnen Phasen angesteuert werden, die bestimmt die Drehzahl. Schlupf gibt es beim BLDC im Betrieb nicht.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; Ersetze &amp;quot;Tastverhältnis&amp;quot; durch &amp;quot;Frequenz&amp;quot;.&lt;br /&gt;
[[Benutzer:Eagle38106|eagle38106]] ([[Benutzer Diskussion:Eagle38106|Diskussion]]) 14:22, 12. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Es wird doch aber über das Tastverhältnis die Drehzahl bestimmt. Die Spannung ist die Ursache, die Erhöhung der Kommutierungsfrequenz die Wirkung. Also wird die Drehzahl durch die Spannung bestimmt, die Kommutierungsfrequenz resultiert aus der Spannung! [[Benutzer:Corrtexx|Corrtexx]] ([[Benutzer Diskussion:Corrtexx|Diskussion]]) 15:41, 12. Mär. 2015 (CET)&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer_Diskussion:Eagle38106&amp;diff=87880</id>
		<title>Benutzer Diskussion:Eagle38106</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer_Diskussion:Eagle38106&amp;diff=87880"/>
		<updated>2015-03-12T14:36:12Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitte nur Änderungen an Artikeln vornehmen, wenn du sicher bist dass sie richtig sind!&lt;br /&gt;
--[[Benutzer:Andreas|andreas]] ([[Benutzer Diskussion:Andreas|Diskussion]]) 21:20, 10. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Ja, da bin ich mir zu 100% sicher! Die Drehzahl eines Drehstrommotors oder BLDC wird &#039;&#039;&#039;immer&#039;&#039;&#039; über die Frequenz eingestellt. Nicht über das Tastverhältnis der PWM. Damit ändert man nur die Spannung der Stützstelle.&lt;br /&gt;
[[Benutzer:Eagle38106|eagle38106]] ([[Benutzer Diskussion:Eagle38106|Diskussion]]) 23:01, 10. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Ich bin mir da nicht so ganz sicher. Wenn Du einen Asynchronmotor mit zuwenig Spannung betreibst, wird sein Drehmoment kleiner, und damit sein Schlupf größer, wodurch ersteinmal wieder das Drehmoment steigt, bis wieder ein neues Gleichgewicht mit der Last gefunden ist (falls sich ein solches Gleichgewicht noch finden lässt). Das heisst aber, das seine Drehzahl geringer geworden ist. Damit wäre ein Gegenbeispiel für einen Drehstrommotor gegeben. --[[Benutzer:Berndwiebus|Berndwiebus]] ([[Benutzer Diskussion:Berndwiebus|Diskussion]]) 00:31, 11. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Wir reden hier über einen zwangskommutierten Motor ohne Schlupf. Das geht nur über die Frequenz.&lt;br /&gt;
[[Benutzer:Eagle38106|eagle38106]] ([[Benutzer Diskussion:Eagle38106|Diskussion]]) 09:07, 11. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Es gibt keine Zwangskommutation (nur beim Anlaufen), sondern diese findet immer bei der selben Rotorposition statt. Die Spannung (=das Tastverhältnis) zu diesem Zeitpunkt beeinflusst, wie stark der Rotor vom Feld &amp;quot;beschleunigt&amp;quot; wird. Durch diese Beschleunigung ergibt sich indirekt die Kommutierungsfrequenz bzw. Drehzahl. --[[Benutzer:Andreas|andreas]] ([[Benutzer Diskussion:Andreas|Diskussion]]) 17:09, 11. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Gut stimmt in dem Punkt: Zwangskommutiert wird nur beim Anlauf, bis ein Feedback-Signal aus der abgeschalteten Pahse gewonnen werden kann.&lt;br /&gt;
&lt;br /&gt;
Aber über die PWM bzw. das Tastverhältnis wird nur die Spannung am Strang eingestellt. Die Schaltfrequenz mit der die einzelnen Phasen angesteuert werden, die bestimmt die Drehzahl. Schlupf gibt es beim BLDC im Betrieb nicht.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; Ersetze &amp;quot;Tastverhältnis&amp;quot; durch &amp;quot;Frequenz&amp;quot;.&lt;br /&gt;
[[Benutzer:Eagle38106|eagle38106]] ([[Benutzer Diskussion:Eagle38106|Diskussion]]) 14:22, 12. Mär. 2015 (CET)&lt;br /&gt;
&lt;br /&gt;
Es wird doch aber über das Tastverhältnis die Drehzahl bestimmt. Die Spannung ist die Ursache, die Erhöhung der Kommutierungsfrequenz die Wirkung. Also wird die Drehzahl durch die Spannung bestimmt, die Kommutierungsfrequenz resultiert aus der Spannung!&lt;br /&gt;
Corrtexx&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87869</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87869"/>
		<updated>2015-03-11T07:46:55Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Aufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
Der AVR-ADC ist für hohe Drehzahlen zu langsam bzw. ist die PWM -und Samplefrequenz mit 10/5KHz zu langsam um ausreichen Auflösung für das Flussintegral zu bekommen. Die Problematik ist dann, dass nur 1-2 Samples pro Kommutierungsschritt zur Verfügung stehen, was vorn und hinten nicht ausreichen ist. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösungen:&#039;&#039;&#039;&lt;br /&gt;
* Man verwendet einen schnelleren externen ADC&lt;br /&gt;
* Man schaltet bei hohen Drehzahlen in den Komparatormodus&lt;br /&gt;
* Anderer µC mit schnellerem ADC verweden z.B. STM32F4 - Derivat&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:Sensorlose_BLDC_Ansteuerung&amp;diff=87838</id>
		<title>Diskussion:Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:Sensorlose_BLDC_Ansteuerung&amp;diff=87838"/>
		<updated>2015-03-09T18:52:14Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hallo, &lt;br /&gt;
wäre es nicht besser(und einfacher) den bereits vorhanden Brushlles-Controller-Artikel um den Sensorlosen teil zu erweitern? &lt;br /&gt;
&lt;br /&gt;
grüße&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der andere Artikel ist auch sensorlos, er arbeitet aber mit dem analog Koparator, ich jedoch mit dem ADC.&lt;br /&gt;
&lt;br /&gt;
MfG,&lt;br /&gt;
Ingo&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87830</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87830"/>
		<updated>2015-03-09T11:07:42Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Aufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87829</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87829"/>
		<updated>2015-03-09T11:02:52Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelnde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|Aufbau&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87825</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87825"/>
		<updated>2015-03-09T10:30:48Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Aufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau BLDC.jpg|Aufbau&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Aufbau_BLDC.jpg&amp;diff=87824</id>
		<title>Datei:Aufbau BLDC.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Aufbau_BLDC.jpg&amp;diff=87824"/>
		<updated>2015-03-09T10:29:56Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87823</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87823"/>
		<updated>2015-03-09T10:22:35Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Aufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau.jpg|Aufbau&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
[[Datei:Aufbau.jpg]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87822</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87822"/>
		<updated>2015-03-09T10:22:14Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Aufbau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:Aufbau.jpg|Aufbau&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Brushless-Controller_f%C3%BCr_Modellbaumotoren&amp;diff=87821</id>
		<title>Brushless-Controller für Modellbaumotoren</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Brushless-Controller_f%C3%BCr_Modellbaumotoren&amp;diff=87821"/>
		<updated>2015-03-09T10:17:48Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Siehe Auch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Im Internet gibt es einige grundlegende Informationen zur Funktionsweise und Ansteuerung von Brushless-Motoren (BLDC). Für die Entwicklung eines solchen Reglers findet man aber nur wenig richtig detaillierte Informationen und Erfahrungsberichte. In diesem Artikel sollen genau diese Lücken geschlossen werden. Es soll hier aber kein fertiges Produkt (Schaltplan + Layout + Software) angeboten werden. Viel mehr soll es die Eigenentwicklung unterstützen, Ideen und Erfahrungen anbieten.&lt;br /&gt;
&lt;br /&gt;
An dieser Stelle weise ich noch darauf hin, dass man bei den [[#Weblinks]] noch einige sehr gute Informationen findet! Es gibt dort Hardware und Software, es lohnt sich die Links mal anzuschauen.&lt;br /&gt;
&lt;br /&gt;
==== Um welche Motoren geht es genau? ====&lt;br /&gt;
&lt;br /&gt;
Es geht hier um die sogenannten elektrisch kommutierten bürstenlosen Gleichstrommotoren (BLDC) aus dem Modellbaubereich. &lt;br /&gt;
&lt;br /&gt;
Deren Eigenschaften sind:&lt;br /&gt;
* Haben drei Anschlüsse für die drei Phasen, ansonsten sind keine weiteren Anschlüsse vorhanden&lt;br /&gt;
* Werden in der Regel mit LiPo oder Nickel Akkus versorgt&lt;br /&gt;
* Leistung im Bereich von ca. 100W bis 2kW&lt;br /&gt;
* Spannungen im Bereich von ca. 7 bis 50V&lt;br /&gt;
* Ströme im Bereich von ca. 5 bis  120A&lt;br /&gt;
&lt;br /&gt;
===== Um welche Motoren geht es hier nicht? =====&lt;br /&gt;
&lt;br /&gt;
* Motoren mit Hallsensoren für die Rückmeldung&lt;br /&gt;
* Festplattenmotoren&lt;br /&gt;
&lt;br /&gt;
Unter Umständen kann aber dieser Artikel auch für solche Motoren nützlich sein.&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise dieser Motoren ==&lt;br /&gt;
&lt;br /&gt;
=== Ansteuerung ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:BLDC_Spannungs_Diagramm.png|thumb|right|250px|Ansteuerung der 3 Phasen]]&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich werden die 3 Phasen nacheinander bestromt, die Phasenspannungen wären also drei um 120° phasenverschobene Rechteckspannungen. Ein sinusförmiger Drehstrom ist nicht nötig, es genügen Rechteckspannungen. Mit einer Raumzeigermodulation könnte man die Stromaufnahme und die Geräuschentwicklung zwar noch verringern, macht die Ansteuerung aber einiges aufwändiger. Sogar die käuflichen Regler arbeiten nur mit Rechtecksignalen, zumindest die die ich kenne. &lt;br /&gt;
&lt;br /&gt;
Dabei gibt es für jede Phase die Zustände „Low“, „High“ und „Floating“. Low bedeutet 0V (GND), High entspricht der Versorgungsspannung und Floating ist keines von beidem, die Phase „hängt in der Luft“. Bei „High“ wird aber noch der Mittelwert der Spannung per PWM eingestellt, über das Tastverhältnis wird schlussendlich die Drehzahl verändert! Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
In der Grafik rechts kann man den Spannungsverlauf sehr gut erkennen. Das Diagramm zeigt aber nur den theoretischen Verlauf der Spannungen, wobei die gestrichelten Linien den Zustand &amp;quot;floating&amp;quot; symbolisieren. Dies kann man in einem Diagramm ja nicht wirklich darstellen, das ist einfach symbolisch gemeint. Interessanterweise sehen die Spannungen aufgrund der BEMF aber tatsächlich ziemlich ähnlich aus wie im Diagramm!&lt;br /&gt;
&lt;br /&gt;
=== Die 6 Zustände ===&lt;br /&gt;
&lt;br /&gt;
Wie man erkennen kann, werden 6 Zustände gebraucht, die sich dann immer wiederholen. Die Kommutierung ist also einfach ein Weiterschalten des Zustandes. &lt;br /&gt;
&#039;&#039;Diese 6 Zustände sind nicht mit den drei Zuständen von oben (High, Low, Floating) zu verwechseln, das ist ein anderes Thema!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In einer Tabelle dargestellt würde das folgendermassen aussehen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zustand || Phase A || Phase B || Phase C || Stromfluss || Komparator-Eingänge&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM || Floating || GND || A --&amp;gt; C || MITTEL &amp;lt;--&amp;gt; NULL_B&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Floating || PWM || GND || B --&amp;gt; C || MITTEL &amp;lt;--&amp;gt; NULL_A&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GND || PWM || Floating || B --&amp;gt; A || MITTEL &amp;lt;--&amp;gt; NULL_C&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GND || Floating || PWM || C --&amp;gt; A || MITTEL &amp;lt;--&amp;gt; NULL_B&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Floating || GND || PWM || C --&amp;gt; B || MITTEL &amp;lt;--&amp;gt; NULL_A&lt;br /&gt;
|-&lt;br /&gt;
| 6 || PWM || GND || Floating || A --&amp;gt; B || MITTEL &amp;lt;--&amp;gt; NULL_C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Hinweise:&lt;br /&gt;
* Die Nummern in der ersten Spalte entsprechen genau den sechs Zuständen, die auch im obigen Diagramm nummeriert sind (Alle 6 Zustände zusammen bilden einen Zyklus, wie es auch im Diagramm dargestellt ist)&lt;br /&gt;
* Den Inhalt der letzten Spalte wird später noch erläutert. Die Bezeichnungen beziehen sich auf die [[#BEMF-Schaltung]].&lt;br /&gt;
&lt;br /&gt;
=== Einsatz der BEMF ===&lt;br /&gt;
Das schaut bis jetzt eigentlich wie ein Synchronmotor oder Schrittmotor aus, was ein BLDC im Prinzip auch ist.&lt;br /&gt;
&lt;br /&gt;
Wie schon erwähnt wurde, wird ein BLDC elektronisch kommutiert. Das heisst, die Kommutierung wird nicht einfach stur vorgegeben, sondern es wird immer Rücksicht auf die Ankerposition genommen. Dazu muss man allerdings wissen, wann man die Kommutierung genau auslösen soll. &lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren heißt Block-Kommutierung und ist ein Kompromiss aus (Regelungs-)Aufwand und Ergebnis:&lt;br /&gt;
Idealerweise werden die Ströme im Stator so eingeprägt, dass der Statorfluss dem Rotorfluss immer um 90° vorauseilt. Nur so wird das ideale Drehmoment erzeugt (siehe Literatur zur permanenterregten Synchronmaschine). Allerdings hat dieses Verfahren, auch Feldorientierte Regelung oder Vektor-Regelung genannt, den Nachteil, dass meistens teure Positionssensorik für den Rotor nowendig ist und auch die nötige Rechenleistung stark ansteigt. Die komplette Regelung muss für jede PWM-Periode gerechnet werden, damit sich der Aufwand lohnt. &lt;br /&gt;
BLDC-Motoren werden deshalb meist explizit so konstruiert, dass sich mit Block-Kommutierung ein konstantes Drehmoment einstellen kann. Der ideale Kommutierungszeitpunkt ist eigentlich ein Kommutierungswinkel, der Kommutierungszeitpunkt unter anderem deshalb drehzahlabhängig.&lt;br /&gt;
&lt;br /&gt;
Zur Erreichung einer höheren Maximaldrehzahl kann das Rotorfeld durch das Statorfeld im sogenannten Feldschwäch-Betrieb geschwächt werden. Es ergeben sich Feldschwäch-(Blind)ströme im Bereich der Nennströme. Die Feldschwächung hat Einfluss auf den Kommutierungszeitpunkt.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann auch ein BLDC nicht ohne Kenntnis der Lage des Rotors kommutiert werden. Und hier kommt die sogenannte Back Electromotive Force (BEMF) zum Einsatz. Von den drei Phasen liegt ja zu jedem Zeitpunkt genau eine Phase in der Luft wie man am Diagramm oben erkennen kann. Aufgrund des drehenden Magnetfeldes im Motor wird an dieser Phase nun eine Spannung induziert. Und genau diese induzierte Spannung gibt nun Auskunft darüber, in welchem Winkel sich der Anker befindet, und daraus kann man dann auch den Zeitpunkt der nächsten Kommutierung bestimmen.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird aber auch noch die Sternmittelpunktspannung der drei Phasen benötigt, welche aber leider nicht direkt zur Verfügung steht. Das ist aber kein Problem, mit drei Widerständen kann man sich die selber erzeugen (siehe [[#BEMF-Schaltung]]).&lt;br /&gt;
&lt;br /&gt;
Jetzt sollten die BEMF-Spannungen die Sternmittelpunktspannung ständig kreuzen, was man dann mit einem Komparator erfassen kann. Und den Interrupt, den der Komparator auslöst, ist nun verantwortlich für die nächste Kommutierung.&lt;br /&gt;
Der Komparator wird natürlich nacheinander mit den drei Phasen gefüttert, es darf immer nur die Phase an den Komparator angeschlossen sein, die auch in der Luft hängt! In der Tabelle [[#Die 6 Zustände]] sieht man, welche zwei Spannungen der Komparator jeweils vergleichen muss.&lt;br /&gt;
&lt;br /&gt;
Als Komparator kann man übrigens den integrierten nehmen, den es in den AVRs gibt. Diese (alle?) haben auch den benötigten Multiplexer, um zwischen den drei Analogquellen wählen zu können. Näheres dazu im Abschnitt [[#Software]].&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Leistungsteil ===&lt;br /&gt;
&lt;br /&gt;
==== Treiber ====&lt;br /&gt;
&lt;br /&gt;
Um die drei notwendigen Zustände (&#039;&#039;Low&#039;&#039;, &#039;&#039;High&#039;&#039; und &#039;&#039;Floating&#039;&#039;) für jede der drei Phasen realisieren zu können, werden drei Halbbrücken mit Mosfets benötigt. Hier gibt es dann auch schon mehrere Varianten, wie man das aufbauen kann. Grundsätzlich muss man sich mal überlegen ob fertige FET-Treiber oder diskrete Treiber verwendet werden sollen. Die FET-Treiber haben einige sehr schöne Vorteile, deshalb sollte man diese meiner Meinung nach bevorzugen.&lt;br /&gt;
&lt;br /&gt;
Die Vorteile wären:&lt;br /&gt;
&lt;br /&gt;
* Integrierter Kurzschlussschutz mit dead time, ein Softwarefehler kann die FETs nicht zerstören. Das kann in der Entwicklungsphase sehr von Vorteil sein :-)&lt;br /&gt;
* Die FETs können mit ordentlicher Geschwindigkeit geschaltet werden, und die Mikrocontroller-Ports werden trotzdem nicht stark belastet. So kann die Wärmeentwicklung der FETs noch etwas reduziert werden.&lt;br /&gt;
* Bei Treibern die mit nur einem Eingang zwischen Lowside und Highside Mosfets toggeln (z.B. IR2104), ist der sogenannte „aktiver Freilauf“ bereits in Hardware realisiert und ermöglicht so mit wenig Aufwand eine extrem niedrige Erwärmung der Mosfets. Das ermöglicht schon sehr grosse Ströme auch ohne Kühlkörper!&lt;br /&gt;
* Es können günstigere Mosfets verwendet werden, es müssen keine TTL-Kompatible FETs sein. Auch ist eine niedrige Gatekapazität nicht so von Bedeutung wie bei direkter Ansteuerung mit einem Mikrocontroller.&lt;br /&gt;
* Je nach dem welchen Treiber man verwendet, kann der Softwareaufwand und die Fehleranfälligkeit deutlich reduziert werden.&lt;br /&gt;
&lt;br /&gt;
Nachteile von Treiber sind:&lt;br /&gt;
&lt;br /&gt;
* Mehr Bauteile auf der Platine.&lt;br /&gt;
* Vermutlich insgesamt etwas teurer, auch wenn die FETs günstiger sind.&lt;br /&gt;
* Bei vielen Treibern ist eine Minimalspannung von ca. 10V notwendig, damit sie funktionieren. Bei einem fast leeren 3S LiPo Akku könnte das vielleicht schon kritisch werden. Auch darf z.B. beim IR2104 eine Spannung von 20V nicht überschritten werden. Daher kommt (ohne StepUp und StepDown Wandler) eigentlich fast nur noch ein 4S Akku in Frage. Möchte man einen grösseren Eingangsspannungsbereich haben muss man noch entsprechende Spannungsregler einbauen.&lt;br /&gt;
&lt;br /&gt;
Ich persönlich habe es schon mit einem IR2104S probiert, dieser erscheint mir sehr geeignet für diese Aufgabe. Ich betreibe ihn mit einem 4S LiPo, damit läuft das Teil perfekt. Kann ich nur weiterempfehlen!&lt;br /&gt;
&lt;br /&gt;
==== Beispielschaltung ====&lt;br /&gt;
[[Datei:BLDC_Leistungsteil_1.png|thumb|right|300px|Beispiel einer Halbbrücke inklusive Strommessung]]&lt;br /&gt;
Hier ein Beispiel, wie der Leistungsteil einer Phase aussehen könnte.&lt;br /&gt;
&lt;br /&gt;
Für die exakte Beschaltung der Treiber muss man natürlich dessen Datenblatt studieren!&lt;br /&gt;
&lt;br /&gt;
Hier sieht man auch gleich noch die Strommessung, die man natürlich nicht für jede Phase einzeln aufbauen muss. Man kann sie sogar ganz weglassen, sie könnte aber nützlich sein um eine Überlast des Motors erkennen zu können.&lt;br /&gt;
&lt;br /&gt;
Der Widerstand R20 ist dazu da, dass auf dem Treiber das PWM-Signal liegt, sobald die Leitung „IN_A“ in der Luft hängt (uC Pin als Eingang definiert). So wird nur ein einziger PWM-Ausgang vom Mikrocontroller benötigt für alle drei Phasen, erfordert also kein Soft-PWM oder sonst irgend ein Murks. Diese Schaltung habe ich übrigens beim Mikrokopter-Projekt abgeschaut.&lt;br /&gt;
&lt;br /&gt;
Übrigens muss an die Versorgung unbedingt noch ein grosser Elko gehängt werden, am besten möglichst nahe an die Mosfets (keine langen Leitungen zwischen Elko und Mosfets). Die erforderliche Kapazität hängt davon ab, wieviel Strom der Motor braucht. Bei kleinen bis mittleren Motoren sollten so 220uF bis 680uF ausreichend sein.&lt;br /&gt;
&lt;br /&gt;
=== BEMF-Schaltung ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:BLDC_BEMF_schaltung.png|thumb|right|300px|BEMF-Schaltung]]&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Teil ist aber auch die BEMF-Schaltung. Dabei wird häufig die Schaltung vom Mikrokopter eingesetzt (siehe Schaltung rechts).&lt;br /&gt;
&lt;br /&gt;
Die Schaltung besteht erstmal aus drei Spannungsteilern, die die Phasenspannungen auf ein Spannungsniveau heruntersetzen, das man auf die Mikrokontrollereingänge legen darf. Keramikkondensatoren glätten diese Spannungen, weil die aufgrund der PWM sonst sehr stark ausschlagen. Dann gehen diese drei Spannungen (&#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039;) auf drei ADC-Eingänge des Mikrocontrollers.&lt;br /&gt;
&lt;br /&gt;
Und dann sind da noch die drei Widerstände, die aus den Spannungen &#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039; einen virtuellen Sternmittelpunkt bilden. Diese Mittelpunktspannung (&#039;&#039;MITTEL&#039;&#039;) kommt dann auf den Komparatoreingang &#039;&#039;AIN0&#039;&#039; vom AVR. Diese Spannung soll der Komparator später dann mit jeweils einer der Spannungen &#039;&#039;NULL_A&#039;&#039;, &#039;&#039;NULL_B&#039;&#039; und &#039;&#039;NULL_C&#039;&#039; vergleichen um den Kommutierungszeitpunkt bestimmen zu können.&lt;br /&gt;
&lt;br /&gt;
Man kann die Widerstands-/ und Kapazitätswerte auch noch anpassen. Bei höheren Eingangsspannungen muss man darauf achten, dass die Eingänge vom AVR keine zu hohe Spannung abkriegen! Ein Regler, den ich gekauft habe, hat einiges höhere Widerstandswerte und kommt sogar ohne Kondensatoren aus. Hier hat man also durchaus noch Spielraum um ein bisschen zu tüfteln, für den Anfang ist die abgebildete Schaltung aber bestens geeignet.&lt;br /&gt;
&lt;br /&gt;
=== Mikrocontroller ===&lt;br /&gt;
&lt;br /&gt;
Als Mikrocontroller sind viele Typen aus der AVR-Serie geeignet. Bei der BrushlessCtrl wird zum Beispiel ein ATMega168 eingesetzt. Mit diesem habe ich auch mal angefangen, der scheint wirklich gut geeignet zu sein. Es reicht aber auch ein ATMega88 wenn man nicht alle möglichen Protokolle und Ansteuerungsarten (I2C, SPI, PPM) gleichzeitig einbauen will.&lt;br /&gt;
&lt;br /&gt;
Viele Regler verwenden auch einen AT90PWM, vorallem wenn mehrere PWM-Kanäle gebraucht werden.&lt;br /&gt;
&lt;br /&gt;
Übrigens wird bei käuflichen Reglern extrem häufig ein ATMega8 eingesetzt! Wenn man nur Software entwickeln möchte kann man auch einen solchen Regler kaufen und das eigene Programm aufspielen. Bei den [[#Weblinks]] findet man dazu auch noch Informationen.&lt;br /&gt;
&lt;br /&gt;
Um eine Raumzeigermodulation zu implementieren wird dann aber vermutlich schon ein 32-Bit Mikrocontroller nötig sein. Aber wie schon erwähnt ist für ein Modellbaumotor eine Raumzeigermodulation keinesfalls ein must-have.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Bei der Software kommt es jetzt natürlich sehr stark darauf an, wie die Hardware aufgebaut ist. Ich möchte hier aber nicht auf jede Variante eingehen, das gäbe viel zu viel Arbeit. Auch will ich ja keinen fertigen Code bereitstellen, sondern nur Hinweise und Tipps geben. Wer nicht selber programmieren will, der kann ja mal die Mikrokopter-Firmware herunterladen, die älteren Versionen davon gibt es auf der Mikrokopter-Seite zum downloaden.&lt;br /&gt;
&lt;br /&gt;
Wichtig sind auf jeden Fall [[#Die 6 Zustände]]. Der Mikrocontroller muss die Phasen jeweils nacheinander so wie in der Tabelle ansteuern. Das ist soweit ja kein Problem, schwierig ist aber immer der richtige Zeitpunkt für die Kommutierung zu finden.&lt;br /&gt;
&lt;br /&gt;
Falls man einen IR2104 oder einen ähnlichen Treiber verwendet, würde die Software ungefähr so aussehen:&lt;br /&gt;
&lt;br /&gt;
* Beim Programmstart wird schonmal der PWM-Ausgang mit einem Timer aktiviert. Die Frequenz liegt normalerweise so im Bereich 12 bis 25kHz. Ich selber verwende 20kHz, da hört man dann auch dieses Pfeifen nicht mehr.&lt;br /&gt;
* Der Interrupt vom Analogkomparator muss aktiviert werden, um die Kommutierungszeitpunkte bestimmen zu können.&lt;br /&gt;
* Dann habe ich eine Funktion, welche den Zustand (1 bis 6) eins weiterschaltet und die Ausgänge entsprechend setzt. Dabei werden die Pins, die das PWM-Signal enthalten sollen, einfach als Eingang definiert, wie ich schonmal erwähnte.&lt;br /&gt;
* Wichtig ist ausserdem, dass bei jeder Kommutierung auch noch der richtige ADC-Kanal auf den Komparator geleitet wird per Multiplexer. Dieser Kanal wird bei jeder Kommutierung eins weitergeschaltet.&lt;br /&gt;
* Danach muss nur noch gewartet werden bis der Analogkomparator einen Interrupt auslöst. Sobald dies geschieht, wird die nächste Kommutierung per Timer (30° Verzögerung) ausgelöst, und das Spiel beginnt wieder von vorne.&lt;br /&gt;
&lt;br /&gt;
Je nach Komplexität des BLDC Controllers und des damit verbundenen Programmieraufwands ist es aber auch möglich (wie von sehr vielen Nutzern implementiert) die Kommutierung direkt nach dem Analog-Komparator Interrupt auszulösen - d.h. mit 0° Verzögerung. In diesem Fall spricht man von Phasenvoreilender (phaseadvance) Ansteuerung. Der Motor kann dadurch eine höhere Maximaldrehzahl erreichen, jedoch mit geringerem Drehmoment - die Stromaufnahme ist höher und der Wirkungsgrad geringer (siehe [http://ww1.microchip.com/downloads/en/AppNotes/01083a.pdf AN1083, Seite 18]). Der Effekt ist ähnlich dem Feldschwächebetrieb einer Asynchronmaschine.&lt;br /&gt;
&lt;br /&gt;
Die Drehzahl des Motors lässt sich jetzt ganz bequem ändern, indem man den Duty-Cycle des PWM-Signales verändert. Der Motor beschleunigt bzw. bremst dann von alleine. Übrigens ist es empfehlenswert, den Sollwert etwas zu &amp;quot;dämpfen&amp;quot;, damit keine schlagartigen Änderungen des Duty-Cycles erfolgen können. Vor allem schlagartige Abbremsmanöver können starke Überspannungsspitzen hervorrufen, die den Regler zerstören können!&lt;br /&gt;
&lt;br /&gt;
=== Anlauf ===&lt;br /&gt;
&lt;br /&gt;
So, das war jetzt die Beschreibung für einen Motor, der bereits läuft. &#039;&#039;&#039;Bis&#039;&#039;&#039; der Motor allerdings mal dreht, muss man anders vorgehen, weil der stillstehende Motor ja keine Komparator-Interrupts auslöst, da keine BEMF vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
Daher muss man den Motor zuerst mit einem starren Drehfeld auf eine gewisse Drehzahl beschleunigen, wie bei einem Schrittmotor. Sobald eine genügend hohe Drehzahl erreicht wurde, kann man in den geregelten Betrieb schalten. Am besten schaltet man dazu einfach alle Phasen ab und aktiviert den Komparator. Sobald der erste Interrupt vom Komparator ausgelöst wird, werden die Phasen wieder eingeschaltet.&lt;br /&gt;
&lt;br /&gt;
Der ganze Startvorgang ist aber schon eine Wissenschaft für sich. Es braucht (nach meiner Erfahrung) viel Zeit und Nerven, bis alles richtig funktioniert. Man kann aber am Anfang den Motor auch von Hand anwerfen, das geht viel einfacher als mit einer Zwangskommutierung. Ein Oszilloskop ist eigentlich auch absolut notwendig, um analysieren zu können was der Regler und die BEMF genau macht. &lt;br /&gt;
&lt;br /&gt;
Ganz wichtig aber an dieser Stelle: &#039;&#039;&#039;Wenn der Motor mit einem starren Drehfeld angesteuert wird, sieht die BEMF alles andere als schön aus!&#039;&#039;&#039; Das liegt daran, dass der Motor bei jeder Kommutierung beschleunigt, und danach wieder abgebremst wird, der Motor läuft einfach nicht „rund“. Wenn ihr also irgendwas komisches auf dem Oszilloskop seht, ist das kein Fehler in eurer Schaltung, das ist normal bei Zwangskommutierung!&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr die BEMF auf dem Oszilloskop anschauen wollt, könnt Ihr entweder den Motor einfach von Hand drehen, oder ihr dreht den Motor mit Zwangskommutierung hoch, und schaltet dann alle Phasen ab (nicht auf GND, in der Luft hängend). Direkt nach dem Abschalten der Phasen sollte die BEMF einen relativ schönen Drehstrom zeigen (muss ich selbst noch kontrollieren ob das wirklich der Fall ist :-) )&lt;br /&gt;
Anmerkung JB: Gerade an einem Festplattenmotor getestet, bei Drehung von der Hand lassen bis zu 600mVss sinusförmig auf dem Oszilloskop blicken, Frequenz bis zu 20 Hz, muss sich umeinen mehrpoligen Motor Handeln, so schnell hab ich nicht gedreht ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bis jetzt habe ich es mit dieser Variante aber noch nicht so richtig geschafft, einen brauchbaren Anlaufvorgang hinzukriegen. Ich glaube auch, dass gekaufte Regler das nicht so machen. Diese scheinen nur einen kräftigen Strom auf eine Phase zu geben, und werten dann die entstandene BEMF aus, aus der dann berechnet werden kann, welche Phase als nächstes bestromt werden muss. So richtig habe ich das aber noch nicht angeschaut, &#039;&#039;&#039;vielleicht weiss hier jemand besser Bescheid und könnte es hier beschreiben?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Prinzip eines Anlaufvorgangs eines sensorlosen BLDC ist folgendes:&lt;br /&gt;
- Man präge ein Feld ein, bei dem angenommen werden muss, dass der Motor diesem ab Stillstand auch folgt.&lt;br /&gt;
- Sobald diese Annahme durch Auftreten eines durch BEMF erzeugten Ereignisses bestätigt wird, kann in den geregelten Betrieb umgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
Es ist mitunter Hilfreich zum Starten eine Delay-Tabelle zu verwenden, damit braucht man sich nicht durch eine feste Frequenz-Vorgabe selbst zu bremsen. Dauert evtl. etwas beim Einstellen,&lt;br /&gt;
soll aber laut Atmel-Application-Note für BLCD-Motoren funktionieren. Den Rotor vorher noch durch Bestromen einer Phase und danach warten in eine definierte Anfangsposition drehen.&lt;br /&gt;
&lt;br /&gt;
=== Komparator ===&lt;br /&gt;
&lt;br /&gt;
Wenn man sich für die Kommutierungs-Erkennung per Analogkomparator entscheidet, muss man noch ein sehr nützliches Feature von den AVRs kennen. Da man ja abwechslungsweise drei verschiedene Signale (BEMF_A...C) mit der Mittelpunktspannung vergleichen muss, aber nur ein einziger Analogkomparator vorhanden ist, muss man den sogenannten Analog-Multiplexer benutzen. Mit diesem in den AVRs integrierten Multiplexer kann man nun die Spannung am Pin &amp;quot;AIN0&amp;quot; mit einem beliebigen Analogeingang (ADC0...ADC7) vergleichen. Natürlich kann man nicht mehrere Kanäle gleichzeitig anwählen, da es nur einen einzigen Komparator gibt. Das ist für unsere Anwendung allerdings kein Problem, wir müssen immer nur eines der BEMF-Signale mit der Mittelpunktspannung vergleichen.&lt;br /&gt;
&lt;br /&gt;
Näheres dazu und wie man den Multiplexer benutzt erfährt man im Datenblatt des verwendeten Mikrocontrollers. Der entsprechende Abschnitt heisst &amp;quot;Analog Comparator Multiplexed Input&amp;quot; (unter &amp;quot;Analog Comparator&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Schnittstellen ===&lt;br /&gt;
&lt;br /&gt;
Man kann nun den Sollwert der Drehzahl wahlweise über einen PPM-Eingang, über [[UART]], [[SPI]], [[I2C]] oder mit einem Potentiometer vorgeben. Welche Ansteuerung man wählt hängt davon ab, wie und wo der Motor eingesetzt werden soll und ist deshalb jedem selber überlassen.&lt;br /&gt;
&lt;br /&gt;
== Bildmaterial ==&lt;br /&gt;
=== Oszillogramme ===&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Phasen_PWM.png|300px]]&lt;br /&gt;
&lt;br /&gt;
Die drei Phasen während dem geregelten Betrieb, die BEMF ist sehr schön zu erkennen (immer zwischen den Zuständen &amp;quot;PWM&amp;quot; und &amp;quot;LOW&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Phasen_Vollgas.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So sehen die drei Phasen bei Vollgas aus (100% PWM). Die BEMF ist jetzt sogar so steil, dass sie die beiden Zustände &#039;&#039;Low&#039;&#039; und &#039;&#039;High&#039;&#039; mit einer fast perfekten Geraden verbindet!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_BEMF_richtig.png|300px]]&lt;br /&gt;
&lt;br /&gt;
* Gelb: Phase A, BEMF sehr schön erkennbar&lt;br /&gt;
* Blau: Mittelpunktspannung&lt;br /&gt;
* Rot: BEMF von Phase A (nach der BEMF-Schaltung!)&lt;br /&gt;
* Grün: Komparator-Interrupts (steigende Flanke) Jeder dritte Interrupt gehört zur Phase A, die anderen Interrupts stammen von den anderen Phasen, die nicht auf dem Bild zu sehen sind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_BEMF_falsch.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So kann z.B. die BEMF während der Zwangskommutierung aussehen. Dadurch werden auch zu viele Komparator-Interrupts (Grün, jede Flanke) ausgelöst. Kein schöner Anblick...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Oszillogramm_Anlauf_1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
So sieht der Anlaufvorgang bei einem gekauften Regler aus. eine extrem kurze Geschichte im Vergleich mit meinen paar Umdrehungen mit Zwangskommutierung. Wer kennt das Geheimnis? &lt;br /&gt;
Sieht so aus als würde für eine kurze Zeit Strom eingeprägt um den Motor in eine definierte, stehende Position zu bringen. Danach wird weiter kummutiert, der Motor dreht an und es wird sofort ueber die BEMF kommutiert.&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
&lt;br /&gt;
Als Anregung, wie so ein Regler aussehen könnte (nur 40x26mm klein, inklusive Optokoppler, drei Treibern und drei schönen Stecker!):&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Eagle3d_top_1.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
[[Datei: BLDC_Eagle3d_bot_1.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Der HCPL-0600 auf der Unterseite ist übrigens ein Optokoppler um das PPM-Eingangssignal galvanisch zu entkoppeln. Ist nicht zwingend nötig, war aber grad Platz da... :-)&lt;br /&gt;
&lt;br /&gt;
== Siehe Auch ==&lt;br /&gt;
* [[Sensorlose_BLDC_Ansteuerung]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/248509 Diskussion zum Artikel]&lt;br /&gt;
* [[BLDC Demo Board]]&lt;br /&gt;
* [[Treiber]]&lt;br /&gt;
* [[Mosfet-Übersicht]]&lt;br /&gt;
* [[Leiterbahnbreite]] Unbedingt beachten bei grösseren Strömen!&lt;br /&gt;
* [[Kühlkörper]] Bei sehr hohen Strömen evtl. nötig&lt;br /&gt;
* Drehzahlerfassung [http://www.mikrocontroller.net/topic/253539]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.atmel.com/Images/doc8012.pdf AppNote AVR444 von Atmel]&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/00885a.pdf BLDC Theorie(AN885 Microchip)]&lt;br /&gt;
* [http://www.mikrokopter.de/ucwiki/BrushlessCtrl BrushlessCtrl vom Mikrokopter]&lt;br /&gt;
* [http://svn.mikrokopter.de/listing.php?repname=BL-Ctrl&amp;amp; Software vom Mikrokopter Brushless-Regler]&lt;br /&gt;
* [http://home.versanet.de/~b-konze/ Die Seite von B. Konze, einer der Pioniere in diesem Bereich]&lt;br /&gt;
* [http://www.rcgroups.com/forums/showthread.php?t=1513678 Ein Thema auf rcgroups.com (Englisch) wo einige käuflichen Regler näher angeschaut wurden und eine eigene Firmware angeboten wird]&lt;br /&gt;
* [http://rmmx.gmxhome.de/bldchv/start.html Ein Regler-Projekt für etwas grössere Motoren]&lt;br /&gt;
* [http://www.fc00.de/quadrokopter_6_kw.htm Regler für sehr grosse Motoren]&lt;br /&gt;
* [http://ww1.microchip.com/downloads/en/AppNotes/01083a.pdf Appnote AN1083 von Microchip, sehr detailliert]&lt;br /&gt;
[[Kategorie:Motoren]]&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87820</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87820"/>
		<updated>2015-03-09T10:10:18Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Oszillogramme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87819</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87819"/>
		<updated>2015-03-09T10:10:05Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Grundlegendes zum Artikel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments Artikel [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87818</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87818"/>
		<updated>2015-03-09T10:09:44Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Oszillogramme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments InstaSPIN [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Startvorgang.jpg&amp;diff=87817</id>
		<title>Datei:Startvorgang.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Startvorgang.jpg&amp;diff=87817"/>
		<updated>2015-03-09T10:09:28Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87816</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87816"/>
		<updated>2015-03-09T10:09:19Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Oszillogramme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments InstaSPIN [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Startvorgang.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87815</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87815"/>
		<updated>2015-03-09T10:08:42Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Oszillogramme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments InstaSPIN [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:BEMF2.jpg&amp;diff=87814</id>
		<title>Datei:BEMF2.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:BEMF2.jpg&amp;diff=87814"/>
		<updated>2015-03-09T10:08:25Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87813</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87813"/>
		<updated>2015-03-09T10:08:16Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Oszillogramme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments InstaSPIN [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:BEMF2.jpg]]&lt;br /&gt;
[[Datei:Startvorgang.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:BEMF1.jpg&amp;diff=87812</id>
		<title>Datei:BEMF1.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:BEMF1.jpg&amp;diff=87812"/>
		<updated>2015-03-09T10:07:10Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87811</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87811"/>
		<updated>2015-03-09T10:06:55Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Oszillogramme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments InstaSPIN [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:BEMF1.jpg]]&lt;br /&gt;
[[Datei:BEMF2.jpg]]&lt;br /&gt;
[[Datei:Startvorgang.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87810</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87810"/>
		<updated>2015-03-09T10:06:14Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Oszillogramme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments InstaSPIN [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87809</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87809"/>
		<updated>2015-03-09T10:05:41Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Oszillogramme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments InstaSPIN [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
[[BEMF1.jpg]]&lt;br /&gt;
[[BEMF2.jpg]]&lt;br /&gt;
[[Startvorgang.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87808</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87808"/>
		<updated>2015-03-09T10:04:46Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments InstaSPIN [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87807</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87807"/>
		<updated>2015-03-09T10:04:25Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Oszillogramme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments InstaSPIN [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BEMF1.jpg|BEMF1&lt;br /&gt;
Datei:BEMF2.jpg|BEMF2&lt;br /&gt;
Datei:Startvorgang.jpg|Startvorgang&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Programm.zip&amp;diff=87806</id>
		<title>Datei:Programm.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Programm.zip&amp;diff=87806"/>
		<updated>2015-03-09T09:38:54Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87805</id>
		<title>Sensorlose BLDC Ansteuerung</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Sensorlose_BLDC_Ansteuerung&amp;diff=87805"/>
		<updated>2015-03-09T09:38:31Z</updated>

		<summary type="html">&lt;p&gt;Corrtexx: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlegendes zum Artikel ==&lt;br /&gt;
Dieser Artikel ist im wesentlichen als Ergänzung zu:&lt;br /&gt;
*Brushless-Controller für Modellbaumotoren [http://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren]&lt;br /&gt;
zu verstehen. Es wird jedoch nicht mit dem analog Komparator, sondern mit dem ADC gearbeitet,&lt;br /&gt;
wie hier beschrieben:&lt;br /&gt;
*Texas Instruments InstaSPIN [https://www.youtube.com/watch?v=szgVUfyX8JM]&lt;br /&gt;
&lt;br /&gt;
== Einleitung==&lt;br /&gt;
Bei der sensorlosen Ansteuerung wird üblicherweise die BEMF der in der Luft hängenden Phase&lt;br /&gt;
des BLDCs ausgewertet, um den nächsten Kommutierungsschritt einzuleiten.&lt;br /&gt;
Hierbei treten diverse Probleme auf:&lt;br /&gt;
* Die BEMF ist bei niedrigen Drehzahlen nur sehr gering und von daher schwer zu erfassen&lt;br /&gt;
* Der BLDC muss häufig lange Zwangskommutiert werden, bevor er startet&lt;br /&gt;
* Die Inbetriebnahme ist umständlich und müßig&lt;br /&gt;
* Einkoppelde Störungen auf den analog Komparator durch die PWM&lt;br /&gt;
&lt;br /&gt;
== Abhilfe ==&lt;br /&gt;
Man integriert die BEMF Spannung. Dabei achtet man darauf, dass die BEMF-Spannung größer bzw. kleiner als Endstufenspannung/2 ist, bevor man anfängt zu integrieren.&lt;br /&gt;
Synchronisiert man seine Messung nun noch mit der PWM, so sind auch eingekoppelte Störungen kein nennenswertes Problem mehr.&lt;br /&gt;
&lt;br /&gt;
== Mikrocontroller ==&lt;br /&gt;
Bei der Wahl des µC entschied ich mich für meinen lieblings 8-Bit AVR, den  Atmegaxx8. Dieser, so dachte ich, hat genügend Ressourcen. Jedoch trat ein Problem auf, das mich im Nachhinein aber nur bedingt stört, da es ja funktioniert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der ADC ist zu langsam:&#039;&#039;&#039;&lt;br /&gt;
Der ADC eines normalen AVRs kann mit maximal 200kHz samplen. Bei 20MHz CPU Clock ergibt sich ein Prescaler von 128, somit läuft der ADC auf 156,25kHz. Eine Wandlung dauert somit 83,2µs. Demnach wählte ich eine PWM Frequenz von 10kHz (100µs Periodendauer, pfeift furchtbar) um noch etwas Reserven zu haben. Idealerweise müsste ich die BEMF auch mit 10kHz samplen, was ja grundsätzlich möglich wäre, wenn nicht noch andere Werte mit gesamplet werden müssten wie:&lt;br /&gt;
* Spannung an der Endstufe&lt;br /&gt;
* Strom&lt;br /&gt;
* Flussintegralgrenzwert&lt;br /&gt;
&lt;br /&gt;
Somit entschied ich mich, die BEMF mit 5kHz bzw. jede zweite Messung zu machen, und die anderen drei Werte nur jede 5KHz/3. Bei einer nächsten Version würde ich wohl auf einen STM32F4 zurück greifen. Dessen ADC(s) sind viel schneller und auch komfortabler zu bediehnen.&lt;br /&gt;
Der ADC des AVR wird von einem Timer automatisch gestartet (10KHz), welcher aber kurz vor Beginn des nächsten PWM-Zyklus den ADC startet.&lt;br /&gt;
&lt;br /&gt;
== Schaltung ==&lt;br /&gt;
Zur Schaltung gibt es im Wesentlichen nicht viel zu sagen. Die Endstufe besteht aus 6 MOSFETs und wird vom µC gesteuert. Ein 100mR Widerstand ermöglich eine Überwachung des Motorstroms; falls dieser zu hoch wird setzt die Strombegrenzung ein und die Endstufe wird kurz abgeschaltet. Es ist taktisch sinnvoll, sowohl BEMF-Spannungsteiler als auch Versoungsspannungsteiler im selben Verhältnis zu skalieren, so lassen sich die Werte direkt zueinander in Bezug setzen, ohne das herumskalieren zu müssen. Alle Bauteile mit &amp;quot;n.i.p.&amp;quot; sind nicht bestückt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Datei:BLDC Drive Power 1 .jpg|Endstufe&lt;br /&gt;
Datei:BLDC Drive Power 2 .jpg|Treiber&lt;br /&gt;
Datei:BLDC Drive uC .jpg|Mikrocontroller&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
Die Software ist in C geschrieben und wurde mit Atmel Studio entwickelt. Das Programm ist sehr überschaubar.&lt;br /&gt;
In der while(1)-Schleife werden Werte über die serielle Schnittstelle ausgegeben, das wars schon.&lt;br /&gt;
Der Rest spielt sich in der PWM-ISR ab, welche mit 10kHz aufgerufen wird:&lt;br /&gt;
&lt;br /&gt;
Als erstes wird das ADC-Register in Abhängigkeit vom letzten ADMUX ausgelsen. Anschliessend wird der MUX für die nächste Messung vorbereitet. Die eigentliche Messung wird jeweils kurz vorm Timerüberlauf gestartet, damit der ADC mit seiner Messung beginnt, kurz nachdem die PWM wieder von vorn beginnt (Der ADC benötigt durchaus etwa 12µs bis er misst, nachdem er sein Startsignal bekommen hat :-) ).&lt;br /&gt;
&lt;br /&gt;
Danach wird eigentlich nur noch geguckt, was mit den Werten los ist. Ist der Strom in Ordnung bzw. hat die BEMF schon U/2 über bzw. unterschritten und kann mit der Integration begonnen werden? &lt;br /&gt;
Wird die Integrationsgrenze überschritten wird weiter kommutiert.&lt;br /&gt;
&lt;br /&gt;
Für den Fall, dass der BLDC ungünstig steht und nicht sofort anläuft wird einmal &amp;quot;per Hand&amp;quot; bzw. alle 100ms eine Zwangskommutierung durchgeführt. In der Praxis muss eigentlich bei meinem 2 polpaarigen Modellbau BLDC nur 1x Zwangskommutiert werden bzw. manchmal auch garnicht.&lt;br /&gt;
&lt;br /&gt;
Da der Motor immer im Interrupt kommutiert, lässt sich auch recht bequem die Drehzahl errechnen indem man die Interrupts zwischen 6 Kommutierungen zählt. Daraus lässt sich dann die Drehzahl einfach berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; n = \frac{f_{pwm} \cdot 60}{Counts \cdot Polpaarzahl} &amp;lt;/math&amp;gt;{{clear}}&lt;br /&gt;
&lt;br /&gt;
wobei man natürlich gleich 60 und Polpaarzahl miteinander verrechnen könnte.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Programm.zip|miniatur|links]]&lt;br /&gt;
&lt;br /&gt;
== Oszillogramme ==&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
...&lt;/div&gt;</summary>
		<author><name>Corrtexx</name></author>
	</entry>
</feed>