搜索
bottom↓
回复: 50

程序共享:用TLC7528产生正弦余弦波形

[复制链接]

出0入4汤圆

发表于 2005-1-9 16:47:35 | 显示全部楼层 |阅读模式
上次的原理图有点问题,把TLC7528的引脚给画错了,这次改正了,阿莫注意了.



点击此处下载原理图





我把程序也重新遍了一下;在示波器里可以看到两路波形



#include<iom16v.h>

#include<macros.h>

#define BYTE unsigned char

#define        WR         PORTC&=~BIT(PC6)                        //向TLC7528锁存数据

#define        NWR         PORTC|=BIT(PC6)                       

#define        CHBS PORTC|=BIT(PC7);                                //B通道DAC的选择

#define        CHAS PORTC&=~BIT(PC7);                                  //A通道DAC的选择



const BYTE Sin[]={0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3d,0x3f,0x41,0x43,0x45,0x47,0x49,0x4b,0x4d,0x4f,0x51,0x53,0x54,0x56,0x58,0x5a,0x5c,0x5e,0x60,0x62,0x63,0x65,0x67,0x69,0x6b,0x6d,0x6e,0x70,0x72,0x74,0x76,0x77,0x79,0x7b,0x7d,0x7e,0x80,0x82,0x84,0x85,0x87,0x89,0x8a,0x8c,0x8e,0x8f,0x91,0x93,0x94,0x96,0x98,0x99,0x9b,0x9c,0x9e,0x9f,0xa1,0xa3,0xa4,0xa6,0xa7,0xa9,0xaa,0xac,0xad,0xaf,0xb0,0xb1,0xb3,0xb4,0xb6,0xb7,0xb9,0xba,0xbb,0xbd,0xbe,0xbf,0xc1,0xc2,0xc3,0xc4,0xc6,0xc7,0xc8,0xc9,0xcb,0xcc,0xcd,0xce,0xcf,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdd,0xde,0xde,0xdf,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe8,0xe9,0xea,0xeb,0xec,0xec,0xed,0xee,0xef,0xef,0xf0,0xf1,0xf1,0xf2,0xf3,0xf3,0xf4,0xf4,0xf5,0xf5,0xf6,0xf6,0xf7,0xf7,0xf8,0xf8,0xf9,0xf9,0xfa,0xfa,0xfa,0xfb,0xfb,0xfc,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfc,0xfb,0xfb,0xfa,0xfa,0xfa,0xf9,0xf9,0xf8,0xf8,0xf7,0xf7,0xf6,0xf6,0xf5,0xf5,0xf4,0xf4,0xf3,0xf3,0xf2,0xf1,0xf1,0xef,0xef,0xee,0xed,0xec,0xec,0xeb,0xea,0xe9,0xe8,0xe8,0xe7,0xe6,0xe5,0xe4,0xe3,0xe2,0xe1,0xe0,0xdf,0xde,0xde,0xdd,0xdb,0xda,0xd9,0xd8,0xd7,0xd6,0xd5,0xd4,0xd3,0xd2,0xd1,0xcf,0xce,0xcd,0xcc,0xcb,0xc9,0xc8,0xc7,0xc6,0xc4,0xc3,0xc2,0xc1,0xbf,0xbe,0xbd,0xbb,0xba,0xb9,0xb7,0xb6,0xb4,0xb3,0xb1,0xb0,0xaf,0xad,0xac,0xaa,0xa9,0xa7,0xa6,0xa4,0xa3,0xa1,0x9f,0x9e,0x9c,0x9b,0x99,0x98,0x96,0x94,0x93,0x91,0x8f,0x8e,0x8c,0x8a,0x89,0x87,0x85,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x74,0x72,0x70,0x6e,0x6d,0x6b,0x69,0x67,0x65,0x63,0x62,0x60,0x5e,0x5c,0x5a,0x58,0x56,0x54,0x53,0x51,0x4f,0x4d,0x4b,0x49,0x47,0x45,0x43,0x41,0x3f,0x3d,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x14,0x12,0x10,0x0e,0x0c,0x0a,0x08,0x06,0x04,0x02,};

