Ajuda no protocolo CAN

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Ajuda no protocolo CAN

Mensagempor ivansousa » 20 Ago 2008 20:13

Olá outra vez :)

Eu estou a desenvolver um projecto de um robot. Agora estou na parte do controlo dos 2 motores DC. Tenho 3 placas, a placa mestre, motor direito e motor esquerdo. A placa mestre só envia mensagens e recebe das outras placas....faz o controlo das outras. (envia velocidade,aceleração e etc...)
Cada motor tem um encoder que esta ligado à respectiva placa do motor.
O meu problema é o seguinte... tou a programar no CSS já consigo meter a placa mestre a enviar pelo protocolo can e a receber.... mas as vezes tenho alguns erros... penso que é na configuração dos filtros e das mascaras da CAN... alguem me pode explicar como isto funciona? de preferencia codigo no CSS.
Comprei o livro do Fabio Pereira a pensar que explicava a can, mas infelizmente não explica :(

Obrigado pela vossa atenção.
ivansousa
Bit
 
Mensagens: 21
Registrado em: 19 Ago 2008 10:14

Mensagempor RobL » 21 Ago 2008 07:44

Vamos tentar:
Não está claro, "As vezes alguns erros".
Seja num protocolo qualquer, ao solicitar a mesma função, hora funciona, hora dá erro, o problema não está no protocolo e sim, mais possivelmente em ruído, ou problemas de baud.
Você se refere a filtros digitais ou analógicos?
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor ivansousa » 21 Ago 2008 09:28

Boas!
O meu problema é que algumas vezes as placas não recebem.... o filtro e as mascaras a que referia são os da configuração da can, com os quais não sei trabalhar.
ivansousa
Bit
 
Mensagens: 21
Registrado em: 19 Ago 2008 10:14

Mensagempor ivansousa » 21 Ago 2008 09:32

vou escrever o meu codigo pode ser que ajude:
Placa mestre a enviar:
tx_id[0]=0x00000250;
if(can_tbe())
{
out_data[0]=(dutyD & 0xff);
out_data[1]=(dutyD>>8) & 0xff;
printf("\n\r%d-outdata[0] \n\r %d-outofdata[1] \n\r",out_data[0],out_data[1]);
tx_len=4;
i=can_putd(tx_id[0],out_data, tx_len,tx_pri,tx_ext,tx_rtr);

if (i != 0xFF)
{
printf("\n\r\r Mensagem enviada para o motor direito \r\n"); // OK Mensagem enviada
}

Agora o motor direito a receber


if (can_kbhit() ) {
if(can_getd(rx_id, &in_data[0], rx_len, rxstat)) {
rx_id=rx_id & 0x7ff;
if (rx_len>=2) {

if (rx_id==0x00000250){ //
duty=in_data[1];
duty= duty << 8;
duty= duty+((signed long)in_data[0]);
flag=2;
ciclo=1;
}
ivansousa
Bit
 
Mensagens: 21
Registrado em: 19 Ago 2008 10:14


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x