小说网站seo排名怎么做crm系统搭建
2026/4/9 4:01:12 网站建设 项目流程
小说网站seo排名怎么做,crm系统搭建,公司注册资金认缴和实缴区别,宁波seo排名公司大多电子工程师都喜欢DIY#xff0c;今天给大家分享一个不靠 MCU#xff0c;用 FPGA DAC 实现可调信号源的项目。利用板载 125MSPS 高速 DAC#xff0c;从 DDS 原理出发#xff0c;完整实现了一台可输出正弦波、三角波、方波的可调波形发生器。项目介绍1.通过板上的高速DA…大多电子工程师都喜欢DIY今天给大家分享一个不靠 MCU用 FPGA DAC 实现可调信号源的项目。利用板载 125MSPS 高速 DAC从 DDS 原理出发完整实现了一台可输出正弦波、三角波、方波的可调波形发生器。项目介绍1.通过板上的高速DAC10bits/125Msps配合FPGA内部DDS的逻辑生成波形可调正弦波、三角波、方波、频率可调DC-、幅度可调的波形。 2.生成模拟信号的频率范围为DC-20MHz调节精度为1Hz。 3.生成模拟信号的幅度为最大1Vpp调节范围为0.1V-1V。 4.在OLED上显示当前波形的形状、波形的频率以及幅度。 5.利用板上旋转编码器和按键能够对波形进行切换、进行参数调节。设计思路本次实验中使用的模块包括OLED显示模块DDS模块旋钮模块分频器模块锁相环模块。硬件介绍本次使用的是硬禾学堂提供的基于小脚丫FPGA的电赛训练平台。使用的综合软件是Lattic Diamond。小脚丫STEP企业店在售的便携示波器实现的功能以及图片展示主要代码片段及说明1.顶层模块通过顶层代码连接各个模块并传递参数。Verilog部分代码如下module TOP_1( input clk_in, //系统时钟 input rst_n_in, //系统复位低有效 input key_a, //旋转编码器A管脚 input key_b, //旋转编码器B管脚 input change, //切换按钮 频率 幅度 input way, //切换按钮 波形图像 output oled_rst, //OLCD液晶屏复位 output oled_dcn, //OLCD数据指令控制 output oled_clk, //OLCD时钟信号 output oled_dat, //OLCD数据信号 output dac_clk, output [9:0] dac_data);//////略///dds_main u1( .clk(clkop), .dac_data(dac_data), .dac_clk(dac_clk), .check(check_1), .frequence(F), .range(range));posedge_check posedge_check_u5( .clk(clk_in), .rst_n(rst_n_in), .check(way), .pos_check(pos)); a120M a120M_u3 ( .CLKI(clk_in), .CLKOP(clkop) );OLED_12864 OLED_12864_u1 ( .clk (clk_in) , .rst_n (rst_n_in), .data(oleddata), .data1(data1), .state1(state1), .way(way_1), .oled_csn(oled_csn), .oled_rst(oled_rst), .oled_dcn(oled_dcn), .oled_clk(oled_clk), .oled_dat(oled_dat));TEMP_1 TEMP_1_u2 ( .clk(clk_in), .res(rst_n_in), .indata1(key1), .indata2(key2), .change(sum), .data(oleddata), .state1(state1), .data1(data1));XUANNIU_1 XUANNIU_1_u3( .clk(clk_in), //系统时钟 .rst_n(rst_n_in), //系统复位低有效 .key_a(key_a), //旋转编码器A管脚 .key_b(key_b), //旋转编码器B管脚 .clk_500us(clk_500us), .key1(key1), .key2(key2), .L_pulse(L_pulse), .R_pulse(R_pulse));DIVIDE_1 #(.WIDTH(32),.N(6)) u4 ( .clk(clk_in), .rst_n(rst_n_in), .clkout(clk_500us) );endmodule2.OLED模块通过SPI协议向OLED屏幕书写数据OLED模块中连接着ASCII码模块可以通过旋钮模块进行动态调节数据显示生成波形的频率和幅度。Verilog部分代码如下部分代码参考电子森林开原代码module OLED_12864( input clk, //12MHz系统时钟 input rst_n, //系统复位低有效 input [3:0] sw, input key_a, input key_b, input [63:0] data, input [7:0] data1, input state1, input [1:0] way, output reg oled_csn, //OLCD液晶屏使能 output reg oled_rst, //OLCD液晶屏复位 output reg oled_dcn, //OLCD数据指令控制 output reg oled_clk, //OLCD时钟信号 output reg oled_dat //OLCD数据信号);////// 略///MAIN:begin6d0 : begin state INIT; end6d1 : begin y_p 8hb0; x_ph 8h10; x_pl 8h00; num 5d16; char ;state SCAN; end6d2 : begin y_p 8hb1; x_ph 8h10; x_pl 8h00; num 5d16; char ;state SCAN; end 6d3 : begin y_p 8hb2; x_ph 8h10; x_pl 8h00; num 5d16; char ;state SCAN; end6d4 : begin y_p 8hb3; x_ph 8h10; x_pl 8h00; num 5d16; char ;state SCAN; end6d5 : begin y_p 8hb4; x_ph 8h10; x_pl 8h00; num 5d16; char ;state SCAN; end6d6 : begin y_p 8hb5; x_ph 8h10; x_pl 8h00; num 5d16; char ;state SCAN; end6d7 : begin y_p 8hb6; x_ph 8h10; x_pl 8h00; num 5d16; char ;state SCAN; end6d8 : begin y_p 8hb7; x_ph 8h10; x_pl 8h00; num 5d16; char ;state SCAN; end 6d9 : begin y_p 8hb0; x_ph 8h10; x_pl 8h00; mem_hanzi_num 8d0; state CHINESE; end6d10: begin y_p 8hb0; x_ph 8h11; x_pl 8h00; mem_hanzi_num 8d2; state CHINESE; end6d11: begin y_p 8hb0; x_ph 8h12; x_pl 8h00; mem_hanzi_num 8d4; state CHINESE; end6d12: begin y_p 8hb0; x_ph 8h13; x_pl 8h00; mem_hanzi_num 8d6; state CHINESE; end6d13: if(way 2b00) begin y_p 8hb0; x_ph 8h15; x_pl 8h00; mem_sin_num 8d0; state SIN; end else if(way 2b01) begin y_p 8hb0; x_ph 8h15; x_pl 8h00; mem_sin_num 8d8; state SIN; end else if(way 2b10) begin y_p 8hb0; x_ph 8h15; x_pl 8h00; mem_sin_num 8d16; state SIN; end else if(way 2b11) begin y_p 8hb0; x_ph 8h15; x_pl 8h00; mem_sin_num 8d24; state SIN; end 6d14: begin y_p 8hb3; x_ph 8h10; x_pl 8h00; mem_hanzi_num 8d8; state CHINESE; end6d15: begin y_p 8hb3; x_ph 8h11; x_pl 8h00; mem_hanzi_num 8d10; state CHINESE; end6d16: begin y_p 8hb5; x_ph 8h10; x_pl 8h00; num 5d10; char {data,HZ};state SCAN; end 6d17: begin y_p 8hb6; x_ph 8h10; x_pl 8h00; mem_hanzi_num 8d12; state CHINESE; end6d18: begin y_p 8hb6; x_ph 8h11; x_pl 8h00; mem_hanzi_num 8d14; state CHINESE; end6d19: if(state1 1) begin y_p 8hb7; x_ph 8h12; x_pl 8h00; num 5d4; char {0.,data1,v};state SCAN; end else if(state1 0)begin y_p 8hb7; x_ph 8h12; x_pl 8h00; num 5d4; char { ,data1,v};state SCAN; end6d21: begin cnt_main 6d9; endendcase3.ASCII码转换模块通过旋钮进行自加自减最后通过assign进行拼接完成OLED动态显示过程中的变量参数设计。Verilog部分代码如下module TEMP_1( clk, res, indata1, indata2, change, data, state1, data1);////// 略///always(posedge clk or negedge res) begin if(!res)begin temp[0] 8b0011_0000; temp[1] 8b0011_0000; temp[2] 8b0011_0001; temp[3] 8b0011_0010; temp[4] 8b0011_0000; temp[5] 8b0011_0000; temp[6] 8b0011_0000; temp[7] 8b0011_0000; temp1 8b0011_0001; state1 1; end else if (change 1)begin if(indata2 1b1)begin if(temp[7] 8b0011_0000)begin temp[7] temp[7] - 1b1; end else if(temp[7] 8b0011_0000)begin temp[7] 8b0011_1001; if(temp[6] 8b0011_0000)begin temp[6] temp[6] - 1b1; end else if(temp[6] 8b0011_0000)begin temp[6] 8b0011_1001; if(temp[5] 8b0011_0000)begin temp[5] temp[5] - 1b1; end else if(temp[5] 8b0011_0000)begin temp[5] 8b0011_1001; if(temp[4] 8b0011_0000)begin temp[4] temp[4] - 1b1; end else if(temp[4] 8b0011_0000)begin temp[4] 8b0011_1001; if(temp[3] 8b0011_0000)begin temp[3] temp[3] - 1b1; end else if(temp[3] 8b0011_0000)begin temp[3] 8b0011_1001; if(temp[2] 8b0011_0000)begin temp[2] temp[2] - 1b1; end else if(temp[2] 8b0011_0000)begin temp[2] 8b0011_1001; if(temp[1] 8b0011_0000)begin temp[1] temp[1] - 1b1; end else if(temp[1] 8b0011_0000)begin temp[1] 8b0011_1001; if(temp[0] 8b0011_0000)begin temp[0] temp[0] - 1b1; end end end end end end end end end////// 略///assign data1 temp1;assign outdata1 temp[0];assign outdata2 temp[1];assign outdata3 temp[2];assign outdata4 temp[3];assign outdata5 temp[4];assign outdata6 temp[5];assign outdata7 temp[6];assign outdata8 temp[7];assign data {outdata1,outdata2,outdata3,outdata4,outdata5,outdata6,outdata7,outdata8};4.DDS模块通过相位累加器完成频率的控制Verilog代码如下部分参考电子森林开源代码module dds_main( clk, frequence, check, range, dac_data, dac_clk);input clk;input [1:0] check;output [9:0] dac_data; output dac_clk;input [31:0] frequence;input [3:0] range;wire [3:0] range_1;assign range_1 range;wire [31:0] next_phase;wire [7:0] phase;reg [31:0] a;// 相位累加器assign next_phase (32h00000024 frequence * 32h24) a;always(posedge clk) a next_phase;assign phase a[31:24];wire [9:0] sine_data;lookup_tables u_lookup_tables(phase,check,range_1,sine_data);assign dac_data sine_data;assign dac_clk ~clk;endmodule5.正弦波 三角波 方波的波表以及幅度调节模块通过制作的波表使DAC可以输出想要的波形此模块中还含有波形幅度控制模块可以配合旋钮进行波形幅度的控制。Verilog部分代码如下部分参考电子森林开源代码module lookup_tables( phase, check, range, sin_out);////// 略///always (sel or sine_table_out or phase)begin if(check 2b00) begin case(sel) 2b00: begin sine_onecycle_amp 9h12Csine_table_out[8:0]; address phase[5:0]; end 2b01: begin sine_onecycle_amp 9h12Csine_table_out[8:0]; address ~phase[5:0]; end 2b10: begin sine_onecycle_amp 9h12C-sine_table_out[8:0]; address phase[5:0]; end 2b11: begin sine_onecycle_amp 9h12C-sine_table_out[8:0]; address ~ phase[5:0]; end endcase end else if(check 2b01) begin case(sel) 2b00: begin sine_onecycle_amp sine_table_out[8:0]; address1 phase[7:0]; end 2b01: begin sine_onecycle_amp sine_table_out[8:0]; address1 phase[7:0]; end 2b10: begin sine_onecycle_amp 9d315 sine_table_out[8:0]; address1 phase[7:0]; end 2b11: begin sine_onecycle_amp 9d315 sine_table_out[8:0]; address1 phase[7:0]; end endcase end else if(check 2b10) begin case(sel) 2b00: begin sine_onecycle_amp sine_table_out[8:0]; address2 phase[7:0]; end 2b01: begin sine_onecycle_amp 9d315 sine_table_out[8:0]; address2 phase[7:0]; end 2b10: begin sine_onecycle_amp 9d315 sine_table_out[8:0]; address2 phase[7:0]; end 2b11: begin sine_onecycle_amp sine_table_out[8:0]; address2 phase[7:0]; end endcase endend////// 略///module sin_table(address,address1,address2,sin,check);output [8:0] sin;input [5:0] address;input [7:0] address1;input [7:0] address2;input [1:0] check;reg [9:0] state;reg [8:0] sin;localparam SIN 10h1, Triangle 10h2, Square 10h4;always (address) begin if(check 2b00) state SIN; else if(check 2b01) state Square; else if(check 2b10) state Triangle; case(state) SIN:begin case(address) 6d0: sin9d 0 ; 6d1: sin9d 7 ; 6d2: sin9d 15 ; 6d3: sin9d 3 ; 6d4: sin9d 29 ; 6d5: sin9d 36 ; 6d6: sin9d 44 ; 6d7: sin9d 51 ;////// 略///6.旋钮模块以及分频模块借鉴电子森林开源代码这里就不过多描述了。资源占用项目总结遇到的主要难题及解决方法在DDS模块中频率的控制和幅度的控制需要统一所以要同步控制三种波形需要提前计算或者一步一步尝试。在OLED模块部分一开始没有什么思路通过学习电子森林开源代码了解了SPI协议的书写完善了动态输出过程中ASCII转换的问题在后面的学习中发现可以通过左移加三算法进行快速计算相比我自己写出来的部分要好很多但由于时间较紧张就没有进行完善。------------END------------分享一个通用嵌入式软件架构分层设计思想分享一个提高MCU计算能力的神器实操在单片机上移植CMSIS-NN神经网络库

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询