const BYTE Cos[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfc,0xfb,0xfb,0xfa,0xfa,0xfa,0xf9,0xf9,0xf8,0xf8,0xf7,0xf7,0xf6,0xf6,0xf5,0xf5,0xf4,0xf4,0xf3,0xf3,0xf2,0xf1,0xf1,0xef,0xef,0xee,0xed,0xec,0xec,0xeb,0xea,0xe9,0xe8,0xe8,0xe7,0xe6,0xe5,0xe4,0xe3,0xe2,0xe1,0xe0,0xdf,0xde,0xde,0xdd,0xdb,0xda,0xd9,0xd8,0xd7,0xd6,0xd5,0xd4,0xd3,0xd2,0xd1,0xcf,0xce,0xcd,0xcc,0xcb,0xc9,0xc8,0xc7,0xc6,0xc4,0xc3,0xc2,0xc1,0xbf,0xbe,0xbd,0xbb,0xba,0xb9,0xb7,0xb6,0xb4,0xb3,0xb1,0xb0,0xaf,0xad,0xac,0xaa,0xa9,0xa7,0xa6,0xa4,0xa3,0xa1,0x9f,0x9e,0x9c,0x9b,0x99,0x98,0x96,0x94,0x93,0x91,0x8f,0x8e,0x8c,0x8a,0x89,0x87,0x85,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x74,0x72,0x70,0x6e,0x6d,0x6b,0x69,0x67,0x65,0x63,0x62,0x60,0x5e,0x5c,0x5a,0x58,0x56,0x54,0x53,0x51,0x4f,0x4d,0x4b,0x49,0x47,0x45,0x43,0x41,0x3f,0x3d,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x14,0x12,0x10,0x0e,0x0c,0x0a,0x08,0x06,0x04,0x02,0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3d,0x3f,0x41,0x43,0x45,0x47,0x49,0x4b,0x4d,0x4f,0x51,0x53,0x54,0x56,0x58,0x5a,0x5c,0x5e,0x60,0x62,0x63,0x65,0x67,0x69,0x6b,0x6d,0x6e,0x70,0x72,0x74,0x76,0x77,0x79,0x7b,0x7d,0x7e,0x80,0x82,0x84,0x85,0x87,0x89,0x8a,0x8c,0x8e,0x8f,0x91,0x93,0x94,0x96,0x98,0x99,0x9b,0x9c,0x9e,0x9f,0xa1,0xa3,0xa4,0xa6,0xa7,0xa9,0xaa,0xac,0xad,0xaf,0xb0,0xb1,0xb3,0xb4,0xb6,0xb7,0xb9,0xba,0xbb,0xbd,0xbe,0xbf,0xc1,0xc2,0xc3,0xc4,0xc6,0xc7,0xc8,0xc9,0xcb,0xcc,0xcd,0xce,0xcf,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdd,0xde,0xde,0xdf,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe8,0xe9,0xea,0xeb,0xec,0xec,0xed,0xee,0xef,0xef,0xf0,0xf1,0xf1,0xf2,0xf3,0xf3,0xf4,0xf4,0xf5,0xf5,0xf6,0xf6,0xf7,0xf7,0xf8,0xf8,0xf9,0xf9,0xfa,0xfa,0xfa,0xfb,0xfb,0xfc,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,};

/******************************************************************************

Function Name:        void delay()

Input:                None

Output:                None

Description:        延时函数       

******************************************************************************/

void delay()

{

         BYTE i;

         for(i=0;i<10;i++)

         {

          ;

         }

}

/******************************************************************************

Function Name:        void shortdelay()

Input:                None

Output:                None

Description:        较短的延时函数       

******************************************************************************/

void shortdelay()

{

         BYTE i;

         for(i=0;i<2;i++)

         {

          ;

         }

}

