Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

Tüm simülasyonlar

Dersin tüm simülasyonları tek sayfada; her biri kendi ünitesinde de var.

1. ünite: Cortex-M mimarisi ve bellek haritası

Cortex-M bellek haritası gezgini

4 GB'lık adres alanında bir adres yaz ya da bir birime tıkla: hangi bölgede olduğunu, hangi çevre birimine ve yazmaç ofsetine düştüğünü gör. Adresler STM32F4 başvuru kılavuzundaki düzendedir.

Code / Flash0x0000_0000SRAM0x2000_0000Peripheral0x4000_0000External RAM0x6000_0000External device0xA000_0000Private Peripheral Bus0xE000_0000FLASH0x0800_0000SRAM0x2000_0000TIM20x4000_0000USART20x4000_4400I2C10x4000_5400TIM10x4001_0000USART10x4001_1000ADC10x4001_2000SPI10x4001_3000EXTI0x4001_3C00GPIOA0x4002_0000GPIOB0x4002_0400GPIOC0x4002_0800RCC0x4002_3800DMA20x4002_6400SYSTICK0xE000_E010NVIC_ISER0xE000_E100SCB0xE000_ED00
0x4002_0014 · Peripheral Çevre birimleri: APB1 (0x4000_0000), APB2 (0x4001_0000), AHB1 (0x4002_0000; GPIO, RCC, DMA). GPIOA + 0x14 = GPIOA->ODR

Sol: bölgeler (ölçeksiz değil, 4 GB doğrusal). Sağ: bilinen birimlere tıkla.

2. ünite: Araç zinciri: derleme, bağlama, yükleme, hata ayıklama

Bağlayıcı (linker) bölümleri: Flash ve RAM bütçesi

.text, .rodata, .data, .bss, yığın ve öbek boyutlarını değiştir; Flash ve RAM doluluğunu gör. .data neden iki kez sayılır, printf ve float neden Flash'ı şişirir?

Flash.text: 9000 B.rodata: 800 B.data: 200 B9,8 / 64 KBRAM.data: 200 B.bss: 1200 B.stack: 1024 B.heap: 512 B2,9 / 20 KB
.text.rodata.data.bss.stack.heap
$ arm-none-eabi-size firmware.elf text data bss 9800 200 1200 Flash 15,3% · RAM 14,3% · sığıyor

3. ünite: GPIO: yazmaçlarla ve HAL ile

GPIO yazmaç görüntüleyici: MODER, OTYPER, PUPDR, ODR, IDR

Bitlere tıklayarak PA5'i (Nucleo LED'i) ve PC13'ü (kullanıcı butonu) yapılandır. Sanal pin seviyesi, IDR okuması ve aynı işi yapan kayıt düzeyi ile HAL C kodu birlikte değişir. BSRR yazmasını ve kısa devreyi dene.

Nucleo-F401RELD2 · PA5 = floatB1PC13 IDR = 0 (clk off)
MODER
0x0000_0000
OTYPER
0x0000_0000
PUPDR
0x0000_0000
ODR
0x0000_0000
IDR
0x0000_0000

GPIOA5: input · push-pull · pull none · 00 in

/* kayıt düzeyi */
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
GPIOA->MODER = (GPIOA->MODER & ~(3U << (5 * 2))) | (0U << (5 * 2));
GPIOA->PUPDR = (GPIOA->PUPDR & ~(3U << (5 * 2))) | (0U << (5 * 2));
uint32_t level = (GPIOA->IDR >> 5) & 1U;
/* HAL */
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef g = {0};
g.Pin = GPIO_PIN_5; g.Mode = GPIO_MODE_INPUT; g.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &g);
GPIO_PinState level = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5);

Saat kapalı yazmaçlara yazılanlar yok sayılır.

4. ünite: RCC ve saat ağacı

RCC saat ağacı ve PLL hesaplayıcı

