大疆3508、2006的输出轴的角度获取

该博客详细介绍了如何将大疆3508、2006电调的转子角度转换为电机输出轴角度的过程,通过PID控制电机输出轴角度。算法考虑了转子正反向转动的情况,根据角度差更新转子圈数,并计算输出轴实际角度。代码示例展示了实时处理转子反馈数据的逻辑,但存在断电后角度归零的问题。博主分享了工程文件并邀请交流讨论。

因为大疆3508、2006电调的报文只有转子的角度,在使用过程中可能需要用的到输出轴的角度,比如用PID控制电机的输出轴角度。

把转子的角度累积到输出轴上
算法思路如下:
1、我们知道转子每周的角度随着方向不一样有两种情况,一种累加的到360度后从0开始,另外一种是类减的到0度后从360开始。我们可以利用两次接受的转子的角度差。假设正转累加,反转累减
在这里插入图片描述
2、转子的速度方向知道,假设正转为正,反转为负。
3、设定电机输出轴角度为out_angle,转子转的圈数为cyclinder_number,前后两秒的转子角度差为angle_error
4、
1)当转子速度为正时,angle_error出现负值,代表转子已经转了一圈,此时cyclinder_number++;
2)当转子速度为负时,angle_error出现正值,代表转子已经逆着转了一圈,此时cyclinder_number–,
5、输出轴角度为cyclinder_number*K+转子角度

代码如下

if(rx_message.StdId == MOTOR_ID_READ6)
		{
			MOTOR_FEEDBACK[motor_6].angle_value  = rx_message.Data[0] << 8 | rx_message.Data[1];
			MOTOR_FEEDBACK[motor_6].speed_rpm    = rx_message.Data[2] << 8 | rx_message.Data[3];
			MOTOR_FEEDBACK[motor_6].real_current = rx_message.Data[4] << 8 | rx_message.Data[5];
			MOTOR_FEEDBACK[motor_6].temperature = rx_message.Data[6];
			
			MOTOR_FEEDBACK[motor_6].real_angle = MOTOR_FEEDBACK[motor_6].angle_value/8192.0f*360.0f;
			
			////////////////////////////////////////////////////////////////////////////////////////////////////
      angle_error = MOTOR_FEEDBACK[motor_6].angle_value - angle_old;     //转子的角度差 = 现在转子角度 - 上一次的转子角度
			if(MOTOR_FEEDBACK[motor_6].speed_rpm > 0)                          //如果转子速度为正
			{
				if(-18<cyclinder_number&&cyclinder_number < 18)                   //判读输出轴是否转了一圈
				{
					if(angle_error < -1000)                                          //角度为负
					{ 
					  cyclinder_number++;                                            //转子已经转了一圈,cyclinder_number++
					} 
				}
				else
				{
					cyclinder_number = 0;
				}
			}
			else if(MOTOR_FEEDBACK[motor_6].speed_rpm < 0)
			{
				if(-18<cyclinder_number&&cyclinder_number < 18)
				{
					if(angle_error > 1000)
					{
					  cyclinder_number--;
					}
				}
				else
				{
					cyclinder_number = 0;
				}				
			}
		
			MOTOR_FEEDBACK[motor_6].out_angle = MOTOR_FEEDBACK[motor_6].angle_value + cyclinder_number*8191;     //输出轴的机械刻度
			if(MOTOR_FEEDBACK[motor_6].out_angle >=0)                                                            //如果这个条件使用,在elsed中处理一下控制角度的周期
			{
				MOTOR_FEEDBACK[motor_6].out_real_angle = MOTOR_FEEDBACK[motor_6].out_angle/(8191*18.00f)*360;       //输出轴的机械刻度换算成角度
			}
			else
			{
				MOTOR_FEEDBACK[motor_6].out_real_angle = MOTOR_FEEDBACK[motor_6].out_angle/(8191*18.00f)*360;        //输出轴的机械刻度换算成角度
			}
      angle_old = MOTOR_FEEDBACK[motor_6].angle_value;                                                       //记录此时的转子角度,下次接收时作“上一次角度”使用
			//////////////////////////////////////////////////////////////////////////////////////////////////////
		}
		

代码不复杂,也有点小问题,比如每次断电,角度会归零(有点值,主要是转子的角度)
总的来说就是把转子的角度累积到输出轴上

