旋转变压器编码器软件解算方法与应用

STM32F1旋变解码
本文介绍如何使用STM32F1单片机实现旋变解码,包括硬件电路设计、软件设计等内容,并探讨了软件解码相较于硬件解码的优势。

STM32F1单片机实现旋变软件解码


旋变是什么?工作原理?应用场合?解码原理?略。


1.硬件电路

设计1,10khz 正弦信号发生器。要求电流能够达到500mA~1A左右,幅值7.5V。

1.可以利用芯片输出10kzh方波,通过一次积分电路得到三角波,通过二次积分得到正弦波。

2.可以通过芯片输出两路调制pwm波,再通过滤波器得到差分正弦波。

设计2,输出信号调理电路。差分正弦信号,调理到0~3.3V模拟信号,用于连接stm32单片机。


一种参考电路设计

2.软件设计

1.采样输出的调理信号

采样时机,设定在pwm的定点,触发AD1和AD2同步采样。然后分别使用角度估计算法和反正切算法进行对比解算出的角度和角速度。因此,AD采样频率10khz,角度估计算法执行周期也是10khz。

2.软件解算方法

AD采样完成中断中,执行角度估计算法。下图为估计算法流程图。


3.仿真验证算法

在simulink中搭建仿真模型验证角度估计算法的效果。仿真模型如下。


模拟旋变输出信号


角度估计效果



4.总结

1.旋变解码软件解算系统,两个重点,其一,激励电路和调理电路的设计,其二,软件解算方法。任何一部分都影响着解算的精度和稳定性。

2.STM32F1单片机主频72Mhz,计算角度解码算只需要5us左右。正余弦采用查表方式。

3.相比于基于硬件芯片旋变解码方法,软件解码更加灵活,成本较低,通过优化硬件电路和软件解码方法,性能上基本与硬件方式一致。

4.一般带有旋变编码器的驱动器,应该多数是使用软件解码的吧(猜测),直接利用主控芯片进行解算,充分利用CPU,也降低成本。

5.拓展

目前市面上流通者很多汽车转向电机,这种电机广泛被网友用来DIY各种产品。但是受限于电机是磁阻旋变基本上无法使用这个高端传感器,网友多数采用两种方式驱动该电机,其一,直接放弃传感器,采用无感驱动器,其二,改装增加霍尔传感器。第一种方法,难度最小,但是目前无感驱动器大负载启动仍然是难点,效果较差;第二种方法,难度较大,要求具有一定的技术能力,同时霍尔角度的调整需要多次试凑,耗时较长,但增加霍尔之后,可以实现满载低速启动。全工况运行良好。


1.利用上面的软件解码方法,设计一个软件解算模块,输入电机旋变编码器,输出三相霍尔角度信号,ABZ信号,亦或者是SPI通信的角度信号。

2.目前市面上应该有类似功能的模块,旋变解码转换ABZ正交编码器,无缝兼容传统光电编码器驱动器。用FPGA或者FPGA可以轻松实现。

3.还是无感模式控制比较好!!!!省事,省钱。




### 旋转变压器转速计方法 旋转变压器是一种角度位置检测装置,其输出信号通常为两路正交的正弦波电压信号。这些信号可以用来推导出电机转子的角度和速度信息。以下是关于如何利用旋转变压器信号来计转速的具体方法。 #### 基本原理 当电机旋转时,由于转子轮廓的变化以及空间布置的关系,蓝色线圈两端的感应电压 \( U_{\text{sin}} \) 和红色线圈两端的感应电压 \( U_{\text{cos}} \) 形成了一组相互垂直的正弦波信号[^2]。这两个信号可以用以下形式表示: \[ U_{\text{sin}}(t) = A \cdot \sin(\omega t + \phi_0) \] \[ U_{\text{cos}}(t) = A \cdot \cos(\omega t + \phi_0) \] 其中: - \( A \) 是信号幅度, - \( \omega \) 是角频率(单位:弧度/秒), - \( \phi_0 \) 是初始相位。 通过析这两路信号之间的关系,可以获得转子的位置和速度信息。 --- #### 转速计公式 假设已知两个时间点 \( t_1 \) 和 \( t_2 \),对应的两路信号分别为 \( (U_{\text{sin},1}, U_{\text{cos},1}) \) 和 \( (U_{\text{sin},2}, U_{\text{cos},2}) \)。可以通过反正切函数求当前时刻的机械角度 \( \theta(t) \)[^3]: \[ \theta(t) = \arctan2(U_{\text{sin}}, U_{\text{cos}}) \] 这里使用了 `arctan2` 函数以确保角度范围覆盖整个圆周(\( -\pi \) 到 \( \pi \))。随后,根据两次采样之间的时间间隔 \( \Delta t = t_2 - t_1 \),可以得到平均角速度 \( \omega \): \[ \omega = \frac{\Delta \theta}{\Delta t} = \frac{\theta(t_2) - \theta(t_1)}{t_2 - t_1} \] 最终,将角速度转化为转速(单位:r/min),需乘以比例系数并除以 \( 2\pi \): \[ n = \frac{\omega \times 60}{2\pi} = \frac{\Delta \theta \times 60}{2\pi \Delta t} \][^1] --- #### 锁相环的应用 实际应用中,常采用锁相环(PLL)技术实现对旋转变压器信号的实时处理。锁相环的核心在于通过反馈机制调整内部模型的频率和相位,使其输入信号保持同步。具体而言,在控制框图中的积分环节用于跟踪输入信号的频率变化,而相位补偿则优化系统的动态性能[^3]。 对于离散化实现,可通过数字滤波器提取信号特征,并结合数值微分法估瞬时转速。这种方法具有较高的精度和抗噪能力。 --- ### Python 实现示例 以下是一个简单的 Python 示例,展示如何从模拟的旋转变压器信号中计转速: ```python import numpy as np def calculate_speed(u_sin, u_cos, dt): """ 计转速 参数: u_sin: 正弦通道信号列表 u_cos: 余弦通道信号列表 dt: 时间步长 (s) 返回: speed_rpm: 平均转速 (r/min) """ angles_rad = [] for sin_val, cos_val in zip(u_sin, u_cos): angle = np.arctan2(sin_val, cos_val) # 获取角度 angles_rad.append(angle) delta_theta = np.diff(angles_rad).sum() # 总角度差 omega = delta_theta / (len(u_sin) * dt) # 角速度 speed_rpm = omega * 60 / (2 * np.pi) # 转速转换 return abs(speed_rpm) # 测试数据 u_sin = [np.sin(i * 0.1) for i in range(10)] u_cos = [np.cos(i * 0.1) for i in range(10)] dt = 0.1 # 时间步长 speed = calculate_speed(u_sin, u_cos, dt) print(f"计得到的转速为 {speed:.2f} r/min") ``` ---
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值