找回密码
 注册

QQ登录

只需一步,快速开始

搜索

STM32F103_pwm_dac自定义输出电压

[复制链接]
路漫漫 发表于 2020-5-20 23:44:38 | 显示全部楼层 |阅读模式
本实验利用按键(KEY1/KEY_UP两个按键,或USMART)控制STM32F1的TIM1_CH1的PWM输出,经过二阶RC滤波后转换为DAC输出,通过ADC1的通道1采集PWM DAC的输出电压,在LCD模块上面显示ADC获取到的电压值以及PWM DAC的设定输出电压值等信息。同时可以通过usmart调用PWM_DAC_Set函数,来直接设置PWM DAC的输出电压。
       
注意事项:
        1,4.3寸和7寸屏需要比较大电流,USB供电可能不足,请用外部电源适配器(推荐外接12V 1A电源).
        2,本例程在LCD_Init函数里面(在ILI93xx.c),用到了printf,如果不初始化串口1,将导致液晶无法显示!!   
        3,ADC的参考电压默认通过P5连接在VDDA上面(3.3V),所以默认参考电压是3.3V
        4,通过跳线帽短接多功能接口(P10)的ADC和PDC,即可实现自测试(AD读取PWM DAC值,显示在LCD上)

完整代码: stm32_PWM_DAC.rar (341.68 KB, 售价: 1 E币)
部分程序片段
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"         
  4. //#include "rtc.h"
  5. #include "adc.h"         
  6. //#include "dac.h"
  7. #include "timer.h"


  8. //设置输出电压
  9. //vol:0~330,代表0~3.3V
  10. void PWM_DAC_Set(u16 vol)
  11. {
  12.         float temp=vol;
  13.         temp/=100;
  14.         temp=temp*256/3.3;
  15.         TIM_SetCompare1(TIM1,temp);
  16. }
  17. int main(void)
  18. {         
  19.         delay_init();                     //延时函数初始化         
  20. //        PWM_DAC_Set        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  21.         LED_Init();                             //LED端口初始化

  22.         TIM1_PWM_Init(255,0);        //TIM1 PWM初始化, Fpwm=72M/256=281.25Khz.
  23.   TIM_SetCompare1(TIM1,100);//初始值为0            
  24.         while(1)
  25.         {
  26.                 LED0=0;
  27.                 PWM_DAC_Set(69);
  28.                 delay_ms(10);      

  29.         }
  30. }
复制代码


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-5-11 10:51

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表