logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

STM32 CubeMX Discovery F072 - Sterowanie DAC przez ADC dla syntezatora FM

kormo 21 Lut 2017 21:31 2799 8
  • #1 16297242
    kormo
    Poziom 11  
    Próbuję zbudować szkielet programu wykorzystując płytkę STM Discovery F072.

    Trzy podłączone potencjometry (przez ADC) , które mają sterować częstotliwością na wyjściu DAC.
    Dotyczy to częstotliwości akustycznych. Planem jest budowa prostego syntezatora FM.

    Piny PA4 lub PA5 są skonfigurowane jako wyjścia DAC1 i DAC2 odpowiednio.

    Kod programu jest umieszczony w repo pod adresem

    github.com/djkormo/STM32CubeF0FMPatch/blob/master/src/main.c



    To już działa

    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
    ….
    HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, value_dac);
    HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, value_dac);
    }


    Program został wygenerowany narzędziem CubeMX a potem przekonwertowany na project w Eclipse. Wykorzystałem poniższy skrypt w pythonie.


    carminenoviello.com/2015/11/02/quickly-import-stm32cubemx-project-eclipse-project/

    Jak uruchomić zegar 48 MHz ?

    Wygenerowany sygnal na wyjściu brzmi tak ..(załącznik) .. Niestabilnie spodziewalem sie jednej czestotliwosci.

    Wyłączyłem ADC i brzmi tak (załącznik)

    Nie umiem zarządzać priorytetami przerwań ?

    Pozdrawiam,

    KP
  • #2 16297355
    BlueDraco
    Specjalista - Mikrokontrolery
    A skąd my na podstawie trzech linijek kodu mamy Ci powiedzieć, co zepsułeś w pozostałych pięciuset linijkach?

    CubeMX generuje gotowe projekty dla Eclipse, więc nie wiem czemu konwertowałeś projekt dla Eclipse na projekt dla Eclipse, co zresztą i tak nie ma znaczenia dla odpowiedzi na Twoje pytanie.

    Nie powinieneś w ogóle ruszać priorytetów przerwań. Być może ruszając je coś popsułeś, ale raczej błąd jest znacznie grubszy.
  • #3 16297432
    Konto nie istnieje
    Konto nie istnieje  
  • #4 16297489
    kormo
    Poziom 11  
    Piotrus_999 napisał:
    Obejrzałem, nic nie zrozumiałem.

    Uwagi:
    1. Bardzo uśredniaj wartości z ADC - nie tak że żywcem
    2. Ja bym generował sinusoidę poprzez DMA wyzwalany timerem, a jedynie zmieniał czasookres pomiedzy wyzwoleniami.



    Ad 1. Oczywiście uśrednię .
    Ad2 . W planach jest generowanie sinusa za pomocą DDS, nie wiem czy DMA powinno być tu zastosowane.
    I nadal głupie pytaniem, jak uruchomić zegar przy 48MHz ?

    KP

    Dodano po 2 [minuty]:

    BlueDraco napisał:
    A skąd my na podstawie trzech linijek kodu mamy Ci powiedzieć, co zepsułeś w pozostałych pięciuset linijkach?

    CubeMX generuje gotowe projekty dla Eclipse, więc nie wiem czemu konwertowałeś projekt dla Eclipse na projekt dla Eclipse, co zresztą i tak nie ma znaczenia dla odpowiedzi na Twoje pytanie.

    Bo używam innego toolchaina ? W każdym razie mnie się nie udało uruchomić kodu w Eclipse generowanym bezpośrednio z Cube.


    Nie powinieneś w ogóle ruszać priorytetów przerwań. Być może ruszając je coś popsułeś, ale raczej błąd jest znacznie grubszy.
  • #5 16297519
    Konto nie istnieje
    Konto nie istnieje  
  • #6 16297546
    kormo
    Poziom 11  
    Piotrus_999 napisał:
    kormo napisał:
    I nadal głupie pytaniem, jak uruchomić zegar przy 48MHz ?
    HSE u Ciebie Bypass clock pewnie 9nie wiem jakie kwarce są przylutowane - zobacz schemat w internecie.

    kormo napisał:
    W planach jest generowanie sinusa za pomocą DDS,
    To po co ten post?


    Bo zaczynam małymi krokami. Pierwsza próba odpalenia z biblioteką HAL na STM32 F072.
    Niestety większość tutoriali z HAL dotyczy F4.

    Pozdrawiam,

    KP
  • #7 16297574
    BlueDraco
    Specjalista - Mikrokontrolery
    kormo napisał:
    jak uruchomić zegar przy 48MHz ?


    Ja robię to tak, jak opisano w RefMan (jakieś 5 linijek kodu), a jak mi się nie chce, to wyklikuję w CubeMX, który generuje kilkadziesiąt linijek kodu. Masz jakiś lepszy pomysł?
  • #8 16297587
    Konto nie istnieje
    Konto nie istnieje  
  • #9 16297613
    kormo
    Poziom 11  
    Piotrus_999 napisał:
    Piotrus_999 napisał:
    HSE u Ciebie Bypass clock pewnie 9nie wiem jakie kwarce są przylutowane - zobacz schemat w internecie.
    Zresztą spojrzałem w Cube i w tym procku da się ustawić 48 z HSI. Jak nie wiesz jak policzyć prescalery to po prostu zobacz na grafice w Cube.


    Dzięki, powalczę jutro.

    KP
REKLAMA