基于梁山派的双路Foc无刷驱动板设计 - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

专业版 基于梁山派的双路Foc无刷驱动板设计

简介:以DRV8313PWPR为驱动芯片,配合梁山派开发板,实现无刷电机Foc驱动电路。

开源协议: GPL 3.0

(未经作者授权,禁止转载)

创建时间: 2022-11-20 18:06:20
更新时间: 2022-12-26 10:54:11
描述

项目简介:

本驱动板以DRV8313PWPR为驱动芯片,利用板对板连接器连接到梁山派开发板,目的是实现小电流云台无刷电机的控制。

 

电源模块:

电源采用TPS5430DDA + AMS1117制造 5V和 3.3V电压,5v电源通过排针与梁山派相连。

驱动模块:

驱动模块采用DRV8313驱动芯片,配合INA240两路电流采样,实现Foc驱动电路。

实物模型展示:

 

 

 

驱动板接口

 

LCD

板载1.1.4寸屏幕,驱动芯片ST7789,使用协议spi4传输。

端口分配

SDA    <-> LCD_MOSI <->  PC9

SCL    <->  LCD_SCLK <->  PC10

RESET<->  LCD_RST   <->  PA15

RS      <->  LCD_DC    <->  PA14

CS      <->  LCD_CS    <->   PC11

 

按键

板载3个按键,加入电容消抖处理。端口需要内部上拉

SW1 <->   PC6

SW2 <->   PD1

SW3 <->   PD5

 

电机端口

电机1

使用 TIMER1 定时器

U1  <->   PA0 <->  TIMER1_CH0

V1  <->   PA1 <->  TIMER1_CH1

W1 <->   PA2 <->  TIMER1_CH2

EN1  <-> PC1

 

电机2

使用 TIMER0 定时器

U2  <->  PB13 <-> TIMER0_CH0_ON

V2  <->  PB14 <-> TIMER0_CH1_ON

W2 <->  PB15 <-> TIMER0_CH2_ON

EN2 <-> PG7

 

编码器

板载两个编码器接口,使用 I2C协议

接口1

PB6 <-> I2C0_SCL

PB7 <-> I2C0_SDA

接口2

PA8 <-> I2C2_SCL

PC9 <-> I2C2_SDA

 

电流采样ADC

 

M1_U_ADC  <->   PF9 <-> ADC2_IN7

M1_V_ADC  <->   PF7 <-> ADC2_IN5

 

M2_U_ADC  <->   PA4 <-> ADC01_IN4

M2_V_ADC  <->   PA6 <-> ADC01_IN6

 

 

无刷开环程序

 

实现简单的开环控制,让电机转起来。程序使用SIMPLE FOC开源代码,附简单注释

 

void setPhaseVoltage(float Uq, float Ud, float angle_el)
{
    float Uout;
    uint32_t sector;
    float T0,T1,T2;   //直接控制电机的三相pwm占空比参数
    float Ta,Tb,Tc;
    float U_alpha,U_beta;


    angle_el =_normalizeAngle(angle_el);


    U_alpha=Ud*_cos(angle_el)-Uq*_sin(angle_el);            //park逆变换
    U_beta=Ud*_sin(angle_el)+Uq*_cos(angle_el);
    Uout=_sqrt(U_alpha*U_alpha + U_beta*U_beta) / voltage_power_supply; 
    if(Uout> 0.577)Uout= 0.577;
    if(Uout<-0.577)Uout=-0.577;
    
    sector = (angle_el / _PI_3) + 1;
    
    T1 = _SQRT3*_sin(sector*_PI_3 - angle_el) * Uout;      
    T2 = _SQRT3*_sin(angle_el - (sector-1.0)*_PI_3) * Uout;
    T0 = 1 - T1 - T2;
    
    switch(sector)
    {
        case 1:
            Ta = T1 + T2 + T0/2;
            Tb = T2 + T0/2;
            Tc = T0/2;
            break;
        case 2:
            Ta = T1 +  T0/2;
            Tb = T1 + T2 + T0/2;
            Tc = T0/2;
            break;
        case 3:
            Ta = T0/2;
            Tb = T1 + T2 + T0/2;
            Tc = T2 + T0/2;
            break;
        case 4:
            Ta = T0/2;
            Tb = T1+ T0/2;
            Tc = T1 + T2 + T0/2;
            break;
        case 5:
            Ta = T2 + T0/2;
            Tb = T0/2;
            Tc = T1 + T2 + T0/2;
            break;
        case 6:
            Ta = T1 + T2 + T0/2;
            Tb = T0/2;
            Tc = T1 + T0/2;
            break;
        default:  // possible error state
            Ta = 0;
            Tb = 0;
            Tc = 0;
    }
    
    timer_channel_output_pulse_value_config(BSP_PWM_TIMER,BSP_PWM_UCHANNEL,Ta*10000);
    timer_channel_output_pulse_value_config(BSP_PWM_TIMER,BSP_PWM_VCHANNEL,Tb*10000);
    timer_channel_output_pulse_value_config(BSP_PWM_TIMER,BSP_PWM_WCHANNEL,Tc*10000);
}

实现的功能

程序成功运行的模块

lcd 显示

as5600角度获取

电机开环转动

设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
工程视频/附件
序号 文件名称 下载次数
1

转起来了.mp4

35
2

I2C.mp4

15
3

7综合功能演示.rar

125
工程成员
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP