这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » MSPM03507手势控制电机方向

共13条 1/2 1 2 跳转至

MSPM03507手势控制电机方向

助工
2024-07-13 17:47:21     打赏

【前言】

MSPM03507 有定时器输出PWM功能,结合在前面的手势传感器。这次实验主要实验手势传感器来实现对电机的正反转控制。

【实验器材】

1、LP-MSPM0G3507开发板。

2、PAJ7620手势传感器

3、步进电机控制器

5、步进电机

6、24伏直流电源

【软件开发环境】

Code Composer Studio   Version: 12.7.0.00007 版本

【程序设计思路】

1、使用i2c读取手势传感的手势,并判断出他的状态。

2、步进电机驱动机设置细分为1600。pwm与之配合也输出1600Hz即每秒转一圈。

3、配置一个输出IO为方向控制信号。高电平为正转,低电平为反转。

【实验步骤】

1、配置pwm,打开syscfg配置,增加一个pwm,时钟选择、通道IO、占空比等如下图所示。


image.png

image.png

2、配置GPIO 选PB6为方向输出IO

image.png

3、配置好后生成工程。

添加代码如下:

#include "ti_msp_dl_config.h"
#include "\drivers\PAJ7620U2.h"
#include "\oled\oled.h"
int Gesture_Data;
void set_dir(void);
int main(void)
{
    SYSCFG_DL_init();
    DL_TimerG_startCounter(PWM_0_INST);
    /* Set LED to indicate start of transfer */
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(0,0,"hello world",16,1);
    OLED_Refresh_Gram();
    uint8_t OBJ_BRIGHTNESS = 0;      // Object Brightness (Max. 255)
    uint16_t OBJ_SIZE = 0;               // Object Size (Max. 900)
    uint16_t ID = PAJ7620U2_init(I2C1);
    /* If write and read were successful, toggle LED */
    while (1) {
        delay_cycles(1000);
        OLED_Clear();
        OLED_Printf(0,32,16,1,"MOTOR");
//        OBJ_BRIGHTNESS = PAJ7620U2_PS_ReadObjBrightness(I2C1);    // Object Brightness (Max. 255)
//        OBJ_SIZE = PAJ7620U2_PS_ReadObjSize(I2C1);                            // Object Size (Max. 900)
//        OLED_Printf(0,0,16,1,"BRIGHT:%d",OBJ_BRIGHTNESS);
//        OLED_Printf(0,24,16,1,"OBJ_SIZE:%d",OBJ_SIZE);
        Gesture_Data = PAJ7620U2_Gesture_ReadData(I2C1);
        set_dir();
        OLED_Refresh_Gram();
    }
}

void set_dir(void)
{
    if( Gesture_Data != PAJ_NONE )
            {
                switch (Gesture_Data)
                {
                    case PAJ_UP:
                        OLED_Printf(0,0,16,1,"UP");
                        DL_GPIO_clearPins(GPIO_MOTOR_PORT, GPIO_MOTOR_MOTOR_DIR_PIN);
                        DL_TimerG_startCounter(PWM_0_INST);
                        break;
                    case PAJ_DOWN:
                        OLED_Printf(0,0,16,1,"Dowm");
                        DL_GPIO_setPins(GPIO_MOTOR_PORT, GPIO_MOTOR_MOTOR_DIR_PIN);
                        DL_TimerG_startCounter(PWM_0_INST);
                    break;  // вниз
                    case PAJ_LEFT:
                        OLED_Printf(0,0,16,1,"LEFT");
                    break;  // влево
                    case PAJ_RIGHT:
                        OLED_Printf(0,0,16,1,"RIGHT");

                    break;  // вправо
                    case PAJ_FORWARD:
                        OLED_Printf(0,0,16,1,"FORWARD");
                        DL_TimerG_stopCounter(PWM_0_INST);
                    break;  // вперед

                    default: break;
                }
                Gesture_Data = 0;
            }
}

代码中,set_dir,根据不同的手势,来开启或者关闭pwm的定时器输出。同根据不同的方向来设置DIR的电平状态。

【实验效果】

下载到开发板后,可以使用手势来控制电机的正反转,关闭。





关键词: Ti     MSPM0G3507     I2C     PAJ7620    

高工
2024-07-13 18:21:25     打赏
2楼

谢谢分享


菜鸟
2024-07-13 20:58:40     打赏
3楼

【实验步骤】1、配置pwm,打开syscfg配置,增加一个pwm,时钟选择、通道IO、占空比等如下图所示。

下面的代码没显示出来啊?


专家
2024-07-13 21:13:25     打赏
4楼

谢谢分享


专家
2024-07-13 21:20:34     打赏
5楼

谢谢分享


高工
2024-07-13 21:21:56     打赏
6楼

谢谢分享


专家
2024-07-14 00:15:43     打赏
7楼

感谢楼主分享


菜鸟
2024-07-14 09:41:19     打赏
8楼

感谢大佬分享


工程师
2024-07-14 15:43:09     打赏
9楼

666666


专家
2024-07-15 05:28:04     打赏
10楼

谢谢分享


共13条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]