三角波
元旦高速公路免费吗?module triangle(
input sys_clk,
output [2:0]sda
);
reg[3:0]a=0;
reg ai=0;
always@(posedge sys_clk)
飞度1.5 begin
if(ai==0)
begin北京汽车集团有限公司
a=a+1;
if(a==7)
ai<=1;
end
else
begin
a=a-1;
if(a==0)
ai<=0;
end
end
assign sda[0]=a[0];
assign sda[1]=a[1];
assign sda[2]=a[2];
endmodule
三相方波
第一种方法:
module pwmabc(
input sys_clk,
output [2:0]abc
);
reg triga=0;
reg trigb=1;
reg trigc=0;
reg[15:0] cnt1=0;
reg[15:0] cnt2=20;
reg[15:0] cnt3=40;
always@(negedge sys_clk)
begin
if(cnt1>59)
begin
triga=~triga;
cnt1<=1;
end
else
cnt1<=cnt1+1;
if(cnt2>59)
begin
trigb=~trigb;
cnt2<=1;
end
else
cnt2<=cnt2+1;
if(cnt3>59)
begin
trigc=~trigc;
cnt3<=1;
10万左右的家用车 end
else
cnt3<=cnt3+1;
end
assign abc[0]=triga;
assign abc[1]= trigb;
assign abc[2]= trigc;
endmodule
第二种方法
module fangbo0(
input sys_clk,
output [2:0]sda
);
reg [31:0]halftemple_counter0=0;
reg [31:0]halftemple_counter1=0;
reg [31:0]halftemple_counter2=0;
reg [1:0]temple_clk0=1;//第一相的初始值是高电平(初始的高低电平是根据我给你看的相位图来的)
reg [1:0]temple_clk1=1;//第二相的初始值是高电平
reg [1:0]temple_clk2=0;//第三相的初始值是底电平
//我在设计三相方波的时候用的比较笨的方法,就是三相方波一项一项的来设置。第一相和后两项用的方法不太一样,但是原理相似。
always@(posedge sys_clk)//方波第一相
begin
if(halftemple_counter0==1500)//时钟频率为50Mhz,要输出周期为60us的方波,需要3000个时钟周期,所以每一相定义为每1500个时钟周期换一次0、1.
begin
temple_clk0=~temple_clk0;
halftemple_counter0<=0; //0、1互换后,清空累加器
end
else
halftemple_counter0<=halftemple_counter0+1;//累加器
end中高档车
ds9
always@(posedge sys_clk)//第二相方波
begin
if(halftemple_counter1<3000)//第二相同理,仍然需要3000个时钟周期,满足时钟周期小于3000时才进行操作,大于等于3000时直接通过else给累加器置零
begin
halftemple_counter1<=halftemple_counter1+1;//累加器
if(halftemple_counter1==500)//这里500个周期进行第一次0、1互换,第一相1500才互换。中间差1000,正好的3000个周期的1/3.
temple_clk1=~temple_clk1;
else if(halftemple_counter1==2000)//这里在2000时又开始0.1互换,因为500和2000之间隔着1500个时钟周期,即输出的半个周期
temple_clk1=~temple_clk1;
end
else halftemple_counter1<=0; //累加器一旦超过3000,这里进行置零。
end
always@(posedge sys_clk)//第三相方波与第二相同理
begin
if(halftemple_counter1<3000)
begin
halftemple_counter2<=halftemple_counter2+1;
if(halftemple_counter2==1000)
temple_clk2=~temple_clk2;
else if(halftemple_counter2==2500)
temple_clk2=~temple_clk2;
end
else halftemple_counter2<=0;
end
assign sda[0]=temple_clk0;//对三相方波就行输出
assign sda[1]=temple_clk1;
assign sda[2]=temple_clk2;
endmodule
发布评论