你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 1026|回复: 0

[STM32F412] [NUCLEO-F412ZG试用体验] 八、多路PWM输出实验

[复制链接]

82

主题

636

回帖

121

蝴蝶豆

版主

最后登录
2020-7-12
发表于 2017-3-30 18:00:00 | 显示全部楼层 |阅读模式
PWM多用于利用其信号高低电平的宽度不同产生的占空比[高电平时间/(高电平时间+低电平时间)]来控制:直流电的电压大小、舵机的偏转角、脉冲输出、时序控制、等等。本实验先设计编程产生两路PWM,利用示波器来观察PWM的波形输出。先打开PwmOut.h文档,其中的例子如下:
* #include "mbed.h"
*
* PwmOut led(LED1);//定义PWM对象和类
*
* int main() {
*     while(1) {
*         led = led + 0.01;//led值增加0.1
*         wait(0.2);
*         if(led == 1.0){//为1时,清除位0,重新开始
*             led = 0;
*         }
*     }
* }
查看PinNames.h,PWM1,PWM2输出分别为PA_6,PA_7,在查看用户手册的图,PA_6,PA_7在右边CN7外侧PIN6[D12],PIN7[D11],下边开始编程:
在定义对象的下边加上两行:
PwmOut pwm0(PA_6);
PwmOut pwm1(PA_7);
在变量定义的浮点数中添加:
,dut0=0.100f,dut1=0.002f,ddu0=0.04f,ddu1=0.001f
其中dutx表示PWM周期运算值,ddutx表示周期增加的量;我们将两个设置的都不一样。实际上周期不同、基础设置、增量都不一样。
在ioInit()函数中增加两行:
pwm0.period(0.002f);//PA_6定义PWM周期-两个不一样
pwm1.period(0.001f);//PA_7
在dispBase()函数中增加显示PWM周期变化的固定ASCII码:
c2l(3,0,48);c2l(3,1,55);c2l(3,2,45);c2l(3,3,16);c2l(3,4,26);//PWM0:
c2l(3,10,48);c2l(3,11,55);c2l(3,12,45);c2l(3,13,17);c2l(3,4,26);//PWM1:
再在dispMed()函数中添加PWM周期数值改变后的显示结果:
c2l(3,5,16+int(dut0*10)%10);c2l(3,6,16+int(dut0*100)%10);c2l(3,7,16+int(dut0*1000)%10);c2l(3,8,16+int(dut0*10000)%10);
c2l(3,15,16+int(dut1*10)%10);c2l(3,16,16+int(dut1*100)%10);c2l(3,17,16+int(dut1*1000)%10);c2l(3,18,16+int(dut1*10000)%10);
转换就不讲解了,同上一实验。
在主函数main的循环体while适当位置添加一下2句:
if(dut0<0.840f){dut0 +=ddu0;}else{dut0=0.30f;} pwm0=dut0;
if(dut1<0.90f){dut1 +=ddu1;}else{dut1=0.10f;} pwm1=dut1;
完成后编译下载,看看结果,见照片81,图82。示波器显示2路PWM输出波形见照片83,84。实际上此实验已经接近完成了模拟灯光控制了。由于按键程序没有删除,因此,按键后LED1~3还是会改变的。

81-PWM输出2路LED显示-1.jpg
82-PWM输出2路LED,按键改变LED.jpg
83-PWM1同步输出波形.jpg
84-PWM2同步输出波形.jpg
回复

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版