
02.05.2010, 01:58
|
|
Участник форума
Регистрация: 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..
|
|
|