技术日志——第七篇(新接口合集)


上一篇应该是在凌晨五点钟写的发布的,也是3.10日,这一篇可能也是3.10日完成,也可能是3.11完成,日期就写3.10日了

这次的任务就是,更改接线
更改接线的主要原因是要使用正交编码接口了,增加新的定时器的话,串口的一些接口就会变,所以基本上所有接线都变了。

改线

正交编码器接口

使用4个定时器作为4个编码器的接口TIM1、TIM2、TIM4、TIM8
接口分别是PE9,PE11、PA5,PB3、PD12,PD13、PC6,PC7

1电机  
A相    ------------   PE9
B相    ------------   PE11

2电机  
A相    ------------   PA5
B相    ------------   PB3

3电机  
A相    ------------   PD12
B相    ------------   PD13

4电机  
A相    ------------   PC6
B相    ------------   PC7

更改代码

开启编码器计数

	HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL);
	HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);
	HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_ALL);
	HAL_TIM_Encoder_Start(&htim8, TIM_CHANNEL_ALL);

定时中断里获取计数值并设置为0

		Count1=__HAL_TIM_GET_COUNTER(&htim1);
		Count2=__HAL_TIM_GET_COUNTER(&htim2);
		Count3=__HAL_TIM_GET_COUNTER(&htim4);
		Count4=__HAL_TIM_GET_COUNTER(&htim8);
		__HAL_TIM_SET_COUNTER(&htim1,0);
		__HAL_TIM_SET_COUNTER(&htim2,0);
		__HAL_TIM_SET_COUNTER(&htim4,0);
		__HAL_TIM_SET_COUNTER(&htim8,0);

PWM接口

定时器资源不足,所以用了以前的PWM接口来接正交编码器,所以新的PWM接口用了几个零散的定时器,有TIM3、TIM10、TIM11、TIM12、TIM13
接口分别是PA6PA7PB0PB1、PF6、PF7、PB15、PF8

左前A,右前B  
AIN1    ------------   PA6
AIN2    ------------   PA7
BIN1    ------------   PB0
BIN2    ------------   PB1
VM      ------------   7.6-30V
GND     ------------   GND
VCC     ------------   5V
GND     ------------   GND

AOUT1   ------------  A电机线电源-
AOUT2   ------------  A电机线电源+
BOUT1   ------------  B电机线电源+
BOUT2   ------------  B电机线电源-

左后C,右后D  
AIN1    ------------   PF6
AIN2    ------------   PF7
BIN1    ------------   PA2
BIN2    ------------   PF8
VM      ------------   7.6-30V
GND     ------------   GND
VCC     ------------   5V
GND     ------------   GND

AOUT1   ------------  C电机线电源-
AOUT2   ------------  C电机线电源+
BOUT1   ------------  D电机线电源+
BOUT2   ------------  D电机线电源-

更改代码

使能八个电机的pwm通道

    HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);//使能8个电机pwm通道
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
	HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim11,TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim12,TIM_CHANNEL_2);
	HAL_TIM_PWM_Start(&htim13,TIM_CHANNEL_1);

更改速度控制程序

void set_velocity(int moto,float target_speed)
{
	if(moto==1)
	{
		if(motor_custom_abs(motor_custom_abs(realV1)-motor_custom_abs(target_speed))>30)	PWM1=(motor_custom_abs(target_speed)+102)/4.17f;
		if(target_speed>=0)
		{
			__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_3, 0);    //修改比较值,修改占空比pwm1/7200
			__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_4, PWM1);    //修改比较值,修改占空比pwm2/7200
		}
		if(target_speed<0)
		{
			__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_3, PWM1);    //修改比较值,修改占空比pwm1/7200
			__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_4, 0);    //修改比较值,修改占空比pwm2/7200
		}
	}
	
	if(moto==2)
	{
		if(motor_custom_abs(motor_custom_abs(realV2)-motor_custom_abs(target_speed))>30)	PWM2=(motor_custom_abs(target_speed)+133)/4.42f;
		if(target_speed>=0)
		{
			__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, PWM2);    //修改比较值,修改占空比pwm1/7200
			__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, 0);    //修改比较值,修改占空比pwm2/7200
		}
		if(target_speed<0)
		{
			__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, 0);    //修改比较值,修改占空比pwm1/7200
			__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, PWM2);    //修改比较值,修改占空比pwm2/7200
		}

	}
	
	if(moto==3)
	{
		if(motor_custom_abs(motor_custom_abs(realV3)-motor_custom_abs(target_speed))>30)	PWM3=(motor_custom_abs(target_speed)+109)/4.18f;
		if(target_speed>=0)
		{
			__HAL_TIM_SetCompare(&htim10, TIM_CHANNEL_1, 0);    //修改比较值,修改占空比pwm1/7200
			__HAL_TIM_SetCompare(&htim11, TIM_CHANNEL_1, PWM3);    //修改比较值,修改占空比pwm2/7200
		}
		if(target_speed<0)
		{
			__HAL_TIM_SetCompare(&htim10, TIM_CHANNEL_1, PWM3);    //修改比较值,修改占空比pwm1/7200
			__HAL_TIM_SetCompare(&htim11, TIM_CHANNEL_1, 0);    //修改比较值,修改占空比pwm2/7200
		}

	}
	
	if(moto==4)
	{
		if(motor_custom_abs(motor_custom_abs(realV4)-motor_custom_abs(target_speed))>30)	PWM4=(motor_custom_abs(target_speed)+137)/4.40f;
		if(target_speed>=0)
		{
			__HAL_TIM_SetCompare(&htim12, TIM_CHANNEL_2, 0);    //修改比较值,修改占空比pwm1/7200
			__HAL_TIM_SetCompare(&htim13, TIM_CHANNEL_1, PWM4);    //修改比较值,修改占空比pwm2/7200
		}
		if(target_speed<0)
		{
			__HAL_TIM_SetCompare(&htim12, TIM_CHANNEL_2, PWM4);    //修改比较值,修改占空比pwm1/7200
			__HAL_TIM_SetCompare(&htim13, TIM_CHANNEL_1, 0);    //修改比较值,修改占空比pwm2/7200
		}
	}
	
}

定时中断

定时中断改成了TIM9,分频后的频率为20Hz

开启定时中断9

HAL_TIM_Base_Start_IT(&htim9);

串口

UART2是陀螺仪的接口,更改成了PD5(TX)PD6(RX)
UART5是正前方激光测距的接口,未更改,仍然是PC12PD2
UART6是侧方的激光测距接口,更改为PG9PG14

程序不用改

测试

在这里插入图片描述
各项数据获取正常,并且电机运行正常

成功

更改控制程序

今晚改了一晚上控制程序,但最后效果还是一般

和老师联系讨论了一下,应该是我走的方向不太对,所以下次任务就是:

  • 测试八个方向的开环程序,并观察总结思考解决方法
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值