FPGA输出五路PWM

来源:互联网 发布:java调用http接口json 编辑:程序博客网 时间:2024/06/05 11:50

FPGA开发之输出五路PWM波控制舵机

本人在玩FPGA之前玩了很久的单片机,用stm3的计时器和51的IO口模拟PWM都试过,其实原理都一样,通过设置一个累加器和一个阙值,累加器中的数小于阙值时输出低,大于阙值时输出高,累加器加满的时间即为PWM波的周期

  • 使用环境:ISE14.7和BASYS2开发板

1. 输出标准

标准PWM脉宽调制的频率是50Hz,周期20ms,脉冲宽度在0.5ms到2.5ms之间。
我使用的basys2开发板默认晶振频率为50MHz
设置的脉宽精度为0.01ms,即0.01ms判断一次输出高低

2.verilog代码实现

首先,定义一个周期为0.01ms的时钟信号pwm_clk
计算方法为,0.01ms/20ns=500,故count加到250时清零,使pwm_clk每0.005ms翻转一次

reg [19:0] count_for_pwmclk=0;  //pwm_clk的累加器reg pwm_clk=0;                  //pwm_clk的信号always @(posedge clk)   //clk是50Mhz的时钟信号begin            if(count_for_pwmclk == 20'b0000_0000_0000_1111_1010-1) begin    // 0.01ms触发一次,故pwm波形精度为0.01ms             count_for_pwmclk <= 0;            pwm_clk <= ~pwm_clk;   //按位取反        end        else            count_for_pwmclk <= count_for_pwmclk + 1;end

定义pwm输出部分,可通过开关等改变pwm_compare的数值(50~250),即可使脉宽在0.5ms到2.5ms之间变化

reg [11:0] count_pwm=0;reg [11:0] pwm_compare1=12'b0000_1001_0110;  //初值定在150,即1.5ms,是舵机的中位reg [11:0] pwm_compare2=12'b0000_1001_0110;reg [11:0] pwm_compare3=12'b0000_1001_0100; reg [11:0] pwm_compare4=12'b0000_1001_0110;reg [11:0] pwm_compare5=12'b0000_1001_0110;reg pwm_flag1=0;  reg pwm_flag2=0;reg pwm_flag3=0;reg pwm_flag4=0;reg pwm_flag5=0;always @(posedge pwm_clk)    //控制五路pwm信号输出begin    count_pwm<=count_pwm+1;    if (count_pwm < pwm_compare1)   //pwm1        pwm_flag1<=1;        else        pwm_flag1<=0;    if (count_pwm < pwm_compare2)   //pwm2        pwm_flag2<=1;        else        pwm_flag2<=0;    if (count_pwm < pwm_compare3)   //pwm3        pwm_flag3<=1;        else        pwm_flag3<=0;    if (count_pwm < pwm_compare4)   //pwm4        pwm_flag4<=1;        else        pwm_flag4<=0;       if (count_pwm < pwm_compare5)   //pwm5        pwm_flag5<=1;        else        pwm_flag5<=0;    if (count_pwm ==12'b0111_1101_0000-1)  //每0.01ms加一次,加2000次即为20ms的周期    count_pwm<=0;endassign pwm_out[0]=pwm_flag1;   //pwm_flag即为对应到输出口的寄存器assign pwm_out[1]=pwm_flag2;assign pwm_out[2]=pwm_flag3;assign pwm_out[3]=pwm_flag4;assign pwm_out[4]=pwm_flag5;

3.仿真波形

1.pwm_clk的周期为10us,即0.01ms,通过改变pwm_compare 可使脉宽精度以0.01ms变化
这里写图片描述

pwm输出的波形周期为20ms,50Hz
这里写图片描述

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头孢过敏起疙瘩怎么办 皮试扎深了怎么办 打针前皮试过敏怎么办 脸部过敏后起皮怎么办 输液后过敏了怎么办 青霉素用量多了怎么办 特别招蚊子咬怎么办 刚出生宝宝溶血怎么办 幼儿o型腿怎么办 丈夫是熊猫血怎么办 孩子特别招蚊子怎么办 夏天怕蚊子咬怎么办 a型血招蚊子怎么办啊 总让蚊子咬怎么办 孕妇特别招蚊子怎么办 经期已献血200怎么办 熊猫血不能生育怎么办 老公熊猫血怀孕怎么办 rh阴性怀二胎怎么办 rh阴性血溶血怎么办 熊猫血有抗体怎么办 熊猫血怀孕抗体怎么办 二次风温降低怎么办 货车打不着火怎么办 乙炔瓶爆了怎么办 换缸体发动机号怎么办 摩托车加错柴油怎么办 血液凝固慢是怎么办 如果触碰红线怎么办 柴油冬天会冻结怎么办 柴油油路冻了怎么办 冬天汽车难启动怎么办 货车暖风机不热怎么办 柴油车冻油了怎么办 柴油车冻住了怎么办 货车冬天打火难怎么办 絮凝剂加多了怎么办 摩托车前叉弯了怎么办 柴油车误加汽油怎么办 汽车资料掉了怎么办 货车机油压力低怎么办