Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: mistek - 23 Mayıs 2016, 22:06:50

Başlık: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: mistek - 23 Mayıs 2016, 22:06:50
Aküden beslenecek bir uygulamada
UART, ADC, TIM, GPIO kullanılıyor.

Sistem sadece 5 saat aktif olarak çalışıyor sonrasında beklemeye geçiyor. Aktif olarak çalışırken işlemciyi yüksek oranda kullanıyorum ancak beklemeye geçtiği sürede birkaç saniye arayla ADC okumak yetiyor ve dışarıdan bilgi talep edilirse uarttan veri gönderiyorum. Butonlar vs okunmaya devam etmeli, Birde zamanlayıcılar var süreyi saymaya devam etmem gerekiyor.

Şimdi güç tüketimi için saat frekansını mı düşürmemi önerirsiniz? Yoksa Low power modeların herhangi birine girmeyi mi?

Aklımdaki ilk düşünce aktif kullanımda frekansı 48MHz olarak ayarlamak sonrasında güç tüketimi için 1MHz e düşürüp tüm birimlerin clock ayarlarını yeniden yapmak.

Faydası zararı ne olur kestiremiyorum. Sürekli olarak frekans değiştirmek soruna yol açar mı, nasıl bir yol izlememi önerirsiniz?
(HSI osilatör kullanılıyor)
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: erdcan - 23 Mayıs 2016, 23:28:58
Low power mod daha makul bir çözüm gibi duruyor. Saat frekansı her halukarda işlemcinin çalışmasını devam ettirmesi için düşürüleceğinden veri kaybı, farklı cihazlardan iletişim esnasında bekleme sürelerinde sıkıntı olabilir mi diye düşünüyorum.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: Klein - 23 Mayıs 2016, 23:31:46
Hangi CPU?
STM32'nin düşük güç modları gayet başarılı.
32L serisinde ADC için 16MHZ HSI  osilatör gerekiyor. MSI osilatörle çalışmıyor. CPU'nun datasheetinden kontrol etmenizi öneririm.
Saniyede bir ADC'yi uyandırıp ölçüm alabilirsiniz. ADC'yi uyutursanız, uyandırdıktan sonra kendine gelmesi için bir kaç milisaniye zamana ihtiyaç duyuyor. Datasheet daha kısa süreler verse de tecrübelerim aksini söylüyor.
GPIO'ları EXTINT alacak şekilde yapılandırırsanız, GPIO hareketinde uyandırabilirsiniz. Uyku modunda Timer saymaya devam eder. Eğer interrupt içerisinde  işlem yapıyorsanız kesme geldiğinde uyanacaktır.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: mistek - 24 Mayıs 2016, 00:36:57
Stm32f0 kullanıyorum.

Programın bir kısmı kesme içerisinde bir kısmıda genel döngülerde işliyor.

Uart, Timer çalışmaya devam etmeli adc ve dma durabilir ama organizasyonu kuramadım bir türlü.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: X-Fi - 24 Mayıs 2016, 10:42:59
Kullandığınız işlemcide LP-Timer olmadığı için stop modunda sadece "wake up timer" saymaya devam edecektir. Bu timer çalışabilmesi içinde 40khz LSI yada 32.768 LSE kurulu ve çalışır durumda olmalı. Wakeup timer maximum 30sn e kadar işlemciyi stop modda tutabilir. (16. ve 17. bitler F0 serisinde varmı bilmiyorum varsa süre artıyor) Bu durumda daha uzun süre stop modda kalabilmek için programın içinde de bir timer saydırıp stop moda tekrar girmeniz gerekecektir. Ayrıca WDT kullanıp reload etme işlemini de bu sırada yapabilirsiniz. Usart interruptlarını kurarsanız start bit,anahtar karakter veya alınan bir byte ile uyanır (anahtar karakter ve 1 byte ile uyanma işlemi STM32L0 serisinde olan LP-Usart donanıma özel olabilir. F0 serisinin datasheetlerine bakınız) . ADC eski serilerde HSI,HSE olmadan çalışmıyordu son üretiminde bu eksiği giderdiler. Artık tüm clock kaynakları ile beslenebiliyor. DMA stop mod içerisinde çalışmaz. işlemci ile aynı adres bus'ı kullandığı için işlemci cloğuna senkron olması şartı var. Stop moda girip çıkma işlemini HAL kütüpanelerine yaptırırsanız sıkıntısız şekilde kullanırsınız.Stop mod içerisinde en az akım sarfiyatı için input pinlerinizi float posizyonda olmaması gerekiyor. Kullanılmayan pinler analog input olarak ayarlanmalı yada pull-up-down bağlı olmalıdır.

