C语言补习课番外篇——采样sin(x)

需求:让stm32的DAC输出正弦波形

分析:DAC的原理这里不作过多介绍。在0,2π的定义域内对sin(x)的值域进行采样,采样次数为256次;采样结果需要等比例缩放到0~4095的无符号数范围内,并且输出到一个SinFile.txt文本文档之中存放。sin(x)在0,2π上的值域为-1,1,所以需要先整体在y轴向上平移一个单位长度把范围调整为0,2。0对应DAC模拟值0,1对应模拟值2048,2对应模拟值4095(精度损失暂时忽略)。

编程:

cpp 复制代码
#include <stdio.h>
#include <math.h>

#define  SampleNUM       sNUM            //采样点数量
#define  OutputVoltage   outV            //DAC需要的模拟值
#define  Pai             3.141592

int main()
{
	char* path = "E:\\0_C&C++ Projects\\C\\Sin\\SinData\\SinFile.txt";
	FILE* file = fopen(path,"w");

	int sNum = 256;
	unsigned int outV = 0;

	for (int i = 0; i < sNum; i++)
	{
        outV = (unsigned int)(0.5 * (sin(2 * Pai * i / sNum) + 1) * 4095);  //无符号数类型强转
		char str[12];  
		sprintf_s(str,12,"%u", outV);                                       //把无符号数强转变为字符串
		fputs(str, file);
		fputc(' ',file);                                                    //输出1个数要空一格
		if(!((i+1)%16))                                                     //每16个数换一下行
			fputs("\n", file);
	}

	fclose(file);
	return 0;
}

输出结果:

肉眼看不出来,先用excel验证一下。

数据->获取数据->导入数据;

整行复制到sheet2,选择性粘贴并且转置;

选中第一个数据插入->折线图;

最后excel帮我画的图;

到3/2π那边有点失真。。。采样点多能好点。

相关推荐
啊森要自信17 分钟前
【GUI自动化测试】控件、鼠标键盘操作与多场景自动化
c语言·开发语言·python·adb·ipython
花北城25 分钟前
【C#】ABP框架服务端开发
开发语言·c#·abp
电商API_1800790524730 分钟前
Python 实现闲鱼商品列表批量采集,接口异常重试机制搭建
大数据·开发语言·数据库·爬虫·python
DogDaoDao31 分钟前
深入理解 Qt:从原理到实战的全景指南
开发语言·qt·程序员
放下华子我只抽RuiKe537 分钟前
FastAPI 全栈后端(四):认证与授权
开发语言·前端·javascript·python·深度学习·react.js·fastapi
我是唐青枫1 小时前
Java Spring Data JPA 实战指南:Repository 查询、分页与实体映射
java·开发语言
张忠琳1 小时前
【Go 1.26.4】(Part 2) Go 1.26.4 超深度分析 — Runtime GMP 调度器 (proc.go + runtime2.go)
开发语言·golang
阿坤带你走近大数据2 小时前
java中泛型不能用基础数据类型
java·开发语言
weixin_307779132 小时前
从脚本执行到智能体协作:AI辅助测试能力的范式重构
运维·开发语言·人工智能·算法·测试用例
云絮.2 小时前
增删改查操作
java·开发语言