/******************************************************************************

Function Name:        void delay()

Input:                None

Output:                None

Description:        主函数       

******************************************************************************/

void main(void)

{

        unsigned int i;

        i=0x00;

        DDRA=0xff;

        DDRC=0xff;

        PORTA=0x00;

        NWR;                        //禁止向TLC7528写数据

        CHAS;                        //选择TLC7528的通道A

        while(1)

        {

                PORTA=Sin;        //正弦数据表

                WR;                //向TLC7528写数据使能

                shortdelay();       

                NWR;                //禁止向TLC7528写数据

                CHBS;                //选择TLC7528的通道B

                shortdelay();

                PORTA=Cos;        //余弦数据表

                WR;                //向TLC7528写数据使能

                shortdelay();

                NWR;                //禁止向TLC7528写数据

                CHAS;                //选择TLC7528的通道A

                //shortdelay()

                i++;

                if(i==400)

                {

                        i=0x00;

                }

                delay();

        }

}













TLC7528是一片比较理想的8bit双通到 DAC,价格在15-20元一片左右,PDF里的一些参数如下:



















这是DAC0832里的一段,"Voltage Mode Switching",



















TLC0832也有类似的描述,"voltage-mode operation",但是写的不是很全面,



















KA336和LM336一样的,2.5V的参考电压源.

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2005-1-9 16:55:00 | 显示全部楼层
TLC7528的两通道D/A不能同步更新,这样的正余弦波会有相位差的,不知是不是在软件里进行补偿了?

出0入0汤圆

发表于 2005-1-9 17:06:15 | 显示全部楼层
如果输出频率不是很高。这种相位差可以不计。说这种是无法补偿的。DAC的结构决定了。

出0入0汤圆

发表于 2005-1-9 18:21:29 | 显示全部楼层
太复杂了,为什么不用MAX038

出0入4汤圆

 楼主| 发表于 2005-1-9 19:19:29 | 显示全部楼层
因为转换速度很快(约几us),所以emicro所说的相位差其实是可以忽略不记的

出0入0汤圆

发表于 2005-1-16 08:16:21 | 显示全部楼层
楼主电路图里面7528的OUT和REF端是不是接反了,OUT端是接运算放大器的正极输入还是负极输入啊,还有请教,看了些资料,还是没有理解RFB端的作用,是不是反馈?

昨天买来了LM336,是普通三极管的形状,如何对应原理图中的1,2,3管脚的?
头像被屏蔽

出0入0汤圆

发表于 2005-1-16 10:12:37 | 显示全部楼层
谢谢小松。



能不能将波器的波形拍摄出来?



最好也将实验板也拍摄出来。谢谢! 这样我就能将它整理到网站中了。

出0入4汤圆

 楼主| 发表于 2005-1-17 09:05:52 | 显示全部楼层
To  hanmaokun:

这种接法在书上很少看到的,在DAC0832的文档里看到的,我已经把截图放在后面了,你仔细看看.

偶用的是电压跟随,而PDF里用的是同向放大

出0入4汤圆

 楼主| 发表于 2005-1-17 09:06:40 | 显示全部楼层
To armok 阿莫

:我还没买相机,等买了,都拍出来

出0入0汤圆

发表于 2005-3-10 21:55:49 | 显示全部楼层
引用:

楼主电路图里面7528的OUT和REF端是不是接反了,OUT端是接运算放大器的正极输入还是负极输入啊,还有请教,看了些资料,还是没有理解RFB端的作用,是不是反馈?

昨天买来了LM336,是普通三极管的形状,如何对应原理图中的1,2,3管脚的?  

   这是TLC7528的一种特殊用法,是电压输出方式。

出0入4汤圆

 楼主| 发表于 2005-3-11 09:46:07 | 显示全部楼层
LM336中datasheet里的封装是错误的,两边的两个脚换一下,你搜索ka336,里面的封装是对的,你试试看,接错了不会烧的,只要电压对了就可以了,接错了电压不对的.

