Перейти к содержанию
    

Помогите инициализировать драйвер MC3PHAC!

MC3PHAC

PC Master Software Communication Protoсol

 

 

Пробую связаться с MC3PHAC на скорости 9600 через UART микроконтроллера ATMega88. Отправляю и получаю пакеты с данными. Identification_MC3PHAC(), проходит в соответствии с информацией .

Дальше все не так. На команду cmd_RESET, процессор MC3PHAC ничего не выдает. На последующие команды присылает "2B 00 00". Возможно это и правильно, но в ответ на команду запуска двигателя приходит "2B 85 7B" :(

Что посоветуете? Спасибо!

 

Вот код (IAR C/C++ Compiler for AVR 5.11B/W32 (5.11.2.5)):

void Identification_MC3PHAC()
{
unsigned char i,j;
unsigned char Test_Link1[] = {0x2B,0xC0, 0x40};
unsigned char Test_Link2[] = {0x2B,0xC8, 0x38};

for (j=0; j<3;j++)
{
for (i=0;i<countof(Test_Link1);i++)  
{
   Transmit_Byte(Test_Link1[i]);
}
}
  for (i=0;i<countof(Test_Link2);i++)  
  {
	 Transmit_Byte(Test_Link2[i]);
  }
}





void MC3PHAC_Message_Send(const unsigned char * msg, unsigned char len)
{
unsigned char CRC = 0;
unsigned char START_SYMBOL = 0x2B;

  Transmit_Byte(START_SYMBOL);  
  while(len)
  {  
  Transmit_Byte(*msg);
  CRC += *msg++;
  len--;
  }
  Transmit_Byte((unsigned char)(256-CRC));	
  Delay_mSeconds(10);
}


unsigned char const cmd_RESET[5] =  {0xE3, 0x10, 0x00, 0x30, 0x00};
unsigned char const cmd_PPWM[5] =	{0xE3, 0x10, 0x00, 0x5C, 0x00}; 
unsigned char const cmd_DEADT[5] =   {0xE3, 0x00, 0x36, 0x15, 0x00}; 
unsigned char const cmd_ACB[5] =	 {0xE3, 0x10, 0x00, 0x61, 0x00}; 
unsigned char const cmd_ACC[5] =	 {0xE4, 0x00, 0x60, 0x7F, 0xFF}; 
unsigned char const cmd_ACF[5] =	 {0xE4, 0x00, 0x62, 0x7F, 0xFF}; 
unsigned char const cmd_FPWM[5] =	{0xE3, 0x10, 0x00, 0x44, 0x00};	
unsigned char const cmd_VBOOST[5] =  {0xE3, 0x00, 0x6C, 0x05, 0x00}; 
unsigned char const cmd_MODIN[5] =   {0xE3, 0x00, 0x75, 0xFF, 0x00}; 
unsigned char const cmd_FTOUT[5] =   {0xE4, 0x00, 0x6A, 0x00, 0x14}; 
unsigned char const cmd_VBDEC[5] =   {0xE4, 0x00, 0xC9, 0x01, 0x70}; 
unsigned char const cmd_VBRAKE[5] =  {0xE4, 0x00, 0x64, 0x01, 0xE0}; 
unsigned char const cmd_VBROWN[5] =  {0xE4, 0x00, 0x66, 0x00, 0xA0}; 
unsigned char const cmd_VBOVR[5] =   {0xE4, 0x00, 0x68, 0x01, 0xE0}; 
unsigned char const cmd_FORW[5] =	{0xE3, 0x10, 0x00, 0x10, 0x00}; 
unsigned char const cmd_REW[5] =	 {0xE3, 0x10, 0x00, 0x11, 0x00}; 
unsigned char const cmd_STOP[5] =	{0xE3, 0x10, 0x00, 0x20, 0x00}; 

void Init_MC3PHAC()
{   
  MC3PHAC_Message_Send(cmd_RESET,  sizeof(cmd_RESET)); 
  MC3PHAC_Message_Send(cmd_PPWM,  sizeof(cmd_PPWM)); 
  MC3PHAC_Message_Send(cmd_DEADT,  sizeof(cmd_DEADT));
  MC3PHAC_Message_Send(cmd_ACB,  sizeof(cmd_ACB));
  MC3PHAC_Message_Send(cmd_ACF,  sizeof(cmd_ACF));
  MC3PHAC_Message_Send(cmd_FPWM,  sizeof(cmd_FPWM));
  MC3PHAC_Message_Send(cmd_VBOOST,  sizeof(cmd_FPWM));
  MC3PHAC_Message_Send(cmd_MODIN,  sizeof(cmd_MODIN));
  MC3PHAC_Message_Send(cmd_FTOUT,  sizeof(cmd_FTOUT));
  MC3PHAC_Message_Send(cmd_VBDEC,  sizeof(cmd_VBDEC));
  MC3PHAC_Message_Send(cmd_VBRAKE,  sizeof(cmd_VBRAKE));
  MC3PHAC_Message_Send(cmd_VBROWN,  sizeof(cmd_VBROWN));
  MC3PHAC_Message_Send(cmd_VBOVR,  sizeof(cmd_VBOVR));
}


main(void)
{
 ...
 Identification_MC3PHAC();
 Delay_mSeconds(100);
 Init_MC3PHAC();
 Delay_Seconds(1);
 MC3PHAC_Message_Send(cmd_FORW,  sizeof(cmd_FORW)); //Старт двигателя
 ...

}

Изменено пользователем Буратино
Оформление кода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На команду cmd_RESET, процессор MC3PHAC ничего не выдает.

На сброс он и не должен откликаться. Все в порядке.

На последующие команды присылает "2B 00 00".

Дык Вы ж ничего не читаете оттуда. Прочитайте - увидите цирк, как при записи размер значения надо соблюдать, а при чтении - оне всегда 16 битные, что для readvar8, что для readvar16. И при 8-разрядных в старшем байте будет всякая чушь. Впрочем, это было давно, могу чего-то перепутать..

 

в ответ на команду запуска двигателя приходит "2B 85 7B" :(

Дык ноль лишний вроде как в команде(unsigned char const cmd_FORW[5] = {0xE3, 0x10, 0x00, 0x10, 0x00}; ) :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, спасибо разобрался.

Нужно читать байты статуса и сетапа. Там в битах вся инфа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...