MCU staat voor Microcontroller Unit. De afkorting van microcontroller in het Chinees, ook wel bekend als single-chip microcomputer, verwijst naar een chip die de frequentie en specificaties van de CPU op passende wijze verlaagt en perifere interfaces zoals geheugen, teller, USB, A/D-conversie, UART, PLC, DMA en zelfs LCD-drivercircuits integreert op één chip om een computer op chipniveau te vormen. Het kan verschillende combinaties van besturing uitvoeren voor diverse toepassingen, zoals mobiele telefoons, pc-randapparatuur, afstandsbedieningen, auto-elektronica, industriële stappenmotoren en robotarmbesturing. Een MCU is te zien in de afbeelding.
een
Een korte geschiedenis van de ontwikkeling van microcontrollers
De geschiedenis van microcontrollers is niet lang, maar ze hebben zich zeer snel ontwikkeld. De productie en ontwikkeling ervan zijn over het algemeen synchroon met de productie en ontwikkeling van microprocessors (CPU's). Sinds Intel Corporation uit de Verenigde Staten in 1971 de eerste 4-bits microprocessor op de markt bracht, kan de ontwikkeling ervan grofweg in vijf fasen worden verdeeld. Hieronder volgt een inleiding tot de ontwikkeling van microcontrollers door Intel Corporation.
1971 1976 ~
De beginfase van de ontwikkeling van microcontrollers. In november 1971 ontwierp Intel de Intel 4004, een 4-bits microprocessor met 2,000 transistors per chip, uitgerust met RAM, ROM en een schuifregister. Dit was de eerste MCS-4 microprocessor. Vervolgens bracht Intel de 8-bits microprocessor Intel 8008 op de markt, en ook andere 8-bits microprocessors werden door andere bedrijven geïntroduceerd.
1976 1980 ~
Microcontrollers met lage prestaties. De MCS-48-serie, die in 1976 door Intel werd gelanceerd, is hier een goed voorbeeld van. Deze maakt gebruik van een monolithische structuur die een 8-bits CPU, een 8-bits parallelle I/O-interface, een 8-bits timer/teller, RAM en ROM integreert op één halfgeleiderchip. Hoewel het adresseerbereik beperkt is (niet meer dan 4 KB), er geen seriële I/O is, de RAM- en ROM-capaciteit klein is en het interruptsysteem relatief eenvoudig is, voldoen de functies ervan aan de behoeften van algemene industriële besturing en intelligente instrumenten en meters.
1980 1983 ~
Fase van krachtige microcontrollers. De krachtige 8-bits microcontrollers die in deze fase op de markt kwamen, beschikken over het algemeen over seriële poorten, meerlaagse interruptverwerkingssystemen en meerdere 16-bits timers/tellers. De capaciteit van het on-chip RAM en ROM is vergroot en het adresseerbereik kan 64 KB bereiken. Sommige chips hebben ook een A/D-conversie-interface.
1983 tot eind jaren 1980
16-bits microcontrollerfase. In 1983 lanceerde Intel de krachtige 16-bits microcontroller MCS-96-serie. Dankzij de toepassing van de nieuwste productietechnologieën bereikte de chipintegratiegraad maar liefst 120,000 transistors per chip.
1990s
Microcontrollers ontwikkelen zich op alle vlakken van integratie, functionaliteit, snelheid, betrouwbaarheid en toepassingsgebieden naar een hoger niveau.
twee
Classificatie en toepassing van microcomputers op één chip
Microcontrollers (MCU's) kunnen op basis van hun geheugentype in twee categorieën worden verdeeld: chips zonder ingebouwd ROM en chips met ingebouwd ROM. Chips zonder ingebouwd ROM vereisen een externe EPROM voordat ze kunnen worden gebruikt (typisch de 8031). Chips met ingebouwd ROM worden onderverdeeld in typen met ingebouwde EPROM (typische chip is de 87C51), typen met ingebouwde mask-ROM (typische chip is de 8051), typen met ingebouwde flashgeheugen (typische chip is de 89C51) en andere typen.
Afhankelijk van het doel kunnen ze worden onderverdeeld in algemene en specifieke typen; afhankelijk van de breedte van de databus en de lengte van de databytes die tegelijk kunnen worden verwerkt, kunnen ze worden onderverdeeld in 8-, 16- en 32-bits microcontrollers.
Momenteel is de grootste binnenlandse markt voor microcontrollers (MCU's) te vinden in de consumentenelektronica, gevolgd door de industriële sector en de automobielelektronica. Consumentenelektronica omvat huishoudelijke apparaten, televisies, spelconsoles, audio- en videosystemen, enzovoort. Industriële toepassingen omvatten slimme huizen, automatisering, medische toepassingen en de opwekking en distributie van nieuwe energie. De automobielsector omvat aandrijfsystemen en veiligheidscontrolesystemen voor auto's.
drie
Basisfuncties van een microcontroller
Voor de meeste microcontrollers zijn de volgende functies het meest voorkomend en basaal. De beschrijving ervan kan per microcontroller verschillen, maar in essentie komen ze op hetzelfde neer:
1. Timer (timer): Hoewel er veel soorten timers zijn, kunnen ze worden onderverdeeld in twee categorieën: een type is de timer met vaste tijdsintervallen, dat wil zeggen dat de timing door het systeem wordt ingesteld en niet door het gebruikersprogramma kan worden geregeld. Het systeem biedt alleen een aantal vaste tijdsintervallen waaruit het gebruikersprogramma kan kiezen, zoals 32 Hz, 16 Hz, 8 Hz, enz. Dit type timer komt vaker voor in 4-bits microcontrollers en kan daarom worden gebruikt voor het implementeren van klok-, timing- en andere gerelateerde functies.
Het andere type is de programmeerbare timer. Zoals de naam al suggereert, kan de timing van dit type timer worden geregeld door het programma van de gebruiker. De besturingsmethoden omvatten: selectie van de klokbron, selectie van de frequentiedeling (prescale) en het instellen van een presetnummer. Sommige microcontrollers hebben alle drie tegelijk, terwijl andere er slechts één of twee hebben. Dit type timer is zeer flexibel in gebruik en de toepassingsmogelijkheden veranderen voortdurend. Een van de meest voorkomende toepassingen is het gebruik ervan voor het implementeren van PWM-uitvoer.
Omdat de klokbron vrij gekozen kan worden, wordt dit type timer doorgaans gecombineerd met een gebeurtenisteller.
2. I/O-poorten: Elke microcontroller (MCU) heeft een bepaald aantal I/O-poorten. Zonder I/O-poorten verliest de MCU het communicatiekanaal met de buitenwereld. Afhankelijk van de configureerbaarheid van de I/O-poorten kunnen ze worden onderverdeeld in de volgende typen:
Pure input- of pure outputpoort: Dit type I/O-poort wordt bepaald door het hardwareontwerp van de microcontroller. Het kan alleen input of output zijn en software kan niet worden gebruikt voor realtime-instellingen.
Directe lees- en schrijf-IO-poorten: De IO-poort van de MCS-51 behoort bijvoorbeeld tot dit type IO-poort. Wanneer de leesinstructie voor de IO-poort wordt uitgevoerd, fungeert deze als invoerpoort; wanneer de schrijfinstructie voor de IO-poort wordt uitgevoerd, fungeert deze automatisch als uitvoerpoort.
Programmeren om de in- en uitvoerrichting in te stellen: De in- of uitvoer van dit type I/O-poort wordt door het programma ingesteld op basis van de feitelijke behoeften. De toepassing is relatief flexibel en kan diverse busniveau-toepassingen realiseren, zoals I2C-bussen, verschillende LCD- en LED-driverbesturingsbussen, enzovoort.
Bij het gebruik van I/O-poorten is het belangrijk om rekening te houden met het volgende: voor de ingangspoort moet een duidelijk niveausignaal aanwezig zijn om te voorkomen dat het signaal gaat zweven (dit kan worden bereikt door een pull-up- of pull-downweerstand toe te voegen); voor de uitgangspoort moet het uitgangsstatusniveau rekening houden met de externe aansluitcondities, en er moet voor worden gezorgd dat er geen stroom wordt getrokken of afgevoerd in de stand-by- of statische toestand.
3. Externe interrupt: Externe interrupts zijn ook een basisfunctie van de meeste microcontrollers. Ze worden over het algemeen gebruikt voor het realtime triggeren van signalen, het bemonsteren van gegevens en het detecteren van de status. De interruptmethoden omvatten triggering op de stijgende flank, triggering op de dalende flank en triggering op het niveau. Externe interrupts worden over het algemeen geïmplementeerd via ingangspoorten. Als het een I/O-poort is, wordt de interruptfunctie alleen ingeschakeld wanneer deze als ingang is ingesteld; als het een uitgangspoort is, wordt de externe interruptfunctie automatisch uitgeschakeld (er zijn enkele uitzonderingen in de ATiny-serie van ATMEL, die de interruptfunctie ook kunnen activeren wanneer het een uitgangspoort is). De toepassingen van externe interrupts zijn als volgt:
Detectie van externe triggersignalen: Eén daarvan is gebaseerd op realtime-vereisten, zoals de aansturing van thyristoren, de detectie van plotselinge signalen, enz., terwijl de andere de behoefte aan energiebesparing betreft.
Meting van de signaalfrequentie: Om ervoor te zorgen dat het signaal niet verloren gaat, is een externe interrupt de ideale oplossing.
Gegevensdecodering: In de wereld van afstandsbedieningstoepassingen is het, om de ontwerpkosten te drukken, vaak nodig om software te gebruiken voor het decoderen van diverse gecodeerde gegevens, zoals de decodering van Manchester- en PWM-codering.
Toetsdetectie en systeemontwaking: Microcontrollers die in de slaapstand gaan, moeten over het algemeen worden gewekt door externe interrupts. De meest eenvoudige manier is door op een toets te drukken, wat leidt tot niveauveranderingen.
4. Communicatie-interface: De communicatie-interface die door de microcontroller wordt aangeboden, omvat over het algemeen de SPI-interface, UART, I2C-interface, enz., die hieronder worden beschreven:
SPI-interface: Dit type interface is de meest basale communicatiemethode die door de meeste microcontrollers wordt aangeboden. De gegevensoverdracht wordt geregeld door een synchrone klok. De signalen omvatten: SDI (seriële data-ingang), SDO (seriële data-uitgang), SCLK (seriële klok) en een Ready-signaal; in sommige gevallen is er geen Ready-signaal. Dit type interface kan werken in master- of slave-modus. Simpel gezegd, het hangt ervan af wie het kloksignaal levert. De partij die de klok levert is de master en de andere partij is de slave.
UART (Universal Asynchronous Receive Transmit): Dit is de meest basale asynchrone transmissie-interface. Het heeft slechts twee signaallijnen, Rx en Tx. Het basisdataformaat is: Startbit + Databit (7-bits/8-bits) + Pariteitsbit (even, oneven of geen) + Stopbit (1-2 bits). De tijd die één databit in beslag neemt, wordt de baudrate genoemd.
Bij de meeste microcontrollers kunnen de lengte van de databits, de datacontrolemodus (oneven controle, even controle of geen controle), de lengte van de stopbit en de baudrate flexibel worden ingesteld via programmaprogrammering. De meest gebruikte methode voor dit type interface is communicatie met de seriële poort van een pc.
I2C-interface: I2C is een datatransmissieprotocol ontwikkeld door Philips. Het maakt gebruik van twee signalen: SDAT (seriële data-invoer en -uitvoer) en SCLK (seriële klok). Het grootste voordeel is dat meerdere apparaten op deze bus kunnen worden aangesloten en via adressen kunnen worden geïdentificeerd en benaderd. Een ander groot voordeel van de I2C-bus is dat deze zeer gemakkelijk via software via de I/O-poort kan worden geïmplementeerd. De transmissiesnelheid wordt volledig bepaald door SCLK, die snel of langzaam kan zijn, in tegenstelling tot de UART-interface, die strikte snelheidseisen stelt.
5. Watchdog (watchdogtimer): De watchdog is ook een basisconfiguratie van de meeste microcontrollers (sommige 4-bits microcontrollers hebben deze functie mogelijk niet). De watchdog van de meeste microcontrollers kan alleen worden gereset door het programma, maar niet worden uitgeschakeld (sommige worden ingesteld tijdens het programmeren, zoals de Microchip PIC-serie microcontrollers), en sommige microcontrollers gebruiken een specifieke methode om te bepalen of deze moet worden ingeschakeld, zoals de Samsung KS57-serie. Zolang het programma toegang heeft tot het watchdogregister, wordt deze automatisch ingeschakeld en kan deze niet meer worden uitgeschakeld. Over het algemeen kan de reset-tijd van de watchdog programmeerbaar worden ingesteld. De meest basale toepassing van de watchdog is het bieden van een zelfherstellende functie voor microcontrollers die crashen als gevolg van onverwachte storingen.
Vier
Wereldwijde fabrikant van gangbare microcontrollers
(Gerangschikt in willekeurige volgorde, georganiseerd per grote fabrikant. Mocht er iets ontbreken, voeg het dan toe in het opmerkingenveld.)
Europa en Amerika
1. Freescale+NXP (Freescale+NXP): Nederland, levert voornamelijk 16-bits en 32-bits microcontrollers. Toepassingen: auto-elektronica, led- en algemene verlichting, gezondheidszorg, multimediaconvergentie, huishoudelijke apparaten en elektrisch gereedschap, gebouwautomatisering, motorbesturing, voedingen en stroomomvormers, energie en slimme netwerken, automatisering, computer- en communicatie-infrastructuur.
2. Microchip+Atmel (Microchip Technology + Atmel): Verenigde Staten, levert voornamelijk 16-bits en 32-bits microcontrollers. Toepassingen: auto-elektronica, industrieel gebruik, motorbesturing, auto's, gebouwautomatisering, huishoudelijke apparaten, home entertainment, industriële automatisering, verlichting, Internet of Things, slimme energie, mobiele elektronische apparatuur, computerperiferie.
3. Cypress+Spansion (Cypress + Spansion Semiconductor): Een Amerikaans bedrijf dat voornamelijk 8-bits, 16-bits en 32-bits microcontrollers levert. Toepassingen: auto-elektronica, huishoudelijke apparaten, medische apparatuur, consumentenelektronica, communicatie en telecommunicatie, industrie en draadloze communicatie.
4. ADI (Analog Devices): Verenigde Staten, levert voornamelijk 8-bits, 16-bits en 32-bits microcontrollers. Toepassingen: Lucht- en ruimtevaart en defensie, automobielindustrie, gebouwtechnologie, communicatie, consumentenelektronica, energie, gezondheidszorg, instrumentatie en meting, motoren, industriële automatisering, beveiliging.
5. Infineon: Duitsland, levert voornamelijk 16-bits en 32-bits microcontrollers. Toepassingen: auto-elektronica, consumentenelektronica, machinebouw, commerciële en landbouwvoertuigen, dataverwerking, elektrisch vervoer, industriële toepassingen, medische apparatuur, mobiele apparatuur, motorbesturing en -aandrijving, voedingen voor motorfietsen, elektrische fietsen en kleine elektrische voertuigen, slimme netwerken, verlichting, oplossingen voor zonne-energiesystemen, oplossingen voor windenergiesystemen.
6. ST Microelectronics: Italië/Frankrijk, levert voornamelijk 32-bits microcontrollers. Toepassingen: LED- en algemene verlichting, transport, gezondheidszorg, multimediaconvergentie, huishoudelijke apparaten en elektrisch gereedschap, gebouwautomatisering, motorbesturing, voedingen en stroomomvormers, energie en slimme netwerken, automatisering, computer- en communicatie-infrastructuur.
7. Qualcomm: Verenigde Staten, levert voornamelijk 16-bits en 32-bits microcontrollers. Toepassingen: smartphones, tablets, draadloze modems.
8. Texas Instruments: Verenigde Staten, levert voornamelijk 16-bits en 32-bits microcontrollers. Toepassingsgebieden: auto-elektronica, consumentenelektronica, medische apparatuur, mobiele apparaten, communicatie.
9. Maxim (Maxim): Verenigde Staten, levert voornamelijk 32-bits microcontrollers. Toepassingsgebied: auto-elektronica, consumentenelektronica, industriële toepassingen, beveiliging.
Japan en Zuid-Korea
1. Renesas: Japan, levert voornamelijk 16-bits en 32-bits microcontrollers. Toepassingsgebieden: computers en randapparatuur, consumentenelektronica, medische elektronica, auto-elektronica, industrie en communicatie.
2. Toshiba: Japan, levert voornamelijk 16-bits en 32-bits microcontrollers. Toepassingsgebieden: auto-elektronica, industrieel gebruik, motorbesturing, draadloze communicatie, mobiele telefoons, computers en randapparatuur, beeld- en audio- en videoapparatuur, consumentenelektronica (huishoudelijke apparaten), ledverlichting, beveiliging, energiebeheer, entertainmentapparatuur.
3. Fujitsu: Japan, levert voornamelijk 32-bits microcontrollers. Toepassingsgebieden: automobielindustrie, medische apparatuur, machinebouw, huishoudelijke apparaten.
4. Samsung Electronics: Zuid-Korea, levert voornamelijk 16-bits en 32-bits microcontrollers. Toepassingen: auto-elektronica, industrieel gebruik, motorbesturing, auto's, gebouwautomatisering, huishoudelijke apparaten, home entertainment, industriële automatisering, verlichting, Internet of Things, slimme energie, mobiele elektronische apparatuur, computerperiferie.
China-regio
Vasteland van China
1. Sigma Microelectronics: Levert voornamelijk 32-bits MCU's, toepassingsgebieden: telecommunicatie, productie, energie, transport, elektriciteit, enz.
2. Zhuhai Orbit: Levert voornamelijk 32-bits MCU's, toepassingsgebieden: ruimtevaart: satellietstations, vliegtuigen; hoogwaardige industriële besturing: embedded computers; scheepsbesturing, industriële besturing, energieapparatuur, milieumonitoring.
3. GigaDevice Innovation: Levert voornamelijk 32-bits MCU's, toepassingsgebieden: industriële automatisering, mens-machine-interface, motorbesturing, beveiligingsmonitoring, smart home, Internet of Things.
4. Shengsi Microelectronics: Levert voornamelijk 8-bits en 32-bits microcontrollers. Toepassingsgebieden: kleine huishoudelijke apparaten, consumentenelektronica, afstandsbedieningen, muizen, lithiumbatterijen, digitale producten, auto-elektronica, medische instrumenten en meetapparatuur, speelgoed, industriële besturing, slimme huizen en beveiliging en andere gebieden.
5. Chipsea Technology: Levert voornamelijk 16- en 32-bits microcontrollers. Toepassingsgebieden: instrumentatie, Internet of Things, consumentenelektronica, huishoudelijke apparaten en auto-elektronica.
6. Lianhua Integrated Circuit: Levert voornamelijk 8-bits en 16-bits microcontrollers. Toepassingsgebieden: consumentenelektronica, huishoudelijke apparaten, industriële besturing, communicatieapparatuur, auto-elektronica en computers.
7. Zhuhai Jianrong: Levert voornamelijk 8-bits microcontrollers, toepassingsgebied: huishoudelijke apparaten, mobiele voedingen.
8. Actions Technology: Levert voornamelijk 8-bits tot 32-bits microcontrollers, toepassingsgebieden: tablets, smart home, multimedia, Bluetooth, wifi-audio.
9. Aisco Microelectronics: Levert voornamelijk 8-bits en 16-bits microcontrollers. Toepassingsgebied: consumentenchips, communicatiechips, informatiechips en huishoudelijke apparaten.
10. Huaxin Microelectronics: Levert voornamelijk 8-bits en 4-bits microcontrollers. Toepassingen: satellietontvangers, opladers voor mobiele telefoons, eeuwigdurende kalenders en alles-in-één afstandsbedieningen.
11. Shanghai Belling (Huada Semiconductor Holdings): Levert voornamelijk 8-bits, 16-bits en 32-bits microcontrollers. Toepassingen: computerperiferie, HDTV, energiebeheer, kleine huishoudelijke apparaten en digitale apparaten.
12. Haier Integrated Circuits: Levert voornamelijk 14-bits, 15-bits en 16-bits microcontrollers. Toepassingsgebieden: consumentenelektronica, auto-elektronica, industrie en slimme instrumenten.
13. Beijing Ingenic: Levert voornamelijk 32-bits MCU's, toepassingsgebied: wearables, Internet of Things, slimme huishoudelijke apparaten, auto's, consumentenelektronica, tabletcomputers.
14. China Microelectronics: Levert voornamelijk 8-bits microcontrollers. Toepassingen: slimme huishoudelijke apparaten, auto-elektronica, beveiligingssystemen, ledverlichting en tuinverlichting, slim speelgoed, slimme huizen en consumentenelektronica.
15. Shenzhou Loongson Integrated Circuit: Levert voornamelijk 32-bits MCU's, toepassingsgebieden: energiemonitoring, slimme netwerken, industriële digitale besturing, Internet of Things, slimme huizen, datamonitoring.
16. Ziguang Microelectronics: Levert voornamelijk 8-bits en 16-bits microcontrollers. Toepassingsgebied: slimme huishoudelijke apparaten.
17. Times Minxin: Levert voornamelijk 32-bits MCU's, toepassingsgebieden: autonavigatie, verkeersmonitoring, toezicht op vissersschepen, elektriciteits- en telecommunicatienetwerken.
18. China Resources Silicon Microelectronics (een dochteronderneming van China Resources Microelectronics): levert voornamelijk 8-bits en 16-bits microcontrollers. Toepassingsgebied: consumentenelektronica, industriële besturing en huishoudelijke apparaten.
19. Nationale kerntechnologie: Levert hoofdzakelijk 32-bits MCU's, toepassingsgebied: informatiebeveiliging, kantoorautomatisering, communicatienetwerken en informatiebeveiliging.
20. Zhongtian Micro: Levert voornamelijk 32-bits microcontrollers. Toepassingen: smartphones, digitale tv's, settopboxen, auto-elektronica, GPS, e-readers en printers.
21. China Resources Microelectronics: Levert voornamelijk 8-bits en 16-bits microcontrollers. Toepassingsgebied: algemene besturingscircuits voor huishoudelijke apparaten, consumentenelektronica en industriële automatiseringssystemen.
22. Zhongying Electronics: Levert voornamelijk 4-bits, 8-bits, 16-bits en 32-bits microcontrollers. Toepassingsgebied: huishoudelijke apparaten en motoren.
23. Lingdong Microelectronics: Levert voornamelijk 32-bits chips. Toepassingsgebieden: motorbesturing, Bluetooth-besturing, high-definition displays, draadloos opladen, drones, microprinters, slimme labels, e-sigaretten, LED-dotmatrixschermen, enz.
24. Nuvoton Technology: Levert voornamelijk 8-bits MCU's, toepassingsgebied: verlichting, Internet of Things, enz.
25. Neusoft Carrier: Levert voornamelijk 8-bits en 32-bits microcontrollers. Toepassingen: huishoudelijke apparaten, slimme huizen, instrumentatie, LCD-paneelcontrollers, industriële besturing, enz.
26. Betley: Levert voornamelijk 32-bits MCU's, toepassingsgebied: slimme huizen, industriële besturing en consumentenproducten.
27. Shengquan Technology: Levert voornamelijk 8-bits MCU's, toepassingsgebied: kleine en middelgrote beeldschermen voor de automobielindustrie, het onderwijs, industriële besturing, de medische sector, enz.
28. Hangshun Chip: Levert voornamelijk 8-bits en 32-bits microcontrollers. Toepassingsgebieden: automobielen, Internet of Things, enz.
29. Fudan Microelectronics: Levert voornamelijk 16-bits en 32-bits microcontrollers. Toepassingen: slimme meters, slimme deursloten, enz.
30. Huada Semiconductor: Levert voornamelijk 8-bits, 16-bits en 32-bits microcontrollers. Toepassingen: industriële besturing, intelligente productie, slim wonen en het internet der dingen.
Taiwan, China
1. Hongjing Technology: levert voornamelijk 32-bits microcontrollers. Toepassingsgebieden: communicatie, industriële besturing, informatiesystemen en spraak.
2. Holtek Semiconductor: levert voornamelijk 8-bits en 32-bits microcontrollers. Toepassingsgebied: consumentenelektronica, ledverlichting, enz.
3. Lingyang Technology: levert voornamelijk 8-bits en 16-bits microcontrollers. Toepassingsgebied: audio en video voor thuisgebruik.
4. Zhongying Electronics: levert voornamelijk 4-bits en 8-bits microcontrollers. Toepassingsgebied: opladers, powerbanks voor mobiele apparaten, huishoudelijke apparaten, industriële besturing.
5. Songhan Technology: levert voornamelijk 8-bits en 32-bits microcontrollers. Toepassingsgebieden: afstandsbedieningen, slimme opladers, grote en kleine systemen, elektronische weegschalen, oorthermometers, bloeddrukmeters, bandenspanningsmeters, diverse meet- en gezondheidsapparatuur.
6. Winbond Electronics: levert voornamelijk 8-bits en 16-bits microcontrollers. Toepassingsgebieden: auto-elektronica, industriële elektronica, netwerken, computers, consumentenelektronica, Internet of Things.
7. Ten Speed-technologie: biedt hoofdzakelijk 4-bits, 8-bits en 51-bits microcontrollers. Toepassingsgebied: afstandsbedieningen, kleine huishoudelijke apparaten.
8. Youhua Microelectronics: levert voornamelijk 4-bits en 8-bits microcontrollers. Toepassingsgebied: geïntegreerde schakelingen voor gegevensregistratie, consumentenelektronica en huishoudelijke producten.
9. Yingguang Technology Microcontroller: levert voornamelijk 4-bits en 8-bits microcontrollers. Toepassingsgebied: machines, automatisering, huishoudelijke apparaten, robots.
10. Elan Electronics: levert voornamelijk 8-bits en 16-bits microcontrollers. Toepassingsgebied: consumentenelektronica, computers, smartphones.
vijf
Tips voor het leren over microcontrollers
De basisprincipes en functies van elke microcontroller zijn vergelijkbaar. Het enige verschil zit hem in de configuratie en het aantal perifere functiemodules, instructiesystemen, enzovoort.
Instructiessystemen lijken qua vorm weliswaar heel verschillend, maar in werkelijkheid zijn het slechts verschillende symbolen. De betekenissen die ze vertegenwoordigen, de uit te voeren functies en de adresseermethoden zijn in principe vergelijkbaar.
Om een microcontroller te begrijpen, moet je eerst de ROM-ruimte, RAM-ruimte, het aantal I/O-poorten, het aantal timers en timingmethoden, de beschikbare perifere functiemodules (perifere circuits), interruptbronnen, bedrijfsspanning en het stroomverbruik, enzovoort kennen.
Na het begrijpen van deze MCU-functies is de volgende stap het vergelijken van de functies van de geselecteerde MCU met de functies die nodig zijn voor de daadwerkelijke projectontwikkeling, en het vaststellen welke resources momenteel nodig zijn en welke niet in dit project worden gebruikt.
Voor functies die in het project nodig zijn, maar niet door de gekozen microcontroller worden ondersteund, is het belangrijk om de relevante informatie van de microcontroller zorgvuldig te bestuderen om deze functies via indirecte methoden te implementeren. Als het project dat u ontwikkelt bijvoorbeeld moet communiceren met de COM-poort van de pc en de gekozen microcontroller geen UART-poort heeft, kunt u overwegen om externe interrupts te gebruiken.
Voor de benodigde resources voor projectontwikkeling is het belangrijk dat u de handleiding* zorgvuldig leest en begrijpt. De niet-essentiële functionele modules kunt u negeren of doorbladeren. Bij het leren werken met microcontrollers is de toepassing essentieel en het belangrijkste doel.
Nadat je de relevante functies van de microcontroller hebt verduidelijkt, kun je beginnen met programmeren.
Beginners of ontwerpers die deze microcontroller voor het eerst gebruiken, kunnen vaak onduidelijke beschrijvingen van de functies tegenkomen. Hiervoor zijn twee oplossingen. De eerste is het schrijven van een speciaal verificatieprogramma om de beschreven functies te begrijpen; de tweede is om de beschrijvingen tijdelijk te negeren en het microcontrollerprogramma te schrijven op basis van je huidige kennis, waarna je het tijdens het debuggen kunt aanpassen en verbeteren. De eerste methode is geschikt voor projecten met voldoende tijd en voor beginners, terwijl de tweede methode geschikt is voor mensen met ervaring in microcontrollerontwikkeling of wanneer de projectplanning strak is.
Neem geen extra tijd om het commandosysteem te begrijpen. Het instructiesetsysteem is slechts een symbool van logische beschrijving. Je kunt de relevante instructies alleen interpreteren op basis van je eigen logica en de logische vereisten van het programma tijdens het programmeren. Naarmate je meer programmeert, zul je steeds beter worden in het instructiesetsysteem en het zelfs onbewust onthouden.
zes
Microcontroller-programmering
Er is een groot verschil tussen het schrijven van programma's voor microcontrollers en het schrijven van programma's voor pc's. Hoewel C-gebaseerde ontwikkeltools voor microcontrollers steeds populairder worden, blijft assembler de meest beknopte en effectieve programmeertaal voor ontwerpers die efficiënte programmacode willen schrijven en graag met assembler werken.
Voor MCU-programmering is het basisraamwerk grofweg hetzelfde. Het is over het algemeen verdeeld in drie delen: het initialisatiegedeelte (dit is het grootste verschil tussen MCU-programmering en pc-programmering), de hoofdprogrammalus en de interruptafhandeling. De respectievelijke beschrijvingen zijn als volgt:
1. Initialisatie: Voor het ontwerpen van alle MCU-programma's is initialisatie de meest fundamentele en belangrijke stap, die over het algemeen het volgende omvat:
Maskeer alle interrupties en initialiseer de stackpointer: Het initialisatiegedeelte wil over het algemeen geen interrupties laten optreden.
Het RAM-geheugen van het systeem wissen en het geheugen weergeven: Hoewel dit soms niet absoluut noodzakelijk is, is het vanuit het oogpunt van betrouwbaarheid en consistentie, met name om onverwachte fouten te voorkomen, aan te raden goede programmeergewoonten te ontwikkelen.
Initialisatie van de I/O-poort: Stel de invoer- en uitvoermodus van de betreffende I/O-poort in op basis van de toepassingsvereisten van het project. Voor de invoerpoort moet u de pull-up- of pull-down-weerstand instellen; voor de uitvoerpoort moet u het initiële uitgangsniveau instellen om onnodige fouten te voorkomen.
Interruptinstellingen: Alle interruptbronnen die in het project gebruikt moeten worden, moeten ingeschakeld zijn en de triggercondities voor de interrupts moeten ingesteld zijn. Redundante interrupts die niet gebruikt worden, moeten uitgeschakeld zijn.
Initialisatie van andere functionele modules: Voor alle perifere functionele modules van de MCU die gebruikt moeten worden, moeten de bijbehorende instellingen worden gemaakt volgens de eisen van de projecttoepassing. Voor UART-communicatie moeten bijvoorbeeld de baudrate, de datalengte, de verificatiemethode en de stopbitlengte worden ingesteld. Voor de programmeertimer moeten de klokbron, het aantal frequentiedelingen en de herlaaddata worden ingesteld.
Initialisatie van parameters: Na de initialisatie van de MCU-hardware en -bronnen is de volgende stap het initialiseren van enkele variabelen en gegevens die in het programma worden gebruikt. De initialisatie van dit onderdeel moet worden ontworpen op basis van het specifieke project en de algehele structuur van het programma. Voor sommige toepassingen die EEPROM gebruiken om vooraf gedefinieerde projectgegevens op te slaan, is het aan te raden de relevante gegevens tijdens de initialisatie naar het RAM-geheugen van de MCU te kopiëren. Dit verbetert de toegangssnelheid van het programma tot de gegevens en vermindert het stroomverbruik van het systeem (in principe verhoogt toegang tot externe EEPROM het stroomverbruik van de voeding).
2. Hoofdprogrammalus: De meeste microcontrollers werken continu gedurende lange tijd, dus hun hoofdprogramma's zijn in principe ontworpen als een lus. Voor toepassingen met meerdere werkingsmodi kunnen er meerdere lussen zijn, die worden gewisseld via statusvlaggen. De hoofdprogrammalus is over het algemeen opgebouwd uit de volgende modules:
Rekenprogramma's: Rekenprogramma's zijn over het algemeen tijdrovend, daarom zijn we er sterk op tegen om ze in een interrupt uit te voeren, met name vermenigvuldigings- en deelbewerkingen.
Het verwerken van programma's met lage of geen realtime-vereisten;
Weergavetransmissieprogramma: voornamelijk voor toepassingen met externe LED- en LCD-drivers.
3. Interrupt-handler: Het interruptprogramma wordt voornamelijk gebruikt voor het afhandelen van taken en gebeurtenissen met hoge realtime-eisen, zoals het detecteren van plotselinge externe signalen, het detecteren en verwerken van knoppen, het timen van tellingen, het scannen van LED-displays, enzovoort.
Over het algemeen moet het interruptprogramma de code zo beknopt en kort mogelijk houden. Voor functies die niet in realtime hoeven te worden verwerkt, kan de trigger-vlag in de interrupt worden ingesteld, waarna het hoofdprogramma specifieke transacties uitvoert. Dit is vooral belangrijk voor energiezuinige en trage microcontrollers, die een tijdige reactie op alle interrupts moeten garanderen.
4. Voor de rangschikking van verschillende taaklichamen hebben verschillende microcontrollers verschillende verwerkingsmethoden:
Bijvoorbeeld, voor toepassingen met een microcontroller met lage snelheid en laag stroomverbruik (Fosc=32768Hz), waarbij het vaak gaat om handheld-apparaten met gewone lcd-schermen, is een snelle reactie op toetsaanslagen en de weergave ervan essentieel. Daarom worden getimede interrupts doorgaans gebruikt om toetsaanslagen te verwerken en gegevens weer te geven. Voor toepassingen met een hoge snelheid, zoals bij Fosc>1MHz, heeft de microcontroller voldoende tijd om de hoofdprogrammalus uit te voeren. In dat geval kan de microcontroller volstaan met het instellen van verschillende triggerflags in de corresponderende interrupts en het uitvoeren van alle taken in het hoofdprogramma.
5. Bij het programmeren van microcontrollers is er één ding dat speciale aandacht vereist:
Het is noodzakelijk om te voorkomen dat dezelfde variabele of data tegelijkertijd wordt benaderd of ingesteld in de interrupt- en hoofdprogramma-onderdelen. Een effectieve preventiemethode is om de verwerking van dergelijke data in een module te organiseren en te bepalen of de bijbehorende bewerkingen op de data moeten worden uitgevoerd door de trigger-vlag te controleren; in andere programmaonderdelen (vooral interrupts) worden trigger-vlaggen alleen ingesteld waar de data verwerkt moet worden. --Dit zorgt ervoor dat de data-uitvoering voorspelbaar en uniek is.
zeven Samenvatting van microcontrollerprogrammering door een ingenieur
1. Ontwikkel de goede gewoonte om samen te vatten. Samenvatten is niet alleen een samenvatting van je eigen leerproces, maar ook een manier om het te herhalen en te verdiepen. Het kan je bovendien helpen om fouten de volgende keer te voorkomen.
2. Voordat je een programma schrijft, moet je eerst een goed begrip hebben van het project, het doorgronden en een algemeen raamwerk schetsen. Het is erg belangrijk om zorgvuldig na te denken over de structuur en wat de meest logische indeling is. Je moet analyseren welke module je als eerste moet ontwikkelen, de specifieke stappen van elke module, hoe je elke functie benoemt, de verbinding met andere modules, enzovoort. Het is een goed idee om een stuk papier te pakken en belangrijke processen op te schrijven.
3. Bij modulair programmeren in de C-taal moet je eerst elke module opsplitsen, module voor module programmeren, een volgorde bepalen, deze volgorde volgen en pas de volgende module schrijven nadat de vorige module succesvol is afgerond. Voor headerbestanden geldt dat je het headerbestand van de module schrijft nadat de module is geschreven.
4. Negeer waarschuwingen niet wanneer ze verschijnen. Dit betekent dat er iets mis is met het programma. Je moet de oorzaak vinden en een oplossing zoeken. Wees specifiek bij het zoeken naar oorzaken. Je kunt op internet zoeken naar informatie hierover, of anderen om advies vragen. Bijvoorbeeld: de hoofdfunctie van een ander project is eigenlijk aan dit project toegevoegd. Er zijn dubbele functienamen. Er zijn ook redenen om de experimentele verschijnselen te analyseren en stap voor stap te werk te gaan. Er is mogelijk ook een verkeerde interface geselecteerd bij het definiëren van de poort. Soms is het goed om even pauze te nemen en erover na te denken als je er echt niet uitkomt. Hoe simpel het ook lijkt, je moet er aandacht aan besteden, want er kunnen fouten in zitten.
Bij de ontwikkeling van microcontroller-applicaties blijven problemen zoals code-efficiëntie, storingsbestendigheid en betrouwbaarheid van microcontrollers een aandachtspunt. Hieronder vatten we een aantal basisvaardigheden samen die men moet beheersen bij de ontwikkeling van microcontrollers.
acht
Microcontroller-ontwikkelingsvaardigheden
1. Hoe je bugs in programma's kunt verminderen
Om programmafouten te verminderen, moet u allereerst rekening houden met de volgende beheerparameters die buiten het normale bereik vallen en die tijdens de werking van het systeem in acht moeten worden genomen.
- Fysieke parameters: Deze parameters zijn hoofdzakelijk invoerparameters van het systeem, waaronder excitatieparameters, operationele parameters tijdens de acquisitieverwerking en resultaatparameters aan het einde van de verwerking.
- Resourceparameters: Deze parameters hebben voornamelijk betrekking op de resources van circuits, apparaten en functionele eenheden in het systeem, zoals geheugencapaciteit, lengte van de opslageenheid en stapeldiepte.
- Toepassingsparameters: Deze toepassingsparameters verschijnen vaak als toepassingsvoorwaarden van bepaalde microcontrollers en functionele eenheden. Procesparameters: verwijzen naar de parameters die op een ordelijke manier veranderen tijdens de werking van het systeem.
2. Hoe de efficiëntie van C-programmeercode te verbeteren
Het gebruik van de programmeertaal C voor microcontrollers is een onvermijdelijke trend in de ontwikkeling en toepassing van microcontrollers. Om maximale efficiëntie te bereiken bij het programmeren in C, is het belangrijk om vertrouwd te raken met de C-compiler die u gebruikt. Test eerst het aantal regels assembly-code dat overeenkomt met elke C-compilatie, zodat u de efficiëntie duidelijk kunt inschatten. Gebruik bij toekomstig programmeren de code met de hoogste compilatie-efficiëntie. Elke C-compiler heeft bepaalde verschillen, waardoor de compilatie-efficiëntie ook verschilt. De codelengte en uitvoeringstijd van een uitstekende C-compiler voor embedded systemen zijn slechts 5-20% langer dan dezelfde functie geschreven in assembly-taal.
Voor complexe projecten met een strakke ontwikkeltijd kan de C-taal worden gebruikt, maar de voorwaarde is dat u zeer vertrouwd bent met de C-taal en de C-compiler van het MCU-systeem. Besteed speciale aandacht aan de gegevenstypen en algoritmen die door het C-compilatiesysteem worden ondersteund. Hoewel C de meest gebruikte programmeertaal op hoog niveau is, hanteren verschillende MCU-fabrikanten verschillende C-compilatiesystemen, met name voor de werking van bepaalde specifieke functiemodules. Als u deze aspecten niet begrijpt, zult u tijdens het debuggen veel problemen ondervinden, wat zal leiden tot een lagere uitvoeringsefficiëntie dan bij assemblytaal.
3. Hoe los je het anti-interferentieprobleem van een microcontroller op?
De meest effectieve manier om interferentie te voorkomen is door de interferentiebron te verwijderen en het interferentiepad te blokkeren, maar dit is vaak moeilijk. Daarom kunnen we alleen beoordelen of het anti-interferentievermogen van de microcontroller voldoende sterk is. Terwijl het anti-interferentievermogen van hardwaresystemen wordt verbeterd, krijgt softwarematige anti-interferentie steeds meer aandacht vanwege het flexibele ontwerp, de besparing van hardwarebronnen en de goede betrouwbaarheid.
Het meest voorkomende verschijnsel van interferentie met microcontrollers is het resetten van het programma. Wanneer een programma echter onbeheersbaar wordt, kunnen softwaretraps en watchdogs worden gebruikt om het programma terug te brengen naar de resettoestand. Daarom is het voor microcontrollersoftware van cruciaal belang om interferentie te weerstaan door de resettoestand correct af te handelen.
Microcontrollers beschikken doorgaans over een aantal vlagregisters waarmee de oorzaak van een reset kan worden vastgesteld. Daarnaast kunnen er ook zelf vlaggen in het RAM-geheugen worden opgeslagen. Telkens wanneer het programma wordt gereset, kunnen verschillende resetoorzaken worden bepaald aan de hand van deze vlaggen. Op basis van de verschillende vlaggen kan er ook direct naar het betreffende programma worden gesprongen. Hierdoor kan het programma continu blijven draaien en merkt de gebruiker tijdens het gebruik niet dat het programma is gereset.
4. Hoe test je de betrouwbaarheid van het microcontrollersysteem?
Wanneer het ontwerp van een microcontrollersysteem is voltooid, zullen er verschillende testonderdelen en -methoden zijn voor verschillende microcontrollersysteemproducten, maar sommige moeten wel getest worden:
- Test de volledigheid van de softwarefunctionaliteit van de microcontroller.
- Testen van inschakelen en uitschakelen
- Verouderings test
- Tests zoals ESD en EFT
Soms kunnen we ook de schade simuleren die tijdens menselijk gebruik kan ontstaan. We kunnen bijvoorbeeld de contactpoort van de microcontroller opzettelijk tegen het menselijk lichaam of kleding wrijven om de antistatische eigenschappen te testen. Of we kunnen een krachtige boormachine in de buurt van de microcontroller gebruiken om het vermogen tegen elektromagnetische interferentie te testen.
Samenvattend is de microcomputer op één chip een belangrijk aspect geworden van computerontwikkeling en -toepassingen. Het grote belang van de toepassing van de microcomputer op één chip is dat deze de traditionele ideeën en methoden voor het ontwerpen van besturingssystemen fundamenteel verandert.
De meeste functies die vroeger met analoge of digitale circuits moesten worden uitgevoerd, kunnen nu via software met behulp van microcontrollers worden gerealiseerd. Deze besturingstechnologie, waarbij software de hardware vervangt, wordt ook wel microcontrollertechnologie genoemd en is een revolutie in de traditionele besturingstechnologie.
Bovendien moeten we tijdens het ontwikkelings- en toepassingsproces vaardigheden verwerven en de efficiëntie verbeteren, zodat het voor een breder scala aan doeleinden kan worden gebruikt.
Negen
Samenvatting van de chipwerking De bewerkingen op de chip zijn voornamelijk bewerkingen op de registers van de chip. De registers op de chip hebben hun eigen unieke adressen die in het geheugen zijn opgeslagen, en de bewerkingen op de corresponderende adressen worden uitgevoerd. Bij het bestuderen van de chip is het belangrijk om eerst het timingdiagram te bekijken, vervolgens de bijbehorende registers te begrijpen, te begrijpen hoe ze werken, de benodigde poorten te definiëren (die door het programma kunnen worden herkend) en procedures voor schrijf- en leesbewerkingen te schrijven.
Hoe schrijf je data naar de chip, hoe lees je data uit, en via welke poort moet je data invoeren of uitlezen (het belangrijkste).
Bij het aansluiten van chips via een bus is het essentieel om eerst het busprotocol te begrijpen. De chip die op de I2C-bus is aangesloten, stuurt de andere chips voornamelijk via deze bus aan.
1. Eén 74hc595 in de puntmatrix wordt gebruikt voor kolomselectie en de andere twee voor kleurselectie. De puntmatrix is equivalent aan een verzameling diodes.
De diode licht alleen op als aan de ene kant een hoog niveau wordt aangelegd en aan de andere kant een laag niveau. Het verschil is dat als aan één kant een ander niveau wordt aangelegd, er verschillende kleuren oplichten.
De timer-werkmodus selecteren: De vier hoogste bits stellen timer T1 in en de vier laagste bits stellen timer T0 in. De laatste twee cijfers van elke modus bepalen vervolgens de werkmodus. Let bij het instellen van twee timers op het gebruik van 'of' (|). Let er bij het gebruik van interrupts op dat de interrupts die gewist moeten worden, na het binnenkomen van de interrupt, gewist worden.
2. Seriële poorttransceiver: Modus 2 (automatisch herladen van de beginwaarde) wordt over het algemeen gebruikt om de baudrate in te stellen. Omdat verschillende apparaten verschillende dataverwerkingscapaciteiten hebben, is het instellen van de baudrate vooral bedoeld om te zorgen voor een goede communicatie tussen apparaten met een lage snelheid. De interruptvlag moet softwarematig worden gewist. Bij het instellen van de seriële poortinterrupt kan deze, ongeacht of deze wordt gegenereerd door verzenden of ontvangen, de interruptfunctie activeren. Let daarom goed op bij het instellen van de interruptfunctie. (Inserteer naar eigen inzicht een functie, afhankelijk van of het een hostcomputer of een slavecomputer betreft).
Als je een interrupt gebruikt om te verzenden, moet je eerst uitzoeken hoe je de interrupt kunt activeren. Je moet de gegevens dus eerst één keer verzenden voordat je de interrupt kunt activeren. Er kan slechts één byte tegelijk worden verzonden en de volgende bit kan pas worden verzonden nadat TI is ingesteld.
3. De PCF8591AD-conversiechip heeft vier ingangskanalen. Bij het uitlezen van de PCF8591 wordt het gewenste kanaal geselecteerd en de spanning van dat kanaal uitgelezen. De geconverteerde data wordt in de chip opgeslagen en vervolgens uitgelezen. Bij het uitlezen wordt eerst het adres van de chip geschreven, vervolgens het subadres van het apparaat (0x40|kanaalnummer) en daarna de uitgelezen data.
4. Bij de conversie wordt eerst het apparaatadres in de chip geschreven, vervolgens het subadres (0x40) en daarna de te converteren digitale waarde. De chipinformatie voor het apparaatadres wordt ingevoerd.
5. Op het LCD-scherm worden de gegevens, nadat ze zijn geschreven en weergegeven, permanent weergegeven zonder continue vernieuwing. Als u de gegevens wilt wijzigen, kunt u ze alleen opnieuw invoeren.
6. Bij de DS1302 klokchip wordt bij het lezen van gegevens de eerste data gelezen op de dalende flank van de achtste klokpuls, waarna de volgende uitvoer wordt voorbereid. Let goed op de schrijfmethode van het programma en de locatie van de retourwaarde.
7. Specificeer eerst het register in Ds1302 en schrijf er vervolgens gegevens naar. Het register op de chip geeft het adres aan. (Ik begrijp het schrijfbeveiligingsprogramma nog steeds niet helemaal. Wordt er niet altijd geschreven? Waarom blijft de schrijfbeveiliging dan ingeschakeld?)
(Volgens de vorige held kun je een vlag instellen na de initialisatietijd. Als deze vlag aanwezig is, hoeft de tijd niet opnieuw te worden geïnitialiseerd. Als de stroom echter wordt uitgeschakeld, kan het RAM-geheugen van de microcontroller deze vlag niet opslaan. Je kunt daarom het RAM-geheugen van de DS1302 gebruiken om de vlag op te slaan en deze na het inschakelen weer uit te lezen. Ik ben zelf ook een beginner en ben van plan om binnenkort met de DS1302 aan de slag te gaan. Ik weet niet zeker of dit klopt en heb het nog niet geïmplementeerd. Graag meer informatie.)
8. Het is het beste om de initialisatie op te schrijven, voor het geval je deze later vergeet. Let er soms op of de laagste of de hoogste bit eerst wordt verwerkt bij het lezen of schrijven; dit kun je afleiden uit het timingdiagram.
9. Bij een infraroodzender/ontvanger wordt tijdens de ontvangst bepaald of het signaal hoog of laag is op basis van de tijd tussen twee dalende flanken. Bij het schrijven van een programma moet je eerst een timer gebruiken om de tijd te meten, deze op te slaan en vervolgens om te zetten naar binair (lees meer over hoe je dit programma schrijft, het is erg nuttig).
10. Stappenmotor: Deze wordt voornamelijk gebruikt voor schakelen. Het koppel van de stappenmotor neemt af naarmate de snelheid toeneemt. Hij wordt vooral gebruikt voor de automatische aanvoer van onderdelen die op werktuigmachines worden bewerkt. Hij kan ook worden gebruikt op plaatsen waar hogere precisie vereist is.
De stappenmotor is een open-lus regelelement dat elektrische pulssignalen omzet in hoekverplaatsing of lineaire verplaatsing. Onder niet-overbelaste omstandigheden zijn de snelheid en de stoppositie van de motor alleen afhankelijk van de frequentie en het aantal pulsen van het pulssignaal en worden ze niet beïnvloed door veranderingen in de belasting. Wanneer de stappenmotordriver een pulssignaal ontvangt, stuurt deze de stappenmotor aan om in de ingestelde richting te draaien onder een vaste hoek, de zogenaamde "staphoek". De rotatie verloopt stapsgewijs onder een vaste hoek. De hoekverplaatsing kan worden geregeld door het aantal pulsen te regelen voor een nauwkeurige positionering; tegelijkertijd kunnen de snelheid en de acceleratie van de motorrotatie worden geregeld door de pulsfrequentie te regelen voor snelheidsregeling.
11. Servomotor: (servomotor) verwijst naar de motor die de werking van mechanische componenten in een servosysteem aanstuurt. Het is een indirecte transmissie-inrichting die de motor ondersteunt. Servomotoren kunnen de snelheid en positie zeer nauwkeurig regelen en kunnen spanningssignalen omzetten in koppel en rotatiesnelheid om objecten aan te drijven. De rotorsnelheid van de servomotor wordt geregeld door het ingangssignaal en kan snel reageren. In automatische besturingssystemen wordt hij gebruikt als actuator en heeft hij de kenmerken van een kleine elektromechanische tijdconstante, hoge lineariteit, startspanning, enz. Hij kan het ontvangen elektrische signaal omzetten in een hoekverplaatsing of hoeksnelheid op de motoras. Ze worden onderverdeeld in twee categorieën: DC- en AC-servomotoren. Hun belangrijkste kenmerk is dat er geen rotatie plaatsvindt wanneer de signaalspanning nul is en dat de rotatiesnelheid constant afneemt naarmate het koppel toeneemt. DC-motor: Breed toepassingsgebied, voornamelijk in kleine auto's.
12. Overzicht van Chinese karakters:
Om Chinese karakters op een monitor of printer weer te geven, worden de Chinese karakters omgezet in een puntmatrix volgens grafische symbolen, en wordt de bijbehorende puntmatrixcode (glyphcode) verkregen.
De uniforme coderingsmethode die wordt gebruikt om Chinese karakters in de computer weer te geven, resulteert in een Chinese karaktercodering die een interne code wordt genoemd (zoals een nationale standaardcode). Deze interne code is uniek (vergelijkbaar met het ID-nummer van het karakter). De Chinese karaktercodering die is ontwikkeld om het invoeren van Chinese karakters te vergemakkelijken, is een invoercode, oftewel een externe code van Chinese karakters. De invoercode verschilt door de verschillende coderingsmethoden en is dus divers. De Chinese karaktercode die is ontwikkeld voor het weergeven en afdrukken van Chinese karakters is een glyphcode. De computer zoekt de glyphcode van het Chinese karakter op in de lettertypebibliotheek via de interne code van het Chinese karakter en voert de conversie uit.
In-camera code
Volgens de bepalingen van de nationale standaardcode heeft elk Chinees teken een bepaalde binaire code. Deze code conflicteert echter met de ASCII-code wanneer deze intern door de computer wordt verwerkt. Om dit probleem op te lossen, wordt een 1 toegevoegd aan het eerste cijfer van elke byte van de nationale standaardcode. Omdat de ASCII-code slechts 7 bits gebruikt, kan de "1" aan het begin van de byte dienen als markering om Chinese tekencodes te identificeren. Wanneer de computer de code met een "1" aan het begin verwerkt, interpreteert hij deze als informatie over een Chinees teken. Wanneer de computer de code met een "0" aan het begin verwerkt, interpreteert hij deze als een ASCII-code. De nationale standaardcode (interne code) die op deze manier wordt verwerkt, is de interne code.
Als we de "." van deze "口"-afbeelding vervangen door "0", krijgen we de glyphcode van "口" heel duidelijk te zien: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H2004H 3FFAH 2004H 0000H 0000H. Wanneer de computer "口" wil weergeven, zoekt hij eerst het eerste adres van de lettertypebibliotheek, berekent op basis van de interne code van "口" de glyphcode van "口" en scant vervolgens het scherm sequentieel volgens de glyphcode (in binair) via de aansturing van de tekengenerator. Als de binaire code "0" is, wordt de plaats waar "0" staat gescand en de plaats waar "1" staat gescand om te markeren, zodat het tekenpatroon "口" kan worden verkregen.
Chinese karakters worden gerangschikt volgens de nationale standaardcode en opgeslagen in het geheugen in de vorm van binaire bestanden, waarmee een Chinese karakterlettertypebibliotheek wordt gevormd, ook wel een Chinese karakterglyphbibliotheek of een Chinese karakterbibliotheek genoemd.
Twee coderingsmethoden, zie headerbestand
GB1616.h//------------------ Definitie van de gegevensstructuur voor Chinese karakters in lettertypen ------------------------//structtypFNT_GB16 //Gegevensstructuur voor Chinese karakters in lettertypen {unsignedcharIndex[3]; //Index van de interne code van het Chinese karakter unsignedchar Msk[32];//Dotmatrixcodegegevens }; // ... bestand/tekst :Xu;breedte×hoogte (pixels):16×16--------------------------------------------------------------------------------*/"Xu",0x10,0x80,0x10,0x80,0x21 ,0x40,0x42,0x20,0x94,0x10,0x1B,0xEC,0x20,0x80,0x60,0x80,0xAF,0xF8,0x 20,0x80,0x22,0xA0,0x24,0x90,0x2A,0x88,0x21,0x00,0x00,0x00,0x00,0x00, Deze structuur is heel eenvoudig: er is een interne code en een puntmatrixreeks. De vorige puntmatrixbibliotheek was in de volgorde van de interne code geplaatst, waardoor er geen interne code-index nodig was. Als er alleen Chinese karakters werden weergegeven, was een interne code-index wel nodig. (Het Chinese karakter "Xu" vooraan dient om de puntmatrixreeks van het woord te vinden bij het weergeven van "Xu". Deze puntmatrixreeks is door mijzelf geschreven. Bij weergave met de 1602-chip hoeft deze niet te worden geschreven, omdat de chip al een Engelse puntmatrixreeks in het geheugen heeft.) Over het algemeen zijn twee bytes voldoende voor de interne code. Als je een byte meer gebruikt, voeg je gewoon een 0 toe aan het einde. Op deze manier kan de Chinese karakterreeks direct in de interne code voor Chinese karakters worden geplaatst.
codeGB_16[k].Index[0] codeGB_16[k] geeft aan dat er een array van de structuur typFNT_GB16 bestaat met de naam codeGB_16. codeGB_16[k] is het k+1e element van de array. index is een element van de structuur typFNT_GB16, dus er kan naar verwezen worden met codeGB_16[k].Index. Tegelijkertijd is index een array, dus kan het geïndexeerd worden met index[0]. Als((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && is een logische EN-operator, wat betekent dat de waarden aan beide zijden van het &&-symbool waar zijn. Alleen de waarde van && is waar, dat wil zeggen: waar && waar = waar. Deze zin betekent: codeGB_16[k].Index[0]==c[0] en codeGB_16[k].Index[1]==c[1] worden tegelijkertijd vastgesteld. Als de volgende instructie wordt uitgevoerd, is codeGB_16[] een structuurarray en codeGB_16[k].Index[0] betekent de 0e elementwaarde van het indexlid van de K-de structuur van de structuurarray.
13. 12864 LCD: Elk weergavepunt komt overeen met een binair getal: 1 betekent aan, 0 betekent uit. Het RAM-geheugen dat deze puntmatrixinformatie opslaat, wordt weergavedatageheugen genoemd. Om een bepaalde afbeelding of Chinees teken weer te geven, moet de bijbehorende puntmatrixinformatie in de corresponderende geheugeneenheid worden geschreven.
De adressteller (AC) van het grafische RAM-geheugen verhoogt automatisch alleen het horizontale adres (X-as) met één. Wanneer het horizontale adres 0FH is, wordt deze gereset naar 00H. Het verticale adres wordt echter niet automatisch verhoogd met een overdracht. Daarom moet het programma, wanneer er continu meerdere gegevens worden geschreven, bepalen of het verticale adres gereset moet worden.
14. Teken-RAM (GDRAM) Het tekengeheugen (RAM) biedt 128 × 8 bytes geheugenruimte. Bij het wijzigen van het tekengeheugen worden eerst de horizontale en verticale coördinaten continu weggeschreven, waarna twee bytes aan gegevens naar het tekengeheugen worden geschreven. De adressteller (AC) verhoogt automatisch het horizontale adres (X-adres) met één. Wanneer het horizontale adres 0XFH is, wordt deze gereset naar 00H; het verticale adres wordt niet automatisch met 1 verhoogd. Het tekengeheugen moet uitgeschakeld zijn tijdens het schrijven naar het tekengeheugen.
[cpp] view plain copy//Chinese tekens weergeven voiddispString (uchar X, Y,uchar *msg)//Welke rij is X en welke kolom is Y. msg is Chinese tekens {if(X==0) write_data(*msg++); //Chinese tekens weergeven }}////////////////////////////////// //////////////// ////////////////// Afbeelding weergeven voiddisppicture(uchar code *adder){ uint i,j;//*******Instellingen voor de inhoud van de bovenste helft van het scherm weergeven for(i=0;i<32;i++)//32 kolomadressen in de bovenste helft van het scherm { write_com(0x80 + i);//Verticaal adres instellen VERTICALADD write_com(0x80);//Horizontaal adres instellen HORIZONTAL ADDfor(j=0;j<16;j++) { write_data(*adder); adder++; }}//************Weergave-instellingen voor de inhoud in de onderste helft van het scherm for(i=0;i<32;i++) //{ write_com(0x80 + i); //Verticaal adres instellen VERTICALADD write_com(0x88); //Horizontaal adres instellen HORIZONTAL ADDfor(j=0;j<16;j++){write_data(*adder);adder++;} }} In de programmeertaal C wordt automatisch geheugenruimte toegewezen aan een gedefinieerde variabele, en het adres van die variabele is de naam van de variabele. Via deze naam kunnen gegevens in het geheugen worden opgehaald en kunnen nieuwe gegevens worden verkregen door middel van berekeningen. In assembly moet de programmeur echter zelf de geheugenruimte definiëren en de gegevens naar de accumulator sturen voor berekeningen. Elke stap vereist handelingen van de programmeur. In C worden deze processen door de compiler uitgevoerd.
15. Enkele nuttige vragen en antwoorden ①. Hoe wordt de geheugentoewijzing van variabelen uitgevoerd in de C-taal voor microcontrollers? Zou het kunnen dat de compiler tijdens het compilatieproces op intelligente wijze code voor toewijzing en hergebruik toevoegt? De belangrijkste vraag is: hoe kan ik ervoor zorgen dat mijn programma geen geheugenoverloopfouten bevat? Als ik een recursieve bewerking uitvoer, is het lastig om de geheugenbehoefte zelf te berekenen.
②. Zijn er beperkingen aan de variabeledefinitie in de C-taal van de microcontroller? Bijvoorbeeld, de vermenigvuldigings- en delingsbewerkingen met drijvende-komma getallen worden in assembler geschreven, en de code is behoorlijk complex. Zou het niet te simpel zijn als dit direct in C geschreven zou worden?
③. Wordt in het hex-bestand dat door de C-taal van de microcontroller wordt gegenereerd, de adresverdeling van het instructie- en data-ROM automatisch door de compiler toegewezen? Kunnen gebruikers dit ook zelf toewijzen?
Antwoord 1: Een microcontrollerprogramma geschreven in de programmeertaal C wordt eerst gecompileerd door een programma (waarschijnlijk c51.exe). Nadat de compilatie is voltooid, is de geheugenruimte voor de variabelen bepaald, maar het specifieke adres is nog niet toegewezen (het adres is zwevend). Vervolgens wordt een ander programma (waarschijnlijk a51.exe) aangesloten. Na de aansluiting wordt het specifieke adres bepaald.
Als er te veel variabelen zijn, zal de compiler een melding geven dat het datasegment te groot is. Om een geheugenoverloopfout te voorkomen, is het belangrijkste om te controleren of de stack overloopt, en dat hangt af van de ervaring.
De C-taal van microcontrollers verbiedt over het algemeen recursie, en recursieve bewerkingen worden doorgaans vermeden. Microcontrollers zijn immers geen pc's, wat de snelheid zou beïnvloeden. Als je toch recursieve bewerkingen wilt uitvoeren, is het geschikter om een DSP-chip te gebruiken. Kortom, je moet de juiste chip kunnen kiezen.
Antwoord 2: De grootte van de variabele (het aantal cijfers) is over het algemeen gelijk aan het aantal cijfers in de chipaccumulator. Zo gebruikt de 51 bijvoorbeeld meestal 8 bits, omdat het een 8-bits microcontroller is.
De microcontroller kan bitvariabelen definiëren, maar geen bitarrays. Programmeren in C lijkt eenvoudig, maar genereert in werkelijkheid de grootste hoeveelheid code. De microcontroller die voor de besturing wordt gebruikt, maakt nauwelijks gebruik van drijvende-komma-bewerkingen, wat niet alleen traag is, maar ook omslachtig en geheugenintensief. Als het een DSP-chip betreft, is een geschikte hardwarestructuur veel beter.
Antwoord 3: Over het algemeen wordt het automatisch toegewezen. Het kan geprogrammeerd worden in een combinatie van C en assembleertaal, of het kan online geassembleerd worden met Keil C. De gegevensuitwisseling tussen de chip en de buitenwereld verloopt via de poort.
Telefoonnummer van het bedrijf: +86-0755-83044319
Fax: +86-0755-83975897
E-mail: 1615456225@qq.com
Vraag: 3518641314 Manager Li
Vraag: 332496225 Manager Qiu
Adres: Kamer 809, Gebouw C, Zhantao Technologiegebouw, Minzhilaan 1079, Longhua Nieuw District, Shenzhen