OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4939|回复: 9

DA输出问题,关于Dac1_Set_Vol值

[复制链接]

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
发表于 2016-6-25 10:35:58 | 显示全部楼层 |阅读模式
[mw_shl_code=applescript,true]#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "adc.h"
#include "dac.h"
#include "key.h"


//ALIENTEK ì½Ë÷ÕßSTM32F407¿a·¢°å êμÑé21
//DACêμÑé-¿aoˉêy°æ±¾
//¼¼êõÖ§3Ö£owww.openedv.com
//ìÔ±|μêÆì£ohttp://eboard.taobao.com  
//1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾  
//×÷ÕߣoÕyμãÔ-×ó @ALIENTEK


int main(void)
{
        u16 adcx;
        float temp;
        u8 t=0;         
        u16 dacval=0;
        u8 key;       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏè¼¶·Ö×é2
        delay_init(168);      //3õê¼»ˉÑóê±oˉêy
        uart_init(115200);                //3õê¼»ˉ′®¿ú2¨ìØÂêÎa115200
       
        LED_Init();                                        //3õê¼»ˉLED
        LCD_Init();                                        //LCD3õê¼»ˉ
        Adc_Init();                                 //adc3õê¼»ˉ
        KEY_Init();                                 //°′¼ü3õê¼»ˉ
        Dac1_Init();                                 //DACí¨μà13õê¼»ˉ       
        POINT_COLOR=RED;
        LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");       
        LCD_ShowString(30,70,200,16,16,"DAC TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2014/5/6");         
        LCD_ShowString(30,130,200,16,16,"WK_UP:+  KEY1:-");         
        POINT_COLOR=BLUE;//éèÖÃ×ÖìåÎaà¶é«               
        LCD_ShowString(30,150,200,16,16,"DAC VAL:");             
        LCD_ShowString(30,170,200,16,16,"DAC VOL:0.000V");             
        LCD_ShowString(30,190,200,16,16,"ADC VOL:0.000V");
  Dac1_Set_Vol(3300);
// DAC_SetChannel1Data(DAC_Align_12b_R,2500);//3õê¼ÖμÎa0       
//                                while(1)
//                                {
//                                        t++;
//                                        key=KEY_Scan(0);
//                                        if(key==WKUP_PRES)
//                                        {
//                                                if(dacval<4000)dacval+=200;
//                                                DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//éè&#214;&#195;DAC&#214;μ
//                                        }else if(key==2)
//                                        {
//                                                if(dacval>200)dacval-=200;
//                                                else dacval=0;
//                                                DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//éè&#214;&#195;DAC&#214;μ
//                                        }
//                                        if(t==10||key==KEY1_PRES||key==WKUP_PRES)         //WKUP/KEY1°′&#207;&#194;á&#203;,&#187;ò&#213;&#223;&#182;¨ê±ê±&#188;&#228;μ&#189;á&#203;
//                                        {
//                                                adcx=DAC_GetDataOutputValue(DAC_Channel_1);//&#182;áè&#161;&#199;°&#195;&#230;éè&#214;&#195;DACμ&#196;&#214;μ
//                                                LCD_ShowxNum(94,150,adcx,4,16,0);                                  //&#207;&#212;ê&#190;DAC&#188;&#196;′&#230;&#198;÷&#214;μ
//                                                temp=(float)adcx*(3.3/4096);                                                         //μ&#195;μ&#189;DACμ&#231;&#209;1&#214;μ
//                                                adcx=temp;
//                                                LCD_ShowxNum(94,170,temp,1,16,0);                                  //&#207;&#212;ê&#190;μ&#231;&#209;1&#214;μ&#213;&#251;êy2&#191;·&#214;
//                                                temp-=adcx;
//                                                temp*=1000;
//                                                LCD_ShowxNum(110,170,temp,3,16,0X80);                  //&#207;&#212;ê&#190;μ&#231;&#209;1&#214;μμ&#196;D&#161;êy2&#191;·&#214;
//                                                adcx=Get_Adc_Average(ADC_Channel_5,10);                //μ&#195;μ&#189;ADC×a&#187;&#187;&#214;μ
//                                                temp=(float)adcx*(3.3/4096);                                                        //μ&#195;μ&#189;ADCμ&#231;&#209;1&#214;μ
//                                                adcx=temp;
//                                                LCD_ShowxNum(94,190,temp,1,16,0);                                 //&#207;&#212;ê&#190;μ&#231;&#209;1&#214;μ&#213;&#251;êy2&#191;·&#214;
//                                                temp-=adcx;
//                                                temp*=1000;
//                                                LCD_ShowxNum(110,190,temp,3,16,0X80);                 //&#207;&#212;ê&#190;μ&#231;&#209;1&#214;μμ&#196;D&#161;êy2&#191;·&#214;
//                                                LED0=!LED0;
//                                                t=0;
//                                        }
//                delay_ms(10);         
//        }       
}
[/mw_shl_code]
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
 楼主| 发表于 2016-6-25 10:37:15 | 显示全部楼层
