reg [1023:0] wave_reg
always@(posedge clk)
wave_reg <={ wave_reg[1022:0],pwm_wave}//把整个波形都存下来,但是可能比较侍岩耗寄存器。
assignwave_out[0] = wave_reg[0]
assignwave_out[1] = wave_reg[43]//有时候加43,有时候加42,保证到后面刚好。
……
assign wave_out[23] = wave_reg[981]
但是这种做法大概会消耗1024个寄存器,液氏随着pwm精度的提高,这个消耗会提高。
如果你只存半个周期,而由于正弦波是基对称的,
assign wave_out[12] = ~wave_out[0]
……
assign wave_out[23] = ~wave_out[11]
这样会少一半的寄存器。
硬件则逗纳的话需要一指乱个全桥生成正负电压。我不了解L298是什么,我一般自己做一个。不过大概都一样,就是你FPGA输出的io信号是PWM的开关高低电平信号,直接给电机驱动即可。按键就是IO输入。剩下的就是编程的工作了。不过这个我还是建议你用单片机。真的,我就是做电机控制软硬件的。FPGA做流程控制不太方便。当然,FPGA里面也有processer,或称软核。quartus自带一款叫 NIOS 的软核,可以C语言编程。如果你控制大电机的话我们再单说,如果是小电机不在乎动态过程,只要稳态速度的话,还是比较简单的。编程思路就是 电机电压= k*电机转速。这个K系数孙没跟你的电机有关系,不过是一个常数。也就是说, 当你要正转速的时候,给正电压即可。要负转速的话,给负电压。电压得到之后,其实就是占空比,然后你用FPGA生成PWM信号输到驱动器里面即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)