iyi çalışmalar.

Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: mistek - 24 Mayıs 2016, 13:35:26
@X-Fi hocam söylediğiniz başlıklar için biraz araştırma yaptım sağolun. Stm32f03 serisi için USART event olayı yokmuş. RTC alarm event var bunu kurmam gerekiyor. Bu seferde sürekli olarak stop moddan çıkıp uart kontrolü yapacağım.

Çalışma esnasında işlemci frekansını değiştirmeyi düşünüyorum. 500kHz e kadar düşürdüğümde baudrate 9600 olabiliyor.
Frekans değiştirme konusunda ne düşünüyorsunuz hocam?

Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: Klein - 24 Mayıs 2016, 20:09:53
Neden stop yapıyorsun? Sleep yaparsan, herhangi bir kesme ile uyandırabilirsin.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: mistek - 24 Mayıs 2016, 21:03:03
Sleep modda tüketim çok az fark ediyor hocam.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: Klein - 24 Mayıs 2016, 22:53:58
Hedef uyku akımın nedir?
F0 ile hiç çalışmadım. Ama L0 ile WFI modda LSE ve RTC açık iken 1uA civarına inebiliyor. Çoğunu da RTC çekiyor. RTC kapalı iken 300nA görmüşlüğüm var.  Ölçü aletinden kaynaklanan hataları da eklersek  400 nA diyelim. 10dakikada bir ADC ile örnek alıp Flasha yazan bir uygulamam yaklaşık 1 yıldır CR2016 pille çalışıyor. Pil voltajı da halen 2.7V civarında. Saniyede bir ADC uyandıracaksanız, uyku modunda harcayacağınız güç onun yanında devede kulak kalır bence. Ama F0 dokümanını incelemediğim için de yanlış yönlendirme yapmak istemem.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: mistek - 24 Mayıs 2016, 23:02:35
Hocam Normal çalışmada tüm devre 10mA akım çekiyor. İşlemci payına düşen kısmı yaklaşık 6-8mA. Toplam akım tüketimini 4-6mA arasına düşürmek istiyorum. Akü ile beslendiği için nA seviyesi çok lüks olur bana. Çokta önemli değil birkaç miliamper ama düşürebilirsem düşüreceğim.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: Klein - 24 Mayıs 2016, 23:39:38
Stop , Standby gibi modlara bulaşmadan halledeyim istiyorsun anladığım kadarıyla.  Eğer hız düşürmek işini görüyorsa Düşür.  Eğer hiç PLL bölücülerine bulaşmadan AHB ve APB bölücülerini değiştirerek halledebiliyorsan bir sorun çıkacağını zannetmem. Ama bu durumda akım düşüşü yeterli olmazsa mecburen PLL bölücülerine bulaşman gerek. Eğer pll ayarlama rutinlerini düzgün yaparsan, pll'in oturması vs.. gibi beklemeleri kuralına göre yaparsan, yine bir sıkıntı çıkacağını sanmam.
@X-Fi nin belirttiği gibi boş pinleri float bırakmamak da ciddi akım düşüşü sağlar. Bunu da dikkate al.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: mistek - 25 Mayıs 2016, 13:39:47
@Klein hocam evet hiç low power modlara bulaşmadan yapayım istiyorum. İşlemci uyandı uyanmadı derdim olmasın bilgide kaçmasın istiyorum. 
Şuan hiç PLL kullanmıyorum. Son olarak tüm işlemlerimi HSI 8 MHz kullanarak yapabilir hale getirdim. AHB bölücüyü kullanarak 500kHz ile 8MHz arasında geçiş yapmak işimi görüyor. Uzun vadede sorun çıkarmı diye düşünüyordum.

