WCH CH32V003 – RISC-V MCU – pierwsze kroki

Kupiłem:

1. Procek w obudowie so8 CH32V003J4M6 https://www.aliexpress.com/item/1005005143221495.html

2. Procek w obudowie so16 CH32V003A4M6

3. Programator WCH LinkE https://www.aliexpress.com/item/1005006295056343.html

Narzędzia:

1. https://www.wch.cn/downloads/WCH-LinkUtility_ZIP.html

2. https://www.wch.cn/products/WCH-Link.html

Pomocny opis: https://oshwlab.com/wagiminator/ch32v003j4m6-game-console


WCH-LinkUtility zagadał:

Trzeba było przestawić najpierw tryb z “ARM” na “RISC-V” wybierając z listy na dole “WCH-LinkRV”.


IDE

Trzeba zainstalować wersję “MounRiver_Studio_Setup”, nie “Community”.

Po instalacji ustawić generowanie plików hex oraz bin:


Jeżeli procesor zachowuje się jakby “zdechł”, “uceglił się”, należy wybrać:

Przykładowy “blink” na pinie PA2:

Pobór prądu: 1,8 mA @ 3,3V @ 8 MHz HSI. Brak obciążonych GPIO, pracujący TIM1 w trybie PWM na prescalerze=0. + prosty kod w pętli main.

Microstrip bandpass filter – wykonanie i pomiary

Serdeczne podziękowania dla mgr inż. Piotra Kwiatkowskiego, za wykonanie pomiarów na profesjonalnym analizatorze wektorowym.

Filtr projektowany na pasmo 434 MHz (420..470 MHz) wg kalkulatora jak niżej:

Płytkę zaprojektowałem w Eagle, rysując bez schematu struktury mikropaskowe. Płytka 4-warstwowa, na zwykłym laminacie FR-4. Wykonana w JLCPCB.

Wyniki pomiarów pierwszej wersji:

Jak widać, pasmo przepustowe w zakresie -3db trafiło na zakres 373..430 MHz przy szczycie na 402 MHz – czyli na sporo niższe częstotliwości, niż pierwotnie zakładane.

Pomiary analizatorem wektorowym:

Faza_S21
Faza_S21
Tlumienie_S21_2
Tlumienie_S21_2
Faza_S21_2
Faza_S21_2
S11
S11
S22
S22
Tlumienie_S21
Tlumienie_S21

Na podstawie powyższych wyników, przyjąłem “na oko” proporcjonalną poprawkę na częstotliwości. Wiadomo – krótsze elementy – wyższa częstotliwość.

Ponownie użyłem kalkulatora, ze zmodyfikowanymi parametrami:

Płytka wykonana jak poprzednio. Tym razem pasmo zmierzone analizatorem widma z generatorem śledzącym:

Pasmo nieco szersze niż zakładane, ale trafione w oczekiwany zakres: 406 .. 486 MHz ze środkiem w 446 MHz.

Jak widać, filtr niestety w paśmie przepustowym nadal celuje się względnie dużym tłumieniem na poziomie -6,5 dB. Nie wiem, czy wynika to z kiepskiego dopasowania, stratności w laminacie FR-4 czy ogólnie z nie najlepszej topologii.
Pomiary analizatorem wektorowym:

Faza_S21-1
Faza_S21-1
Faza_S21_2-1
Faza_S21_2-1
S11-1
S11-1
S22-1
S22-1
Tlumienie_S21-1
Tlumienie_S21-1
Tlumienie_S21_2-1
Tlumienie_S21_2-1

Test NanoVNA za 100zł

NanoVNA-H 3.4 kupiony powystawowy za 100zł.

Wersja 50 kHz – 1.5 GHz.

Wgrany najnowszy firmware NanoVNA-H-SI_20240220. https://github.com/hugen79/NanoVNA-H/releases/

Trzeba zainstalować ze strony ST.COM DfuSe_Demo_V3.0.6_Setup.exe, wybrać sterownik DFU w Managerze urządzeń (zamiast domyślnego STM BOOTLOADER), i można wgrywać. Wybrałę wersję “SI” bo zakładałem, że mój NanoVNA jest oparty o oscylator SiliconLabs. Można to potem zmienić w menu. Ważne, żeby wgrać wersję pod wyświetlacz 2,4″.

Dla testów użyłem aplikacji NanoVNA.App.exe – by OneOfEleven: https://nanovna.com/?page_id=141

Zmierzony włączony szeregowo filtr kwarcowy 10.3 MHz:

Działa to zacnie, za taką kwotę.

N-path filter by Bram Nauta – prosty układ – pomiary

Serdeczne podziękowania dla Mgr Inż. Piotra Kwiatkowskiego za udostępnienie aparatury i pomoc w wykonaniu pomiarów.

Sygnał zegarowy z układu NE555 o częstotliwości ok. 120 kHz

Transmitancja filtra. Zaznaczone 2 szczyty pasm przepustowych, dla częstotliwości ok. 30 kHz (1/4 częstotliwości zegarowej)  oraz ok. 60 kHz.

Zawężenie prezentacji transmitancji do jednego prążka o częstotliwości środkowej 30 kHz.

Widać dużą dobroć filtra. Pasmo przepustowe -3dB ma szerokość ok. 300 Hz, co daje dobroć ok. 100.

