你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32的DAC产生正弦波、三角波思路分享

[复制链接]
kernaly 发布时间:2015-2-21 16:17
本帖最后由 kernaly 于 2015-2-21 16:21 编辑

很早就开始学习使用STM32了,在工作中,产品项目更是在STM32平台进行的,但是却从没有写过几篇像样的技术贴。趁着年假闲暇之际,整理下相关的资料分享下,希望对初学者有帮助。以后也会逐步探讨、分享STM32相关的技术。感谢当年在我学习之路上帮助过我的前辈,如今我也继续下去,希望认识更多的朋友们。
对于频率幅度可调节的正弦波:
  通过调节DAC触发时钟的频率来改变采集频率。通过改变DAC的输出幅度,外加运放,控制运放增益来更大范围的改变幅度。最好使用DMA,可节省MCU更多的资源。当要改变频率及其振幅的时候,只需要重新填充对应的缓冲区就好了。比如以下代码。采集1024个点,通过Amplitude_temp 来改变DAC输出振幅。调节频率的话只需改变触发时钟的频率即可。

for (Idx = 0; Idx < 1024; Idx++)  
  {
    DualSine12bit[Idx] = (Amplitude_temp*sin(2*3.14*Idx/1024)+Amplitude_temp);  
  }

关于采集点数。采集点数越多,波形的完整性越好,但在周期一定的情况下,越多的点,就需要越高的采集频率,而STM32的DAC频率却是有限的,103型最大的采集频率一般在250K左右,所以要针对自己实际情况来对采集点数和采集频率进行取舍。
关于三角波,STM32自带了三角波发生器,用起来还是挺方便的。而我所讲的还是填充画点的方式,把三角波分成上下两个部分,分别进行填充画点:
for (Idex = 0; Idex < 500; Idex++)
  {
   DAC_SetChannel1Data(DAC2, DAC_Align_12b_R, Idex*Amplitude_temp/500);
   delay_ms(SJBUPTIM/500);
   }   

for (Idex = 500; Idex < 1000; Idex++)
{
  DAC_SetChannel1Data(DAC2, DAC_Align_12b_R, (1000-Idex)*Amplitude_temp/500);
   delay_ms(SJBDOWNTIM/500);
}

以上代码采集1000个点,通过延时函数进行频率调节(当然,需要更精确的调节要使用定时器),通过改变Amplitude_temp来改变输出振幅
对于其他规则波形,只需按照以上思路,填充画点即可。

   


收藏 1 评论13 发布时间:2015-2-21 16:17

举报

13个回答
kernaly 回答时间:2015-2-21 16:21:29
自己顶一下,话说伸手打字还是挺冷的
kernaly 回答时间:2015-2-21 17:34:11
貌似没人。我的心啊
w小菜才 回答时间:2015-2-21 20:10:19
飘过。。。。。
wambob 回答时间:2015-2-22 07:16:44
学习了,。。。。。。。
feel-376797 回答时间:2015-2-22 08:07:55
谢谢分享
拼命三郎 回答时间:2015-2-22 15:20:26
QQ截图20150222151959.jpg
拼命三郎 回答时间:2015-2-22 15:22:38
stm32.jpg
MouseCat 回答时间:2015-2-22 15:47:54
谢谢分享
大器所成 回答时间:2015-2-23 11:28:07
Tingyixia感谢分享
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版