RFB端的电压我感觉不接也没关系的,但是看到datasheet里有接,而且接的电压高(15V)效果会好一点(凭感觉)

出0入0汤圆

发表于 2005-3-22 14:38:30 | 显示全部楼层
LM358的电压非得用12V的吗?我的板子上只有5V,3.3V的power

出0入4汤圆

 楼主| 发表于 2005-3-22 17:50:35 | 显示全部楼层
最好是接12V,因为你如果接5V的话,运放最中不能输出4.5V以上的电压,你不信做实验看看.

而且云放的电压台低,线性不好

出0入0汤圆

发表于 2005-3-23 18:23:18 | 显示全部楼层
rail to rail的运放可以的。不信你实验看看。

出0入0汤圆

发表于 2005-6-28 17:20:32 | 显示全部楼层
请问,频率你怎么控制

出0入0汤圆

发表于 2005-10-18 22:41:54 | 显示全部楼层
这样频率能不能调啊?如可以调的话,那就好了

出0入0汤圆

发表于 2005-10-19 13:53:48 | 显示全部楼层
用方波加有源滤波和这个比起来有什么优缺点?

出0入0汤圆

发表于 2005-10-19 21:47:04 | 显示全部楼层
不知道频率能做到多少

出0入0汤圆

发表于 2005-10-20 16:30:42 | 显示全部楼层
楼主能不能 简单 介绍下 这个 主要用在什么 方面~!

出0入0汤圆

发表于 2006-8-30 12:34:55 | 显示全部楼层
请教 小松工程 程序中不用 shortdelay()延时,可以吗

出0入0汤圆

发表于 2006-8-30 20:42:07 | 显示全部楼层
一直在算计怎样产生正弦波.在我的理解中,正弦波的一个重要用途,是可以用来制作变频器.通过正弦波与一个三角波的比较,产生一个PWM波,再通过驱动IGBT或BJT,改变电机的运转速度.但是,必须要产生三个,相位依次相差120度的正弦波才行.

出0入0汤圆

发表于 2006-11-7 15:05:20 | 显示全部楼层
楼主:正弦波的频率不可调啊,如果改成可调的就更好了。最好幅值也可调

出0入0汤圆

发表于 2007-5-31 20:51:08 | 显示全部楼层
楼主:

AVR单片机速度快,不知楼主做的最高频率能达到多少?

要想产生好的正弦波,经D/A转换后要加个滤波器,不知楼主没加滤波器效果如何?

请楼主看到回复

出0入0汤圆

发表于 2007-6-4 11:42:04 | 显示全部楼层
TO:ilan2003 小松工程

   多谢资料共享,便于交流,能不能留下联系方式

   我的邮箱yanjie0516@163.com

出0入0汤圆

发表于 2007-6-14 10:06:17 | 显示全部楼层
多谢分亨,如果要产生固定周期,用楼主的方法不是很好,delay时间要算准才行

出0入0汤圆

发表于 2007-8-8 17:31:04 | 显示全部楼层
好资料,多谢了

出0入4汤圆

 楼主| 发表于 2007-8-8 21:57:42 | 显示全部楼层
老贴了,7528用的最多的地方是两相的步进电机细分驱动器,清一色的7528

图中的电路曾在常州一驱动器中发现同样的电路。



只要软硬件烧加修改能实现幅值,频率可调

出0入0汤圆

发表于 2007-8-9 08:56:57 | 显示全部楼层
问楼主一下,



那个正余弦的表是怎么的到的呀?

出0入4汤圆

 楼主| 发表于 2007-8-9 09:04:14 | 显示全部楼层
计算的呀  255*sin(x)

当x=90  =255

x=0     =0

出0入0汤圆

发表于 2007-8-9 16:27:45 | 显示全部楼层
楼主好,我在用2313单片机和7528产生相位差是120度的正弦波,但是要求的正弦波的频率是和输入脉冲有关的阿?请问频率怎么调?你有其他的联系方式吗?我的zhangqianjin613@yaohoo.com.cn;QQ: 673817815

