STM32F4 频率 占空比可调方波发生器 ---学华为造轮子

   日期:2021-03-17     浏览:94    评论:0    
核心提示:接触单片机以来,总想做一些趁手仪器仪表工具耍耍,但由于自己较为懒散,空有想法一直没有付诸实践。前几日翻倒一个stm32f4的最小系统板,造轮子的热情竟然空前高涨起来。搜索资料有编程调试了半天,终于得偿所愿。...

接触单片机以来,总想做一些趁手仪器仪表工具耍耍,但由于自己较为懒散,空有想法一直没有付诸实践。前几日翻到一个stm32f4的最小系统板,造轮子的热情竟然空前高涨起来。搜索资料又编程调试了半天,终于得偿所愿。系统最终参数为频率 10hz - 42Mhz,占空比任意可调(实际占空比受频率所限,如42M时,只能是50%)

一、工作目标和问题确定

手头的单片机为32位单片机,显然定时器应优选32位的;如果该定时器有PWM方式,能够在非中断的情况下自动输出占空比可调的方波,显然是上上之选。单片机为最小系统板,显然使用串口完成人机界面最为简洁。

经查阅资料,tim2和tim5是32位定时器,且均有pwm方式,总线频率为84M,符合需要。故问题圈定如下:

(1)找到tim2修改占空比和频率的函数。

(2)确定一个较为简洁的频率、占空比、时间的修改方式。

 

二、问题解决

(1)修改占空比和频率

(为扩展方波频率输出范围,首先应将分频数设置为0,即不分频)

占空比修改的函数较为简单,主要通过系统函数TIM_SetCompare1确定,该函数原型如下:

void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1)

其中参数TIMx为要操作的定时器,Compare1为比较数值。从PWM工作方式可以看出

在当前计数数值小于Compare1时,系统输出低电平,这和我们常见的高电平和总周期之比不符,故此处应采用周期(即下文的分频值)减去输入高电平的时长。

修改频率时稍显繁琐,由于必须保证比较数值应在0和周期之间,故必须同时修改。其中修改频率的库函数为TIM_SetAutoreload,其原型如下:

TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload)

其中Autoreload为相对于84Mhz的脉冲个数,或者分频数。为减低自己的使用难度,此处首先从输入中得到频率值f,然后令分频值div=84000000/f+0.5得到分频值,最后回馈用户频率为

f=84000000/div,以保证用户反馈数值和示波器测量数值一致。

(2)人机界面

考虑到输入控制的简洁性原则,主要控制使用引导字符+数据的方式。其中时间修改指令设置如下:

Thhmmss

频率修改指令如下:

Fnum1

具体频率根据输入字符长度并通过字符和数字之间的转换获得。

占空比修改(此处实际输入的为高电平脉冲数)指令如下:

Dnum2

高电平脉冲数根据输入字符长度并通过字符和数字之间的转换获得。

 

考虑易用性原则,在程序中加入了定时提醒当前波形输出参数(频率、占空比、周期脉冲数)等功能,测试发现,1M赫兹以上低电平开始明显上升;42Mhz时达到最大,波形接近三角波。其他和设计一致。

 

 

 

 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服