FPGA实战-麦克风模块控制舵机

本文分享了一个基于FPGA的实验项目,实现了按键控制数码管计数及麦克风声音触发舵机旋转的功能。项目使用了EGO1开发板,搭载xc7a35tcsg324-1芯片,通过VIVADO进行编程。文章详细介绍了实验的电路设计、RTL图及各模块代码,包括计数器、PWM生成、麦克风信号处理、流水灯控制等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近一直都比较忙,做了一些东西但是没有时间更新博客,这次写个小玩物,也可以说是一个实验,实现效果不错,很适合初学者自己动手做一个。

首先先上实物图

实验平台:EGO1开发板

FPGA型号:xc7a35tcsg324-1

代码平台:VIVADO

实现功能:按键数码管计数,0-99,麦克风控制舵机旋转,舵机旋转为顺时针180°后迅速转回,每次麦克风收到声音后,舵机会在转与不转中来回切换,流水灯在流与不流之间切换。

下面我们看RTL图

1.顶层文件

`timescale 1ns/1ps
module class_design_top(
                          input         clk,
                          input         mic_in,
                          input         rst_n,
                          input         key1,
                          output [5:0]  seg_sel,
                          output [7:0]  seg_data,
                          output        pwm_out,
                          output [15:0] led_out
                          );
wire      clk_en;
reg       mic_in_r1 = 1'b1;

always @ (posedge clk or negedge rst_n)
begin
    if(!rst_n)
    mic_in_r1 = 1'b1;
    else
    mic_in_r1 <= mic_in;
end

pwm_out li(
            .clk(clk_en),
            .rst_n(rst_n),
            .pwm_out(pwm_out)
           );
mic_switch li1(
                 .clk(clk),
                 .rst_n(rst_n),
                 .sound_in(mic_in_r1),
                 .clk_en(clk_en)
               );
flowing_light li2(
                 .clk(clk_en),
                 .rst(rst_n),
                 .led(led_out)
               );


wire button_posedge; 
ax_debounce ax_debounce_m0
(
    .clk             (clk),
    .rst             (~rst_n),
    .button_in       (key1),
    .button_posedge  (button_posedge),
    .button_negedge  (),
    .button_out      ()
);

wire[3:0] count;
wire t0;
count_m10 count10_m0(
    .clk    (clk),
    .rst_n  (rst_n),
    .en     (button_posedge),
    .clr    (1'b0),
    .data   (count),
    .t      (t0)
);
wire[3:0] count1;
wire t1;
count_m10 count10_m1(
    .clk    (clk),
    .rst_n  (rst_n),
    .en     (t0),
    .clr    (1'b0),
    .data   (count1),
    .t      (t1)
);
wire[6:0] seg_data_0;
seg_decoder seg_decoder_m0(
    .bin_data  (count),
    .seg_data  (seg_data_0)
);

wire[6:0] seg_data_1;
seg_decoder seg_decoder_m1(
    .bin_data  (count1),
    .seg_data  (seg_data_1)
);
seg_scan seg_scan_m0(
    .clk        (clk),
    .rst_n      (rst_n),
    .seg_sel    (seg_sel),
    .seg_data   (seg_data),
    .seg_data_0 ({1'b1,7'b1111_111}),
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值