Переделываем файл motor.h

April 22, 2014 by admin Комментировать »

Самое разумное, отказаться от регулировки скорости вращения двигателя

// *** Motor A *****

// PD0 ====> 1A

// PD1 ====> 1B

// PC2 ====> 1E (PWM1)

// *** Motor B *****

// PB1 ====> 2A

// PB2 ====> 2B

// PC1 ====> 2E (PWM2)

//****************************************************

//********* Функция инициализации двигателя ****************

//**************************************************** void Motor_Init()

{

ANSELH &amp= 0xFA  // RB1 ==> Цифровой Ввод/Вывод

// RB2 ==> Цифровой Ввод/Вывод TRISB &amp= 0xF9   // Двигатель Б 2A

// Двигатель Б 2B TRISD &amp= 0xFC   // Двигатель А 1A

// Двигатель А 1B

TRISC2 = 1

TRISC1 = 1

PR2 = 255       // период

CCP1CON = 0x3C  // двоичное 00111100 CCPR1L =255     // длительность CCP2CON = 0x3C  // двоичное 00111100 CCPR2L = 255    // длительность

PIR1 &amp= 0xFD    // очистка флага

T2CON = 1       // предделитель таймера TMR2ON = 1      // разрешение работы таймера while (TMR2IF == 0)

TRISC2 = 0      // включение PWM1 TRISC1 = 0      // включение PWM2

}

//****************************************************

void PWM1_Stop()

{

TRISC2 = 1

TMR2ON = 0

}

void PWM2_Stop()

{

TRISC1 = 1

TMR2ON = 0

}

/********** Двигатель A команда ВПЕРЕД ********/ void Motor_A_FWD()

{

RD0 =0

RD1 =1

}

/************************************/

/****** Двигатель B команда ВПЕРЕД ****/ void Motor_B_FWD()

{

RB1 =0

RB2 =1

}

/************************************/

/******** Двигатель A команда НАЗАД*****/ void Motor_A_BWD()

{

RD0 =1

RD1 =0

}

/************************************/

/******** Двигатель B команда НАЗАД *****/ void Motor_B_BWD()

{

RB1 =1

RB2 =0

}

/************************************/

/******* Двигатель A выключен **********/ void Motor_A_Off()

{

PWM1_Stop() RD0 =0

RD1 =0

}

/************************************/

/********** Двигатель B выключен *******/ void Motor_B_Off()

{

PWM2_Stop() RB1 =0

RB2 =0

}

/************************************/

/******* Команда ДВИЖЕНИЕ ВПЕРЕД ******/ void Forward()

{

Motor_A_FWD() Motor_B_FWD()

}

/************************************/

/****** Команда ДВИЖЕНИЕ НАЗАД ********/ void Backward()

{

Motor_A_BWD() Motor_B_BWD()

}

/************************************/

/***** Команда ПОВОРОТ НАПРАВО ** ******/ void S_Right()

{

Motor_B_FWD() Motor_A_BWD()

}

/************************************/

/******** Команда ПОВОРОТ НАЛЕВО ******/ void S_Left()

{

Motor_B_BWD() Motor_A_FWD()

}

/************************************/

/********** Команда СТОП ************/ void Motor_Stop()

{

Motor_A_Off() Motor_B_Off()

}

/************************************/

И загрузим в робота программу проверки работы двигателей:

#include <pic16f887h>

#include &quotmotorh&quot

#include &quotdelay_20h&quot

typedef unsigned int word

word at 0x2007 CONFIG1 = 0x2FF2

void main()

{

while(1)

{

Motor_Init()

Forward() // Команда ВПЕРЕД DELAY_S(2)

S_Left() // Команда ПОВОРОТ ВЛЕВО DELAY_MS(800)

Forward() // Команда ВПЕРЕД

DELAY_S(2)

S_Right() // Команда ПОВОРОТ ВПРАВО DELAY_MS(800)

Forward() // Команда ВПЕРЕД DELAY_S(2)

Backward() // Команда НАЗАД DELAY_S(1)

Motor_Stop() // Остановить оба двигателя DELAY_S(5)

}

}

Хотя робот движется, как ему и предписано, при работе над этой частью программы я встретил столько непонятного, что сомнения в правильности проделанной работы остаются Быть может, вы, повторяя это, разберётесь со всеми странностями, у меня терпения, увы, не хватило

Источник: Гололобов ВН,- Самоучитель игры на паяльнике (Об электронике для школьников и не только), – Москва 2012

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты