目录
前言
up主的联系方式:
微信公众号:嵌入式up
大家好!大家点点关注,大家的关注才是我持续更新的动力!
一、PWM是什么?
众所周知,大家都知道pwm这个在生活或许学习,单片机学习中有着至关重要的作用和应用,比如说直流电机的调试、开关电源等等。
PWM:全称Pulse Width Modulation:脉冲宽度调制(简称脉宽调制,通俗的讲就是调节脉冲的宽度),是电子电力应用中非常重要的一种控制技术。
PWM是一种技术手段,是在这种技术手段控制下的脉冲波。要想学会PWM波首先我们得明白三个东西:脉宽、周期、占空比。
通俗的说,就是控制在一个周期内,控制高电平多长时间,低电平多长时间,也就是说通过调节高低电平时间的变化来调节信号的变化。
频率是指一定时间内信号从高电平到低电平再回到高电平的次数,为一个波形周期的倒数。频率=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)等;
公式如下:
后续计算以及和推导过程和公式得使用大家自行学习一下,此链接学习起来更加形象易懂。
这样理解PWM,想不懂都难!!! - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/374083276言归正传,我们还是直入主题下面讲解如何使用龙芯产生开发pwm。
二、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的使用例程-嵌入式文档类资源-CSDN文库
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。