Ynt: 6 ayaklı hareket platformu

Başlatan muhittin_kaplan, 20 Ağustos 2013, 15:48:41

LukeSkywalker

STM32F1xx serisinden bir işlemci kullanacaksınız sanırım. Eğer robota çok ağır işlemler yaptırmayacaksanız ,2. işlemciye gerek kalacağını pek sanmıyorum.

gumush

Ayri islemci degilde surucu olabilir TLC5940 16 kanaldi sanirim. 6x2 = 12    4 kanalde diger isler icin  kalir ( kamera servosu , ultrasonic yada ir mesafe sensoru servosu gibi )

Hikmet Gumus  izmir

matador

Alıntı yapılan: gumush - 10 Eylül 2013, 16:38:09
Ayri islemci değilde surucu olabilir TLC5940 16 kanaldi sanirim. 6x2 = 12    4 kanalde diger isler icin  kalir ( kamera servosu , ultrasonic yada ir mesafe sensoru servosu gibi )

Her bacakta 3 servo var.

LukeSkywalker

Bu sürücü güzelmiş. Gerekirse iki adet veya 3 adet kullanılır.

gumush

Evet , daisy chain yapilabildigi icin rahatlikla 32 servo'lu sistemi bile surebilir.
Hikmet Gumus  izmir

Tanrın Oğlu

#80
Alıntı yapılan: gumush - 10 Eylül 2013, 17:17:19
Evet , daisy chain yapilabildigi icin rahatlikla 32 servo'lu sistemi bile surebilir.

ic shift register gibi çalışır. teorik olarak sonsuz çıkış alınabilir. pratik olarakta çok..

mesaj birleştirme:: 10 Eylül 2013, 17:30:55

mıhıttin, ilk başta led driver ile servo kontrol etmek ne derece mantıklı dedim ama bak adamlar yapmış. sparkfun

http://bildr.org/2012/03/servos-tlc5940-arduino/

muhittin_kaplan

#81
stm32f4 kullanacağım muhtemelen. discoverykit i çakacağım.
5 adet timer ile azıcık aşım ağrısız başım.
herbirinde 4 pwm den 20 tene eder. takla atmak zorunda kalmayız.
(Ama Yinede Deneyeceğim Soft PWM i.)

LukeSkywalker

5 adet timer ile sistem kaynaklari daha fazla mesgul edilir.

muhittin_kaplan

10adet servoda yola çıktı :)
Gambit  Sağolsun Lazer Kesiminde Yardım Edecek.

muhittin_kaplan

#84
Bu Yorgun Savaşcıyı Bu Saate kadar Çalıştırıyor, Üstüne Birde Mesai ye gönderiyorsunuz



#include "stm32f10x.h"
#include "stm32f10x_flash.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_tim.h"
#include "misc.h"


TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef  GPIO_InitStructure;

char DUTY_0=5;
char DUTY_1=10;
char DUTY_2=20;
char DUTY_3=30;
char DUTY_4=40;
char DUTY_5=50;
char DUTY_6=60;
char DUTY_7=70;


char PwmCounter=0;

void TIMER2_Config(){


	/*
	 *                  (Prescaller)*(period+1)
	 * interrupt time=-----------------------------
	 *                    systemclock
	 *
	 *         12000*(1+1)   24000
	 * 1ms=----------------=---------=0,001s=1ms
	 *         24000000      24000000
	 *
	 *
	 *         120000*(99+1)   1200000
	 * 500ms=----------------=---------=0,5s=500ms
	 *         24000000        24000000
	 *
	 */

		TIM_TimeBaseStructure.TIM_Prescaler = 0 ;
		TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
		TIM_TimeBaseStructure.TIM_Period = 2399;
		TIM_TimeBaseStructure.TIM_ClockDivision = 0;
		TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

		TIM_ARRPreloadConfig(TIM2,ENABLE);
		TIM_UpdateRequestConfig(TIM2,TIM_UpdateSource_Global);

		 /* TIM IT enable */
	   TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

	   /* TIM2 enable counter */
	   TIM_Cmd(TIM2, ENABLE);

}

void NVIC_Config(){



	//enable tim2 irq
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
}

void TIM2_IRQHandler(void){

	 if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){
	        //clear interrupt and start counting again to get precise freq
	        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
	        PwmCounter++;
	 }
}

void GPIO_Config(void){

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}


void main(void)
{

	SystemInit();

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

	GPIO_Config();
	NVIC_Config();
	TIMER2_Config();
	while(1)
	        {
	         if(PwmCounter>=DUTY_0)GPIO_ResetBits(GPIOC,GPIO_Pin_0);
	         if(PwmCounter>=DUTY_1)GPIO_ResetBits(GPIOC,GPIO_Pin_1);
	         if(PwmCounter>=DUTY_2)GPIO_ResetBits(GPIOC,GPIO_Pin_2);
	         if(PwmCounter>=DUTY_3)GPIO_ResetBits(GPIOC,GPIO_Pin_3);
	         if(PwmCounter>=DUTY_4)GPIO_ResetBits(GPIOC,GPIO_Pin_4);
	         if(PwmCounter>=DUTY_5)GPIO_ResetBits(GPIOC,GPIO_Pin_5);
	         if(PwmCounter>=DUTY_6)GPIO_ResetBits(GPIOC,GPIO_Pin_6);
	         if(PwmCounter>=DUTY_7)GPIO_ResetBits(GPIOC,GPIO_Pin_7);

	         if(PwmCounter==199){PwmCounter=0;GPIO_SetBits(GPIOC,GPIO_Pin_All);}
	        }
}


mesaj birleştirme:: 11 Eylül 2013, 01:24:13

Ama Olayı Yapmamdan Çok PWM in Oluşumunu Anladım. YArdımlaşma Bilgi Paylaşımı Böyle Olur Vesselam.
(şişşt aramızda kalsın forumda büyük adam olmaya çalışıyorum.)

Kazım

#85
Sevgili hocam;

PWM oluşumunu anladım demişsiniz. Benim de bu konuda kafa karışıklıklarım var. Tabii ki fiziki kanunlar , formüllerle izah edilebilir ve açıklanabilir. Dolayısıyla bende PWM olayındaki formülleri çözümleyerek bunu anlayabilirim sanırım ama. Bana 2-3 cümlede PWM aslında MCU osilatör frakansımızın bilmem kaç kere bölünüp - çarpılıp çıkışa iletilmiş şeklidir veya farklı bir izahda olabilir. Böyle bir izah rica ediyorum sizden.

Aslında anlamadığım şu : doluluk oranı %100 olan bir sinyalde, sinyalin frekansı işin neresinde ? Zaten sabit 3v3 çıkış değilmi ozaman ? Yoksa örneğin 50 hz dersek ; sinyalin 1 sn yapabileceği max puls 50 'dir  ve 1 puls max genişliği de 20ms 'dir ..Bunu mu anlamak lazım ?

Tanrın Oğlu

mıhittin sana bir tavsiyem var. ne güzel arm c. m4 ler ile çalışıyorsun. bu çok iyi. hatta mukemmel tamam ama bu robot üzerine işletim sistemi koşturan bir board, kamera, gps, wifi vs vs vs vs (hayal gücünü çalıştır artık) koysan daha mantıklı olmazmı ki? kamerasından görüntüyü alıp, işlersin. alet dış ortama göre hareket etmeye başlar. dış ortama tepkime vermeye başlar.

mcu ile ileri geri giden sağa sola dönen bir robot yapacağına, cpu su olan bir kart üzerinde yoğunlaş bence. nasılsa ikisi içinde yazılım yazıyorsun. mcu ile debeleniyorsun, cpu ile hayellerin gerçek oluyor.

mistek

Alıntı yapılan: graski - 11 Eylül 2013, 09:01:24
Sevgili hocam;

PWM oluşumunu anladım demişsiniz. Benim de bu konuda kafa karışıklıklarım var. Tabii ki fiziki kanunlar , formüllerle izah edilebilir ve açıklanabilir. Dolayısıyla bende PWM olayındaki formülleri çözümleyerek bunu anlayabilirim sanırım ama. Bana 2-3 cümlede PWM aslında MCU osilatör frakansımızın bilmem kaç kere bölünüp - çarpılıp çıkışa iletilmiş şeklidir veya farklı bir izahda olabilir. Böyle bir izah rica ediyorum sizden.

Aslında anlamadığım şu : doluluk oranı %100 olan bir sinyalde, sinyalin frekansı işin neresinde ? Zaten sabit 3v3 çıkış değilmi ozaman ? Yoksa örneğin 50 hz dersek ; sinyalin 1 sn yapabileceği max puls 50 'dir  ve 1 puls max genişliği de 20ms 'dir ..Bunu mu anlamak lazım ?


PWM = Darbe Genişlik Modülasyonu.

Sabit frekanslı bir kare dalgada Doluluk oranı %50 olan bir PWM sinyalidir. Siz bu kare dalganın lojik 1 de kalma süresini değiştiriyorsunuz Darbe Genişlik Modülasyonu olmuş oluyor.

PWM in frekansıda, istenilen değer için MCU frekansının falanca katına bölünerek elde edilir.

PWM in doluluk oranını %100 yaparsanız doğrudan lojik 1 almış olursunuz bunda frekans yok. PWM in asıl kullanım noktası kabaca %1 -%99 arasıdır.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Kazım

Alıntı yapılan: mistek - 11 Eylül 2013, 10:53:33

PWM = Darbe Genişlik Modülasyonu.

PWM in doluluk oranını %100 yaparsanız doğrudan lojik 1 almış olursunuz bunda frekans yok. PWM in asıl kullanım noktası kabaca %1 -%99 arasıdır.

Teşekkür ederim, anladım.

muhittin_kaplan

Alıntı yapılan: Tanrın Oğlu - 11 Eylül 2013, 10:48:49
mıhittin sana bir tavsiyem var. ne güzel arm c. m4 ler ile çalışıyorsun. bu çok iyi. hatta mukemmel tamam ama bu robot üzerine işletim sistemi koşturan bir board, kamera, gps, wifi vs vs vs vs (hayal gücünü çalıştır artık) koysan daha mantıklı olmazmı ki? kamerasından görüntüyü alıp, işlersin. alet dış ortama göre hareket etmeye başlar. dış ortama tepkime vermeye başlar.

mcu ile ileri geri giden sağa sola dönen bir robot yapacağına, cpu su olan bir kart üzerinde yoğunlaş bence. nasılsa ikisi içinde yazılım yazıyorsun. mcu ile debeleniyorsun, cpu ile hayellerin gerçek oluyor.
Amacım ALLinONE bir cihaz yapmak değil. RP, yada BB gibi kartlarla işletim sistemi koşturup hepsini yaptıran bir platform değil amacım.
sadece hareketli bir platform yapacak ve sunuma çıkacağım. gerisini üstünü Dolduracaklar düşünsün.
Böyle birşey Yapmak Zorunda da değilim aslında. Ama öğrenme Şeklimi bildiğimden "Bir Proje Olmadan Öğrenemiyorum, Havada Kalıyor" RTOS ve OpenCV asıl hedef ama tali hedefleride (PWM,Servo, MPU6050, NRF24l01p,I2C,SPI,SDIO gibi) pekiştirmiş oluyorum.
Saygıyla.