ShineBlink C2M 单片机扩展8路PWM控制舵机电机

96 篇文章 0 订阅
32 篇文章 0 订阅

本教程来至 FlexLua 官网 ShineBlink 开发板教程,即使不懂单片机开发也可很容易用FlexLua零门槛开发各种 IoT 硬件。

注意:本教程仅适用于C2,C1目前暂不支持。

一、前言

当我们需要实现驱动更多的电机、舵机等需要更多路PWM信号的情形时,我们可以考虑利用Core芯片自带的8路PWM扩展输出功能,以下介绍了该功能的特性:

  • D0~D7端口可同时输出8路PWM信号,TTL电平
  • 8路PWM信号的频率(周期)一致,范围为: 30Hz ~ 10000Hz(100us - 32367us)
  • 可随时改变8路PWM信号的频率,并且可以随时改变任意一路PWM信号的占空比

涉及的库函数如下:

--配置8路PWM信号基本信息的初始化函数
LIB_PwmConfig8()
--配置8路PWM信号的有效电平时长(占空比),该函数可在PWM输出过程中随时调用
LIB_PwmUpdate8()
--配置8路pwm信号的周期(频率),以及有效电平时长(占空比),该函数可在PWM输出过程中随时调用
LIB_PwmSetPrd8()


注意:一但使用了该PWM扩展功能,D0-D7这8个引脚就无法作为GPIO来使用了。

二、接线图

ed7181e979cd5848439aeba678cdecbb.jpeg

a64498d462431fec2fa04ee17c65694a.jpeg

三、示例代码:动态改变8路PWM信号的占空比

以下代码实现了:D0~D7 8路同时输出频率为100Hz的PWM信号,当开发板上BTN1按键按下时,设置D0-D7的占空比分别为:10%,20%,30%,40%,50%,60%,70%,80%;当开发板上的BTN2按键按下时,设置D0-D7的占空比分别为:80%,70%,60%,50%,40%,30%,20%,10%。

--设置按键"BTN1"(占用D10口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN1","D10","L")
--设置按键"BTN1"(占用D11口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN2","D11","L")
--配置D0~D7这8个IO口为PWM功能,周期10000us(100Hz),高电平为有效极性
LIB_PwmConfig8(10000,1)
LIB_PwmUpdate8(0,0,0,0,0,0,0,0)
--开始大循环
while(GC(1) == true)
do
--轮询按键1事件
key_value = LIB_ButtonQuery("BTN1")
--如果按键1短按过
if key_value == 1 then
--设置D0-D7的占空比分别为:10%,20%,30%,40%,50%,60%,70%,80%
LIB_PwmUpdate8(1000,2000,3000,4000,5000,6000,7000,8000)
end

--轮询按键2事件
key_value = LIB_ButtonQuery("BTN2")
--如果按键2短按过
if key_value == 1 then
--设置D0-D7的占空比分别为:80%,70%,60%,50%,40%,30%,20%,10%
LIB_PwmUpdate8(8000,7000,6000,5000,4000,3000,2000,1000)
end
end


如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

实现现象:

当BTN1按下后,可通过示波器看到D0-D7这8个引脚输出的信号如下图:

c46ce5fa67976a5c97c9616ce16d41d6.jpeg

当BTN2按下后,可通过示波器看到D0-D7这8个引脚输出的信号如下图:

a389446132241575138a704f685b4343.jpeg

四、示例代码:动态改变8路PWM信号的周期、以及占空比

以下代码实现了:当开发板上BTN1按键按下时,设置D0-D7的PWM周期为500us(2KHz),占空比分别为:10%,20%,30%,40%,50%,60%,70%,80%;当开发板上的BTN2按键按下时,设置D0-D7的PWM周期为1000us(1KHz),占空比分别为:5%,10%,15%,20%,25%,30%,35%,40% 。

LIB_ButtonConfig("BTN1","D10","L")
--设置按键"BTN1"(占用D11口)以低电平有效的方式检测按键动作
LIB_ButtonConfig("BTN2","D11","L")
--配置D0~D7这8个IO口为PWM功能,周期10000us(100Hz),高电平为有效极性
LIB_PwmConfig8(10000,1)
LIB_PwmUpdate8(0,0,0,0,0,0,0,0)
--开始大循环
while(GC(1) == true)
do
--轮询按键1事件
key_value = LIB_ButtonQuery("BTN1")
--如果按键1短按过
if key_value == 1 then
--更新8路PWM波形的周期为500us(2Khz),
--D0~D7的占空比分别为10% 20% 30% 40% 50% 60% 70% 80%
LIB_PwmSetPrd8(500,50,100,150,200,250,300,350,400)
end

--轮询按键2事件
key_value = LIB_ButtonQuery("BTN2")
--如果按键2短按过
if key_value == 1 then
--更新8路PWM波形的周期为1000us(1Khz),
--D0~D7的占空比分别为5% 10% 15% 20% 25% 30% 35% 40%
LIB_PwmSetPrd8(1000,50,100,150,200,250,300,350,400)
end
end


实现现象:

当BTN1按下后,可通过示波器看到D0-D7这8个引脚输出的信号如下图:

c128c078bcf3b1083e93ba5258b978b3.jpeg

当BTN2按下后,可通过示波器看到D0-D7这8个引脚输出的信号如下图:

6a0ec6a990e1c8b84605e9293c614113.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值