啪啪av-日本不卡三区-91精品国产一区二区三区蜜臀-日韩欧洲亚洲-偷拍福利视频-色女人av-骚婷婷-一级伦理农村妇女愉情-91爽爽-国产精品 自在自线-欧美啪啪网站-成人免费无码不卡毛片视频-久久不见久久见www免费-国产最新网址-乱视频在线观看-亚洲区一-性欧美video另类hd尤物-国产-第1页-草草影院ccyy-黄色福利网站-日韩人妻无码精品专区综合网

技術(shù)干貨!使用FPGA實(shí)現(xiàn)一個直流有刷電機(jī)控制器

來源:FPGA| 發(fā)布日期:2023-11-08 09:45

本篇文章將介紹如何使用FPGA實(shí)現(xiàn)一個直流有刷電機(jī)控制器,主要包括 速度控制 和 角度控制(好像在無刷電機(jī)控制中,習(xí)慣將其稱為環(huán),即速度環(huán) 和 角度環(huán)(位置環(huán)))。因此這是一個閉環(huán)系統(tǒng),需要得到系統(tǒng)的反饋,實(shí)時得到電機(jī)的轉(zhuǎn)速和角度,所以需要上篇中編碼器模塊的輸出,作為控制器的反饋,通過PID進(jìn)行調(diào)節(jié)。

二、控制器框圖設(shè)計

在做設(shè)計之前,最好先將功能明確下來,然后繪制簡單的流程框圖,當(dāng)然這里先將程序?qū)崿F(xiàn)完了之后,再繪制的流程框圖 ̄□ ̄||,框圖如下,主要由三大模塊組成(控制姿態(tài)就不包括在里面了),角度、速度和PID模塊,下面將一一介紹各個模塊的具體細(xì)節(jié)。

三、PID模塊

PID的原理在之前的文章中有提到過,就不再繼續(xù)提起了,本次實(shí)現(xiàn)的方式方式和之前實(shí)現(xiàn)的方式一樣,將PID系數(shù)擴(kuò)大100倍取整,然后相乘,將得到的結(jié)果再右移7位 加速 右移 9位,約等于除以了100。

四、速度控制器

速度控制器里面主要做期望速度的輸出和電機(jī)運(yùn)動方向切換的控制。期望速度主要由外部輸入和方向切換來控制,如果說需要進(jìn)行方向切換的話,為了保護(hù)電機(jī),不能立馬進(jìn)行電機(jī)的轉(zhuǎn)向,而要等待速度降低到安全速度后,再進(jìn)行方向切換。

所以如果電機(jī)不需要轉(zhuǎn)向,那么期望速度就是外部設(shè)置的速度。

如果需要轉(zhuǎn)向的話,先將期望速度設(shè)置為0,待速度降低到安全速度后,例如5RPM,就切換方向 和 將期望速度設(shè)置為外部設(shè)置的速度。

module controller_Speed_loop(
  input        sys_clk_i        ,    //時鐘輸入
  input        sys_rst_n_i       ,    //復(fù)位輸入


  input        c_speed_loop_en_i    ,    //速度環(huán)使能信號


  input        motor_spin_dir_i    ,    //設(shè)置旋轉(zhuǎn)方向
  input[15:0]     motor_rpm_set_i     ,    //設(shè)置速度
  input        encoder_direction_i   ,    //電機(jī)實(shí)際的運(yùn)動方向
  input[15:0]     encoder_speed_i     ,    //編碼器速度


  output reg     c_speed_loop_dir_o   ,    //速度環(huán)方向輸出
  output reg[15:0]  c_speed_loop_rmp_o       //速度環(huán)RPM輸出
);

五、角度控制器

控制過程和速度控制過程一樣,將當(dāng)前角度值和期望角度值輸入角度PID進(jìn)行計算,然后將計算后的結(jié)果輸入到速度PID進(jìn)行計算,得到PWM的變化值。

這一控制回路是比較簡單的,如果說需要在角度旋轉(zhuǎn)的時候,還需要對速度進(jìn)行控制的話,就會復(fù)雜一點(diǎn)點(diǎn)(串級),等后面有需求了再進(jìn)行實(shí)現(xiàn)。

六、小結(jié)

本次實(shí)現(xiàn)的控制器 和 上次實(shí)現(xiàn)的 編碼器,共同組成了一個簡單的電機(jī)控制器,可用于對電機(jī)的速度 和 角度進(jìn)行控制。

top層的控制信號如下,在速度模式下,只需要設(shè)置rmp的值,電機(jī)就可以進(jìn)行轉(zhuǎn)動,而在角度模式下,需要先設(shè)置旋轉(zhuǎn)的角度值,然后在使能角度旋轉(zhuǎn),電機(jī)就會旋轉(zhuǎn)對應(yīng)的角度后,停止。

//控制信號
  .motor_mode_set_i        (   motor_mode_set       ),    //設(shè)置電機(jī)模式 2'b00 = 速度模式  2'b01 = 角度模式
  .motor_spin_dir_i        (   motor_spin_dir       ),    //電機(jī)運(yùn)動方向控制 1'b0 正向  1'b1 反向
  .motor_rpm_set_i         (   motor_rpm_set        ),    //設(shè)置電機(jī)轉(zhuǎn)速 RPM
  .motor_acc_set_i         (   motor_acc_set        ),    //設(shè)置電機(jī)加速度


  .motor_angle_en_i        (   motor_angle_en       ),    //角度旋轉(zhuǎn)使能
  .motor_angle_ack_o        (   motor_angle_ack       ),    //角度旋轉(zhuǎn)應(yīng)答
  .motor_angle_set_i        (   motor_angle_set       ),    //設(shè)置電機(jī)旋轉(zhuǎn)角度