1、简单易用,可快速上手
2、流畅支持300个器件或1000个焊盘以下的设计规模
3、支持简单的电路仿真
4、面向学生、老师、创客
1、全新的交互和界面
2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计
3、更严谨的设计约束,更规范的流程
4、面向企业、更专业的用户
专业版 基于梁山派的双路Foc无刷驱动板设计
简介:以DRV8313PWPR为驱动芯片,配合梁山派开发板,实现无刷电机Foc驱动电路。
开源协议: GPL 3.0
本驱动板以DRV8313PWPR为驱动芯片,利用板对板连接器连接到梁山派开发板,目的是实现小电流云台无刷电机的控制。
电源采用TPS5430DDA + AMS1117制造 5V和 3.3V电压,5v电源通过排针与梁山派相连。
驱动模块采用DRV8313驱动芯片,配合INA240两路电流采样,实现Foc驱动电路。
板载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
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角度获取
电机开环转动
加载中...
是否需要添加此工程到专辑?