programação em dspic - motor de passo (desespero!)


#1

olá, preciso fazer uma antena girar usando um motor de passo e que os dados analogicos de tensao gerados pela antena sejam armazenados num buffer do dspic e enviados posteriormente via porta serial para o computador para ser analisado no matlab.

os botoes 1 e 2 servem apenas para ajeitar a posiçao inicial… quando apertar o botao 3 a cada passo do motor o valor analogico de tensao que vem da antena deve ser convertido para digital pelo conversor analogico - digital do dspic e armazenado no buffer.

quando o botao 4 for apertado os dados que estavam no buffer do dspic devem ser enviados para o computador via porta serial…

minha duvida esta justamente nesse envio de dados para a memoria e aquisição desses dados posteriormnete…naum sei nem por onde começar =/ … comecei a programar a pouco tempo… segue uma imagem do pic no ISIS e o codigo ate onde fiz , ja ajuda muito respondendo qualquer coisa !!

http://imageshack.com/a/img673/1618/9lYvDb.png

include <P33FJ12GP202.h>

_FBS(BSS_NO_FLASH)
_FOSCSEL (FNOSC_PRI & IOL1WAY_OFF)
_FOSC (POSCMD_XT)
_FWDT (FWDTEN_OFF)
//_FICD(JTAGEN_OFF & BKBUG_OFF)

define BT1 PORTAbits.RA4 //PORTx lê dados do port
define BT2 PORTBbits.RB9
define BT3 PORTBbits.RB8
define BT4 PORTBbits.RB7

define OUT1 LATBbits.LATB10 //LATx escreve dados no port
define OUT2 LATBbits.LATB11
define OUT3 LATBbits.LATB12
define OUT4 LATBbits.LATB13

void inicializa(void);
void delay_ms(unsigned int tempo);
void delay_us(unsigned int tempo);
void rota (int step);

void main(void)
{
int step=0;
int aux;

inicializa(); 

OUT1=0;
OUT2=0;
OUT3=0;
OUT4=0;

 while(1)
 {
 	
 	if (BT1==0)//dá um passo no sentido horario
	{
		step++;
		if (step>3) step =0;
		rota (step);
	}
	
	if (BT2==0)//dá um passo no sentido anti-horario 
	{
		step--;
		if (step<0) step =3;
		rota (step);	
	}

/*aux depende do angulo de giro do motor, q no caso é 5.625, logo 1 volta completa necessita 64 passos */

	if (BT3==0)//dá uma volta no sentido horario
	{
		for(aux = 0 ;aux <64  ; aux++ )
		{                                                                     
			step++;
			if(step>3) step=0;
			rota(step);
                        minha duvida começa aki  !!! . como enviar os dados da antena ate a memoria do pic??para qual porta devo enviar o sinal analógico ??como fazer a conversao analog - dgital ??como armazenar os dados na memoria ??
		}
	}
            if botao 4 -- como pegar os dados da memoria e enviar ao pc via serial ??

		
 }//while

}//main

void inicializa(void)
{
ADPCFG=0x00FF;

TRISB=0b0000001110000000;
TRISA=0b0000000000010000;    

}

void delay_ms(unsigned int tempo)
{
unsigned int tempo1;

if (!tempo) return;						                

for (tempo1=1;tempo1<=tempo;tempo1++) delay_us(500);	

}

void delay_us(unsigned int tempo)
{

if (!tempo) return;						               

do
{
	tempo--;
}while(tempo);

}

void rota (int step) // rotina para o motor
{

switch (step)
{
	case 0:
        OUT1=0;
        OUT2=0;
        OUT3=0;
        OUT4=1;
    break;
    case 1:
        OUT1=0;
        OUT2=0;
        OUT3=1;
        OUT4=0;
    break;
    case 2:
        OUT1=0;
        OUT2=1;
        OUT3=0;
        OUT4=0;
    break;
    case 3:
        OUT1=1;
        OUT2=0;
        OUT3=0;
        OUT4=0;
    break;
   

}//switch
    
	delay_ms(100);    

}//rota


