首页 » 互联网 » 51系列、arduino、stm32系列单片机驱动TLC5615输出指定电压_电压_引脚

51系列、arduino、stm32系列单片机驱动TLC5615输出指定电压_电压_引脚

神尊大人 2024-11-13 06:55:58 0

扫一扫用手机浏览

文章目录 [+]

TLC5615简介

TLC5615 为美国德州仪器公司推出的产品,是具有串行接口的数模转换器,通信采取三线SPI协议,其输出为电压型,最大输出电压是基准电压值的两倍。
配置大略不须要配置过多的寄存器,仅需利用单5V的电源即可事情

51系列、arduino、stm32系列单片机驱动TLC5615输出指定电压_电压_引脚 51系列、arduino、stm32系列单片机驱动TLC5615输出指定电压_电压_引脚 互联网

TLC5615通信时序

51系列、arduino、stm32系列单片机驱动TLC5615输出指定电压_电压_引脚 51系列、arduino、stm32系列单片机驱动TLC5615输出指定电压_电压_引脚 互联网
(图片来自网络侵删)

通过上方时序图我们可以快速的编写底层逻辑的程序,本次仅测试输出指定的电压因此只须要利用到CS、SCLK、DIN三个引脚的时序即可,如果只是驱动一个模块的话CS也可以直接接地,此时仅需占用单片机两个IO口即可正常运行

关于通信数据的配置

找到数据手册中关于上面二进制码表可以得知末了有两位的值固定为0(由于DAC输入锁存器为12位的),前面十位数据决定输出的电压,其打算公式在右侧中的OUTPUT中可以得知,大致的事情流程明确的话可以开始程序烧录测试了

TLC5615模块

硬件方面可以参照下方引脚解释以及模块的引脚图

引脚名称

功能解释

VCC

正电源端,4.5~5.5V ,常日取 5V

GND

仿照地

AOUT

DAC 仿照电压输出端

REF

基准电源输入

DIN

串行数据输入端

SCLK

串行时钟输入端

CS

芯片选用通端,低电平有效

DOUT

用于级联时的串行数据输出端

上面有八个引脚,个中REF和DOUT可以不须要利用,看到下面这张模块事理图可以找到几个须要的参数

个中DOUT为级联利用,目前没用到以是不用接,事理图中可以看到模块利用了一片LM4040的芯片给TLC5615供应了一个

2.048V电压的基准源,这是我们不须要外接基准源的缘故原由,同样的后续打算也是须要利用到2.048这个电压值去打算的

51单片机驱动

直接贴出完全代码

#include<reg52.h> sbit CS=P1^0; //片选端口sbit CLK =P1^1; //时钟端口sbit DIN=P1^2; //数据输入void DA_OUTPUT(unsigned int value); //声明输出电压值函数void main(void){ while(1) { DA_OUTPUT(250); }}void DA_OUTPUT(unsigned int value){ unsigned char i; //定义变量用于循环 value<<=6; //int类型为16位,仅需12位则去掉高4位方便取出 CS=0; //片选端口 CLK=0; /循环12次取出12位写入模块寄存器/ for(i = 0; i < 12; i++) { DIN=(bit)(value&0x8000); //取出最高位 CLK=1; value<<=1; CLK=0; } CS=1; CLK=0; //规复默认低电平状态}

51的代码较为简短,顶部利用sbit定义为利用的端口,大略明了也易于修正,后面有定义一个函数void DA_OUTPUT(unsigned int value);

在这个函数中输入参数调用会直接改变模块输出的电压大小,其对应电压关系为输出电压Vout = 2Vrefvalue/1024 ,个中value为我们在函数中输入的值,Vref为基准电压2.048,打算得出的Vout​为Aout端口输出的电压大小

简化后我们须要输出电压Vout时须要输入的函数值为Vout/0.004即Vout​250,如果我们须要让TLC5615模块输出1V电压,那么须要在函数中加入参数250即可,有兴趣的朋友也可以对函数进行优化

默认接线可参照下表

51单片机

TLC5615

5V

VCC

GND

GND

P1.0

CS

P1.1

CLK

P1.2

DIN

须要代码可不才方留言邮箱或者私信邮箱

arduino驱动

arduino驱动有大量的库可以调用可以使开拓职员节约大量的韶光,这里我们同样利用调用库的办法去驱动,直接贴出源代码

#include "TLC5615.h"TLC5615 TLC5615(2,3,4); //CS--->2 CLK--->3 DIN--->4void setup() { // put your setup code here, to run once: TLC5615.begin();}void loop() { // put your main code here, to run repeatedly: TLC5615.DA_OUTPUT(500);}

