STM32F407 Cortex M4 şamataları

Başlatan bunalmis, 16 Ekim 2011, 17:14:50

muhittin_kaplan

Hem Duty Hem Period Ölçeceğim. Registerleri inceliyorum verilen basamaklara göre.

muhittin_kaplan

Bu işlem Bir kanal için geçerli. 7-8 adet Pwm i okumam gerekirse nasıl bir yol izlemeliyim ?

Klein

Eğer 8 tane timer varsa  ve hepsi de IC destekli ise,  bütün zamanlayıcıların register yapısı aynı. TI! için yaptığın işlemlerin aynısını diğerleri için de yaparsın.

z

Pwm frekansi ve cozunurluk nedir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Bu arada C ile yeni tanisan arkadaslarin kartlariyla aralari nasil?
Denemeler yapmaya basladinizmi?
Basit test programlari yazmaya basladinizmi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

Hocam bu Usart'daki Oversampling olayı nedir?

bir de bu fraction hesaplama da ben sizinkinden farklı buldum, bir yerde hatamı yapıyorum?

bus hızı/ ( 8 * ( 2 - oversamplingdeğeri ) * baud )

42000000/(16*9600)=273.4375

mantissa = 273 = 0x111

virgüllükısım*8*(1+oversamplingdeğeri) // oversampling 0 ise 0-7 arası değer alıyor değilse 0-15

fraction = 0.4375*8 = 3.5=~0x4

yani BRR=0x1114; sizinki 0x1112

kck87

Alıntı yapılan: bunalmis - 10 Ocak 2012, 02:29:23
Bu arada C ile yeni tanisan arkadaslarin kartlariyla aralari nasil?
Denemeler yapmaya basladinizmi?
Basit test programlari yazmaya basladinizmi?

kit odamın baş köşesinde kutusuyla beraber duruyor, şimdilik kiti yormak istemiyorum :)
şaka bi yana iş yoğunluğundan fırsat bulupda kurcalayamadim daha :(
 nickim'in terör örgütünün kck yapılanması ile alakası yoktur. bazı arkadaşlarımdan butarzda duyumlar aldım.

z

Alıntı yapılan: ErsinErce - 10 Ocak 2012, 05:01:25
Hocam bu Usart'daki Oversampling olayı nedir?
bir de bu fraction hesaplama da ben sizinkinden farklı buldum, bir yerde hatamı yapıyorum?

Belki de hesaplamada ben hata yapmisimdir. Gun icinde kontrol edeyim.

Bizim cipdeki oversampling de sanirim anlatacagimla ayni anlama geliyordur;

Bir sinyal hattina gereken min sample sayisinin cok daha ustunde de sample alarak bakilabilir. Bu, gurultunun yogun oldugu durumlarda sinyali gurultuden ayirt etmeyi saglar.
Ornegin 16 kez oversapmle yapildiysa ve sinyal 6 kez 0 10 kez de 1 okundu ise bu sinyal 1 dir seklinde yorumlanir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

GreeN

Arkadaşlar DMA ile bir çalışmam olmadı hiç. Kafamda şekillendirmeye çalışıyorum. Örneğin ADC'yi DMA ile  çalıştırmak istiyorum. Bunun hikayesini kısaca anlatabilirseniz çok sevinirim.
Mesele DMA için ram de yermi ayrılıyor. bunun  boyutunu bizmi belirliyoruz ? adc den n adet veri içinmi çalışıyor adc , yada DMA buffer dolana kadarmı okuyor ?
Terörü Lanetliyoruz.

muhittin_kaplan


ErsinErce

Alıntı yapılan: bunalmis - 10 Ocak 2012, 10:25:50
Bizim cipdeki oversampling de sanirim anlatacagimla ayni anlama geliyordur;

Bir sinyal hattina gereken min sample sayisinin cok daha ustunde de sample alarak bakilabilir. Bu, gurultunun yogun oldugu durumlarda sinyali gurultuden ayirt etmeyi saglar.
Ornegin 16 kez oversapmle yapildiysa ve sinyal 6 kez 0 10 kez de 1 okundu ise bu sinyal 1 dir seklinde yorumlanir.

dediğiniz gibiymiş hocam, Reference manual sf 617'de koşulları da detaylı açıklamışlar, bir bit için 8 veya 16 örnek alarak sonuç çıkartmaya yarıyormuş,
Teşekkür ettim =)

