当前位置: 首页 > news >正文

细说MCU的DAC改变输出信号频率的方法

目录

一、参考硬件

二、改变输出信号的频率

1.建立新工程

2.配置TIM3

三、代码修改

四、查看结果 


一、参考硬件

        本项目依赖的软件和硬件工程参考本文作者写的文章:细说MCU的DAC1和DAC2各自输出一通道模拟信号的方法-CSDN博客
 https://wenchm.blog.csdn.net/article/details/140791751icon-default.png?t=N7T8http://xn--https-rfa//wenchm.blog.csdn.net/article/details/140791751       

        最直接的改变输出信号频率方法就是修改定时器的Update Event的频率。把输出信号的频率由20kHz改为50Hz。

二、改变输出信号的频率

1.建立新工程

        除了对TIM3进行重新配置和对DAC2配置为Disable外,本文示例的工程其它配置与参考文件一样。不再重复进行配置说明。

2.配置TIM3

        参考文献中配置定时器TIM3的参数时,计数器的周期设为169,由于系统时钟频率为170 MHz,所以定时器的Update Event频率为170MHz/((0+1)*(169+1))=1 MHz。由于所用波形数据的点数为50,所以用1 MHz的频率提 取50个数据需要的时间为50us,对应的频率就是20 kHz。如果要将频率降低至50 Hz,也就是降低400倍,此时可以将定时器的Update Event频率降低到2.5 kHz(1 MHz/400)。由于倍数比较高,单纯修改计数器的周期值无法实现,所以需要先将定时器时钟的预分频因子修改为169,也就是设置定时器的时钟频率为1 MHz,然后将计数器的周期修改为399,则定时器Update Event的频率为170MHz/((169+1)*(399+1)) = 2.5 kHz。

三、代码修改

/* USER CODE BEGIN 2 */HAL_TIM_Base_Start(&htim3);HAL_DAC_Start_DMA(&hdac1,DAC_CHANNEL_1,(uint32_t*)SineWaveDataPh90,DAC_BUFFER_SIZE,DAC_ALIGN_12B_R);
/* USER CODE END 2 */
/* USER CODE BEGIN PV */
uint16_t SineWaveDataPh90[DAC_BUFFER_SIZE] = {3071,3063,3039,2999,2944,2876,2794,2700,2596,2483,2364,2239,2112,1983,1856,1731,1612,1499,1395,1301,1219,1151,1096,1056,1032,1024,1032,1056,1096,1151,1219,1301,1395,1499,1612,1731,1856,1983,2112,2239,2364,2483,2596,2700,2794,2876,2944,2999,3039,3063
};
/* USER CODE END PV */
/* USER CODE BEGIN Private defines */
#define DAC_BUFFER_SIZE (uint16_t) 50
/* USER CODE END Private defines */

四、查看结果 

        编译工程并下载到硬件中,将程序运行起来。分别用示波器查看 PA4和 PA6上波形,就可以看到输出信号频率已变为50Hz。不过由于上面的波形在一个周期内只有50个点,所以波形不是很连续。

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AUTOSAR BSW OBD Config 配置
  • 第09课 Scratch入门篇:小鸡啄米-自制积木实现
  • 随堂测小程序的设计
  • Git安装流程以及如何将本地代码推送到新建的git仓库(IDEA操作简单易学)
  • 【LLM开源模型】LLMs-Llama3.1-240723通关攻略笔记
  • 具身智能又进一步!卡内基梅隆Meta苏黎世联邦实现虚拟人超灵活抓取
  • 微软:警惕利用VMware ESXi进行身份验证绕过攻击
  • 搭建自己的金融数据源和量化分析平台(二):读取上交所股票列表
  • 最后一个单词的长度-string
  • A Survey on Multimodal Large Language Models(from gpt-4o)
  • Redis的分布式锁
  • 漏洞复现-R24-1瑞斯康达-多业务智能网关-RCE
  • LeetCode 101.对称二叉树 C写法
  • 一款以流程管理为核心的信息化快速开发的办公OA平台,一体化工作平台,开箱即用,私活利器(附源码)
  • RK3588+MIPI+GMSL+AI摄像机:自动车载4/8通道GMSL采集/边缘计算盒解决方案
  • create-react-app项目添加less配置
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Django 博客开发教程 8 - 博客文章详情页
  • golang中接口赋值与方法集
  • gulp 教程
  • Java精华积累:初学者都应该搞懂的问题
  • leetcode386. Lexicographical Numbers
  • Linux后台研发超实用命令总结
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Phpstorm怎样批量删除空行?
  • Redis学习笔记 - pipline(流水线、管道)
  • springboot_database项目介绍
  • VUE es6技巧写法(持续更新中~~~)
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 包装类对象
  • 从零搭建Koa2 Server
  • 码农张的Bug人生 - 见面之礼
  • 普通函数和构造函数的区别
  • 深入浅出Node.js
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 提醒我喝水chrome插件开发指南
  • 责任链模式的两种实现
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #pragma预处理命令
  • #单片机(TB6600驱动42步进电机)
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Java入门)抽象类,接口,内部类
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (七)c52学习之旅-中断
  • (十三)MipMap
  • (四)js前端开发中设计模式之工厂方法模式
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .CSS-hover 的解释
  • .h头文件 .lib动态链接库文件 .dll 动态链接库