发作品签到
专业版

基于CW32单片机的无刷电机控制器(旋转变压器位置反馈)

工程标签

3.5k
0
0
17

简介

简易助力转向旋变无刷电机驱动器

简介:简易助力转向旋变无刷电机驱动器

开源协议

Public Domain

创建时间:2024-06-01 16:51:56更新时间:2024-07-05 18:19:55

描述

用CW32单片机制作了一个简易无刷电机控制器,电源电压12V到14V,电机采用转向助力电机,带旋转变压器位置反馈。控制方法采用最简单的开环电流控制,SVPWM电角度提前转子90度,适合带动不需要精确控制的负载,无电流检测只有最大电流保护。

接线柱采用M6螺丝,直接用4平方铜先焊接到铝基板两个MOS之间。 功率板采用铝基板,用M3螺丝和电路GND连接,MOS管的GND也需要用M3螺丝连接到铝板上,整个铝板就是GND

 

调速电位器最好选择小于10K的三脚电位器,中间接电位器输入ADC口,两端接GND和3.3V

 

电流限制电路R45未焊接,铝基板和控制板连接排针上焊接一个排母正好高度合适。

 

电机需要买6线旋转变压器的汽车转向助力电机,可以自己找找更便宜的,这种电机很多,我看还有60多元的,但是记住一定要6线旋转变压器的,买的时候要问明白。 刚焊好板子需要两个按键一块按进行旋变调零,电位器开的要小一些或者限制电流,条零成功电机会旋转,不成功多按几次,调零程序写的比较差经常调零失败,不过只要成功一次就可以了,会把参数保存到FLASH。

 

旋转变压器采用单片机软件解算角度,专用解码芯片比较贵,要求不高的地方自己用单片机代替也可以,外围电路比较简单

 

单片机输出一路20KHZ的SPWM,经过RC滤波后变成正弦波,经过100NF电容后电压抬高5V的一半。

 

然后进入U3.1放大,C24提供一个直流参考点,C22 C23限制带宽同时衰减信号,R18防止高频振荡,C6隔离前后电路增加后面电路稳定性。U3.2反相输出

 

 

旋转变压器是电机自带的,用LCR表测出电抗同时换算出20KHZ时候的电抗,电感的电抗是正,而电容是负,选择同样大小电抗的电容(符号相反),这里我用了四个10NF电容并联,可以让信号更加平滑过滤干扰,电机外壳一定要接GND! 

 

 

旋转变压器出来的COS和SIN,抬高到3.3V的一半,然后进入两个差分放大器,放大后进入两个ADC口

 

 

 

电源电路,电源需要有大电流输出能力,电流超100A,于是采用摩托车启动用12V9A蓄电池,进入LM2596降压到5V,MC34063升压到15V给MOS管驱动芯片EG2131供电。

 

R19是电流采样电阻,实际焊接的是两个3毫欧并联,一个3毫欧堵转会触发保护,保护后需要重新开关电源才能解除。

 

 

 

MOS管H桥,驱动芯片采用EG2131,MOS管采用IRF2804

 

 

单片机采用CW32F030C8T6,一片实现旋变解码和电机驱动,两个按键一块按进入旋变调零程序,PA2 ADC2的电位器开小一点,如果调零成功电机会旋转,失败就再两个按键一块按进入调零程序,两个按键单独按分别是正转和反转。

 

电流保护电路

 

 

3.3V供电电路

 

 

旋转变压器软解码算法:
单片机每个口对应采样率是1MHZ,采集100点后中断,用DFT算出采集的COS和SIN序列的实部和虚部,旋转相位到0度,用实部进ATAN2算出角度,当前角度保存到寄存器,等测出下次角度后相减算出角度差,再算出角度差的COS和SIN,反馈回ATAN2前,旋转进ATAN2的角度实现锁相,这样得到的角度就和转速没关系了,抵消了系统延迟。

10KHZ采样速度,每秒更新1万次角度信息,95500转速时候相移计算,其实不用计算,计算结果就是两次采样数据之间的角度差。

zhuansu = 95500
shijian = 100
xiangyi =90-atan2(159155 / (zhuansu / 60), shijian)*180/3.1415927

 

SVPWM算法(注意这是我个人理解不能保证正确)

 

H桥一共有8种开关状态,000和111是空矢量

 

分割成6个区域,每个60度

 

 

驱动H桥的定时器用中央对齐模式,111和000是空矢量,同一个时间只有一路开关动作

 

 

我驱动频率是10KHZ,定时器ARR里面放置的是2399,下面是我理解的上图ta、tb、t0计算方法

 

 

 

我理解的,40度计算方法,不知道对不对

ta =  1.154700538*1200*sind(60-40)

tb =   1.154700538*1200*sind(40)

t0 = 2399-ta-tb

 

 

上图例子,计算u1和u3百分比

u1 =  1.154700538*0.86*2399*sind(60-40)/4799

u3 =   1.154700538*0.86*2399*sind(40)/4799

 

定时器比较寄存器数据实际计算方法

生成一个0-60度查找表,2000点,Q15定点数

 

#include

 

#include

 

#include

 

void main() {

 

  double x,p,y,i;

 

 

 

  int jiaodu,rr,ii,n;

 

   n = 60;

 

for(i=0;i

 

    {

 

        p = i*3.1415926536897932384626/180;

 

        x = (sin(p)* cos(0))/ (sin(1.0471975) * cos(0));  

 

  y = (cos(p) - (x * cos(1.0471975))) / cos(0);   

 

rr = x*0x8000;

 

ii = y*0x8000;

 

//printf ("%f,%f\n",x,y);

 

       printf("0x%04X,0x%04X,", rr,ii);

 

    }    

 

printf("\n");

 

 

 

0-60度查表取出对应角度的X和Y

x*2399= u1

y*2399= u3

2399-u1-u3 = 零矢量

实际程序2399我是改成2048来计算的,好让PWM占空比不到最大

 

0到60度定时器比较寄存器数值计算

W相计算 零矢量除2 
U相计算 (U1矢量) 加 (U3矢量) 加 (零矢量除2)
V相计算  (U3矢量) 加 (零矢量除2)
 
 

60到120度

W相计算 (零矢量除2)
U相计算 (U1矢量) 加 (零矢量除2)
V相计算  (定时器最大计数2399) 减 (零矢量除2)
 
剩下的角度直接交换UVW寄存器就可以了,参考不同开关组合的分割图
 

 

 

SVPWM电角度提前旋转变压器测到的转子90度,这样就只需要控制调制比就可以调速了。想要精确控制位置和速度需要控制调制比。

 

 

 

控制器组装用的铜柱

 

所用电机

改装的电链锯,用来验证控制器能不能用

 

 

 

 

 

改装电据用套件

 

电机连接轴套,要买10毫米的,这个电机的轴是10.8毫米,可以用10.5毫米钻头扩下孔。

 

 

 

控制器实物图

 

 

 

 

 

 

 

 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
1.mp4
17
2
程序.zip
73
3
用无刷电机自制电链锯失败了.mp4
23
4
程序源代码和固件(修复调制比20240605).zip
37
5
SVPWM算法资料.zip
63
6
svpwm.mp4
26
7
修改程序后效果(干木头比上次难切20240605).mp4
32
8
image-asset.gif
19
9
程序源代码和固件(最终版,修复调制比20240607).zip
53
10
改装电链锯成功.mp4
28
11
源代码和固件20240705(添加旋转变压器角度补偿).zip
56
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航