巡检系统设计

2023-03-10 20:56:14 来源:网络

巡检系统设计

设计一多路数据巡回检测系统

PWM输出模块

module pwm_out(clk,key,led);

input clk;

input [1:0]key;

output led;

reg [32:0] count;

reg [9:0] pwm_count;

reg flag;

reg pwm_flag;

always @(posedge clk)

begin

count=count+1'b1;

if (count[13:4] < pwm_count)

pwm_flag=1;

else

if (count[15] == 1'b1)

begin

if (flag == 1'b1)

begin

flag= 1'b0;

if (key[0] == 1'b0)

pwm_count=(pwm_count+10'b0000000001);

else if (key[1] == 1'b0)

pwm_count=(pwm_count-10'b0000000001);

else pwm_count=pwm_count;

end

end

else

flag= 1'b1;

end

assign led=pwm_flag;

endmodule

显示模块

module scan_led(clk,rst,sm_seg,sm_bit);

input clk,rst;

output[7:0] sm_seg; //数码管段选择输出

output[7:0] sm_bit; //数码管位选择输出

reg[7:0] sm_seg; //数码管段选择输出寄存器

reg[7:0] sm_bit; //数码管位选择输出寄存器

reg[15:0] cnt_scan;//扫描频率计数器

reg[4:0] dataout_buf;

always@(posedge clk or negedge rst)

begin

if(!rst) begin

cnt_scan<=0;

end

else begin

cnt_scan<=cnt_scan+1'b1;

end

end

always @(cnt_scan)

begin

case(cnt_scan[15:13])

3'b000 :

sm_bit = 8'b1111_1110;

3'b001 :

sm_bit = 8'b1111_1101;

3'b010 :

sm_bit = 8'b1111_1011;

3'b011 :

sm_bit = 8'b1111_0111;

3'b100 :

sm_bit = 8'b1110_1111;

3'b101 :

sm_bit = 8'b1101_1111;

3'b110 :

sm_bit = 8'b1011_1111;

3'b111 :

sm_bit = 8'b0111_1111;

default :

sm_bit = 8'b1111_1110;

endcase

end

PWM相关概念占空比,就是输出的PWM中,高电平保持的时间 与 该PWM的时钟周期的时间 之比

如,一个PWM的频率是1000Hz,那么它的时钟周期就是1ms,就是1000us,如果高电平出现的时间是200us,那么低电平的时间肯定是800us,那么占空比就是200:1000,也就是说PWM的占空比就是1:5。

分辨率也就是占空比最小能达到多少,如8位的PWM,理论的分辨率就是1:255(单斜率), 16位的的PWM理论就是1:65535(单斜率)。

频率就是这样的,如16位的PWM,它的分辨率达到了1:65535,要达到这个分辨率,T/C就必须从0计数到65535才能达到,如果计数从0计到80之后又从0开始计到80.......,那么它的分辨率最小就是1:80了,但是,它也快了,也就是说PWM的输出频率高了。

免责声明:内容来自网络,若侵犯您的权利,请在一个月内通知我们,会及时删除 @轻流