📄 motors.c
字号:
/**
* \addtogroup Motors
* @{
*/
/*****************************************************************************/
/**
* \file Motors.c
* DC electric motor control code for the T89C51AC2 and Keil C51.
* \author Copyright (c) 2005, Murray R. Van Luyn. <vanluynm@iinet.net.au>
* \version 0.0
* \date 10-10-05
*/
/*****************************************************************************/
/*****************************************************************************
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*****************************************************************************/
#include "Motors.h"
/*****************************************************************************
*
* Structures
*
*****************************************************************************/
/*****************************************************************************
*
* Global Variables Definitions
*
*****************************************************************************/
/*****************************************************************************
*
* Private Function Prototypes
*
*****************************************************************************/
/*****************************************************************************
*
* Public Function Implementation
*
*****************************************************************************/
/*****************************************************************************
*
* motors_init()
*
*****************************************************************************/
void motors_init(void)
{
pwm_init();
// Halt and brake both channels.
motors_set_brake(MOTORS_CHANNEL_A);
motors_set_brake(MOTORS_CHANNEL_B);
return;
}
/*****************************************************************************
*
* motors_set_speed()
*
*****************************************************************************/
void motors_set_speed(unsigned char channel, char speed)
{
switch(channel)
{
case MOTORS_CHANNEL_A:
{
if(speed > 0)
{
// Set forward direction for A
MOTORS_IN1 = 1;
MOTORS_IN2 = 0;
}
else
{
// Set reverse direction for A
MOTORS_IN1 = 0;
MOTORS_IN2 = 1;
}
// Set speed for A
pwm_set_channel(MOTORS_ENA, -255 * cabs(speed) / 127 + 255);
}
case MOTORS_CHANNEL_B:
{
if(speed > 0)
{
// Set forward direction for B
MOTORS_IN3 = 1;
MOTORS_IN4 = 0;
}
else
{
// Set reverse direction for B
MOTORS_IN3 = 0;
MOTORS_IN4 = 1;
}
// Set speed for B
pwm_set_channel(MOTORS_ENB, -255 * cabs(speed) / 127 + 255);
}
}
return;
}
/*****************************************************************************
*
* motors_set_brake()
*
*****************************************************************************/
void motors_set_brake(unsigned char channel)
{
switch(channel)
{
case MOTORS_CHANNEL_A:
{
// Set forward direction for A
MOTORS_IN1 = 0;
MOTORS_IN2 = 0;
// Set brake speed for A
pwm_set_channel(MOTORS_ENA, 255);
}
case MOTORS_CHANNEL_B:
{
MOTORS_IN3 = 0;
MOTORS_IN4 = 0;
// Set brake speed for B
pwm_set_channel(MOTORS_ENB, 255);
}
}
return;
}
/*****************************************************************************
*
* Private Function Implementation
*
*****************************************************************************/
/** @} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -