欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: verilog實現電機控制 [打印本頁]

作者: 張毛毛1    時間: 2020-5-10 20:14
標題: verilog實現電機控制
基于Verilog的無刷直流電動機控制芯片設計

1、時鐘:主時鐘48MHz可分頻,pwm時鐘為6MHz
2、異步串行模塊:芯片和PC之間通信,接收和發送電機參數和指令;解碼指令,把參數和指令變為相應寄存器的操作,從而更新寄存器值;
3、SPI模塊:spi模塊完成控制AD芯片工作,把霍爾反饋回的信號進行AD轉換經過SPI總線送到FPGA芯片處理,修改參數值,實現閉環控制好;
4、無刷直流電機控制模塊:三相相位相差120°電角度的驅動波形,一般為方波,或者通過編程輸出包含電機運動參數信息為正弦波的pwm波形,把生成的控制波形與一個標準正弦表相乘得到正弦波包絡圖;
①這里采用了DDS技術。DDs(直接數字頻率合成器)是從相位觀念出發直接合成所需波形的一種頻率合成技術。在Verilog可實現:① ROM存放標準正弦波。把一個標準的正弦波幅值存于ROM模塊中,通過相位的變化來取得該正弦波的離散的幅值。基地址寄存器位數N決定了存放波形離散值的個數2的N次方。根據電機受控精度的要求,可以通過修改從地址寄存器的位數或很小的改動就可以做到更為細致的劃分。這也是通過Verilog語言來描述電機驅動細分功能的一個優勢。這里基地址采用的是 7 位,即代表存儲了128 個離散正弦波幅值。用一個同位寬的寄存器變最作為相位計數器實現相位的偏移,從而遍歷所有的幅值。為節約芯片資源,三相正弦波可以分時共用一個正弦表,只要輸入的三相地址數據在時間上形成連續,實現三相地址數據的合成。實現正弦復用的狀態機描述:
     always @(phase_shift_fsm or dacreg_a or dacreg_b or dacreg_c or base_addr  or rom_data or phase_addr or ph_addr6_a or ph_addr6_b or ph_addr6_c )begin
            phase_shift_fsm_d = 4'h0;
                phase_addr_d      = phase_addr;
                dacreg_a_d        = dacreg_a;
                dacreg_b_d        = dacreg_b;
                dacreg_c_d        = dacreg_c;
                ph_addr6_a_d      = ph_addr6_a;
                ph_addr6_b_d      = ph_addr6_b;
                ph_addr6_c_d      = ph_addr6_c;
                case(phase_shift_fsm)begin
                    4'h0:begin
                        phase_addr_d      = base_addr;   
                            phase_shift_fsm_d = 4'h1;
                            end
                    4'h1:begin
                           phase_addr_d      = base_addr; //A相地址
                                ph_addr6_a_d      = base_addr[6];
                            phase_shift_fsm_d = 4'h2;
                            end
                    4'h2:begin
                        dacreg_a_d      = rom_data; //A相數據
                                phase_addr_d    = phase_addr + 9'd43;  //C相地址
                                phase_shift_fsm_d = 4'h3;
                            end
                                 
                    4'h3:begin
                        dacreg_c_d      = rom_data; //C相數據
                                phase_addr_d    = phase_addr + 9'd42;  //B相地址
                                ph_addr6_c_d      = phase_addr[6];
                                phase_shift_fsm_d = 4'h4;  
                            end
                                 
                    4'h4:begin
                        dacreg_b_d      = rom_data; //B相數據
                                ph_addr6_c_d      = phase_addr[6];
                                phase_shift_fsm_d = 4'h5;  
                            end
                                 
                    4'h5:begin
                                phase_shift_fsm_d = 4'h1;  
                             end
                 endcase
         end
②控制信息產生,為無刷電機劃分64X16bit寄存器快,存放電機參數,參數由PC給出,經過串行通信模塊中的解碼狀態機的解碼,吧PC機傳過來的參數轉換成相應寄存器操作。寄存器包括運行電平、起始電平、電平增減、步間延遲、其實延遲、延遲增減、運行步速。PC只要改變這些數據就可以改變電機運行,運行電平、起始電平、和電平增減與電機的運行轉矩有關,步間延遲、其實延遲、延遲增減和電機運行速度有關,步間延遲決定電機的運行快慢,延遲的增減決定電機是加速還是減速,運行步數決定電機的位置。由狀態機實現:
③含控制信息的正弦包絡,把讀出的寄存器值(電機設置的參數)和正弦表中的幅值相乘來實現控制信息的正弦包絡。如圖三,ROM的地址線為7bit,可尋址大小為128,乘法單元采用IP核,控制信號為②重的控制信號,通過乘法器后在經過①中的方法,得到三相輸出信號dac_a~dac_c作為計數值,從而產生最終的控制信號。關鍵代碼:
if(pwm_a_cntr>=dacreg_a)begin
pwm_a_out <= 1’b0;
pwm_a_cntr <= pwm_a_cntr;
end
else begin
   pwm_a_cntr <= pwm_a_cntr +1 ;
end
系統工作時鐘48MHz,正弦表讀取時鐘為6MHz。





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1