#2

entao voce quer armazenar e depois enviar via serial? voce ja conhece como o matlab funciona?


#3

olá… duvida antiga mas ainda persistente…

…eh o seguinte … criei uma variável no dspic do tipo um vetor de inteiros e naum especifiquei uma posição de memoria especifica para essa variável,

como faço pra enviar esse vetor q criei via serial usando matlab??? naum domino muito matlab =/


#4

um problema e que na da para entender bem através dessa imagem, vamos la, aonde esta conectada essa antena, diretamente ao pic, quais pinos an2 an3 ?
Porque a escolha desse pic? você considerou um conversor analógico - digital ? Ou você quer fazer isso no pic?
A medição de corrente da antena esta vindo da onde?

Acho que ninguém te ajudo ate agora porque ta meio confuso. Eu que faço isso o dia inteiro, nao to sacando o que ta acontecendo.

pelo o que entendi do seu projeto, voce quer capitar o um sinal analógico tipo RF, você quer testar a melhor orientação da antena usando um motor de passo para gira um pouco, dai medir a corrente do sinal, dai testar novamente ate achar a melhor posição possível da antena, ou determinar aonde esta a fonte do sinal.


#5

olá… obrigado aee pela atenção =o … eh grandinho o projeto!!

foi um trabalho para a faculdade(já entreguei…incompleto =/ … mas ainda fica algumas dúvidas)…o objetivo era usar uma antena yagi pra captar um sinal de onda de radio de 433 MHz… conectada a antena deveríamos colocar um circuito casador de impedância (pra aumentar o rendimento de potencia) e um filtro passa-faixa pra pegar a freq de 433MHz… a antena estava fisicamente conectada a um motor de passo…dois fios saiam de cada um dos polos do dipolo da antena e iam para o dspic … o dspic por sua vez deveria controlar o giro do motor de passo através dos 4 botoes((basicamente 1 botão pra dar um passo no sentido horário, 1 botão pra dar um passo no sentido anti-horário, 1 botão pra dar uma volta completa no sentido horário e 1 botão pra comandar o envio do dados para o pc)), deveria também fazer a conversão analog-digital dos dados recebidos da antena e enviar esses dados via um cabo serial para o pc… essa comunicação dspic - pc deveria ser feita usando matlab… o objetivo era fazer a antena dar uma volta completa ao toque de um dos botoes e a cada passo do motor de passo o valor de tensão captado na antena seria convertido em digital… esses valores de tensão poderiam ser armazenados em um vetor (de comprimento igual ao numero de passos necessários para que o motor dê uma volta completa), quando um outro dos 4 botões do dspic fosse apertado o vetor criado deveria ser enviado serialmente para o matlab, que deveria montar um gráfico com todos os dados de tensão captados durante uma volta completa.

A DÚVIDA que ainda persiste eh mais em relação a comunicação serial… naum sei fazer a UART do dspic no matlab que transmita o vetor criado…(ta mais fácil criar outro tópico =x)


#6

ta voce tendo uma lista com os dados da antena, agora, voce precisa inicializar uma comunicação serial
algo tipo

xx.Write(“meus dados”); (somente isto ja deve enviar dados no tx rx)

eu usaria um usb-to-serial (pesquisa no google tem varios , e nao custam muito)

apartir disso eu instalaria o python2.7 (recomendo um pacote chamado Anaconda e tambem instalaria idle para python ) usarial a bibilioteca pyserial, numpy etc
este blog tem um tutorial fantastico. (desculpa, sou filho de brasileiros, mas portuguese nao e meu primeiro idioma, nao saberia te indicar tutorias em portugues)
http://www.toptechboy.com/tutorial/python-with-arduino-lesson-11-plotting-and-graphing-live-data-from-arduino-with-matplotlib/