0%

一、PWM信号简介

  • PWM:脉冲宽度调制,简称脉宽调制
  • 频率(f):一秒钟PWM有多少个周期(单位Hz)
  • 周期(T):一个周期的时间
  • 占空比(duty):在一个脉冲周期内,高电平的时间与整个周期时间的比例
  • 脉宽时间:一个周期内高电平时间
  • 占空比越大,输出的有效电压越高。

    二、ESP32中的LEDC(PWM控制器)

  • LEDC:指LED PWM控制器,即PWM信号产生器。
  • LED_PWM有16路通道(0~15)
  • 8路高速通道(0~7),由80MHz时钟驱动
  • 8路低速通道(8~15),由8MHz时钟驱动

    三、产生PWM信号的流程

    使用Arduino 通过PWM调光LED必须遵循的步骤:
  1. 首先,选择一个PWM通道,从0到15共有16个通道。

  2. 然后,设置PWM信号频率。对于LED来说,使用5000 Hz的频率是合适的。

  3. 设置信号的占空比分辨率,分辨率从1到16位。此处将使用8位分辨率,可以使用0到255的值来控制LED亮度(2的8次方)。

    1
    ledcSetup(0, 30000, 8); // pwm通道, 频率, 精度
  4. 指定信号将出现在哪个或哪些GPIO上。为此,将使用以下函数:

    1
    ledcAttachPin(GPIO, channel)       //输出信号的GPIO,产生信号的通道。
  5. 使用PWM控制LED亮度,可以使用以下函数:
    1
    ledcWrite(channel, dutycycle);       // PWM信号的通道和占空比

3.1 LEDC频率与分辨率的关系

7c78c8eb42d29ae93a68e224c7485da1.jpeg

4aac65a593fa35e71173d9b1387a519e.jpeg

3.2 LEDC频率与最大分辨率表

1dc9b31603e691d22537e849a1cd084b.jpeg

3.3 使用LEDC输出PWM的示例程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <Arduino.h>

int pwmA = 12;
int pwmB = 13;
int pwmC = 14;

void setup()
{
// 建立LEDC通道
ledcSetup(0, 30000, 8); // pwm频道, 频率, 精度
ledcSetup(1, 30000, 8); // pwm频道, 频率, 精度
ledcSetup(2, 30000, 8); // pwm频道, 频率, 精度

// 将GPIO与LEDC通道绑定
ledcAttachPin(pwmA, 0);
ledcAttachPin(pwmB, 1);
ledcAttachPin(pwmC, 2);

// 输出PWM
ledcWrite(0, 255);
ledcWrite(1, 255);
ledcWrite(2, 255);
}

void loop()
{
}

虽然之前在STM32的博文里面的其中一篇讲PWM的博文已经讲过了,但在这里再讲一遍,我们手里的舵机模块基本都是靠时基脉冲中的占空比调节来控制的,那再具体再说的通俗一点呢?就是比如我的时基为20ms , 要求舵机转到0度的所要求的的占空比为0.5ms,那么我们就需要以20ms为一个周期,每个周期内的高电平时间为0.5ms(这就是占空比),然后其余时间为低电平即可,而具体到我手上的这个360度舵机呢,说实话不建议大家使用360度舵机,因为360度舵机失去了舵机最大的优势就是角度调节,我可以控制比如180度的舵机能够精确转动到哪一个位置,但是360度舵机不行,我们只能控制他正反转以及正反转速度,但是控制方法是一模一样的,下边是示例代码

阅读全文 »

修改logo图片可参考手册,动画可以提供一个参考,不同的地方自行修改

root@08df03d23758:~/workspace/allwinner/android/device/softwinner/a40-p1/media#

将动画放入:device/vendor-name/device-name/media/bootanimation.zip

阅读全文 »

当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为 android.intent.action.BOOT_COMPLETED。我们要做的是做好接收这个消息的准备,而实现的手段就是实现一个BroadcastReceiver。

阅读全文 »

修改系统默认时间显示为24小时制

目前只针对安卓7.1.1进行了修改测试
源码路径:
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
添加:

1
<string name="def_time_12_24" translatable="false">24</string>

源码路径:
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
添加:

1
2
3
4
5
private void loadSystemSettings(SQLiteDatabase db) {
...
loadStringSetting(stmt, Settings.System.TIME_12_24, R.string.def_time_12_24);
...
}

去除“从顶部向下滑动即可退出全屏模式”

framework/base/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private final class H extends Handler {
private static final int SHOW = 1;
private static final int HIDE = 2;

@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case SHOW:
+ //handleShow();
break;
case HIDE:
+ //handleHide();
break;
}
}
}

在开始本节课以前请确保您的电脑已经成功安装了MQTTfx软件。另外我们还将使用PubSubClient库。您可以通过以下链接获取此库。

官网地址:https://pubsubclient.knolleary.net/
GitHub:https://github.com/knolleary/pubsubclient/
百度网盘下载: https://pan.baidu.com/s/12MHGbdfiOdwOGip5RMSSEQ 提取码: sizy

当您将PubSubClient库安装后,我们就可以使用该库进行开发了。

阅读全文 »

VMware修复因存储不足导致不开机问题

1、在VMware虚拟机中按Ctrl+D打开“虚拟机设置”,在“硬件”设备中选择“CD/DVD (IDE)”,在“连接”中选择“使用ISO镜像文件”,选择Ubuntu的iso安装文件,“确定”。

2、重启虚拟机,在显示“VMware”文字是按下Esc键,进入“Boot Menu”,选择“Enter Setup”-”Boot“,将”CD-ROM Drive“设为第一启动项,按F10,重启。

3、系统重启后通过iso文件启动,选择语言”English“,选择”Try Ubuntu without installing“,进入系统。

阅读全文 »

因为某种缘由,如逼迫闭机,vmware下的ubuntu涌现启动没有了的状态。

问题现象

1、Invalid argumentmount: mounting /sys on /root/sys failed:No such file or directorymount: mounting /dev on /root/dev failed: No such

2、sd 32:0:0:0 [sda] assuming drive cache: write through【卡住进不去系统】
等等,可以尝试修复文件系统。

3、系统启动进入GRUB,系统黑屏无法启动

修复过程

  1. 设置启动镜像文件

    在VMware虚拟机中按 Ctrl+D 打开 “Virtual Machine Settings”,在“Hardware” “CD/DVD (IDE)”,在“连接”中选择“Use ISO image file”,选择Ubuntu的iso安装文件,点击“ok”

    阅读全文 »