完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
接触单片机以来,总想做一些趁手仪器仪表工具耍耍,但由于自己较为懒散,空有想法一直没有付诸实践。前几日翻到一个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时达到最大,波形接近三角波。其他和设计一致。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1097 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1111 浏览 1 评论
549 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
415 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
996 浏览 2 评论
1593浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
262浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
275浏览 3评论
245浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
238浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 15:43 , Processed in 0.749150 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号