z

Alıntı yapılan: muhittin_kaplan - 10 Ocak 2012, 13:40:44
RC Servo için kullanacağım

O zaman işin çok kolay.

Timeri  100 mikrosaniyede int üretecek şekilde kur.
Interrupt rutininde tüm PWM giriş pinlerinin konumunu okusun girişlerden 1 olanların H_Count değerini 1 artırsın. 0 olanlar için de L_Count değerini 1 artırsın..... Girişin 1 den 0 a yada 0 dan 1 e geçişi durumunda Count değerlerini sağklar ve Count değerlerini sıfırlarsın.

H_Count ve L_Count değerleri sana aradığın PWM değerlerini verecektir.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

//////////////////////////////////////////////
//											//
// BU PROJEDE En Az 6 Kanaldan PWM okunacak.//
//											//
//											//
//////////////////////////////////////////////

#include "STM32F4xx.h"
 
void SystemInit()
{
unsigned int i;
 for (i=0;i<0x00100000;i++);          // OSC oturtma ve kurtarma rutini
    RCC->CFGR |= 0x00009400;         // AHB ve APB hizlarini max degerlere set edelim
    RCC->CR |= 0x00010000;            // HSE Xtal osc calismaya baslasin        
    while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin
    RCC->PLLCFGR = 0x07405408;      // PLL katsayilarini M=8, N=336, P=2 ve Q=7 yapalim
//  RCC->PLLCFGR = 0x07402A04;     // PLL katsayilarini M=4, N=168, P=2 ve Q=7 yapalim
    RCC->CR |= 0x01000000;            // PLL calismaya baslasin  (Rehber Sayfa 95)
    while(!(RCC->CR & 0x02000000)); // Pll hazir oluncaya kadar bekle
//  FLASH->ACR = 0x00000705;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    FLASH->ACR = 0x00000605;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    RCC->CFGR |= 0x00000002;        // Sistem Clk u PLL uzerinden besleyelim
    while ((RCC->CFGR & 0x0000000F) != 0x0000000A); // Besleninceye kadar bekle
    RCC->AHB1ENR |= 0x0000000F;    // GPIO A,B,C,D clock'u aktif edelim 
    GPIOD->MODER = 0x55000000;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (LEDler icin)
    GPIOD->OSPEEDR= 0xFFFFFFFF;   // GPIOD nin tum cikislari en yuksek hizda kullanacagiz 
}
 
void TIM7_IRQHandler()
{
volatile short i;
static char LedFlag=0;
 
    TIM7->SR=0;                              // Timer Int Flagy silelim 
    LedFlag=(LedFlag+1)&1;
    if (LedFlag) GPIOD->ODR= 0x0000F000;     // Ledler yansin
    else GPIOD->ODR= 0x00000000;             // Ledler sonsun
} 

int main()
{
    RCC->APB1ENR|=0x00000020;         // Timer7 CLK'u aktif edelim (84 Mhz)
    TIM7->CR1=0x0080;                 // Otomatik Reload
    TIM7->PSC =2100;                  // Prescaler değerimiz 8000, Count frekansimiz = fCK_PSC / (Yuklenen Deger + 1) = 84000000 / (8000) = 2000 Hz
    TIM7->ARR =0;                  // Counter, Decimal 1 olunca basa donsun 10khz demek
    TIM7->DIER=0x0001;                // Update Int enable
    NVIC->ISER[1] = 0X00800000;       // NVIC de Timer 7 interrupta izin verelim
    TIM7->CR1|=0x0001;                // Counter Enable
    
   while(1)
      {
      } 
}
// Programin sonu

Hocam Yukardaki Kodda TIM7 Frekansı kaç olur ?

fryrmnd

hocam bu sanırım bunalmış hocam ayarlar. 84 Mhz gözüküyor.

muhittin_kaplan

Yok Hocam 20Khz şimdi. Yanlız 42Mhz gibi oluyor APB1 2 katı olması gerekmiyormydu ?