Witam!
Po dłuższej przerwie wróciłem do tego generatora za sprawą Andrzeja SP7EOY, który używa go od jakiegoś czasu.
Okazało się, że stosowany dotąd algorytm sterowania miał istotną wadę, która pojawiała się kiedy generowane częstotliwości stawały się większe niż ok. 100MHz. Układ nie reagował na pojedyncze kroki 100Hz, dopiero zmiana o więcej niż 100Hz powodowała zmianę częstotliwości sterowania.
Po dłuższej analizie okazało się, że odpowiedzialny za ten efekt jest sposób wyliczania sekwencji sterującej generatora SI570. Użyłem tu obliczeń w pojedynczej precyzji (typ danych SIMPLE) co właśnie generowało opisany błąd jeśli generator działał na wyższych częstotliwościach. Dla częstotliwości niższych błąd oczywiście istniał ale nie był łatwy do zdiagnozowania ze względu na istotnie niewielkie odchylenia wartości rzeczywistych częstotliwości od teoretycznych.
Wprowadziłem do algorytmu obliczenia podwójnej precyzji (liczby typu DOUBLE) i teraz algorytm jest w stanie sterować układem SI z dokładnością rzędu 0.01Hz na poziomie sygnału wyjściowego 150MHz.
Przy tej okazji okazało się, że:
- używanie w BASCOM-ie liczb podwójnej precyzji nie jest tak oczywiste jak oczekiwałem. Jakkolwiek wyniki podstawowych operacji faktycznie mają podwójną znacznie większą dokładność ale aby ją wykorzystać należy zastosować rzutowanie typów w obie strony (SINGLE lub LONG na DOUBLE oraz DOUBLE na SINGLE lub LONG).
- ze względu na nieco powiększony algorytm i dłuższe operacja na liczbach DOUBLE, kod nie zmieścił się w pamięci 16k i pełny algorytm wymaga zastosowania procesora Mega328. Na szczęście wystarczy jedynie wymienić chip bo wszystkie wyprowadzenia są identyczne jak w MEGA168.
Po zmianach sensowne okazało się wprowadzenie do algorytmu kroku 10Hz niemniej należy pamiętać, że zgodnie z notą katalogową stabilność typowego SI to 20ppm czyli 20 części na milion w zakresie -40 +80 (120 stopni) a więc dla wzorca ok. 114.2356 MHz (mój SI) będzie to ok. 2200Hz a po przeliczeniu w algorytmie na częstotliwość wyjściową różnica na poziomie 14MHz wyniesie ok. 270Hz. Dla poziomu 150MHz to ok. 3.5kHz. Daje to więc ok. 270/120=2.25 Hz/C dla 14MHz oraz ok. 3500/120=29.2Hz/C dla 150MHz. Tak więc jeśli po włączeniu od temperatury 20C układ nagrzeje się w ciągu pierwszych 5 minut do 40C , co jest prawdopodobne, to jego częstotliwość zmieni się na poziomie 14MHz o 2.25*20=45Hz oraz 29.2*20=583Hz na poziomie 150MHz. Nie ma więc większego sensu oczekiwać stabilności termicznej na poziomie pojedynczych Hz a raczej na poziomie dziesiątek lub setek Hz. Do tego dochodzi jeszcze tzw jitter częstotliwości co dodatkowo zwiększa podane wyżej obliczenia.
Dzięki pomocy Andrzeja, który używa generatora w zakresie 150MHz i ma znacznie bogatsze wyposażenie warsztatowe niż ja, udało się po pierwsze poprawić algorytm niemal "na ślepo", bo nie mając odpowiedniej płytki mogłem jedynie zmieniać program i testować go "rękami" Andrzeja w jego układzie a po drugie potwierdziły się zarówno dokładność nowego algorytmu jak i wrażliwość na zmianę temperatury - odczuwalną szczególnie dla sygnałów o wysokiej częstotliwości.
Dlatego nie należy spodziewać się, bez specjalnych zabiegów (np. termostat) idealnej stabilności termicznej tego i innych generatorów opartych na układzie SI570.
Raczej, w zależności od częstotliwości pracy, w trakcie normalnego użytkowania w dłuższym czasie (minuty, dziesiątki minut) trzeba oczekiwać różnic na poziomie kilkudziesięciu a nawet kilkuset Hz.
Niemniej, generator SI570 wydaje się ciągle bardzo dobrym źródłem sygnału w szerokim zakresie. Mój układ SI startuje już przy częstotliwości 3MHz! choć producent zapewnia jego stabilną pracę od ok. 10MHz.
Załączam poprawioną wersję oprogramowania na procesor MEGA328, ustawienia bitów Fuse są identyczne jak pokazano wcześniej dla MEGA168.