当前位置:首页 > 技术文章 > 正文内容

基于STM32的函数信号发生器设计(下:软件设计)

arlanguage4周前 (04-08)技术文章12

1、简介:

下篇将介绍整个STM32函数信号发生器系统软件设计部分,将着重介绍设计逻辑思路以及重点代码。(上篇请点击跳转:基于STM32的函数信号发生器设计(上:硬件设计))

本文重点介绍DA转换部分的软件设计,不包含STM32初始化、中断设置、IO口配置部分。

2、信号波形设计:

六种信号波形,采样率512Hz,通过Matlab编程实现,导出数据,转成十六进制数组


信号波形Matlab仿真图

实现上述波形的matlab仿真程序代码:

clear;
clc
T=1;     %周期变量
%波形a
t=-0.5:1/512:2.5;
y=1.*(t>0&t<=T/2);
subplot(231);
plot(t,y);
axis([-0.5,2.5,-1.5,1.5]);
title('a');
grid on;
%波形b
t=-0.5:1/512:3;
y=-1.*(t>0&t<=T/2);
subplot(232);
plot(t,y);
axis([-0.5,2.5,-1.5,1.5]);
title('b');
grid on;
%波形c
t=-0.5:1/512:2.5;
y=-1.*(t>0&t<T/2)+1.*(t>=T/2&t0&t<3*T/8)+1.*(t>5*T/8&t0&t<T/3)+exp(-A*t+A*T/3).*(t>=T/3);
subplot(235);
plot(t,y);
axis([-0.5,2.5,-1.5,1.5]);
title('e');
grid on;
%波形f
t=-0.5:1/512:2.5;
y=-1.*(t>0&t<=T/4)+1/3*(t>T/4&t<T);
subplot(236);
plot(t,y);
axis([-0.5,2.5,-1.5,1.5]);
title('f');
grid on;

3、分析DAC8871芯片手册(来源datasheet),根据时序图,设计程序流程,编写SPI通信核心程序


DAC8871时序图

根据德州仪器公司TI提供的DAC8871时序,操纵各引脚,再通过SPI口写入数据


SPI流程图

SPI以及DA转换核心代码:

uint16_t SPIx_TX(uint16_t* Figure)
{
	u16 i;
	u8 retry=0;				 	
	RST=1;
	RSTSEL=1;
	LDAC=0;
	CS=1;
	RST=0;
	RST=1;
	for(i=0;i<512;i++) cs='0;' spix_readwritebytefigurei while spi_i2s_getflagstatusspi1 spi_i2s_flag_txe='= RESET)' spi: retry ifretry>20)return 0;
		} 
		delay_ns(10); //此句延时很重要,参数设置不当极易导致波形严重失真
		CS=1;
		retry=0;
	}
	LED0=!LED0;		    
}


SPI通信可参考STM32开发例程,主要是调整DA转换时序中的延时时长,还有对DA芯片各引脚高低电平的操作(按照DAC8871数据手册中的时序图,本设计选择的是“/LDAC锁定低电平”的时序图)。

注:数据手册可上ALLDATASHEET查找下载:
http://www.alldatasheet.com/


4、结合上篇的硬件设计,附上整个系统最终成果图:

系统与控制面板

输出波形1


输出波形2

系统设计详细介绍资料下载链接:

基于STM32的函数信号发生器设计(资料)_基于stm32的信号发生器设计-硬件开发文档类资源-CSDN文库

(注:本设计已发表于《电子世界》2014年9月上刊,请尊重笔者的知识产权,谢谢!)

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/3885.html

分享给朋友:

“基于STM32的函数信号发生器设计(下:软件设计)” 的相关文章

Linux服务器Centos7系统Nginx安装与配置

一 安装编译工具及库文件yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel二首先要安装 PCREPCRE 作用是让 Nginx 支持 Rewrite 功能。2.1 下载 PCRE 安装包cd /usr/...

nginx 解决 readv() failed (104: Connection reset by peer)

查看nginx error错误,发现上传接口报以下错:2019/10/10 19:58:25 [error] 299784#0: *5967188 readv() failed (104: Connection reset by peer) while reading upstream, clien...

nginx支持跨域的方法 nginx配置支持跨域

在nginx的配置文件中添加允许跨域的响应头。参考nginx官方文档,添加响应头的方法如下:在conf文件的server作用域中添加如下响应头:server { listen 80; # 其他配置... # 允许跨域 add_header Access-Control-Allow-...

大数据分析工程师入门15-数据收集

数据与智能 本公众号关注大数据与人工智能技术。由一批具备多年实战经验的技术极客参与运营管理,持续输出大数据、数据分析、推荐系统、机器学习、人工智能等方向的原创文章,每周至少输出10篇精品原创。同时,我们会关注和分享大数据与人工智能行业动态。欢迎关注。 作者:凯凯连导语上一篇文章我们简单介绍了下大数...

好程序员:2023年自学Java四阶段学习法,真滴好用麻啦!

同学们,我是好程序员小源,今天给大家整理了自学Java的四个阶段,大家可以按照这四个阶段学习哦~会更加规划系统一点!第一阶段: JavaSE[5周]本阶段从零基础起步,荃面深入的学系JavaSE课程,主要内容包括Java概述与环境搭建、语言基础、条件、分支结构 、循环、方法/数、数组、面向对象基础、...

CentOS7服务器 Nginx离线升级教程

Nginx使用的版本 ≤ 1.21.5的Nginx版本存在漏洞。所以需要对Nginx进行升级。具体教程如下:1、确认安装的Nginx版本在任意目录下输入nginx -v,即可查看当前版本[root@master /]# nginx -v nginx version: nginx/1.12.2 [ro...