龙芯1B:pwm的使用例程

文章目录


前言

一、PWM是什么?

二、PWM 芯片 GP7101

1.驱动程序 gp7101.c 实现的函数:

三、pwm波形的产生

1.开发步骤

2.代码实现

总结


前言

up主的联系方式:

微信公众号:嵌入式up

大家好!大家点点关注,大家的关注才是我持续更新的动力!


一、PWM是什么?

众所周知,大家都知道pwm这个在生活或许学习,单片机学习中有着至关重要的作用和应用,比如说直流电机的调试、开关电源等等。

PWM:全称Pulse Width Modulation:脉冲宽度调制(简称脉宽调制,通俗的讲就是调节脉冲的宽度),是电子电力应用中非常重要的一种控制技术。

PWM是一种技术手段,是在这种技术手段控制下的脉冲波。要想学会PWM波首先我们得明白三个东西:脉宽、周期、占空比。

通俗的说,就是控制在一个周期内,控制高电平多长时间,低电平多长时间,也就是说通过调节高低电平时间的变化来调节信号的变化。

8cce062c799d4e5c9c471047279897d1.png

 f1b56b9bf22c4a789102f5461b337b1f.png

频率是指一定时间内信号从高电平到低电平再回到高电平的次数,为一个波形周期的倒数。频率=1/(0.003+0.001)=250 HZ(此计算公式为1s)
占空比是指高电平时间和下一个周期的时间。占空比=1/(1+3)=25%,所以可以通过控制占空比,来控制输出的电压。
所以对于方波的话,频率和占空比就确定了一个波。

脉冲周期(T):单位是时间,比如纳秒(ns)、微妙(μs)、毫秒(ms)等;

脉冲频率(f):单位是赫兹(Hz)、千赫兹(kHz)等,与脉冲周期成倒数关系,f=1/T;

占空比(D):脉宽除以脉冲周期的值,百分数表示,比如50%。

脉冲宽度(W):简称“脉宽”,是脉冲高电平持续的时间。单位是时间,比如纳秒(ns)、微妙(μs)、毫秒(ms)等;

公式如下:

                        gif.latex?W%20%3D%20ton

                        gif.latex?T%20%3D%20ton%20+%20toff%20%3D%20%5Cfrac%7B1%7D%7Bf%7D

                        gif.latex?D%20%3D%20%5Cfrac%7Bton%7D%7Bton+toff%7D%20%3D%20%5Cfrac%7Bton%7D%7BT%7D

后续计算以及和推导过程和公式得使用大家自行学习一下,此链接学习起来更加形象易懂。

这样理解PWM,想不懂都难!!! - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/374083276言归正传,我们还是直入主题下面讲解如何使用龙芯产生开发pwm。

二、PWM 芯片 GP7101

源代码:ls1x‐drv/i2c/gp7101/gp7101.c

头文件:ls1x‐drv/include/i2c/gp7101.h

GP7101 是否使用,在 bsp.h 中配置宏定义:

#define GP7101_DRV GP7101 挂接在 I2C0 上,I2C 地址和通信速率定义(gp7101.c):

#define GP7101_ADDRESS         0x58             /* 7 位地址 */

#define GP7101_BAUDRATE        100000           /* 100K */

1.驱动程序 gp7101.c 实现的函数:

int GP7101_write(void *dev, void *buf, int size, void *arg); 写数据

注:GP7101 芯片输出 100Hz 的 PWM 信号,用于触摸屏亮度控制。

int set_lcd_brightness(void *bus, int brightpercent); LCD 亮度控制 参数:brightpercent: 1~100

三、pwm波形的产生

1.开发步骤

第1步, 新建工程
第2步, 在 bsp.h 中打开 PWM2 设备的宏定义, 并在 main.c 下添加 ls1b_gpio.h 和    ls1x_pwm.h文件。
第3步, 定义 pwm_cfg_t 结构体配置 PWM open 的 arg 参数。
第4步, 编写一个中断回调函数
第5步, 调用 ls1x_pwm_timer_start函数启动 PWM2 工作,开始定时。
第6步, 调用 ls1x_pwm_timer_stop函数停止 PWM2 工作,停止定时

2.代码实现

代码如下(示例):

#include <stdio.h>
#include "ls1b.h"
#include "mips.h"

//-------------------------------------------------------------------------------------------------
// BSP
//-------------------------------------------------------------------------------------------------

#include "bsp.h"
#include "ls1b_gpio.h"
#include "ls1x_pwm.h"
//-------------------------------------------------------------------------------------------------
// 主程序
//-------------------------------------------------------------------------------------------------
int main(void)
{
    printk("\r\nmain() function.\r\n");
    gpio_enable(54,DIR_OUT);
    gpio_enable(3,DIR_OUT);
    gpio_enable(2,DIR_OUT);
    gpio_write(54,1);
    gpio_write(3,1);
    gpio_write(2,1);
    gpio_disable(3);
    
    unsigned char count = 1;
    
    pwm_cfg_t cfg;
    cfg.cb = NULL;
    cfg.isr = NULL;
    cfg.mode = PWM_CONTINUE_PULSE;
    
    /*
     * 裸机主循环
     */
    for (;;)
    {
        cfg.hi_ns = count * 100;
        cfg.lo_ns = 5000 - count * 100;
        ls1x_pwm_pulse_start(devPWM2,&cfg);
        delay_ms(30);
        ls1x_pwm_pulse_stop(devPWM2);
        count++;
        if(count >= 49)
        {
            count = 1;
        }
    }

    /*
     * Never goto here!
     */
    return 0;
}

总结

·源码链接:(6条消息) 龙芯1B:pwm的使用例程-嵌入式文档类资源-优快云文库


联系我们

                公众号   嵌入式up   如果文章对您有帮助,请打赏一元呗,感谢支持,分享不易,码字不易。希望对大家帮助!


不是想成为,而是要成为。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值