请教stm32 dac输出电压后的放大电路

/*======================;指定通道进行DA输出初始化===========;//DAC-&CR|=Timx&&l;);
//使能时钟;TIM_TimeBaseStructure);/;
/*====================================================================团队名称:DIB==作者名称:飞哥==工作单位:广东工业大学物理与光电工程学院==编写日期:日==完成日期:日:22:34分==修改日期:==版本号
:Version1.0==模块说明:本模块程序适用于STM32带DAC模块的芯片,配置通道DA通道:DA1:PA4 DA2:PA5==联系方式:=====================================================================*/#include &DA.H&TypedefDAMode DAMu32 const DAC_TriangleAmplitude[7]={DAC_TriangleAmplitude_63,DAC_TriangleAmplitude_127,DAC_TriangleAmplitude_255,DAC_TriangleAmplitude_511,DAC_TriangleAmplitude_1023,DAC_TriangleAmplitude_2047,DAC_TriangleAmplitude_4095};/*===================================================================================函数名称:void InitIODA(u8 Channels)==传入参数:Channel:通道选择;DAChannel_All/DAChannel_1/DAChannel_2=
=返回参数:无==函数说明:对指定DA通道进行IO口的配置====================================================================================*/void InitIODA(u8 Channels){GPIO_InitTypeDef GPIO_InitStructure={GPIO_Pin_4,
//默认为PA4输出GPIO_Speed_50MHz,GPIO_Mode_AIN,};if(Channels == DAChannel_2){GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5;}else{GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4|GPIO_Pin_5;}RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
//使能DA输出RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//GPIO_Init(GPIOA,&GPIO_InitStructure);
//配置引脚}/*===================================================================================函数名称:void InitDAMode(u8 Channels)==传入参数:Channel:通道选择;DAChannel_All/DAChannel_1/DAChannel_2=
=返回参数:无==函数说明:对指定通道进行DA配置====================================================================================*/void InitDAMode(u8 Channels){if(Channels ==DAChannel_1){DAC-&CR |= 1&& 2;
//TEN1DAC-&CR |= 0X07 && 3;
//采用软件触发模式DAC-&CR |= 1&&0;
//使能DA通道}if(Channels ==DAChannel_2){DAC-&CR |= 1&& 18;
//TEN2 DAC-&CR |= 0X7 && 19; DAC-&CR |= 1&&16;}else{DAC-&CR |= 1&& 2;
//TEN1DAC-&CR |= 0X07 && 3;
//采用软件触发模式DAC-&CR |= 1&&0;
//使能DA通道DAC-&CR |= 1&& 18;
//TEN2 DAC-&CR |= 0X7 && 19; DAC-&CR |= 1&&16;}
}/*===================================================================================函数名称:void InitDA(u8 Channels)==传入参数:Channel:通道选择;DAChannel_All/DAChannel_1/DAChannel_2=
=返回参数:无==函数说明:对
指定通道进行DA输出初始化====================================================================================*/void InitDA(u8 Channels){DAMode.Channels=C
//通道数目记录InitIODA(Channels);
//初始化IO口InitDAMode(Channels);
//初始化DA输出模块}/*===================================================================================函数名称:void DAOoutData(u16 DDAata,u8 Channel)==传入参数:DDAata:DA转换的数值==
Channel:通道选择;DAChannel_All/DAChannel_1/DAChannel_2=
=返回参数:无==函数说明:对指定通道进行DA输出====================================================================================*/void DAOoutData(u16 DDAata,u8 Channel){if(((DAMode.Channels&Channel)!=0)){switch(Channel){case 1:{DAC-&DHR12R1 = DDADAC-&SWTRIGR =1; }case 2:{DAC-&DHR12R2 = DDADAC-&SWTRIGR =2;}default:{DAC-&DHR12R1 = DDADAC-&DHR12R2 = DDADAC-&SWTRIGR=3;}}}}/*===================================================================================函数名称:==传入参数:=
=返回参数:==函数说明:====================================================================================*/void DAOutVolt(float Volt,u8 Channel){u16 DDAata =(u16)((Volt/VoltSourceDA)*4096);DAOoutData(DDAata,Channel);
//输出电压}/*===================================================================================函数名称:void DAWaveMake(u8 WaveOption,u8 Channel,u16 Timx)==传入参数:WaveOption:波形选择;TriangularWave、NoiseWave==
Channel:通道选择;DAChannel_All/DAChannel_1/DAChannel_2==
Timx:UseDATIM2~UseDATIM9/UseEXTI9/UseSoftWare =
=返回参数:无==函数说明:对指定通道进行事件波形的产生====================================================================================*/void DAWaveMake(u8 WaveOption,u8 Channel,u16 Timx){InitIODA(Channel);
//初始化IO口switch(Channel)
//配置IO口{case DAChannel_1:{DAC-&CR &=~((0X03)&&6); DAC-&CR &=~((0XF)&&8);
//清除峰峰值设置项DAC-&CR |=(0XB&&8);
//三角波峰峰值默认为满幅输出DAC-&CR |= 1&& 2;
//TEN1DAC-&CR &=~((0X7)&&3);
//DAC-&CR |=Timx&&3;
//配置触发事件if(WaveOption == TriangularWave){DAC-&CR |= (0X01&&7);
//设定为三角波形发生}else {DAC-&CR |=(0X01&&6);
//设定为噪声波形发生}}case DAChannel_2:{DAC-&CR &=~((0X03)&&22);DAC-&CR &=~((0XF)&&24);
//清除峰峰值设置项DAC-&CR |=(0XB&&24);
//三角波峰峰值默认为满幅输出DAC-&CR |=1&&18;
//TEN2DAC-&CR &=~((0X7)&&19);
//DAC-&CR |=Timx&&19;
//配置触发事件 if(WaveOption == TriangularWave){DAC-&CR |= (0X01&&23);
//设定为三角波形发生}else {DAC-&CR |=(0X01&&22);
//设定为噪声波形发生}}default:{DAC-&CR &=~((0X03)&&6); DAC-&CR &=~((0X03)&&22);DAC-&CR &=~((0XF)&&24);
//清除峰峰值设置项DAC-&CR |=(0XB&&24);
//三角波峰峰值默认为满幅输出 DAC-&CR &=~((0XF)&&8);
//清除峰峰值设置项DAC-&CR |=(0XB&&8);
//三角波峰峰值默认为满幅输出DAC-&CR |= 1&& 2;
//TEN1 DAC-&CR &=~((0X7)&&3);
//DAC-&CR |=Timx&&3;
//配置触发事件DAC-&CR |=1&&18;
//TEN2DAC-&CR &=~((0X7)&&19);
//DAC-&CR |=Timx&&19;
//配置触发事件 if(WaveOption == TriangularWave){DAC-&CR |= (0X01&&7);
//设定为三角波形发生DAC-&CR |= (0X01&&23);
//设定为三角波形发生}else {DAC-&CR |=(0X01&&6);
//设定为噪声波形发生DAC-&CR |=(0X01&&22);
//设定为噪声波形发生}}}}/*===================================================================================函数名称:void DATrogEventTIMInit(u16 Freq,u8 Timx)==传入参数:Freq:定时器频率==
Timx:UseDATIM2~UseDATIM9/UseEXTI9/UseSoftWare=
=返回参数:无==函数说明:对指定定时器设置频率====================================================================================*/void DATrogEventTIMInit(u16 Freq,u8 Timx){u16 Time =(u16)(1000000/Freq);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct={0,0,
//APB1时钟为72MHz0,TIM_CounterMode_Up };TIM_TimeBaseInitStruct.TIM_Period =T
//配置定时时间//-------------使能TIMx时钟--------------------switch(Timx){case UseDATIM2:{TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
//使能时钟输出TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_Update);
//配置TRGO的输出信号TIM_Cmd(TIM2,ENABLE);
//使能时钟}case UseDATIM3:{TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
//使能时钟输出TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Update);
//配置TRGO的输出信号TIM_Cmd(TIM3,ENABLE);
//使能时钟}case UseDATIM4:{TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
//使能时钟输出TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStruct);TIM_SelectOutputTrigger(TIM4,TIM_TRGOSource_Update);
//配置TRGO的输出信号TIM_Cmd(TIM4,ENABLE
//使能时钟}}}/*===================================================================================函数名称:void SetWaceBaseOut(u16 DAData,u8 Channel)==传入参数:DAData:输出值==
Channel:通道号=
=返回参数:无==函数说明:对指定通道设置基质====================================================================================*/void SetWaceBaseOutData(u16 DAData,u8 Channel){switch(Channel){case DAChannel_1:{DAC-&DHR12R1 =DADDAC-&CR
|=1&&0;}case DAChannel_2:{DAC-&DHR12R2 =DADDAC-&CR
|=1&&16;}case DAChannel_All:{DAC-&DHR12R1 =DADDAC-&DHR12R2 =DADDAC-&CR
|=1&&0;DAC-&CR
|=1&&16;}}}/*===================================================================================函数名称:void SetWaceBaseOutVolt(float Volt,u8 Channel)==传入参数:Volt:电压值==
Channel:通道=
=返回参数:无==函数说明:对指定通道配置基质====================================================================================*/void SetWaceBaseOutVolt(float Volt,u8 Channel){SetWaceBaseOutData((u16)(Volt/VoltSourceDA)*4096,Channel); }/*===================================================================================函数名称:==传入参数:=
=返回参数:==函数说明:====================================================================================*/void TaskDA(void){u8 KeyValue =0;u16 temp=0x000;u8// InitIODA();// InitDA();DAC-&DHR12R1 =DAC-&DHR12R2 =DAC-&SWTRIGR=3;}/*===================================================================================函数名称:==传入参数:=
=返回参数:==函数说明:====================================================================================*///void DAC_Configuration(void)//{//
DAC_InitTypeDef
DAC_InitS //
TIM_TimeBaseInitTypeDef
TIM_TimeBaseS//
InitIODA(DAChannel_1);//
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC , ENABLE);//
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T4_TRGO;
//选择定时器2作外部触发源//
DAC_InitStructure.DAC_WaveGeneration =DAC_Wave_T
//产生三角波DAC_WaveGeneration_N////
DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_255;//2047; //三角波的高为2047
最高可以为4095
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_D
//无输出缓冲 提高驱动能力可以打开缓冲//
DAC_Init(DAC_Channel_1, &DAC_InitStructure); ////
DAC_DMACmd(DAC_Channel_1, DISABLE);
//不使用DMA////
DAC_Cmd(DAC_Channel_1, ENABLE);//
TIM_TimeBaseStructInit(&
TIM_TimeBaseStructure);//
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4 , ENABLE);//
TIM_TimeBaseStructure.TIM_Period = 127;
TIM_TimeBaseStructure.TIM_Prescaler = 0x0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_SelectOutputTrigger(TIM4, TIM_TRGOSource_Update); //使用更新事件作为触发输出//
TIM_Cmd(TIM4, ENABLE);////
DATrogEventTIMInit(100,UseDATIM4);//}/*===================================================================================函数名称:void InitDAOutTriangularWave(u16 Freq,u8 Channel,u8 WaveOption,u8 TSEL)==传入参数:=
=返回参数:==函数说明:====================================================================================*/void InitDAOutTriangularWave(u16 Freq,u8 Channel,u8 WaveOption,u8 TSEL){TIM_TypeDef* TIMx =(TIM_TypeDef*)0;u16 TimArr =(u16)(/(256.0*2.0*Freq));
//计算封装值DAC_InitTypeDef
DAC_InitStructure={0,DAC_Wave_Triangle,DAC_TriangleAmplitude_255,DAC_OutputBuffer_Disable,}; TIM_TimeBaseInitTypeDef
TIM_TimeBaseStructure={0,0,0,TIM_CounterMode_Up,};if(WaveOption == NoiseWave){DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_N}InitIODA(Channel);
//初始化IO端口RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC , ENABLE);
//初始化DACTIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
//if(TSEL== UseDATIM2){DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;
//选择定时器2作外部触发源 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);TIMx =TIM2;}else if(TSEL==UseDATIM3){DAC_InitStructure.DAC_Trigger = DAC_Trigger_T3_TRGO;
//选择定时器2作外部触发源 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);TIMx =TIM3;}else if(TSEL ==UseDATIM4){DAC_InitStructure.DAC_Trigger = DAC_Trigger_T4_TRGO;
//选择定时器2作外部触发源 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4 , ENABLE);TIMx =TIM4;}else if(TSEL ==UseEXTI9){DAC_InitStructure.DAC_Trigger =DAC_Trigger_Ext_IT9;}else{DAC_InitStructure.DAC_Trigger = DAC_Trigger_S}if(Channel == DAChannel_1){DAC_Init(DAC_Channel_1, &DAC_InitStructure);DAC_Cmd(DAC_Channel_1, ENABLE);} else if(Channel == DAChannel_2){DAC_Init(DAC_Channel_2, &DAC_InitStructure);DAC_Cmd(DAC_Channel_2, ENABLE);}else{DAC_Init(DAC_Channel_1, &DAC_InitStructure);DAC_Init(DAC_Channel_2, &DAC_InitStructure);DAC_Cmd(DAC_Channel_1, ENABLE);DAC_Cmd(DAC_Channel_2, ENABLE);}if(TIMx!=0){TIM_TimeBaseStructure.TIM_Period=TimATIM_TimeBaseInit(TIMx, &TIM_TimeBaseStructure);
TIM_SelectOutputTrigge
包含各类专业文献、各类资格考试、外语学习资料、文学作品欣赏、中学教育、应用写作文书、专业论文、高等教育、STM32的DAC输出C文件52等内容。 
 输出约等于 0 当占空比&50%的时候,C 上的电压...在以 STM32 为中心的设备中, 使用它自带的 DAC ...单片机控制AD603程序:1... 暂无评价 14页 免费 4...  要注意的是,在双输出模式,DAC数据寄存器的值被清除...模块的温度已超过142° C ?看门狗定时器超时(如果...以下是在STM32F103上测试通过的程序,(72M系统时钟)...  s​t​m2​f0​x​_​d​a​c​S​T...stm32f10x_dac.h * @author MCD Application Team * @version V3.5.0 * ...  牛人的STM32学习笔记(寄存器版本)_计算机软件及应用_...DACRST 21 I2C1RST 13 28 PWRRST 20 UART5RST ...32 bound)里已经设置好, 并且封装在 usart.c 文件...  库文件名:stm32f4xx_gpio.c 文档提示翻译: 如何...当一个管脚被用作 ADC 通道或者 DAC 输出的时候,...  程序停留在 while (USART_GetFlagStatus(EVAL_COM1...2、STM32 的 DAC 输出电压 问:DAC 的输出电压是...在 keil C 编程中,在 add flash programming ...  使用另一个通 道产生如下要求的波形, 并且在 LCD 上绘制出后者 输出的波形...在 stm32f10x_dac.h 文件中查找 “DAC_TriangleAmplitude” 、“DAC_LFSRUnmask...  输出 */ /* 使能 DAC 的 DMA 请求 */ DAC_DMACmd(DAC_Channel_2, ENABLE); } STM32 的数字/模拟转换模块(DAC)是 12 位的数字输入,DAC 模块有 2 个...  它位于文件 startup_stm32f10x_xx.s /.c, 在...缩写 ADC BKP CAN CEC CRC DAC DBGMCU DMA EXTI...通用输入输出 I2C 接口 独立看门狗 电源/功耗控制 ...后使用快捷导航没有帐号?
查看: 1910|回复: 5
新手,关于DAC输出的放大电路,求指教!
在线时间3 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 20, 距离下一级还需 180 积分
一粒金砂(中级), 积分 20, 距离下一级还需 180 积分
做了一个DAC0832跟51单片机的DA转换电路,但是需要把输出转换成0-30V的电压,不知用什么运算放大器,看了LM358,但貌似不能单电源供电,我只有一个5V和30V的电源,希望各位帮帮忙,求教,多谢了!
1. LM358是可以单电源供电的,其供电范围为3-32V;
2. DAC0832是电流输出型的的,要先把电流转化为电压;
在线时间92 小时
芯币1260枚
TA的帖子TA的资源
纯净的硅(初级), 积分 542, 距离下一级还需 258 积分
纯净的硅(初级), 积分 542, 距离下一级还需 258 积分
帮你移动到模电的版块来,也建议你仔细看看0832的芯片手册。应该能解答你的问题。
好,谢谢你!!&
51单片机交流群&&.欢迎大家的加入~
在线时间3 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 20, 距离下一级还需 180 积分
一粒金砂(中级), 积分 20, 距离下一级还需 180 积分
回复 沙发 bintimes 的帖子
好,谢谢你!!
在线时间1674 小时
威望2462分
芯币11442枚
E金币158枚
TA的帖子TA的资源
五彩晶圆(初级), 积分 2462, 距离下一级还需 1038 积分
五彩晶圆(初级), 积分 2462, 距离下一级还需 1038 积分
回复 楼主 hang8911 的帖子
1. LM358是可以单电源供电的,其供电范围为3-32V;
2. DAC0832是电流输出型的的,要先把电流转化为电压;
感谢你!用LM358跟LM324的效果是一样的吧。DAC参考电压5V,还想请问下你放大器单电源32V供电放大6倍,能不能保证输出在30V?&
在线时间3 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 20, 距离下一级还需 180 积分
一粒金砂(中级), 积分 20, 距离下一级还需 180 积分
回复 4楼 zqjqq88 的帖子
感谢你!用LM358跟LM324的效果是一样的吧。DAC参考电压5V,还想请问下你放大器单电源32V供电放大6倍,能不能保证输出在30V?
这些就比较基础了,你自己看手册吧,多自己查查资料,自己思考下:)&
在线时间1674 小时
威望2462分
芯币11442枚
E金币158枚
TA的帖子TA的资源
五彩晶圆(初级), 积分 2462, 距离下一级还需 1038 积分
五彩晶圆(初级), 积分 2462, 距离下一级还需 1038 积分
回复 5楼 hang8911 的帖子
这些就比较基础了,你自己看手册吧,多自己查查资料,自己思考下
荣誉会员勋章
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
Powered by
逛了这许久,何不进去瞧瞧?查看: 499|回复: 3
DAC的输出缓存问题
主题帖子精华
初级会员, 积分 57, 距离下一级还需 143 积分
在线时间5 小时
我用stm32的DMA+DAC生成正弦波,用TIM2触发,未使能输出缓存时波形正常,使能缓存后波形底部出现失真。因为我是打算直接用stm32的输入捕获模块捕获正弦波的,所以如果不使能输出缓存的话DAC的驱动能力不足,是不能被正常捕获的。但是我使能之后波形底部就失真了。请问为什么会出现这种现象?原子哥的手册里写的输出不能到0对这个有影响吗?为什么它的输出不能到0?DAC采样点数增多可以改善这种现象吗?一堆问题,还请大神赐教
(106.17 KB, 下载次数: 0)
11:10 上传
1 因为用了缓存 所以输出不能到0,所以底部失真了。
2采样点数增多解决不了这个问题。
可以把峰值减小来解决这个问题,就是说底部输出到最小值,而不到0,就不会失真了。
主题帖子精华
金牌会员, 积分 1245, 距离下一级还需 1755 积分
在线时间157 小时
1 因为用了缓存 所以输出不能到0,所以底部失真了。
2采样点数增多解决不了这个问题。
可以把峰值减小来解决这个问题,就是说底部输出到最小值,而不到0,就不会失真了。
主题帖子精华
初级会员, 积分 57, 距离下一级还需 143 积分
在线时间5 小时
解决了,我把所有的数据乘上一个数再加上一个数,把峰值抬高同时保证不超过4096(12位DAC精度最大值),感谢二楼~
主题帖子精华
初级会员, 积分 78, 距离下一级还需 122 积分
在线时间7 小时
有个基础知识麻烦问问大家,dac增加输出缓冲功能是能提高驱动能力吗?还是有其他作用呢
Powered by

我要回帖

更多关于 stm32f103 dac电路 的文章

 

随机推荐