我在主函数里面调用 Dac1_Set_Vol(3300);函数,为什么用万用表测的数值0,反而直接用DAC_SetChannel1Data函数,就可以测出来。
回复 支持 反对

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
 楼主| 发表于 2016-6-25 11:03:49 | 显示全部楼层
为什么呢?我觉得没问题啊~
回复 支持 反对

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11545
金钱
11545
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-6-25 11:09:26 | 显示全部楼层

对比两个函数的内容。


回复 支持 反对

使用道具 举报

13

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-22
在线时间
76 小时
 楼主| 发表于 2016-6-25 11:14:41 | 显示全部楼层
都是输出电压啊~只不过Dac1_Set_Vol(vol)这个vol是经过计算转换啊
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

高级会员

Rank: 4

积分
877
金钱
877
注册时间
2015-11-5
在线时间
74 小时
发表于 2016-10-28 17:08:15 | 显示全部楼层
xuande 发表于 2016-6-25 11:09
对比两个函数的内容。

DAC实验:用USMART在串口调试助手中输入的Dac1_Set_Vol()值与LCD上DAC VAL的显示值存在偏差    这是什么原因?
回复 支持 反对

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11545
金钱
11545
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-10-28 21:15:10 | 显示全部楼层
STM32基础篇 发表于 2016-10-28 17:08
DAC实验:用USMART在串口调试助手中输入的Dac1_Set_Vol()值与LCD上DAC VAL的显示值存在偏差    这是什 ...


不知道你说的软硬件条件是什么样,
目测是用DA输出,然后再AD采集?
如果是,有偏差就很正常,关键是差多差少的问题。

回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

高级会员

Rank: 4

积分
877
金钱
877
注册时间
2015-11-5
在线时间
74 小时
发表于 2016-10-29 11:06:06 | 显示全部楼层
xuande 发表于 2016-10-28 21:15
不知道你说的软硬件条件是什么样,
目测是用DA输出,然后再AD采集?
如果是,有偏差就很正常,关键是 ...

是DA输出,再AD。串口调试助手输入值2000,LCD显示2453,属于正常偏差吗?
回复 支持 反对

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11545
金钱
11545
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-10-29 11:09:11 | 显示全部楼层
STM32基础篇 发表于 2016-10-29 11:06
是DA输出,再AD。串口调试助手输入值2000,LCD显示2453,属于正常偏差吗?


偏差太大了。
DA、AD至少有一个不好。

分开来,先输出DA,万用表检查电压是否正常。



回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2017-6-8
在线时间
1 小时
发表于 2019-3-22 17:06:36 | 显示全部楼层
正解:
    Dac1_Set_Vol(3299);
或 DAC_SetChannel1Data(DAC_Align_12b_R,4095);//可以测出电压
    Dac1_Set_Vol(3300);
或 DAC_SetChannel1Data(DAC_Align_12b_R,4096);//溢出,测得电压为零
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 09:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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