Inhoudsopgave:
- Stap 1: Koffiemachine Scherm Functie Introductie:
- Stap 2: Maak UI-afbeeldingen voor STONE Display
- Stap 3: STM32F103RCT6
- Stap 4: UART-serie
- Stap 5: Timer
- Stap 6: Watch Dog
Video: STONE-display + STM32 + koffiezetapparaat - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
Ik ben een MCU-software-engineer, heb onlangs een project ontvangen om een koffiezetapparaat te worden, huishoudelijke vereisten met een touchscreen-bediening, de functie is goed, is boven de schermselectie misschien niet erg goed, gelukkig kan dit project ik beslissen wat MCU om mezelf te gebruiken, kan ook worden gebruikt om te beslissen wat het scherm is, dus ik koos voor de STM32 van dit soort eenvoudige en gemakkelijke MCU om te gebruiken, scherm Ik koos voor het aanraakscherm van STONE, het scherm is eenvoudig en gemakkelijk te gebruiken, Mijn STM32 MCU alleen via UART-communicatie is er goed mee.
STONE seriële LCD-scherm, dat kan communiceren via de seriële poort van MCU. Tegelijkertijd kan het logische ontwerp van de UI-interface van dit scherm direct worden ontworpen met behulp van de STONE TOOL Box die wordt geleverd door de officiële website van STONE, wat erg handig is. Dus ik ga het gebruiken voor dit koffiemachineproject. Tegelijkertijd leg ik eenvoudig de basisontwikkeling vast. Aangezien dit een project van mijn bedrijf is, zal ik alleen een eenvoudige demo opnemen en niet de volledige code schrijven. Enkele basishandleidingen over het stenen scherm kunnen naar de website gaan: https://www.stoneitech.com/ De website heeft een verscheidenheid aan informatie over het model, het gebruik en de ontwerpdocumentatie, evenals videozelfstudies. Ik zal hier niet te veel in detail treden.
Stap 1: Koffiemachine Scherm Functie Introductie:
Dit project heeft de volgende functies: l
- Geeft de huidige tijd en datum weer
- Op het display zitten vier knoppen voor americano, latte, cappuccino en espresso.
- Geeft de huidige hoeveelheid resterende koffiebonen, melk en koffiesuiker weer
- Een tekstvenster geeft de huidige status weer
Met deze concepten in gedachten kunt u een UI-interface ontwerpen. STONE van de aanraakschermen in het UI-ontwerp is relatief eenvoudig, de gebruiker via PhotoShop-software ontwerpt een goede UI-interface en knopeffect, via de STONE TOOL Box om goede foto's op het scherm te ontwerpen en uw eigen knoppen toe te voegen met STONE TOOL Box-logica en seriële gegevens de retourwaarde is ok, heel gemakkelijk voor u om te ontwikkelen.
Stap 2: Maak UI-afbeeldingen voor STONE Display
Volgens functionele vereisten heb ik de volgende twee UI-display-interfaces gemaakt, de ene is de hoofdinterface en de andere is het knopeffect.
Gebruik van STONE TOOL Box Momenteel levert STONE TOOL. Open dit GEREEDSCHAP om een nieuw project te maken, importeer vervolgens de ontworpen gebruikersinterface om afbeeldingen weer te geven en voeg uw eigen knoppen, tekstweergavevakken, enz. toe. De officiële website van STONE heeft een zeer complete handleiding over het gebruik van deze software: https:/ /www.stoneitech.com/support/download/video
De effecten van het toevoegen van knoppen en het weergeven van componenten in de STONE TOOL Box zijn als volgt:
STONE TOOL Box heeft de functie van simulatieweergave, waardoor u het bedieningseffect van de UI-interface kunt zien:
Op dit punt is mijn UI-weergave voltooid en hoef ik alleen maar de MCU-code te schrijven. Download de bestanden die door de STONE TOOL Box zijn gegenereerd op het scherm om de daadwerkelijke resultaten te zien.
Stap 3: STM32F103RCT6
STM32F103RCT6 MCU heeft krachtige functies. Dit zijn de basisparameters van de MCU:
- Serie: STM32F10X l Kerne
- ARM - COTEX32
- Snelheid: 72 MHz
- Communicatie-interface: CAN, I2C, IrDA, LIN, SPI, UART/USART, USB
- Randapparatuur: DMA, motorbesturing PWM, PDR, POR, PVD, PWM, temperatuursensor, WDT
- Programma opslagcapaciteit: 256KB
- Type programmageheugen: FLASH
- RAM-capaciteit: 48K
- Spanning - voeding (Vcc/Vdd): 2 V ~ 3,6 V
- Oscillator: intern
- Bedrijfstemperatuur: -40°C ~ 85°C
- Pakket/behuizing: 64-levensduur
In dit project zal ik UART, GPIO, Watch Dog en Timer van STM32F103RCT6 gebruiken. De ontwikkeling van deze randapparatuur wordt hieronder gedocumenteerd. STM32 GEBRUIKT Keil MDK-softwareontwikkeling, wat geen onbekende voor u is, dus ik zal de installatiemethode van deze software niet introduceren. STM32 kan online worden gesimuleerd door j-link of st-link en andere simulatietools. De volgende afbeelding is de STM32-printplaat die ik heb gebruikt:
Stap 4: UART-serie
STM32F103RCT6 heeft verschillende seriële poorten. In dit project heb ik het seriële poortkanaal PA9/PA10 gebruikt en de baudrate van de seriële poort was ingesteld op 115200.
GPIO
In de gebruikersinterface van dit project zijn er in totaal vier knoppen, die in feite het maken van vier soorten koffie zijn. In de koffiemachine wordt het regelen van het aantal koffiebonen, het melkverbruik en de waterstroom van verschillende koffiesoorten feitelijk gerealiseerd door sensoren en relais aan te sturen, terwijl ik gewoon eerst de GPIO-pin bedien.
Stap 5: Timer
Geef bij het initialiseren van de timer de frequentieverdelingscoëfficiënt PSC op, hier is onze systeemklok (72 MHz) voor frequentieverdeling:
Geef vervolgens de herlaadwaarde arr op, wat betekent dat wanneer onze timer deze arr bereikt, de timer andere waarden zal herladen.
Als we bijvoorbeeld de timer instellen om op te tellen, is de waarde van de timertelling gelijk aan arr en wordt deze gewist met 0 en opnieuw berekend
De timertelling wordt opnieuw geladen en eenmaal is een update
Bereken de Update tijd formule Tout = ((arr+1)*(PSC +1))/Tclk
Formule-afleiding: Talk is de klokbron van de timer, hier is 72Mhz
We verdelen de toegewezen klokfrequentie, specificeren de frequentieverdelingswaarde als PSC en verdelen onze Talk vervolgens in PSC +1, de uiteindelijke frequentie van onze timer is Tclk/(PSC +1) MHz
Dus wat we bedoelen met de frequentie hier is dat we 1s van Talk over PSC +1 M Numbers (1M=10 ^ 6) hebben, en de tijd voor elk nummer is PSC +1 /Talk, en het is gemakkelijk te begrijpen dat de inverse van de frequentie is de periode, en de periode voor elk nummer hier is PSC +1 /Talk seconden en dan gaan we van 0 naar arr is (arr+1)*(PSC +1)/Tclk
Laten we bijvoorbeeld arr=7199 en PSC =9999. instellen
We verdeelden 72MHz in 9999+1 is gelijk aan 7200Hz
Dit is 9. 000 tellingen per seconde, en elke telling is 1/7, 200 van een seconde
Dus we nemen hier 9.000 nummers op om naar de timer-update te gaan (7199+1)*(1/7200)=1s, dus 1s gaat naar een update.
ongeldig TIM3_Int_Init(u16 arr, u16 psc){
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, INSCHAKELEN);
//klok TIM_TimeBaseStructure. TIM_Period = arr;
TIM_TimeBaseStructure. TIM_Prescaler =psc; TIM_TimeBaseStructure. TIM_ClockDivision = 0;
//TDTS = Tck_tim TIM_TimeBaseStructure. TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
Neem contact met ons op als u een volledige procedure nodig heeft:
www.stoneitech.com/contact
Ik zal u binnen 12 uur antwoorden.
Stap 6: Watch Dog
Om te voorkomen dat het systeem crasht terwijl het programma draait, heb ik de watchdog toegevoegd. In feite gebruiken alle projecten die de MCU gebruiken over het algemeen een waakhond.
STM32 heeft twee ingebouwde waakhonden, die zorgen voor meer veiligheid, tijdnauwkeurigheid en flexibiliteit. Twee watchdog-apparaten (onafhankelijke watchdog en window watchdog) kunnen worden gebruikt om fouten veroorzaakt door softwarefouten te detecteren en op te lossen. Wanneer de teller een bepaalde time-outwaarde bereikt, wordt een onderbreking (alleen vensterwatchdog) of systeemreset geactiveerd. Onafhankelijke waakhond (IWDG):
Aangedreven door een speciale lage-snelheidsklok (LSI), werkt het zelfs als de hoofdklok uitvalt.
Het is geschikt voor gebruik in situaties waarin de waakhond volledig onafhankelijk moet werken buiten het hoofdprogramma en een lage tijdnauwkeurigheid vereist. Raamwaakhond (WWDG):
Aangedreven door de klok van APB1 klok na frequentieverdeling. Detecteer abnormaal late of voortijdige werking van de applicatie via een configureerbaar tijdvenster. Geschikt voor programma's die waakhonden nodig hebben om te functioneren in nauwkeurige timing Windows.
int main(void) {
vertraging_init();
//vertraging init NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2);
//NVIC INIT uart_init(115200);
//UART INIT PAD_INIT();
//Light Init IWDG_Init (4, 625);
terwijl(1) {
als(USART_RX_END)
{ schakelaar (USART_RX_BUF[5])
{
geval Espresso:
CoffeeSelect(Espresso, USART_RX_BUF[8]);
pauze;
geval Americano:
CoffeeSelect(Americano, USART_RX_BUF[8]);
De hoofdlogica in de hoofdfunctie is als volgt:
u8 timer_cnt=0;
ongeldig TIM3_IRQHandler (ongeldig) // TIM3
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
timer_cnt++;
if(timer_cnt>=200)
{
milk_send[6]=melk();
Voeg ten slotte de code toe aan de timer-interrupt: in de timer-interrupt is mijn doel om te controleren hoeveel koffie en melk er nog over is en vervolgens de gedetecteerde waarde via een seriële poort naar het scherm te sturen. Het meten van hoeveel melk en koffiebonen er nog over zijn, gebeurt meestal door sensoren. Eenvoudige methoden zijn onder meer druksensoren, die het huidige gewicht van de melk en koffiebonen meten om te bepalen hoeveel er nog over is.
Schrijf in de laatste
Dit artikel beschrijft alleen het eenvoudige ontwikkelingsproces van mijn project. Gezien de vertrouwelijkheid van het project van het bedrijf, is de UI-display-interface die ik gebruikte ook door mijzelf gemaakt, niet de echte UI-display-interface van dit project. Het codegedeelte van STM32 voegt alleen de perifere driver van MCU en gerelateerde logische code toe. Gezien de vertrouwelijkheid van het project van het bedrijf, wordt het specifieke belangrijke technologiegedeelte niet gegeven, begrijp dit alstublieft. Werk echter, volgens de code die ik heb verstrekt, samen met het STONE-scherm. mijn vrienden die ook software-ingenieurs zijn, hebben maar een paar dagen nodig om belangrijke technische onderdelen aan mijn codeframework toe te voegen om het project te voltooien.
Voor meer informatie over het project klik hier