(转)基于STM32Cube的DAC数模转化,查表法模拟生成1KHZ正弦波

建立STM32Cube选择STM32F429,我使用的STM32F429-discovery开发板,晶振是8MHz,时钟配置为180M,这样定时器内部时钟源为90HHz。
DAC配置:

1.png


2.png


3.png

TIM6 配置

4.png

利用Cube产生工程程序,MDK打开软件
在主循环上添加语句:
 
HAL_TIM_Base_Start(&htim6);
HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_2, (uint32_t *)&Samples_In,500,DAC_ALIGN_12B_R);



编译完成下载到核心板上
DAC效果验证
正弦表生成
利用MATLAB,生成500个点组成的正弦数组。

y=ceil((2048/2-1)[i]sin(0:pi[/i]2/500:2*pi)+1200);
plot(y);

fid = fopen('sina.txt','w');
fprintf(fid,'%d,',y);
fclose(fid);


2.2 结果验证
将正弦数组输入到MDK的Samples_In数组中,利用示波器观察是否是周期为1KHz的正弦 波。
实测输出频率是900Hz的正弦波,分析下原因,是因为时钟分频时,同样需要在语分频的基础上减1,比如准备9分频,那么应该填写8。重新编译,生成波形为1KHz的正弦波,跟预期的一样,如下图所示。

5.jpg


>本文转自:http://www.cnblogs.com/1217927 ... .html 特此鸣谢!

已邀请:

____________________

赞同来自:

更正 12bit DAC  一个正弦用1024个点描述应该如下


>> y=ceil((4096/2-1)*sin(0:pi*2/1024:2*pi)+2048);

plot(y);

 

fid = fopen('sina.txt','w'); 

fprintf(fid,'%d,',y);

fclose(fid);


要回复问题请先登录注册