出0入0汤圆

发表于 2007-8-9 17:04:28 | 显示全部楼层
是不是miniDDS更好用一点?

出0入4汤圆

 楼主| 发表于 2007-8-9 20:15:03 | 显示全部楼层
while(1)

{

PORTA=Sin; //正弦数据表

WR; //向TLC7528写数据使能

shortdelay();

NWR; //禁止向TLC7528写数据

CHBS; //选择TLC7528的通道B

shortdelay();

PORTA=Cos; //余弦数据表

WR; //向TLC7528写数据使能

shortdelay();

NWR; //禁止向TLC7528写数据

CHAS; //选择TLC7528的通道A

//shortdelay()

i++;

if(i==400)

{

i=0x00;

}

delay();

}

}





delay(); 时间越长频率越低  明白没?

出0入0汤圆

发表于 2007-8-10 11:51:13 | 显示全部楼层
确实是老贴了,可是我总觉得那个电路不怎么对呀,7528不明明是个电流型的DA吗,输出接的那个运放,应该是个I/V转换嘛.基准从KA336过来怎么就接到OUTA上了,而输出又REFA接出来直接接到运放的同项端,怪了真的把人看傻了,莫非是把里面的到T型网络反过来用?请楼主赐教!

出0入0汤圆

发表于 2010-2-16 17:57:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-3 16:42:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-3 21:28:58 | 显示全部楼层
回复【楼主位】ilan2003 小松工程
-----------------------------------------------------------------------
小松老师,为什么我在用TLC7528的时候,给D/A送常量有些值能正确显示有些就没显示啊?我肯定时序是对的。谢谢

出0入0汤圆

发表于 2010-9-11 19:25:25 | 显示全部楼层
松老师,为什么

出0入4汤圆

 楼主| 发表于 2010-9-11 20:00:47 | 显示全部楼层
先确定电路是不是正确的  你可以按照

每个量+1的给DAC发送数据,加到255后自动变为0  这样曲线应该是锯齿波

出0入0汤圆

发表于 2010-9-13 00:40:52 | 显示全部楼层
能用在rlc上面

出0入0汤圆

发表于 2011-4-6 14:42:29 | 显示全部楼层
回复【楼主位】ilan2003 小松工程
-----------------------------------------------------------------------

楼主,我想请问假如要产生40K的正弦波,可以实现么?

出0入0汤圆

发表于 2011-4-6 15:50:34 | 显示全部楼层
楼主厉害啊 回帖时间跨度几年了 敬业哦

出0入0汤圆

发表于 2011-9-5 10:13:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-5 11:11:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-10-18 14:39:28 | 显示全部楼层
看老帖很受用啊。

出0入0汤圆

发表于 2017-2-15 22:52:00 | 显示全部楼层
挖坟,学习

出0入4汤圆

 楼主| 发表于 2017-2-15 23:35:22 | 显示全部楼层

坟主人现身了,这么快都12年了

出0入0汤圆

发表于 2017-2-17 09:05:23 | 显示全部楼层
ilan2003 发表于 2017-2-15 23:35
坟主人现身了,这么快都12年了

楼主有没有多路10MSPS左右的DAC选型推荐?谢谢

出0入4汤圆

 楼主| 发表于 2017-2-17 22:07:36 | 显示全部楼层
xxc007 发表于 2017-2-17 09:05
楼主有没有多路10MSPS左右的DAC选型推荐?谢谢

DAC 就搞过1 2 个,没搞过这么高速度的

出0入0汤圆

发表于 2017-2-17 23:04:45 | 显示全部楼层
ilan2003 发表于 2017-2-17 22:07
DAC 就搞过1 2 个,没搞过这么高速度的

OK 多谢

出0入0汤圆

发表于 2017-2-22 03:24:35 | 显示全部楼层
请问楼主你的“CPLD+TLC7528+分立元件”步进电机驱动器,最后效果怎么样?我准备做几块,自己用。看了你好多资料。谢谢你!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 21:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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