IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32使用DAC生成正弦波(可调幅值) -> 正文阅读

[嵌入式]STM32使用DAC生成正弦波(可调幅值)

????????STM32在嵌入式过程中得到了广泛的应用,在很多的驱动设备的场景中,需要正弦波的输出,因此使用STM32生成正弦波具有比较重要的实际意义。

? ? ? ? STM32的DAC可以自动生成三角波,但是无法自动生成正弦波,因此,本文采用查表法的方式生成正弦波。查表法即将一个正弦波周期进行采样,然后将采样得到的点存在一个数组里,然后将数组里值以此使用DAC进行输出即可。STM32的DAC是12bit的,因此DAC的赋值范围为[0, 4095]。

????????因此正弦波的采样值的数组如下:

const u16 Sine12bit2[500] = {  
	2048,2073,2099,2125,2150,2176,2202,2227,2253,2279,2304,2330,2355,2380,
	2406,2431,2456,2482,2507,2532,2557,2582,2606,2631,2656,2680,2705,2729,2753,
	2777,2801,2825,2849,2872,2896,2919,2942,2966,2988,3011,3034,3056,3079,3101,
	3123,3145,3166,3188,3209,3230,3251,3272,3292,3313,3333,3353,3372,3392,3411,
	3430,3449,3468,3486,3504,3522,3540,3558,3575,3592,3609,3625,3641,3657,3673,
	3689,3704,3719,3734,3748,3762,3776,3790,3803,3816,3829,3842,3854,3866,3878,
	3889,3900,3911,3921,3932,3942,3951,3961,3970,3978,3987,3995,4003,4010,4017,
	4024,4031,4037,4043,4048,4054,4059,4063,4068,4072,4075,4079,4082,4085,4087,
	4089,4091,4092,4094,4094,4095,4095,4095,4094,4094,4092,4091,4089,4087,4085,
	4082,4079,4075,4072,4068,4063,4059,4054,4048,4043,4037,4031,4024,4017,4010,
	4003,3995,3987,3978,3970,3961,3951,3942,3932,3921,3911,3900,3889,3878,3866,
	3854,3842,3829,3816,3803,3790,3776,3762,3748,3734,3719,3704,3689,3673,3657,
	3641,3625,3609,3592,3575,3558,3540,3522,3504,3486,3468,3449,3430,3411,3392,
	3372,3353,3333,3313,3292,3272,3251,3230,3209,3188,3166,3145,3123,3101,3079,
	3056,3034,3011,2988,2966,2943,2919,2896,2872,2849,2825,2801,2777,2753,2729,
	2705,2680,2656,2631,2606,2582,2557,2532,2507,2482,2456,2431,2406,2381,2355,
	2330,2304,2279,2253,2227,2202,2176,2150,2125,2099,2073,2048,2022,1996,1970,
	1945,1919,1893,1868,1842,1816,1791,1765,1740,1715,1689,1664,1639,1613,1588,
	1563,1538,1513,1489,1464,1439,1415,1390,1366,1342,1318,1294,1270,1246,1223,
	1199,1176,1153,1129,1107,1084,1061,1039,1016,994,972,950,929,907,886,865,
	844,823,803,782,762,742,723,703,684,665,646,627,609,591,573,555,537,520,
	503,486,470,454,438,422,406,391,376,361,347,333,319,305,292,279,266,253,
	241,229,217,206,195,184,174,163,153,144,134,125,117,108,100,92,85,78,71,
	64,58,52,47,41,36,32,27,23,20,16,13,10,8,6,4,3,1,1,0,0,0,1,1,3,4,6,8,10,
	13,16,20,23,27,32,36,41,47,52,58,64,71,78,85,92,100,108,117,125,134,144,
	153,163,174,184,195,206,217,229,241,253,266,279,292,305,319,333,347,361,
	376,391,406,422,438,454,470,486,503,520,537,555,573,591,609,627,646,665,
	684,703,723,742,762,782,803,823,844,865,886,907,929,950,972,994,1016,1039,
	1061,1084,1107,1129,1153,1176,1199,1223,1246,1270,1294,1318,1342,1366,1390,
	1415,1439,1464,1489,1513,1538,1563,1588,1613,1639,1664,1689,1715,1740,1765,
	1791,1816,1842,1868,1893,1919,1945,1970,1996,2022}; 

????????上表是将幅值为3.3V的正弦波通过12bit的ADC进行500次采样后得到的数值,我们只需将上述数组中的数值依次赋值给DAC,我们即可通过DAC得到正弦波的输出。

? ? ? ? 为了保证正弦波频率的准确性和稳定性,采用在定时器中断内控制DAC的输出,代码如下:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim==(&TIM3_Handler))
    {
      LED1=!LED1;        //LED1·′×a
			
			if(DAC_index >= 499)
				DAC_index = 0;
			else
				DAC_index++;
			HAL_DAC_SetValue(&DAC1_Handler,DAC_CHANNEL_1,DAC_ALIGN_12B_R,Sine12bit2[DAC_index]*DAC_amp);
    }
}

????????此时即可生成固定幅值的正弦波,若要对正弦波的赋值进行改变,可以通过对数组中的值乘以一个系数DAC_amp,而该系数通过按键进行调节。按键调节DAC_amp的程序如下:

key=KEY_Scan(0);	
if(key==WKUP_PRES)
{		
	DAC_amp += 0.1f;
	if(DAC_amp > 1)
	DAC_amp = 1;
}else if(key==2)	
{
	DAC_amp -= 0.1f;
	if(DAC_amp < 0)
	DAC_amp = 0;
}	 

????????到此,就可以使用DAC输出正弦波,并可以通过按键对波形的赋值进行调节。

? ? ? ? 需要原始工程文件的可以点这里~

? ? ? ? 有需要调试、定制的代码可以私聊我哦~

? ? ? ? 专注于嵌入式研发,致力于物联网设计。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:19:00  更:2021-09-06 11:21:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:33:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码