⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motors.c

📁 PID motor control with 8051
💻 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 + -