PAN1020+1508S蓝牙驱动电机

1、PAN1020是蓝牙SOC 

2、1508S是控制电机正反转的专用芯片

二者结合可以通过蓝牙驱动电机,进一步说就是可以用手机驱动小车

一、板子

        所用板子见:PAN1020 SWD方式程序下载(烧写)_修充电器上瘾的博客-CSDN博客

        这是一个儿童车的驱动板,主控是PAN1020,通过1508s驱动四个电机。电机驱动部分连线图:

c4e1b07e7134415c93da67f313e92e37.png

 1508s的管脚图:b5de0343706b41d2baf59f1c685671be.png

1508s 输入输出逻辑表a22175f686ea42d98e229cc0cbc17c13.png

 所以只要控制2个输入线的高低电平就可以控制输出的四种状态:待命、前进、后退、刹车。

二、源码

        源代码源自pan1020SDK-->proj_rgb_light工程

增加了以下函数

/**
*	@prief 初始化电机
*/
void motor_init()
{
	//motor1  INA:P2.4 INB:P2.3
	GPIO_SetMode(P2,BIT4,GPIO_MODE_OUTPUT);
	GPIO_SetMode(P2,BIT3,GPIO_MODE_OUTPUT);
	P24=0;
	P23=0;
	//motor2	INC:P2.2 IND:P5.7
	GPIO_SetMode(P2,BIT2,GPIO_MODE_OUTPUT);
	GPIO_SetMode(P5,BIT7,GPIO_MODE_OUTPUT);
	P22=0;
	P57=0;	
	//motor3	INA:P0.6 INB:P0.7
	GPIO_SetMode(P0,BIT6,GPIO_MODE_OUTPUT);
	GPIO_SetMode(P0,BIT7,GPIO_MODE_OUTPUT);
	P06=0;
	P07=0;
	//motor4	INC:P2.6 IND:P2.5
	GPIO_SetMode(P2,BIT6,GPIO_MODE_OUTPUT);
	GPIO_SetMode(P2,BIT5,GPIO_MODE_OUTPUT);
	P26=0;
	P25=0;
}

motor_init()初始化了驱动电机的GPIO,初始状态,电机待命。


/**
*	@prief 设置电机运动 1508S  输出电流:1.8A
*	@param iMotor:哪一个电机;mType:运动类型:0:待命;1;前进;2;后退;3:刹车
*/
void motor_set_motion(uint8_t iMotor,uint8_t mType)
{
	switch(iMotor)
	{
		case 1:
				switch(mType)
				{
					case 0:				//待命
							P24=0;
							P23=0;
						break;
					case 1:				//前进
							P24=1;
							P23=0;
						break;
					case 2:				//后退
							P24=0;
							P23=1;
						break;
					case 3:				//刹车
							P24=1;
							P23=1;
						break;
					}
				
			break;
		case 2:
			switch(mType)
				{
					case 0:				//待命
							P22=0;
							P57=0;
						break;
					case 1:				//前进
							P22=1;
							P57=0;
						break;
					case 2:				//后退
							P22=0;
							P57=1;
						break;
					case 3:				//刹车
							P22=1;
							P57=1;
						break;
					}
			break;
		case 3:
			switch(mType)
				{
					case 0:				//待命
							P06=0;
							P07=0;
						break;
					case 1:				//前进
							P06=1;
							P07=0;
						break;
					case 2:				//后退
							P06=0;
							P07=1;
						break;
					case 3:				//刹车
							P06=1;
							P07=1;
						break;
					}
			break;
		case 4:
			switch(mType)
				{
					case 0:				//待命
							P26=0;
							P25=0;
						break;
					case 1:				//前进
							P26=1;
							P25=0;
						break;
					case 2:				//后退
							P26=0;
							P25=1;
						break;
					case 3:				//刹车
							P26=1;
							P25=1;
						break;
					}
			break;
	}

}

motor_set_motion(uint8_t iMotor,uint8_t mType)控制4个电机的四种状态。代码毫无技巧可言。

static int rgb_server1_peer_write_data_ind_handler(ke_msg_id_t const msgid,
                                               struct rgb_server1_peer_write_data_ind const *param,
                                               ke_task_id_t const dest_id,
                                               ke_task_id_t const src_id)
{
	static uint8_t zf=0;
	uint8_t data[2]={0x16,0xbb};
	const uint8_t arr1[10] = {0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00};
	const uint8_t arr2[10] = {0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00};

	if(memcmp(param->packet,arr1,10) == 0 || memcmp(param->packet,arr2,10) == 0)
	{
		
	}
	else
	{
		show_reg3(param->packet,param->packet_size);
    }
	//Set RGB
    if((param->packet_size==5)&&(param->packet[0]==0xAA)&&(param->packet[1]==0x16))
	{
		light_set_rgb(param->packet[2]*10,param->packet[3]*10,param->packet[4]*10);
	}
	else if((param->packet_size==2)&&(param->packet[0]==0xAA)&&(param->packet[1]==0x03))
	{
		printf("close light\r\n");
		light_set_rgb(0,0,0);
		motor_set_motion(1,3);
		if(zf==0){
			motor_set_motion(1,2);
			zf=1;
		}
		else{
			motor_set_motion(1,1);
			zf=0;
			}
	}
	app_rgb1_send_value(RGB_SERVERICE1_IDX_10,data,2);
    return (KE_MSG_CONSUMED);
}

修改了pan1020SDK-->proj_rgb_light工程-->app_rgb_light1.c-->rgb_server1_peer_write_data_ind_handler函数

增加了

motor_set_motion(1,3);                     //电机1刹车
        if(zf==0){
            motor_set_motion(1,2);         //电机1反转
            zf=1;
        }
        else{
            motor_set_motion(1,1);         //电机1正转
            zf=0;
            }

三、使用

        在手机上连上蓝牙,发出"AA03"指令可以电机改变旋转方向。 

四、总结

1、1508s输出5v1.8A,为了安全,接下载器的时候不接电机,接电机的时候不接下载器。

34b6464fd1e14555b02b38c55018edc2.jpg

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值