找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1944|回复: 11
打印 上一主题 下一主题
收起左侧

关于10位DAC芯片TLC5615芯片输出频率过低问题

[复制链接]
跳转到指定楼层
楼主
ID:898834 发表于 2021-8-11 15:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在使用TLC5615输出正弦波的时候,发现频率最大只能到几百赫兹,求大佬解释为什么频率上不去,又或者是DAC的输出频率与什么有关
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:342954 发表于 2021-8-11 15:59 | 只看该作者
表分度表搞小点,把时钟搞快点
回复

使用道具 举报

板凳
ID:898834 发表于 2021-8-11 16:11 | 只看该作者
hejianmin 发表于 2021-8-11 15:59
表分度表搞小点,把时钟搞快点

我的采样点取了256个,时钟速率怎么改呀
回复

使用道具 举报

地板
ID:94031 发表于 2021-8-11 16:12 | 只看该作者
提高向TLC5615发送数据的速率就能提高频率。
回复

使用道具 举报

5#
ID:898834 发表于 2021-8-11 16:41 | 只看该作者
xuyaqi 发表于 2021-8-11 16:12
提高向TLC5615发送数据的速率就能提高频率。

这个怎么提高呀,这个发送数据的速率是我每条语句的速率吗
回复

使用道具 举报

6#
ID:625711 发表于 2021-8-11 16:54 | 只看该作者
器件本身可以达到更新率为1.21MHz;
TLC5615产生1000Hz锯齿波、三角波、正弦波,R/C时钟22左右MHz!!

对波形的一个周期抽样点进行D/A转换输出,把抽样点建立成表格,定时器每中断一次查表转换输出一个值。
比如我们将正弦函数从0°~360°范围内按10°一个步进值进行等分,可得0、10、20、

30、…340、350,共36个点,这就确定了表格数组大小为36个整数,
第1点输出电压值:511×sin(0)+512=512 // 511用于波形向上平移。 第2点输出电压值:511×sin(10)+512=601 // 511用于波形向上平移。 第3点输出电压值:511×sin(20)+512=687 // 511用于波形向上平移。

unsigned int code SinTable[] = // 正弦波表格
{
512,601,687,768,840,903,955,992,1015,1023,1015,992,955,903,840,768,687,601,512,

423,337,257,183,121,69,32,9,1,9,32,69,121,183,257,337,423,
};
回复

使用道具 举报

7#
ID:94031 发表于 2021-8-11 17:48 | 只看该作者
zqz1345444061 发表于 2021-8-11 16:41
这个怎么提高呀,这个发送数据的速率是我每条语句的速率吗

发送数据的速率是跟执行每条语句的速率有关,所以跟你cpu工作频率有关。
回复

使用道具 举报

8#
ID:898834 发表于 2021-8-11 22:37 | 只看该作者
xuyaqi 发表于 2021-8-11 17:48
发送数据的速率是跟执行每条语句的速率有关,所以跟你cpu工作频率有关。

我单片机的内部时钟频率是24MHz的,,但最大也只能调到24MHz了
回复

使用道具 举报

9#
ID:445996 发表于 2021-8-12 14:19 | 只看该作者
学习一下STM32 如果是用15单片机的内部晶振其实是不准 要接24M的外部晶振
回复

使用道具 举报

10#
ID:898834 发表于 2021-8-12 18:23 | 只看该作者
许你一世柔情 发表于 2021-8-12 14:19
学习一下STM32 如果是用15单片机的内部晶振其实是不准 要接24M的外部晶振

我现在是stc8a的板子,外部晶振是22.1184Mhz的
回复

使用道具 举报

11#
ID:161164 发表于 2021-8-12 18:35 来自手机 | 只看该作者
说那么多不上个代码看看有没有优化的地方?
回复

使用道具 举报

12#
ID:898834 发表于 2021-8-14 09:55 | 只看该作者
lkc8210 发表于 2021-8-12 18:35
说那么多不上个代码看看有没有优化的地方?

忘记了
#include <stc8.h>          //基准电压是2.515V
#define uint8 unsigned char
#define uint16 unsigned int


sbit CS = P2^4;       //片选
sbit SCLK = P2^2;       //时钟
sbit DIN = P2^0;       //数据入口

uint16 code tosin[256]={
0x1FF,0x20C,0x218,0x225,0x231,0x23E,0x24A,0x256,0x263,0x26F,0x27B,0x287,0x293,0x29F,0x2AB,0x2B7
,0x2C3,0x2CE,0x2DA,0x2E5,0x2F0,0x2FB,0x306,0x311,0x31B,0x326,0x330,0x33A,0x343,0x34D,0x357,0x360
,0x369,0x371,0x37A,0x382,0x38A,0x392,0x39A,0x3A1,0x3A8,0x3AF,0x3B6,0x3BC,0x3C2,0x3C8,0x3CD,0x3D3
,0x3D8,0x3DC,0x3E1,0x3E5,0x3E8,0x3EC,0x3EF,0x3F2,0x3F5,0x3F7,0x3F9,0x3FB,0x3FC,0x3FD,0x3FE,0x3FE
       
,0x3FE,0x3FE,0x3FE,0x3FD,0x3FC,0x3FB,0x3F9,0x3F7,0x3F5,0x3F2,0x3EF,0x3EC,0x3E8,0x3E5,0x3E1,0x3DC
,0x3D8,0x3D3,0x3CD,0x3C8,0x3C2,0x3BC,0x3B6,0x3AF,0x3A8,0x3A1,0x39A,0x392,0x38A,0x382,0x37A,0x371
,0x369,0x360,0x357,0x34D,0x343,0x33A,0x330,0x326,0x31B,0x311,0x306,0x2FB,0x2F0,0x2E5,0x2DA,0x2CE
,0x2C3,0x2B7,0x2AB,0x29F,0x293,0x287,0x27B,0x26F,0x263,0x256,0x24A,0x23E,0x231,0x225,0x218,0x20C
       
,0x1FF,0x1F2,0x1E6,0x1D9,0x1CD,0x1C0,0x1B4,0x1A8,0x19B,0x18F,0x183,0x177,0x16B,0x15F,0x153,0x147
,0x13B,0x130,0x124,0x119,0x10E,0x103,0x0F8,0x0ED,0x0E3,0x0D8,0x0CE,0x0C4,0x0BB,0x0B1,0x0A7,0x09E
,0x095,0x08D,0x084,0x07C,0x074,0x06C,0x064,0x05D,0x056,0x04F,0x048,0x042,0x03C,0x036,0x031,0x02B
,0x026,0x022,0x01D,0x019,0x016,0x012,0x00F,0x00C,0x009,0x007,0x005,0x003,0x002,0x001,0x000,0x000
       
,0x000,0x000,0x000,0x001,0x002,0x003,0x005,0x007,0x009,0x00C,0x00F,0x012,0x016,0x019,0x01D,0x022
,0x026,0x02B,0x031,0x036,0x03C,0x042,0x048,0x04F,0x056,0x05D,0x064,0x06C,0x074,0x07C,0x084,0x08D
,0x095,0x09E,0x0A8,0x0B1,0x0BB,0x0C4,0x0CE,0x0D8,0x0E3,0x0ED,0x0F8,0x103,0x10E,0x119,0x124,0x130
,0x13B,0x147,0x153,0x15F,0x16B,0x177,0x183,0x18F,0x19B,0x1A8,0x1B4,0x1C0,0x1CD,0x1D9,0x1E6,0x1F2 };


void DA_Conver(uint16 DA_Value)   //进行DA转换,输入十位DA值,十六位数据,高四位无效,认为0000                                                                                                                        //低二位为00
{
        uint8 i;
        DA_Value <<= 6;
        CS =0;                  //片选DA芯片,低电平有效
        SCLK = 0;               //片选低电平, 时钟为上升沿时开始传送数据
        for(i=0;i<12;i++)        //从高位到地位依次发送     
        {                                    
                DIN = (bit)(DA_Value & 0x8000);   
                SCLK = 1;                        
                DA_Value <<= 1;  // 一位一位的进行传输               
                SCLK = 0;
        }
        CS = 1;     // 关闭芯片,CS的上升沿和下降沿只有在clk为低的时候才有效
        SCLK = 0;                             
}

void main()
{         
        uint16 j;
       
        P2M0=0x00;
        P2M1=0x00;
       
        while(1)
        {
                for(j=0;j<255;j++)
                {
                        DA_Conver(tosin[j]); //输出正弦波
                }
        }
}
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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