关注点赞博主并私信,送工程文件

仅为个人拙见,欢迎指正交流,转发注明出处哦,谢谢

### 大疆3508电机PID角度环原理 #### PID控制器基础 PID(比例 - 积分 - 微分)控制器是一种常见的反馈控制算法,通过对误差进行比例、积分和微分运算,输出控制量以减小系统误差。其基本公式为: \[u(t) = K_p e(t) + K_i \int_{0}^{t} e(\tau) d\tau + K_d \frac{de(t)}{dt}\] 其中,\(u(t)\) 是控制器的输出,\(K_p\) 是比例系数,\(K_i\) 是积分系数,\(K_d\) 是微分系数,\(e(t)\) 是设定值与实际值之间的误差。 #### 大疆3508电机PID角度环工作原理 在大疆3508电机角度控制中,角度环的作用是使电机转动到指定的角度位置。具体过程如下: 1. **误差计算**:将期望的角度值(设定值)与电机当前实际角度值相减,得到角度误差 \(e(t)\)。例如,期望电机转到 90°,而当前电机角度为 30°,则误差 \(e(t)=90 - 30 = 60°\)。 2. **比例控制(P)**:比例项 \(K_p e(t)\) 与误差成正比,其作用是快速响应误差。当误差较大时,比例项输出较大的控制量,使电机快速向目标角度转动。但比例系数 \(K_p\) 过大可能会导致系统超调,即电机转动超过目标角度。 3. **积分控制(I)**:积分项 \(K_i \int_{0}^{t} e(\tau) d\tau\) 是对误差在一段时间内的累积。它的作用是消除系统的稳态误差,例如由于摩擦力等因素导致的电机无法准确到达目标角度的问题。但积分项可能会导致系统响应变慢,甚至出现积分饱和现象。 4. **微分控制(D)**:微分项 \(K_d \frac{de(t)}{dt}\) 与误差的变化率成正比。它的作用是预测误差的变化趋势,提前进行调整,抑制系统的振荡。当电机接近目标角度时,误差变化率减小,微分项输出减小,避免电机超调。 5. **输出计算与控制**:将比例、积分和微分项相加,得到PID控制器的输出 \(u(t)\)。这个输出值将作为电机控制信号,通过驱动器调节电机的电流,从而控制电机的转矩和转速,使电机向目标角度转动。 ### 大疆3508电机PID角度环应用 #### 机械臂关节控制 在机械臂的关节控制中,需要精确控制每个关节的转动角度,以实现机械臂的各种动作。大疆3508电机的PID角度环可以确保关节准确地转动到指定角度,提高机械臂的运动精度和稳定性。例如,在工业自动化生产线上,机械臂需要准确抓取和放置物品,角度环的精确控制可以保证机械臂的操作精度。 #### 云台稳定系统 在摄影和摄像设备的云台稳定系统中,需要保持设备的水平和垂直角度稳定。大疆3508电机的PID角度环可以根据传感器检测到的角度变化,及时调整云台的角度,抵消外界干扰(如振动、晃动等)的影响,使拍摄画面保持稳定。 #### 机器人运动控制 在机器人的运动控制中,电机角度控制对于机器人的行走、转向等动作至关重要。大疆3508电机的PID角度环可以实现机器人关节的精确控制,使机器人能够灵活地完成各种任务,如在复杂环境中导航、执行特定的操作等。 以下是一个简单的Python代码示例,模拟大疆3508电机PID角度环的控制过程: ```python class PIDController: def __init__(self, Kp, Ki, Kd): self.Kp = Kp self.Ki = Ki self.Kd = Kd self.prev_error = 0 self.integral = 0 def update(self, setpoint, current_value): error = setpoint - current_value self.integral += error derivative = error - self.prev_error output = self.Kp * error + self.Ki * self.integral + self.Kd * derivative self.prev_error = error return output # 示例参数 Kp = 0.5 Ki = 0.1 Kd = 0.05 pid = PIDController(Kp, Ki, Kd) # 设定目标角度和初始角度 setpoint = 90 current_angle = 0 # 模拟控制过程 for i in range(20): control_output = pid.update(setpoint, current_angle) # 简单模拟电机角度变化 current_angle += control_output * 0.1 print(f"Step {i}: Current Angle = {current_angle:.2f}°") ```
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Orange--Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值