Тема: PIC16F887 + Linux
Показать сообщение отдельно

  #2  
Старый 02.05.2010, 01:58
M.W.N.N.
Участник форума
Регистрация: 05.01.2009
Сообщений: 191
Провел на форуме:
3020589

Репутация: 240
По умолчанию

Сразу еще 1 вопрос:
Вот моя библиотека для управления двигателем mator.h
Код:
char motor_duty_=127;
char motor_init_=0;

void Motor_Init()
{
     if(motor_init_==0){
                        motor_init_=1;
						ANSELH.F0=0;
						ANSELH.F2=0;
						TRISB.F1=0;
						TRISB.F2=0;
						TRISD.F0=0;
						TRISD.F1=0;
						Pwm1_Init(5000);
						Pwm2_Init(5000);
					   }
}

void Change_Duty(char speed)
{

				if(speed!=motor_duty_)
                                      {
                                      motor_duty_=speed;
							          Pwm1_Change_Duty(speed);
							          Pwm2_Change_Duty(speed);
							          }
}


void Motor_A_FWD(){
     Pwm1_Start();
     PORTD.F0=0;
     PORTD.F1=1;
     }

void Motor_B_FWD(){
     Pwm2_Start();
     PORTB.F1=0;
     PORTB.F2=1;
     }

void Motor_A_BWD(){
     Pwm1_Start();
     PORTD.F0=1;
     PORTD.F1=0;
     }

void Motor_B_BWD(){
     Pwm2_Start();
     PORTB.F1=1;
     PORTB.F2=0;
     }

void M_A_F(){
     Pwm1_Stop();
     PORTD.F0=0;
     PORTD.F1=0;
     }
void M_B_F(){
     Pwm2_Stop();
     PORTB.F1=0;
     PORTB.F2=0;
     }

void Forward(char speed){
     Motor_Init();
     Change_Duty(speed);
     Motor_A_FWD();
     Motor_B_FWD();
     }

void Backward(char speed){
     Motor_Init();
     Change_Duty(speed);
     Motor_A_BWD();
     Motor_B_BWD();
     }

void S_Right(char speed){
     Motor_Init();
     Change_Duty(speed);
     Motor_A_FWD();
     Motor_B_BWD();
     }

void S_Left(char speed){
     Motor_Init();
     Change_Duty(speed);
     Motor_A_BWD();
     Motor_B_FWD();
     }

void Motor_Stop(){
     Motor_Init();
     Change_Duty(0);
     M_A_F();
     M_B_F();
     }
Код программы которую гружу в микроконтроллер:
Код:
#include "motor.h"
void main(){
while(1){
Forward(255);
Delay_ms(2000);
S_Left(255);
Delay_ms(800);
Forward(255);
Delay_ms(2000);
S_Right(255);
Delay_ms(800);
Forward(255);
Delay_ms(2000);
Backward(255);
Delay_ms(1000);
Motor_Stop;
}
}
По идее робот должен так:
2000 мс ехать вперед
800 мс поворачивать налево
2000 мс ехать вперед
800 мс поворачивать на право
2000 мс ехать вперед
1000 мс ехать на зад.

Но он постоянно едет в перед.

Последний раз редактировалось M.W.N.N.; 02.05.2010 в 02:25..