精华内容
下载资源
问答
  • PWM 呼吸灯

    2013-08-06 01:37:49
    PWM呼吸灯,效果非常好,修改后课用于控制智能小车的运动。
  • PWM呼吸灯

    2019-10-05 14:17:14
    PWM呼吸灯,从51单片机开始玩的东西,在FPGA上再实现一次,见代码: 一、设计文件 1 //====================================================================== 2 // --- 名称 : breathing_led 3 // --- ...

      PWM呼吸灯,从51单片机开始玩的东西,在FPGA上再实现一次,见代码:

    一、设计文件

      1 //======================================================================
      2 // --- 名称 : breathing_led
      3 // --- 作者 : xianyu_FPGA
      4 // --- 日期 : 2018-12-15
      5 // --- 描述 : PWM频率调制实现真呼吸灯的效果,4秒1次循环,
      6 //            每2ms秒变化1次,前2秒亮度增大,后2秒亮度减小
      7 //======================================================================
      8 
      9 module breathing_led
     10 //---------------------<端口声明>---------------------------------------
     11 (
     12 input  wire              clk                , //时钟,50Mhz
     13 input  wire              rst_n              , //复位,低电平有效
     14 output wire              led                   //led灯
     15 );
     16 //---------------------<参数定义>---------------------------------------
     17 parameter TIME_2MS      = 100_000           ; //2ms时间
     18 parameter TIME_2MS_W    = 17                ; //2ms时间位宽
     19 parameter NUM           = 1000              ; //2ms到2s为1000份
     20 parameter NUM_W         = 10                ; //份数位宽
     21 parameter STEP          = 100               ; //2ms也分成1000份,每份为步长100
     22 
     23 //---------------------<信号定义>---------------------------------------
     24 reg  [TIME_2MS_W-1:0]   cnt0                ;
     25 wire                    add_cnt0            ;
     26 wire                    end_cnt0            ;
     27 reg  [NUM_W:0]          cnt1                ;
     28 wire                    add_cnt1            ;
     29 wire                    end_cnt1            ;
     30 reg  [1:0]              cnt2                ;
     31 wire                    add_cnt2            ;
     32 wire                    end_cnt2            ;
     33 reg  [TIME_2MS_W-1:0]   pwm_high            ;
     34 
     35 //----------------------------------------------------------------------
     36 //--   2ms时间计时
     37 //----------------------------------------------------------------------
     38 always @(posedge clk or negedge rst_n)begin
     39     if(!rst_n)
     40         cnt0 <= 0;
     41     else if(add_cnt0)begin
     42         if(end_cnt0)
     43             cnt0 <= 0;
     44         else
     45             cnt0 <= cnt0 + 1;
     46     end
     47     else
     48        cnt0 <= cnt0;
     49 end
     50 
     51 assign add_cnt0 = 1;
     52 assign end_cnt0 = add_cnt0 && cnt0==TIME_2MS-1 ;
     53 
     54 //----------------------------------------------------------------------
     55 //--   每2ms计1次,计到2秒共需计NUM次
     56 //----------------------------------------------------------------------
     57 always @(posedge clk or negedge rst_n)begin 
     58     if(!rst_n)
     59         cnt1 <= 0;
     60     else if(add_cnt1)begin
     61         if(end_cnt1)
     62             cnt1 <= 0;
     63         else
     64             cnt1 <= cnt1 + 1;
     65     end
     66     else
     67        cnt1 <= cnt1;
     68 end
     69 
     70 assign add_cnt1 = end_cnt0;
     71 assign end_cnt1 = add_cnt1 && cnt1==NUM-1 ;
     72 
     73 //----------------------------------------------------------------------
     74 //--   每2秒计1次,计到4秒共需计2次
     75 //----------------------------------------------------------------------
     76 always @(posedge clk or negedge rst_n)begin
     77     if(!rst_n)begin
     78         cnt2 <= 0;
     79     end
     80     else if(add_cnt2)begin
     81         if(end_cnt2)
     82             cnt2 <= 0;
     83         else
     84             cnt2 <= cnt2 + 1;
     85     end
     86     else
     87        cnt2 <= cnt2;
     88 end
     89 
     90 assign add_cnt2 = end_cnt1;
     91 assign end_cnt2 = add_cnt2 && cnt2==2-1 ;
     92 
     93 //----------------------------------------------------------------------
     94 //--   设置pwm的占空比时间
     95 //----------------------------------------------------------------------
     96 always @(posedge clk or negedge rst_n) begin
     97     if(!rst_n)
     98         pwm_high <= 0;
     99     else if(cnt2==0 && end_cnt0)
    100         pwm_high <= pwm_high + STEP;
    101     else if(cnt2==1 && end_cnt0)
    102         pwm_high <= pwm_high - STEP;
    103     else
    104         pwm_high <= pwm_high;
    105 end
    106 
    107 //----------------------------------------------------------------------
    108 //--   输出led灯
    109 //----------------------------------------------------------------------
    110 assign led = (cnt0 < pwm_high) ? 1'b1 : 1'b0;
    111 
    112 
    113 
    114 endmodule

     

    二、仿真文件

     1 `timescale 1ns/1ps  //时间精度
     2 `define    Clock 20 //时钟周期
     3 
     4 module breathing_led_tb;
     5 
     6 //---------------------<端口定义>---------------------------------------
     7 reg                     clk                 ; //时钟,50Mhz
     8 reg                     rst_n               ; //复位,低电平有效
     9 wire                    led                 ;
    10 
    11 //----------------------------------------------------------------------
    12 //--   模块例化
    13 //----------------------------------------------------------------------
    14 breathing_led
    15 #(
    16     .TIME_2MS           (1000               ), //2ms时间 100_000
    17     .NUM                (100                ), //2ms到2s为1000份
    18     .STEP               (10                 )  //2ms也分成1000份,每份为步长100
    19 )
    20 u_breathing_led
    21 (
    22     .clk                (clk                ),
    23     .rst_n              (rst_n              ),
    24     .led                (led                )
    25 );
    26 
    27 //----------------------------------------------------------------------
    28 //--   时钟信号和复位信号
    29 //----------------------------------------------------------------------
    30 initial begin
    31     clk = 1;
    32     forever
    33         #(`Clock/2) clk = ~clk;
    34 end
    35 
    36 initial begin
    37     rst_n = 0; #(`Clock*20+1);
    38     rst_n = 1;
    39 end
    40 
    41 
    42 
    43 
    44 endmodule

     

    三、仿真波形

      可以看到led信号的占空比先不断增加后不断减少,循环反复。

     

    四、上板验证

      经过上板验证,最终成功!

    转载于:https://www.cnblogs.com/xianyufpga/p/11026878.html

    展开全文
  • 工程- PWM呼吸灯.zip

    2021-06-15 19:21:43
    PWM呼吸灯
  • pwm呼吸灯实验

    2019-04-02 15:35:32
    pwm呼吸灯 采用pwm的方式,在固定的频率下,采用占空比的方式来实现LED亮度的变化。占空比为0,LED灯不亮,占空比为100%,则LED灯最亮。所以将占空比从0到100%,再从100%到0不断变化,就可以实现LED灯实现特效呼吸。
  • pwm呼吸灯51代码.c

    2021-05-06 20:49:20
    51pwm呼吸灯
  • PWM呼吸灯设计

    2015-07-29 21:15:21
    STM32F103C8 芯片型号 PWM呼吸灯设计代码
  • 11-PWM呼吸灯实验.zip

    2021-04-14 20:09:37
    STM32F407 PWM呼吸灯实验
  • pwm呼吸灯stm32工程代码
  • PWM呼吸灯实验

    2018-05-21 22:54:22
    PWM呼吸灯实验 ...........................................................................................................................................
  • 蓝桥杯单片机PWM呼吸灯程序,通过调节PWM值,改变灯的亮度,本程序以LED1为例,让其明白原理,应用其它地方就不难了。非常的银杏,非常的好用!
  • Verilog实现PWM呼吸灯

    2020-08-14 18:52:42
    一个用verilog实现的pwm呼吸灯

    前言

    我认为在FPGA的设计中,理论联系实际是十分重要的。下面转载的PWM呼吸灯就是一个很好的例子——作者用Verilog实现了一个变化pwm占空比的电路,应用在呼吸灯上。设计并不复杂,作者的代码风格也好,是相当优秀的Project。

    设计文件

    //======================================================================
    // --- 名称 : breathing_led
    // --- 作者 : xianyu_FPGA
    // --- 日期 : 2018-12-15
    // --- 描述 : PWM频率调制实现真呼吸灯的效果,4秒1次循环,
    //            每2ms秒变化1次,前2秒亮度增大,后2秒亮度减小
    //======================================================================
    
    module breathing_led
    //---------------------<端口声明>---------------------------------------
    (
    input  wire              clk                , //时钟,50Mhz
    input  wire              rst_n              , //复位,低电平有效
    output wire              led                   //led灯
    );
    //---------------------<参数定义>---------------------------------------
    parameter TIME_2MS      = 100_000           ; //2ms时间
    parameter TIME_2MS_W    = 17                ; //2ms时间位宽
    parameter NUM           = 1000              ; //2ms到2s为1000份
    parameter NUM_W         = 10                ; //份数位宽
    parameter STEP          = 100               ; //2ms也分成1000份,每份为步长100
    
    //---------------------<信号定义>---------------------------------------
    reg  [TIME_2MS_W-1:0]   cnt0                ;
    wire                    add_cnt0            ;
    wire                    end_cnt0            ;
    reg  [NUM_W:0]          cnt1                ;
    wire                    add_cnt1            ;
    wire                    end_cnt1            ;
    reg  [1:0]              cnt2                ;
    wire                    add_cnt2            ;
    wire                    end_cnt2            ;
    reg  [TIME_2MS_W-1:0]   pwm_high            ;
    
    //----------------------------------------------------------------------
    //--   2ms时间计时
    //----------------------------------------------------------------------
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)
            cnt0 <= 0;
        else if(add_cnt0)begin
            if(end_cnt0)
                cnt0 <= 0;
            else
                cnt0 <= cnt0 + 1;
        end
        else
           cnt0 <= cnt0;
    end
    
    assign add_cnt0 = 1;
    assign end_cnt0 = add_cnt0 && cnt0==TIME_2MS-1 ;
    
    //----------------------------------------------------------------------
    //--   每2ms计1次,计到2秒共需计NUM次
    //----------------------------------------------------------------------
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)
            cnt1 <= 0;
        else if(add_cnt1)begin
            if(end_cnt1)
                cnt1 <= 0;
            else
                cnt1 <= cnt1 + 1;
        end
        else
           cnt1 <= cnt1;
    end
    
    assign add_cnt1 = end_cnt0;
    assign end_cnt1 = add_cnt1 && cnt1==NUM-1 ;
    
    //----------------------------------------------------------------------
    //--   每2秒计1次,计到4秒共需计2次
    //----------------------------------------------------------------------
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            cnt2 <= 0;
        end
        else if(add_cnt2)begin
            if(end_cnt2)
                cnt2 <= 0;
            else
                cnt2 <= cnt2 + 1;
        end
        else
           cnt2 <= cnt2;
    end
    
    assign add_cnt2 = end_cnt1;
    assign end_cnt2 = add_cnt2 && cnt2==2-1 ;
    
    //----------------------------------------------------------------------
    //--   设置pwm的占空比时间
    //----------------------------------------------------------------------
    always @(posedge clk or negedge rst_n) begin
        if(!rst_n)
            pwm_high <= 0;
        else if(cnt2==0 && end_cnt0)
            pwm_high <= pwm_high + STEP;
        else if(cnt2==1 && end_cnt0)
            pwm_high <= pwm_high - STEP;
        else
            pwm_high <= pwm_high;
    end
    
    //----------------------------------------------------------------------
    //--   输出led灯
    //----------------------------------------------------------------------
    assign led = (cnt0 < pwm_high) ? 1'b1 : 1'b0;
    
    
    
    endmodule
    

    仿真文件

    `timescale 1ns/1ps  //时间精度
    `define    Clock 20 //时钟周期
    
    module breathing_led_tb;
    
    //---------------------<端口定义>---------------------------------------
    reg                     clk                 ; //时钟,50Mhz
    reg                     rst_n               ; //复位,低电平有效
    wire                    led                 ;
    
    //----------------------------------------------------------------------
    //--   模块例化
    //----------------------------------------------------------------------
    breathing_led
    #(
        .TIME_2MS           (1000               ), //2ms时间 100_000
        .NUM                (100                ), //2ms到2s为1000份
        .STEP               (10                 )  //2ms也分成1000份,每份为步长100
    )
    u_breathing_led
    (
        .clk                (clk                ),
        .rst_n              (rst_n              ),
        .led                (led                )
    );
    
    //----------------------------------------------------------------------
    //--   时钟信号和复位信号
    //----------------------------------------------------------------------
    initial begin
        clk = 1;
        forever
            #(`Clock/2) clk = ~clk;
    end
    
    initial begin
        rst_n = 0; #(`Clock*20+1);
        rst_n = 1;
    end
    
    
    
    
    endmodule
    

    仿真波形

    可以看到led信号的占空比先不断增加后不断减少,循环反复。
    在这里插入图片描述
    本文转载自:
    https://www.cnblogs.com/xianyufpga/p/11026878.html

    展开全文
  • pwm呼吸灯CubeMX教程对应keil工程代码,教程链接:https://blog.csdn.net/weixin_43116606/article/details/104194718
  • STM32F4PWM呼吸灯实验例程.rar
  • 电子-STM32PWM呼吸灯详解.docx,单片机/嵌入式STM32-F0/F1/F2
  • 干货,干货,代码可用,51单片机按键控制PWM呼吸灯,#include #define uchar unsigned char #define uint unsigned int sbit s1=P3^0; sbit s2=P3^4; sbit s3=P3^5; sbit beep=P2^3; uint pwm; uint num; //延时 ...
  • STM32_PWM 呼吸灯 MDK 源代码

    热门讨论 2013-03-16 11:27:59
    STM32_PWM 呼吸灯 利用PWM功能使LED灯呼吸效果,非常漂亮.
  • stm32PWM呼吸灯

    2019-01-17 15:46:01
    适用于stm32初学者的基于PWM呼吸灯,其中PWM是初学STM32的一个难点,因此可以通过此例程加强理解。
  • 3pwm呼吸灯.zip

    2019-11-20 20:01:58
    STC89C52_51单片机_例程3_PWM_呼吸灯_
  • Zynq-PL之PWM呼吸灯

    2021-01-31 21:27:05
    2.2、LED 的 PWM 呼吸灯 2.2.1、PWM 控制器 2.2.2、PWM 占空比可变 2.3、顶层设计 2.4、约束 玩 Zynq 呢,可以有几个方面,单玩 FPGA,单玩 ARM Cortex-A9 Dual Core,ARM+FPGA 带操作系统,FreeRTOS 或者 ...

    目录

    1、硬件原理图

    1.1 LED

    2、全局时钟

    3、复位

    2、设计

    2.1、LED 闪烁控制

    2.2、LED 的 PWM 呼吸灯

    2.2.1、PWM 控制器

    2.2.2、PWM 占空比可变

    2.3、顶层设计

    2.4、约束


     

    玩 Zynq 呢,可以有几个方面,单玩 FPGA,单玩 ARM Cortex-A9 Dual Core,ARM+FPGA 带操作系统,FreeRTOS 或者 Linux;

    FPGA 侧叫 PL,先以一个简单的 PWN + LED 的工程来认识和配置 ZYNQ并熟悉 Vivado 集成开发环境;

     

    1、硬件原理图

    1.1 LED

    首先从硬件原理图出发,PL 端连接了 4 个 LED 灯:

    分别是 LED1~LED4

    LED1->M14

    LED2->M15

    LED3->K16

    LED4->J16

     

    2、全局时钟

    PL 侧的全局时钟接入口是 U18,外接 50MHz 晶振:

     

    3、复位

    随便找一个 PL 侧的按键作为复位按键,问题不大:

    自此资源查找准备完毕;

     

    2、设计

    基本的东西弄完以后呢,打开 Vivado,建立工程,检索 Zynq-7000 系列处理器,选择 xc7z202clg400-2 处理器,首先增加 PLL/MMCM 的时钟控制:

    IP Catalog 检索 Clock,根据 Clocking Wizard 导向配置:

    输出时钟 50MHz:

     

    2.1、LED 闪烁控制

    首先我们设计一个 LED 闪烁控制的 Verilog,主要是通过计数器,来实现 LED 的亮和灭:

    `timescale 1ns / 1ps
    //
    // Company: 
    // Engineer: 
    // 
    // Create Date: 2020/12/03 20:22:56
    // Design Name: 
    // Module Name: stephen_pl_led
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //
    
    
    module stephen_pl_led
    #(
        parameter LED_WIDTH     = 4,
        parameter TIMEOUT_VALUE = 49999999 )
    (
        clk,
        rst_n,
        leds
    );
    
        localparam DLY = 1'd1;
        localparam CNT_WIDTH = 32;
    
        input                       clk;
        input                       rst_n;
    
        output [LED_WIDTH-1 : 0]    leds;
    
        reg    [LED_WIDTH-1 : 0]    leds;
        reg    [CNT_WIDTH-1 : 0]    timer_cnt;
    
        always @ (posedge clk or negedge rst_n) begin
            if(!rst_n) begin
                timer_cnt <= 32'd0;
            end
            else begin
                if(timer_cnt >= TIMEOUT_VALUE)
                    timer_cnt <= 32'd0;
                else
                    timer_cnt <= timer_cnt + 1'd1;
            end
        end
    
        always @ (posedge clk or negedge rst_n) begin
            if(!rst_n) begin
                leds <= { LED_WIDTH {1'b0} };
            end
            else begin
                if(timer_cnt >= TIMEOUT_VALUE)
                    leds <= ~leds;
                else
                    leds <= leds;
            end
        end
    
    endmodule

     

    2.2、LED 的 PWM 呼吸灯

    2.2.1、PWM 控制器

    要搞呼吸灯,那么就要先做一个 PWM 控制模块出来,PWM 主要设计的参数有占空比和频率:

    `timescale 1ns / 1ps
    //
    // Company: 
    // Engineer: 
    // 
    // Create Date: 2020/12/14 21:11:45
    // Design Name: 
    // Module Name: stephen_pl_pwm
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //
    
    
    module stephen_pl_pwm
    (
        clk         ,
        rst_n       ,
        cycle       ,
        duty        ,
        pwm_out
    );
    
        input                   clk         ;
        input                   rst_n       ;
        input   [31:0]          cycle       ;
        input   [31:0]          duty        ;
        output                  pwm_out     ;
    
        wire                    clk         ;
        wire                    rst_n       ;
        wire    [31:0]          cycle       ;
        wire    [31:0]          duty        ;
    
        reg                     pwm_out     ;
    
        reg     [31:0]          pwm_counter ;
    
        // Generate pwm_counter
        always @(posedge clk or negedge rst_n) begin
            if(~rst_n) begin
                pwm_counter <= 32'd0;
            end
            else if(pwm_counter >= cycle | cycle == 32'd0) begin
                pwm_counter <= 32'd0;
            end
            else begin
                pwm_counter <= pwm_counter + 32'd1;
            end
        end
    
        // Generate output signal
        always @(posedge clk or negedge rst_n) begin
            if(~rst_n) begin
                pwm_out <= 1'b0;
            end
            else if(pwm_counter <= duty) begin
                pwm_out <= 1'b1;
            end
            else begin
                pwm_out <= 1'b0;
            end
        end
    
    endmodule
    

     

    2.2.2、PWM 占空比可变

    做完 PWM 控制模块后,在写一个控制 PWM 占空比变化的 pwm 顶层模块出来:

    `timescale 1ns / 1ps
    //
    // Company: 
    // Engineer: 
    // 
    // Create Date: 2021/01/19 21:11:45
    // Design Name: 
    // Module Name: stephen_pl_pwm_top
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //
    
    
    module stephen_pl_pwm_top
    (
        clk         ,
        rst_n       ,
        pwm
    );
    
        parameter   CNT_MAX  = 32'd10000    ;
        parameter   CNT_HALF = CNT_MAX/2    ;
    
        input                   clk         ;
        input                   rst_n       ;
        output                  pwm         ;
    
        wire                    clk         ;
        wire                    rst_n       ;
        wire                    pwm         ;
    
        reg     [31:0]          pwm_cycle   ;
        reg     [31:0]          pwm_duty    ;
        reg     [31:0]          counter     ;
    
        always @(posedge clk or negedge rst_n) begin
            if(~rst_n) begin
                counter <= 32'd0;
            end
            else if(counter >= CNT_MAX) begin
                counter <= 32'd0;
            end
            else begin
                counter <= counter + 32'd1;
            end
        end
    
        always @(posedge clk or negedge rst_n) begin
            if(~rst_n) begin
                pwm_cycle <= CNT_HALF;
            end
            else begin
                pwm_cycle <= CNT_HALF;
            end
        end
    
        always @(posedge clk or negedge rst_n) begin
            if(~rst_n) begin
                pwm_duty <= 32'd0;
            end
            else if (counter >= CNT_MAX) begin
                pwm_duty <= pwm_duty + 32'd1;
            end
            else if (pwm_duty >= CNT_HALF) begin
                pwm_duty <= 32'd0;
            end
        end
    
    stephen_pl_pwm u0_pwm_contoller
    (
            .clk            (clk)       ,
            .rst_n          (rst_n)     ,
            .cycle          (pwm_cycle) ,
            .duty           (pwm_duty)  ,
            .pwm_out        (pwm)
    );
    
    endmodule
    

    2.3、顶层设计

    顶层描述各个模块之间的连接,时钟信号由 PLL/MMCM 提供,同时它输出 Locked 信号,用于给后续模块提供复位:

    它的 Verilog HDL 描述也相对简单:

    `timescale 1ns / 1ps
    //
    // Company: 
    // Engineer: 
    // 
    // Create Date: 2020/12/06 14:32:53
    // Design Name: 
    // Module Name: stephen_pl_top
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //
    
    
    module stephen_pl_top(
        input  sys_clk,
        input  rst_n,
        // LED Signals
        output [2:0] led_out,
        // PWM Signals
        output pwm
    );
    
    wire locked;
    wire clk_50m;
    
    // MMCM Controller instance
    clk_wiz_0 mmcm_controller
    (
            // Clock out ports
            .clk_50m            (clk_50m)     ,       // output clk_50m
            // Status and control signals
            .reset              (~rst_n)        ,       // input reset, Active reset
            .locked             (locked)        ,       // output locked
            // Clock in ports
            .clk_in1            (sys_clk)               // input clk_in1
    );
    
    stephen_pl_led 
    #(
        .LED_WIDTH(3)
    )
    led_controller
    (
            .clk                (clk_50m)       ,       // PLL output Clock
            .rst_n              (locked)        ,       // PLL Locked Signal
            .leds               (led_out)               // LEDs
    );
    
    stephen_pl_pwm_top pwm_controller
    (
            .clk                (clk_50m)       ,       // PLL output Clock
            .rst_n              (locked)        ,       // PLL Locked Signal
            .pwm                (pwm)                   // LEDs
    );
    
    endmodule
    

     

    2.4、约束

    这里主要就是管脚约束,时序的 create clock 默认在创建 PLL/MMCM 的时候有了,管脚约束参考前面的原理图部分:

    ############## LED define ##############################
    set_property PACKAGE_PIN K16 [get_ports {led_out[2]}]
    set_property PACKAGE_PIN M15 [get_ports {led_out[1]}]
    set_property PACKAGE_PIN M14 [get_ports {led_out[0]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {led_out[2]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {led_out[1]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {led_out[0]}]
    
    ############## CLOCK AND RST define ##############################
    set_property PACKAGE_PIN N15 [get_ports rst_n]
    set_property PACKAGE_PIN U18 [get_ports sys_clk]
    set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
    set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
    
    ############## PWM define ##############################
    set_property PACKAGE_PIN J16 [get_ports pwm]
    set_property IOSTANDARD LVCMOS33 [get_ports pwm]

     

     

    展开全文
  • 基于STM32F103 PWM呼吸灯设计 1、线性呼吸灯 bsp.c #include<includes.h> void RCC_Configuration(void); /* 初始化系统时钟 */ void TIM3_Configuration(void); /* PWM配置 */ void BSP_Init (void) { RCC...

    基于STM32F103 PWM呼吸灯设计

    1、线性呼吸灯

    bsp.c

    #include<includes.h>
    
    void RCC_Configuration(void);	/* 初始化系统时钟 */
    void TIM3_Configuration(void);	/* PWM配置 */
    
    void  BSP_Init (void)
    {
    	RCC_Configuration();	/* 初始化系统时钟 */
    	TIM3_Configuration();	/* PWM配置 */
    }
    /*********************************************************************************************************
    * 名    称 :RCC_Configuration
    * 功能描述 : 初始化系统时钟
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/
    void RCC_Configuration(void)
    {
    	SystemInit(); 
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);
    }
    
    /*********************************************************************************************************
    * 名    称 :TIM3_Configuration
    * 功能描述 : 初始化定时器  PWM
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/
    void TIM3_Configuration(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	TIM_OCInitTypeDef TIM_OCInitStructure;
    	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    	
    	//通道1 PA7
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	
    	//通道2 PA6
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	//通道3 PB0  
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    	
    		
    	//通道4 PB1
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    	        	
    	/* Time base configuration */
    	TIM_TimeBaseStructure.TIM_Period = (100- 1);					//arr  设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    	TIM_TimeBaseStructure.TIM_Prescaler = (40-1);	 			 	//分频	psc  影响周期
    	TIM_TimeBaseStructure.TIM_ClockDivision = 0;				 	//时钟分割,一般写0
    	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;	 	//设置为向上计数模式
    	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    
    	/* PWM1 Mode configuration: Channel1*/
    	TIM_OCInitStructure.TIM_Pulse =0;						// 初始值
    	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;			   //pwm模式1
    	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	//使能通道
    	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;	//高电平
    	
    	
    	//通道1
    	TIM_OC1Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    	
      //通道2 
    	TIM_OC2Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    		
    	//通道3 
    	TIM_OC3Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    		
    	//通道4
    	TIM_OC4Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    	
    	TIM_Cmd(TIM3, ENABLE);	/* 使能 */
    }
    
    
    

    main.c

    
    #include <includes.h>
    #include <stdlib.h> 
    
    extern void  BSP_Init (void);
    
    /*********************************************************************************************************
    * 名    称 :main
    * 功能描述 : 初始化STM32
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/ 
    int main(void)
    {
    	int  n1,n2,n3,n4;
    	int i;
    	n1=100;
    	n2=100;
    	n3=100;
    	n4=100;
    	BSP_Init();
    	while(1)
    	{     
    		for(i=0;i<100;i++)
    		{
    		  TIM_SetCompare1(TIM3,i);
    		  TIM_SetCompare2(TIM3,i);
    		  TIM_SetCompare3(TIM3,i);
    		  TIM_SetCompare4(TIM3,i);
    			delay_ms(19);
    		}
    		for(i=100;i>=0;i--)
    		{
    		  TIM_SetCompare1(TIM3,i);
    		  TIM_SetCompare2(TIM3,i);
    		  TIM_SetCompare3(TIM3,i);
    		  TIM_SetCompare4(TIM3,i);
    			delay_ms(19);
    		}
    		delay_ms(300);
    	}
    }
    
    2、正弦函数呼吸灯

    bsp.c

    #include<includes.h>
    
    void RCC_Configuration(void);	/* 初始化系统时钟 */
    void TIM3_Configuration(void);	/* PWM配置 */
    
    void  BSP_Init (void)
    {
    	RCC_Configuration();	/* 初始化系统时钟 */
    	TIM3_Configuration();	/* PWM配置 */
    }
    /*********************************************************************************************************
    * 名    称 :RCC_Configuration
    * 功能描述 : 初始化系统时钟
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/
    void RCC_Configuration(void)
    {
    	SystemInit(); 
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);
    }
    
    /*********************************************************************************************************
    * 名    称 :TIM3_Configuration
    * 功能描述 : 初始化定时器  PWM
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/
    void TIM3_Configuration(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	TIM_OCInitTypeDef TIM_OCInitStructure;
    	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    	
    	//通道1 PA7
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	
    	//通道2 PA6
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	//通道3 PB0  
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    	
    		
    	//通道4 PB1
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    	        	
    	/* Time base configuration */
    	TIM_TimeBaseStructure.TIM_Period = (100- 1);					//arr  设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    	TIM_TimeBaseStructure.TIM_Prescaler = (40-1);	 			 	//分频	psc  影响周期
    	TIM_TimeBaseStructure.TIM_ClockDivision = 0;				 	//时钟分割,一般写0
    	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;	 	//设置为向上计数模式
    	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    
    	/* PWM1 Mode configuration: Channel1*/
    	TIM_OCInitStructure.TIM_Pulse =0;						// 初始值
    	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;			   //pwm模式1
    	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	//使能通道
    	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;	//高电平
    	
    	
    	//通道1
    	TIM_OC1Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    	
      //通道2 
    	TIM_OC2Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    		
    	//通道3 
    	TIM_OC3Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    		
    	//通道4
    	TIM_OC4Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    	
    	TIM_Cmd(TIM3, ENABLE);	/* 使能 */
    }
    
    
    

    main.c

    
    #include <includes.h>
    #include <stdlib.h> 
    #include <math.h>
    extern void  BSP_Init (void);
    
    /*********************************************************************************************************
    * 名    称 :main
    * 功能描述 : 初始化STM32
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/ 
    int main(void)
    {
    	int  n1,n2,n3,n4;
    	int i;
    	n1=100;
    	n2=100;
    	n3=100;
    	n4=100;
    	BSP_Init();
    	while(1)
    	{     
    		for(i=0;i<314;i++)
    		{
    		  TIM_SetCompare1(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare2(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare3(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare4(TIM3,100*sin(i/100.0));
    			delay_ms(10);
    		}
    		for(i=314;i>=0;i--)
    		{
    		  TIM_SetCompare1(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare2(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare3(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare4(TIM3,100*sin(i/100.0));
    			delay_ms(10);
    		}
    		delay_ms(300);
    	}
    }
    
    展开全文
  • PWM呼吸灯.zip

    2019-08-09 16:29:36
    IAR for 8051 开发环境,基于TI cc2530,PWM 是在方波的基础上,调整高低电平的时间比例,经典应用就是用来调节灯光亮度, 本程序就利用 PWM 信号来控制 LED 的亮度,实测通过验证。
  • 分析 假设要一个f=1KHZ的呼吸灯 T=1/f=1ms,故将100us定时时可将1ms分成10份,将高电平分X份(X<=10)则低电平为10-X份 占空比为X/10。这可以实现0%、10%、20%…...//例如1khz的PWM呼吸灯 #include "STC...
  • <p><strong>这是我编写的PWM呼吸灯程序,但是只有在中断里面加上while(1)循环他才能呼吸。没有这个while直接就不亮了,但我看别人的呼吸灯函数中断内没有while循环也能呼吸,这是为...
  • 本例程基于ESP8266 NONOS 2.0 的PWM呼吸灯 LED为IO4引脚 程序如下: #include "user_config.h" // 用户配置 #include "driver/uart.h" // 串口 #include "c_types.h" // 变量类型 #include "eagle_soc.h" ...
  • pwm呼吸灯及按键切换

    2018-07-29 13:55:39
    PWM波的原理,生成周期为1s和5s的呼吸灯并通过按键来切换。
  • OpenWrt PWM呼吸灯

    2019-11-07 14:34:54
    我想在Linkit Smart MT7688上使用PWM做个呼吸灯,使用的内核版本OpenWrt,chaos_calmer 15.05固件,参考的小鱼儿的博客。步骤如下: step1:修改makefile中的配置 define KernelPackage/mt7688_pwm SECTION:=...
  • STM32的定时器实现PWM呼吸灯 1.程序比较简单,不再啰嗦。首先是STM32CubeMX里的关键信息配置,下面没截图到的就按默认的没改。我的板子是ST官方的STM32F429ZIT6-NUCLEO,时钟设置的内部时钟源的180MHz,TIM1在APB2...
  • pwm 呼吸灯 让你的灯呼吸起来

    千次阅读 2020-03-30 16:45:23
    首先了解什么叫做呼吸灯 (贴一个视频) 再来了解什么叫做pwm
  • STM32 HAL库 CubeMX教程(三)PWM呼吸灯

    千次阅读 2020-02-06 13:31:11
    STM32F1x CubeMX教程(三)PWM呼吸灯PWM简介CubeMX配置占空比设置呼吸灯程序编写参考文献 PWM简介 控制 PWM 的主要有三个寄存器分别是 :捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 786
精华内容 314
关键字:

pwm呼吸灯