Boş pinlerden kasıt hiç clock aktif edilmemiş pinleride Pull down yapmaktan bahsediyorsunuz değil mi? Tüm GPIOları aktif edip Pull down yapacağım doğru mu?
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: mistek - 06 Kasım 2016, 16:58:22
Low power modlarla ilgili bişey dikkatimi çekti.



Programı 8Mhz de işletiyorum. Toplamda çekilen akım 9.25mA

PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);

Yazılım en başında GPIO haricinde hiçbir donanımı init etmeden Stop moda giriyorum ve pine bağlı butona basarak harici kesme ile uyandırıp tekrar kaldığı yerden devam ederek init kodlarımı işletip ana programa gidiyorum.

Toplam çekilen akım: 5.42mA

İki durum arasındaki tek fark stop moda girmek veya girmemek. Stop mod benim kapatmadığım bazı donanımlarıda kapatıyor sonrasında ben sadece lazım olanları açıyorum diye düşünüyorum.

Bu aradaki güç sarfiyatı nereye gidiyor olabilir?
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: mistek - 07 Kasım 2016, 14:24:40
STM32F0 çipinde işlemci AHB frekansını çalışma anında değiştirdiğim zaman ADC tamamen duruyor. Tekrar init etsem bile reset atmadan çalışmıyor.

Başka bir yol olarak HSI14 osilatörü kullanmak istedim.

HSI14 RC osilatörden besleme veriyorum. DMA ile ADC çevrimlerini okuyorum. Ne zaman işlemci frekansını değiştirsem ADC tamamen duruyor diğer donanımlar normal çalışıyor görünüyor. Yine çözüm bulamadım.

@X-Fi @Klein hocam neyi gözden kaçırıyor olabilirim ?
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: Klein - 07 Kasım 2016, 16:15:53
Muhtemelen ADC hata bayraklarınden birisi  çekiliyor.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: yldzelektronik - 07 Kasım 2016, 16:22:02
Akılda bulunsun.Normalde kullanılmayan donanımların clokcları kapatıldığında da ciddi düşüler olur.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: mistek - 07 Kasım 2016, 18:02:27
@Klein hocam tek tek bayrak kontrolü yaparak sorunu bulmaya çalışayım teşekkürler.

@yldzelektronik teşekkürler gözden geçirdim.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: mistek - 07 Kasım 2016, 18:38:35
@Klein hocam ADC nin Ready, start,stop, enable, disable bayraklarını ve DMA nın transfer error bayrağını debug modda izliyorum. Frekans düşürmeden önce nasılsa aynı şekilde kalıyor herhangi bir hata da görünmüyor.

Debug modda reset atarsam normal çalışmaya devam ediyor. Frekansla oynayınca yine duruyor.

Stm32f1 de aynı şeyi yapıyordum çalışıyordu ama Stm32f0 da olmadı.
Başlık: Ynt: Stop mode mu yoksa Frekans düşürmek mi?
Gönderen: mistek - 08 Kasım 2016, 10:58:47
Sorunu ve Çözümü buldum.

İşlemci frekansını düşürdüğüm zaman ADC duruyordu. CPU ve DMA AHB clokcları 500KHz'e indirdiğimde ADC sample time süresini değiştirmiyordum.

Fonksiyonu kullananlar bilirler. 500KHz Seviyesinde 239.5 cycles olsa bile DMA bus hızı ADC tetiklemesine yetişemiyor bu yüzden veriyi alamıyor(Benim yorumum)
ADC_ChannelConfig(ADC1, ADC_Channel_4 , ADC_SampleTime_28_5Cycles);

İşlemci frekansını en düşük 1MHz yapınca sorun çözüldü. En düşük sample time değeride 28.5 cycles olarak ayarlamak gerekiyor aksi halde DMA yine veriyi alamıyor.


Herkese teşekkürler.