HSI ya da HSE, PLLM/N/P/Q ve AHB/APB bölücülerini seç. SYSCLK, APB1/APB2, zamanlayıcı saatleri, USB 48 MHz ve Flash bekleme durumu hesaplanır; sınır aşımları kırmızı yanar.

HSE8 MHz/M 8VCO giriş1 MHz×N 336VCO336 MHz/P 2/Q 7USB48 MHzSYSCLK168 MHz/AHB 1HCLK168 MHz/4/2APB1 (PCLK1)42 MHzTIM2-584 MHzAPB2 (PCLK2)84 MHzTIM1168 MHz
OK Tüm sınırlar içinde. USB 48 MHz: evet · Flash bekleme: 5

5. ünite: Zamanlayıcılar ve PWM

Zamanlayıcı ve PWM: PSC/ARR/CCR hesaplayıcı

Sayaç (CNT) testere dişi biçiminde sayar, CCR ile karşılaştırılır, çıkış PWM olur. İstenen frekansı yaz, çözücü 16 bit sınırında PSC ve ARR'yi bulsun; görev oranını ve çözünürlüğü izle.

ARRCCR0OC1
f = 84 MHz / (0 + 1) / (4199 + 1) = 20,000 kHz görev = 1050 / 4200 = 25,0% · çözünürlük 12,0 bit sayım adımı = 0,012 µs

6. ünite: Kesmeler, EXTI ve NVIC

EXTI ve NVIC: kesme zaman çizelgesi

Üç kesmenin önceliğini ve süresini ayarla, istek anlarını değiştir. Zaman çizelgesi öncelikli kesmeyi (iç içe), bekleyen istekleri, kuyruk zincirlemeyi ve kaybolan ikinci isteği gösterir. EXTI hat çakışmasını da dene.

mainL1L2L3main 0.00–1.00 µsTIM2 1.00–2.00 µsEXTI0 2.00–4.50 µsTIM2 4.50–8.50 µsUSART2 8.50–10.75 µsmain 10.75–16.00 µsTIM2EXTI0USART20 µs4 µs8 µs12 µs16 µs
EXTI0 (preempt 1)TIM2 (preempt 2)USART2 (preempt 3)
en derin iç içe: 2 · kaybolan istek: 1 EXTI0 gecikme: 0,50 µs TIM2 gecikme: 0,50 µs USART2 gecikme: 6,25 µs
EXTI0
TIM2
USART2

7. ünite: UART: seri iletişim ve komut satırı

UART çerçeve görselleştirici ve BRR

Bir metin yaz: her karakter start biti, LSB önce 8 veri biti, isteğe bağlı parite ve stop bitine dönüşür. Baud, parite ve stop bitini değiştir, bir biti boz ve alıcının çerçeve (FE) ya da parite (PE) hatasını gör. BRR ve baud hatası hesaplanır.

SD0D1D2D3D4D5D6D7SSD0D1D2D3D4D5D6D7SBir bite tıkla: boz · S start · D veri/data · P parity · S stop
Alıcı: "O" (0x4f) "K" (0x4b) Bit süresi @115200: 8,68 µs

8. ünite: ADC ve DMA

ADC + DMA: dairesel tampon ve yarım/tam aktarım

ADC her dönüşümde DMA ile tampona yazar. Yarım (HT) ve tam (TC) aktarım kesmelerinde işlemci bitmiş yarıyı işler. İşleme süresini uzat ve taşmanın (overrun) nerede başladığını gör.

ADCHTTCHTTCHTTCHTTCCPU
16031422133811919095864014496608629449591068138018402273
yarım tampon süresi = 8 × 10 µs = 80 µs işlemci yükü = 50 / 80 = 63% taşma yok son yarıların ortalaması: 987 / 1.248

9. ünite: I²C ve SPI: zamanlama diyagramları

I²C ve SPI zamanlama diyagramları

