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

查看: 1062|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版