本驅動板以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角度獲取
電機開環轉動
!注意:請使用瀏覽器自帶下載,迅雷等下載軟件可能無法下載到有效資源。
歡迎加入EEWorld參考設計群,也許能碰到搞同一個設計的小伙伴,群聊設計經驗和難點。 入群方式:微信搜索“helloeeworld”或者掃描二維碼,備注:參考設計,即可被拉入群。 另外,如您在下載此設計遇到問題,也可以微信添加“helloeeworld”及時溝通。
EEWorld Datasheet 技術支持