[STM32笔记]PWM实现DAC

参考的文章是这篇【STM32】PWM DAC基本原理(实验:PWM实现DAC)-CSDN博客

首先要确定一下使用的PWM的参数,计算公式是:

PWM 频率:   Freq = CK_PSC / (PSC + 1) / (ARR + 1)
PWM 占空比:   Duty = CCR / (ARR + 1)
PWM 分辨率:   Reso = ARR + 1

ARR是计数,从0计到ARR

PSC是预分频系数,决定一次计数的时间

这里设ARR为255,PSC设0,达到最快的速度。

代码像这样

while (1)
	{
		uint8_t key1 = Key_Interrupt_Get();
		OLED_ShowNum(1, 2, num, 5);
		
		for(uint8_t i=0;i<100;i++)
		{
			PWM_SetCompare1(128*(1+sin(i*0.0628)));
			Delay_us(250);//小于100变化不明显,考虑是其他耗时
			//OLED_ShowNum(2, 2, i, 3);
		}
		
		/*OLED_ShowChar(3, 2, '1');
		TIM_PrescalerConfig(TIM2, 8, TIM_PSCReloadMode_Update);
		Delay_ms(1000);*/
		
		
	}

遇到的问题是:

1、速度不够快,Delay_us(250);//小于100变化不明显,考虑是其他耗时

2、波形不好看,考虑滤波器的问题

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值