Jeszcze prezentacja czasowa sygnału na wejściu i na wyjściu filtra. Pomiar zrobiono podając na wejście sygnał sinusoidalny o częstotliwości zbliżonej jak to tylko było możliwe do częstotliwości środkowej filtra

Źródła:

Budowa i pomiary transformatora izolacyjnego do pomiarów Bode

Podziękowania za wsparcie w realizacji oraz konsultacje dla inż. Michała Karasia – eksperta w zakresie badań obwodów i stabilności.

Inspiracja: https://electronicprojectsforfun.wordpress.com/injection-transformers/

Materiały:

  • 2x rdzenie VAC T60006-L2030-W514
  • Para skrętki pozyskana z kabla Ethernet BitLAN 2x23AWG (użyta długość poniżej 3m, z wyliczeń ok. 95mmb/zwój)

25 uzwojeń nawiniętych bifilarnie na 2 połączone rdzenie (sklejone dla wygody nawijania)

Zgrubne pomiary przy użyciu “testera tranzystorów” dały wyniki ok. 60 mH dla każdego z uzwojeń. Po zwarciu przeciwnego uzwojenia, miernik nie był w stanie określić indukcyjności, co sugeruje wysoki współczynnik sprzężenia (coupling factor), oceniam na powyżej 0,99.

Wyniki pomiaru charakterystyki w zakresie 10Hz – 25 MHz:

vac0.csv

Wykres przy użyciu Python+Matplotlib (pominięte ostatnie próbki które “leciały w kosmos”, dla czytelności skali):

vac0parsed.csv

python.zip

Dla ok. 6-7 MHz amplituda “ucieka” na +3dB, czyli tutaj można uznać koniec sensownego pasma transformatora.

Całe pasmo jest bardzo liniowe. Z jakiegoś powodu jednak Rigol jest upierdliwy w pomiarach – trwają bardzo długo, i nieraz trzeba je powtarzać, bo pojawiają się losowe zakłócenia.

Zdjęcie stanowiska pomiarowego:

Risetime oscyloskopów

Użyte źródło impulsów: Generator PSG-1 zaproponowany przez Jima Williamsa (Linera Technology): https://www.elektroda.pl/rtvforum/viewtopic.php?p=15023133#15023133

an47fa.pdf

Rigol MSO5074:

Rigol DHO914S (za pomiary i zgodę na publikację serdeczne podziękowania dla Pana Inż. Michała Karasia):

Dla porównania wyniki z oscyloskopu R&S RTP164B o paśmie 16GHz i 40GSa/s:

Wyniki w Postaci tabelarycznej:

Oscyloskop
Wynik
R&S RTP164B pasmo 16 GHz
207 ps
Rigol MSO5074 pasmo 350 MHz
700 ps
Rigol DHO914S pasmo 250 MHz
1180 ps

FFT a pozycje czasowe przebiegów

Wg teorii transformata Fouriera jest operacją odwracalną i bezstratną. To znaczy, że znając widmo sygnału jesteśmy w stanie odtworzyć dokładnie jego postać czasową.

Jednak widmo składa się również z części fazowej, niezależnie czy jest reprezentowane w postaci algebraicznej, zespolonej czy wykładniczej (w sumie to to samo co postać zespolona). Czy jednak samo widmo amplitudowe będzie się różnić, gdy składowe sygnału będą pojawiać się w różnych odstępach czasowych?

Chciałem sprawdzić empirycznie, jak to wygląda. Wygenerowałem 2 czyste przebiegi sinusoidalne, dla ustalenia uwagi 1 i 2 MHz.

W pierwszym przypadku obydwa sygnały pojawiają się w tym samym momencie. W drugim, pojawia się najpierw jeden, potem drugi.

Pozostałe parametry nie zmieniają się: czas próbkowania (trwania sygnału), amplitudy, fazy początkowe, czasy trwania każdego sygnału składowego.

Tak wygląda przygotowana przeze mnie symulacja w Qspice (duchowy następca LTspice):

Tak przebiegi czasowe opisane powyżej:

A tak FFT z tych przebiegów:

Jeżeli dobrze rozumiem, przebiegi prezentują jedynie część amplitudową widma. Jak widać, przebiegi są praktycznie identyczne.

arduino uno r4 wifi spi

#include "SPI.h"
#define CS_PIN 10
#define SPI_CLOCK 1000000

void setup() {
Serial.begin(115200);

//define LED_BUILTIN as an outpu
Serial.println("2024-03-07 Aleksander Kaweczynski");
Serial.println("PD SPI TEST");
Serial.println("SCK - D13");
Serial.println("MISO - D12");
Serial.println("MOSI - D11");
Serial.println("CS - D10 (low during transfer)");

pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
// pinMode(12, OUTPUT);
SPI.begin();
}

void loop() {

SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));

SPI.transfer(0xAA);
SPI.transfer(0x55);
delayMicroseconds(1);
digitalWrite(CS_PIN, LOW);
delayMicroseconds(1);
digitalWrite(CS_PIN, HIGH);
SPI.endTransaction();
Serial.println("DATA: 0xAA 0x55");
delay(1000);

SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));
SPI.transfer(0x00);
SPI.transfer(0x00);
delayMicroseconds(1);
digitalWrite(CS_PIN, LOW);
delayMicroseconds(1);
digitalWrite(CS_PIN, HIGH);
SPI.endTransaction();
Serial.println("DATA: 0x00 0x00");
delay(1000);
}