上面同样的调用了库中的几个函数去实现指定电压输出的功能,与51单片机类似的利用放大,我在库中写了一个功能相同的函数void DA_OUTPUT(uint16_t value);去供用户利用

利用起来仅需编写四段代码即可实现固定电压输出(loop是自己天生的),利用前记得添加库,须要库或者资料可不才方留言邮箱或者私信邮箱

代码段TLC5615 TLC5615(2,3,4);声明了TLC5615工具,名称可自定义,后面添加的参数2,3,4分别代表了模块利用的CS、CLK和DIN端口,同样可根据须要自行修正定义

TLC5615.begin();函数用于初始化前面定义的TLC5615利用的端口

函数TLC5615.DA_OUTPUT(500);用于掌握AOUT端口输出的电压值,即输入的值value=Vout250,详细打算过程可以参照前面51单片机驱动部分

接下来烧录程序接好线之后即可丈量对应输出电压是否对应,详细接线可参照下表

arduino

TLC5615

5V

VCC

GND

GND

2

CS

3

CLK

4

DIN

stm32驱动

stm32的代码相对来说要繁芜一点,这里我就直接贴出main.c中的代码,利用单片机型号STM32F103C8系列,须要完全工程可不才方留言邮箱或者私信邮箱

#include "pbdata.h"#include"stm32f10x.h"#define CS_1 GPIO_SetBits(Pin_group,CS_Pin)#define CS_0 GPIO_ResetBits(Pin_group,CS_Pin)#define CLK_1 GPIO_SetBits(Pin_group,CLK_Pin)#define CLK_0 GPIO_ResetBits(Pin_group,CLK_Pin)#define DIN_1 GPIO_SetBits(Pin_group,DIN_Pin)#define DIN_0 GPIO_ResetBits(Pin_group,DIN_Pin)/定义利用引脚/#define CS_Pin GPIO_Pin_6#define CLK_Pin GPIO_Pin_7#define DIN_Pin GPIO_Pin_8/定义引脚所在组/#define Pin_group GPIOB/定义利用的时钟/#define Pin_RCC RCC_APB2Periph_GPIOBvoid GPIO_init(GPIO_TypeDefGPIOx,u16 GPIO_Pin,GPIOMode_TypeDef Mode){ GPIO_InitTypeDef GPIO_InitStruct;//声明一个管脚初始化的构造体 GPIO_InitStruct.GPIO_Mode=Mode; GPIO_InitStruct.GPIO_Pin=GPIO_Pin; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStruct);}void DA_OUTPUT(uint16_t value){ uint8_t i; value<<=6; CS_0;CLK_0; for(i = 0; i < 12; i++) { if(value&0x8000) { DIN_1; } else { DIN_0; } CLK_1; value<<=1; CLK_0; } CS_1;CLK_0;}int main(void){ RCC_APB2PeriphClockCmd(Pin_RCC,ENABLE); GPIO_init(Pin_group,CS_Pin|CLK_Pin|DIN_Pin,GPIO_Mode_Out_PP); CS_1;CLK_0;DIN_0; while(1) { DA_OUTPUT(500); }}

里面掌握连接TLC5615的引脚的代码如下

/定义利用引脚/

#define CS_Pin GPIO_Pin_6#define CLK_Pin GPIO_Pin_7#define DIN_Pin GPIO_Pin_8/定义引脚所在组/#define Pin_group GPIOB/定义利用的时钟/#define Pin_RCC RCC_APB2Periph_GPIOB

分别掌握引脚,引脚所在的GPIO组和时钟,其他的没有太多须要把稳的,里面的输出函数void DA_OUTPUT(uint16_t value)功能如上述51单片机或者arduino驱动中讲述的功能完备相同

须要一贯到stm32F4或者其他时钟速率更快的单片机须要把稳的是驱动时序可能会须要增加延时,根据手册时序看当速率达到50ns或者更小时可能无法正常驱动

默认接线可参照下表

STM32F1

TLC5615

5V

VCC

GND

GND

PB6

CS

PB7

CLK

PB8

DIN

总结

TLC5615为时序大略的ADC器件,利用大略,易操作,也具有10位的分辨率相对性价比各类方面都比较可以,以上供应了三种较为常见单片机的驱动办法以及程序,并且可基于上述程序自行修正输出方波,正弦波,三角波等,须要资料程序的朋友可以不才方留言或者私信邮箱,看到就会发过去,欢迎留言互换,大家相互学习相互进步!

标签:

相关文章