当前位置: 首页 > news >正文

Canmv k230 DAC案例——TLV5638

Canmv k230本身没有DAC 通过SPI接入一个两通道的DAC——TLV5638,实际性能受限于MicroPython,但通过简单尝试实现了,后续可能会尝试其他DAC与ADC

硬件接线如下:
在这里插入图片描述
接线

K230TLV5638
SPIO_MOSI(IO16)SDI
SPIO_SCLK(IO15)SCK
CS(IO19)CS

整体代码如下:

from machine import SPI
from machine import FPIOA ,Pin
import time
import math   # 提供一些基本的运算
# 实例化SPI的gpio
a = FPIOA()
# 设置gpio14为QSPI0_CS0功能
#a.set_function(14,a.QSPI0_CS0)
a.set_function(19, FPIOA.GPIO19)
pin_cs = Pin(19, Pin.OUT, pull=Pin.PULL_NONE, drive=15)
pin_cs.value(1)
# 设置gpio15为QSPI0_CLK功能
a.set_function(15,a.QSPI0_CLK)
# 设置gpio16为QSPI0_D0功能
a.set_function(16,a.QSPI0_D0)
# 设置gpio17为QSPI0_D1功能
a.set_function(17,a.QSPI0_D1)# 实例化SPI,使用5kHz时钟,极性为1,数据位宽为8bit
spi=SPI(1,baudrate=5000, polarity=1, phase=1, bits=8)def DAC_init():d1=0b11010000;  # 写控制寄存器 1101 控制寄存器快速模式 电源正常d2=0b00000010;  # 10 2.048V; 00 外部; 01 1.024V;11 外部pin_cs.value(0)spi.write(bytes([d1]))spi.write(bytes([d2]))pin_cs.value(1)def DAC_SPI_update_AandB(data,DAC1orDAC2):# 写A通道数据同时更新B的缓存 同时输出b=0b1000aa=0x0bb=0x0aa=(b<<4)|(data& 0xF00)>>8bb=data& 0xFF#print(bytes([aa]))#print(bytes([bb]))pin_cs.value(0)spi.write(bytes([aa]))spi.write(bytes([bb]))pin_cs.value(1)def DAC_SPI_writB(data,DAC1orDAC2):# 写通道B数据a=0b0001aa=0x0bb=0x0aa=(a<<4)|(data& 0xF00)>>8bb=data& 0xFF#print(aa)#print(bb)pin_cs.value(0)spi.write(bytes([aa]))spi.write(bytes([bb]))pin_cs.value(1)# DAC数据生成
PI = 3.14159265358979323846264338327950288419716939937510
# 这是一个要生成的数据,待测试数据
rx = []
rx2 = []
def input_data():# 这是一个基波for i in range(200):data0 = 1000 * math.sin(2 * 1 * PI * (i+1) / 200)+3000data1 = 1000 * math.sin(4 * 1 * PI * (i+1) / 200)+2000rx.append((int(data0)))rx2.append((int(data1)))
input_data()# 测试DAC
DAC_init()
data=0;
for i in range(20000):data=rx[i%200];data1=rx2[i%200];#time.sleep_ms(2);DAC_SPI_writB(data1,0)DAC_SPI_update_AandB(data,0);

TL5638输出波形

后续,详细补充细节,可能会有更多AD/DA模块测试。。。

http://www.xdnf.cn/news/1169227.html

相关文章:

  • 104.二叉树的最大深度
  • API是什么,如何保障API安全?
  • 刀客doc:Netflix与YouTube开始在广告战场正面交锋
  • [学习] 笛卡尔坐标系的任意移动与旋转详解
  • 洛谷 B3939:[GESP样题 四级] 绝对素数 ← 素数判定+逆序整数
  • 深入解析 Pandas:Python 数据分析的强大工具
  • Jenkins接口自动化测试(构建)平台搭建
  • Kafka监控体系搭建:基于Prometheus+JMX+Grafana的全方位性能观测方案
  • NLP自然语言处理的一些疑点整理
  • JavaScript AJAX 实现,演示如何将 Token 添加到 Authorization
  • 怎么在Mac系统中使用不坑盒子?
  • 交叉编译opencv(Cpp)于arm64架构开发板上
  • .NET使用EPPlus导出EXCEL的接口中,文件流缺少文件名信息
  • 【n8n教程笔记——工作流Workflow】文本课程(第一阶段)——1、导航编辑器界面(Navigating the editor UI)介绍
  • numpy库的基础知识(二)
  • 理解后端开发中的API设计原则
  • 达梦数据库表字段增加时报错[-2106]:无效的表或视图名,[-2116]:列[IS_REPEAT]已存在
  • [3-02-02].第04节:开发应用 - RequestMapping注解的属性2
  • 支付网关系统前后端鉴权方案
  • 网络原理 HTTP 和 HTTPS
  • 代码检测SonarQube+Git安装和规范
  • Uni-App:跨平台开发的终极解决方案
  • uniapp打开导航软件并定位到目标位置的实现
  • 当直播间告别“真人时代”:AI数字人重构商业新秩序
  • uni-calendar自定义签到打卡颜色
  • Apache Ignite 中的 SQL 模式(Schema)管理机制
  • 使用python中的pymysql库,并且转化为数组元组数据
  • adb的使用
  • Leetcode—692. 前K个高频单词【中等】(桶排序)
  • Linux的磁盘存储管理实操——(下一)——标准分区扩容