I²C'de adres, R/W, veri baytları ve cihaz yokken NACK; SDA'nın yalnız SCL düşükken değiştiğini izle. SPI'da dört kipi (CPOL/CPHA) karşılaştır ve kip uyuşmazlığının okunan baytı nasıl bozduğunu gör.

SCLSDASP0x76 RACK0x60NACK
ACK HAL adresi: 0xEC · süre @100 kHz ≈ 200 µs

10. ünite: Düşük güç: Sleep, Stop ve Standby

Düşük güç kipleri ve pil ömrü

Run, Sleep, Stop ve Standby arasında seç; görev döngüsünü (ne sıklıkla, ne kadar uyanık) ayarla ve ortalama akımla pil ömrünü hesapla. Akımlar ders içi tipik değerlerdir, gerçek değer veri sayfasındadır.

RUNÇalışma: çekirdek ve saatler açık4 gün
SLEEPUyku: çekirdek durur, çevre birimleri çalışır; herhangi bir kesme uyandırır14 gün
STOPDurdurma: saatler durur, RAM korunur; EXTI ya da RTC uyandırır, saat yeniden kurulmalı168 gün
STANDBYBekleme: neredeyse her şey kapalı, RAM silinir; uyanış sıfırlama gibidir399 gün
run 20 mA · I_avg = 20,000 mA · — sleep 6 mA · I_avg = 6,140 mA · __WFI() stop 0.3 mA · I_avg = 0,497 mA · HAL_PWR_EnterSTOPMode() standby 0.003 mA · I_avg = 0,209 mA · HAL_PWR_EnterSTANDBYMode() Çubuklar logaritmik ölçekte.

11. ünite: FreeRTOS: görevler, zamanlayıcı ve senkronizasyon

FreeRTOS zamanlayıcı görselleştirici

Görevlerin önceliğini, periyodunu ve süresini ayarla; tick tick hangi görevin çalıştığını, kesintiyi, eşit öncelikte zaman dilimlemeyi ve kaçan son tarihleri gör. Paylaşılan mutex ile öncelik tersine dönmesini ve öncelik kalıtımını dene.

motoruartlogidlet=0 motort=1 uartt=2 uartt=3 uartt=4 logt=5 motort=6 logt=7 logt=8 logt=9 idlet=10 motort=11 uartt=12 uartt=13 uartt=14 idlet=15 motort=16 idlet=17 idlet=18 idlet=19 idlet=20 motort=21 uartt=22 uartt=23 uartt=24 logt=25 motort=26 logt=27 logt=28 logt=29 idlet=30 motort=31 uartt=32 uartt=33 uartt=34 idlet=35 motort=36 idlet=37 idlet=38 idlet=39 idle0510152025303540
U = 0,70 · RM sınırı = 0,780 · boşta 30% · bağlam değişimi 21 en kötü yanıt: motor 1 · uart 4 · log 9 tick tüm son tarihler tuttu
motor
uart
log

3. ünite: GPIO: yazmaçlarla ve HAL ile

3B STM32 geliştirme kartı

Nucleo benzeri kart 3B masada: GPIOA saatini aç, PA5'i MODER ile çıkış yap ve BSRR yaz; başlık pinleri ve LD2 anında değişir. TIM3 PWM'i açınca motor görev oranına göre döner, kartın üstünde zamanlayıcı dalgası görünür. Sürükleyerek döndür, iki parmakla yakınlaştır. Durum testli saf mantıktan gelir.

GPIOA MODER 0x0000_0000 · ODR 0x0000_0000 (saat kapalı) PA5 = float → LD2 sönük TIM3 CH1: 20,000 kHz · görev 0,0% → 0,00 V → 0 rpm
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
GPIOA->MODER = (GPIOA->MODER & ~(3U << (5 * 2))) | (0U << (5 * 2));
GPIOA->PUPDR = (GPIOA->PUPDR & ~(3U << (5 * 2))) | (0U << (5 * 2));
uint32_t level = (GPIOA->IDR >> 5) & 1U;
Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç