- 博客(69)
- 收藏
- 关注
原创 ZYNQ初识14(zynq_7020)sd卡(tf卡)板载功能的验证
添加好对应的文件系统后,在自己的对应的工程文件添加main.c文件,进行程序验证就可,因为sd卡的文本读写实验并没用到pl端,因此只需要运行ps端即可。(1)Block Design:sd卡在vivado驱动的过程中进行管脚分配,一定要主意好自己的板子的串口和sd卡对应的引脚,并分配好对应bank的电平。
2025-03-28 17:09:37
227
原创 ZYNQ14 基于正点原子的iic时序的fpga程序实现
程序中对应的每个状态都有注释讲解, 但还有几个地方需要注意,sda在输入时是在scl的上升沿采样,为了保证sda在scl的每个高电平期间可以稳定的传输数据,而在给sda_out赋值的时候则是需要在scl稳定的低电平期间,也就是时序图中sda_out的上升沿和下降沿切换的时候。一般取mode2快速模式对应的频率,但zynq板载一般为50M时钟,所以需要分频供iic驱动,再者为保证sda输出的数据可以刚好在scl对应的高电平的中间时刻,需要对应的驱动iic的时钟为scl时钟频率的四倍左右。
2025-03-20 20:24:26
456
原创 ZYNQ初识13(zynq_7020)hdmi,串口及网口板载功能的验证
(2)以下,验证焊接好后的板子hdmi和usb转串口的功能中,hdmi是纯PL端调用(由核心板晶振50Mhz提供时钟)而串口打印功能由于不需要时序,只需要检测板子的串口和PC端是否可以正常收发,所以只需要调用PS端即可,不需要在PL端编写任何程序。虽然只需要调用PS端的程序,但还是需要在PL端创建Block Design,根据block design中选择的功能进行例化,创建好bd文件后导出,随后launch SDK,跳转到PS端即可。
2025-03-13 22:41:21
266
原创 ZYNQ初识12(zynq_7010)top文件修改模板存档(程序)
注意:vivado版本问题,注释存在乱码,但不影响编译。我用的是2018.3。
2025-03-06 11:02:16
149
原创 FPGA有关HDMI的一些知识,程序源自bilibi正点原子
结合下面的图2,3可知,编码过程是将数据传输过程分成了4个通道,R、G、B以及时钟通道,因为编码过程是并行传输,而后面第二大部分涉及到数据传输的并串转换,在整个实验过程设置了两个时钟速率,分别对应并行数据传输速率(由驱动的显示屏的分辨率和刷新率决定),以及串行数据传输速率(5倍于并行数据传输速率),在此说明,理论上串行速率应为并行速率的10倍(并串转换为10bit输出),但本次实验中采用了ddr,因此在PLL锁相环设置速率时将串行速率设置为了并行速率的5倍。回顾串口知识,RS232(两路单端信号传输);
2025-03-05 21:45:47
1013
原创 ZYNQ初识11(zynq_7010)top文件的修改与自定义
主要的思路方法是,将原有的wrapper文件内的程序直接例化在自己需要的新的顶层文件中,而后将原来的wrapper的.v文件删除,注意和block design文件匹配起来,随后就是正常的bd文件两步走,综合分析,分配管脚,生成比特流文件,下载验证即可。前文所述,由于板子的PL端没有时钟,所以只能从PS端调用时钟,而对应调用时钟的wrapper的.v文件则默认被设置为top文件,给后续的程序编写和功能实现带来麻烦,现将顶层文件的修改和自定义的过程放在下方,以供参考。这里注意引脚的设置需要配合板子的原理图。
2025-01-13 16:59:45
418
原创 ZYNQ初识10(zynq_7010)UART通信实验
以下,是串口接收端的波形图,系统时钟和波特率时钟不同,为异步时钟,,需要先延时两拍,将时钟同步过来,取到start_flag信号,由start_flag信号结合clk_cnt、bps_cnt两个计数器取到rx_flag信号,随后在rx_flag高电平时计算clk_cnt以及bps_cnt两个信号。以下,是是串口发送端的波形图,整体过程和接收端基本类似,只需要进行某些变量名称的修改即可,但需要注意,接收到的数据实际上是串口接收端的发送的数据(uart_data);
2025-01-08 09:08:04
894
原创 ZYNQ初识9(zynq_7010)串口打印功能的简单实现
随后在block design中进行在PS端调用时钟的操作,但需要注意,在引脚选择的过程中需要选择对应的串口的引脚(emio),这里选择的是串口0(Uart0)随后保存,按照顺序进行以下两步操作,点击generate Bitstream,生成比特流文件后launch到sdk,在ps端进行简单的串口功能打印的程序编写。尝试修改串口为uart1,但是结合板子的原理图,uart1在PS端,在PL端无法调用和分配管脚,因此暂时使用uart0来实现简单的串口打印功能。
2025-01-05 10:56:48
447
原创 ZYNQ初识8(zynq_7010)FIFO_IP核
3、在程序的编写过程中出现了一些问题如begin--end的无法自动对齐,就类似‘{}’,有时容易造成混乱,目前是tab手动控制,还没有更好的解决办法,和notepad++关联就无法使用vivado中编辑器的对程序的自动实时报错提醒的功能。1、板子的PL端时钟需要从PS端调用,此时调用时钟的文件应为顶层文件,所以仿真受限。以下内容基于bi站正点原子对fifoIP核的视频讲解。tb激励文件(自己写的,没有实际测试过)2、涉及的状态机的写法的简单回顾。
2025-01-04 11:09:18
423
原创 ZYNQ初识7(zynq_7010)RAM_IP核
上图中标注的存储器类型分别包括单端ram(同时读写)、伪双端ram(一端读,一端写(但读写固定))、真双端ram(一端读、一端写,且读写端均可以切换读和写的功能)以及rom(关闭写的一端)等等,也可以看出ram和rom的资源是共用的。zynq_7000家族中的7010和7020的ram资源如上图,每一片ram随机存储器的内存为36K,上图中的Block RAM对应的资源为多片ram拼凑起来的资源总和。另一幅图则涉及读写端口的设定,包括读写端口的数据宽度和深度,设置读写优先级以及端口使能的功能。
2024-12-31 17:03:14
650
原创 ZYNQ初识6(zynq_7010)clock时钟IP核
但由于此时PL因无时钟晶振,需要借用PS端的晶振的设置而出现的顶层文件的问题,以及在创建IP核初始选择的是自定义,而不是适应Block Design的,所以在Block Design中无法添加对应.v文件的module(会报错),因此只能在simulation中仿真查看波形,无法进行接下去的管脚分配和程序下载的过程。接下去是自定义clock的IP核封装,为后续的simulation可以正常仿真波形,需要注意顶层文件的设置,需要将自定义的IP核对应的.v文件设置为顶层文件,否则仿真波形会均为高阻态。
2024-12-30 22:24:32
457
原创 bmp390l传感器的IIC命令通信(学习汇总)
至于传感器本身的地址,可以接好线后输入数据手册对应的chip_id传感器测试下是否为手册中对应的默认数据位,如下,0x76_0x00和0x770x_00分别尝试,返回0x60的就是对应IIC的通信地址。读:EC7EB6(reset)→EC1A00→EC1902→EC1C15→EC1D04→EC1F00→EC1B33 (0x33→00110011)但需要注意,EC1B33设置传感器读取模式需要放在最后,否则可能会无法正常设置传感器数据读取模式。
2024-12-23 14:48:04
506
原创 ZYNQ初识4(zynq_7010)基于vivado,利用simulator进行仿真调试和波形查看
(1)记得需要将要仿真的文件和激励文件(tb)设置为顶层文件,否则软件会无法识别。
2024-12-18 17:35:09
492
原创 ZYNQ初识3(zynq_7010)基于vivado,利用网表(Netlist)的形式查看PL端信号波形(哔哩哔哩正点原子视频教程)
而后继续选择计数器信号cnt,但由于vivado的网表功能会对信号进行一些优化,所以为了显示全部位宽的信号,需要在代码中对cnt信号进行如下操作,来添加cnt信号的debug功能,同时在网表中也会自动添加对应的debug属性,也就不需要在网表中继续选择Mark debug选项。打开网表图,分别选中led_0_OBUF、sys_rst_n_0_IBUF,右击选择Mark Debug,而后观察到刚刚操作的两个信号左边增加了一个类似蝴蝶的符号,代表操作成功。成功添加后点击NEXT,可以看到如下界面,
2024-12-18 09:45:09
500
原创 ZYNQ初识2(zynq_7010)基于vivado,从PL端调用PS端的时钟
双击打开新建好的main.c文件,发现程序字号显示较小,按下操作调整主界面字号,选择Window->Preference->general->color and font,选择Text Font,点击左侧Edit,根据需要修改即可。一路next,在自己的vivado的工作文档新建文件夹并给自己新建的项目命名,随后进行芯片选型,由于我的板载芯片是zynq_7010,所以做如下选择。随后点击创建bit流文件,而后默认点击Yes,跳转后默认点击OK即可,生成文件后,弹出界面选择cancel即可,不需要进行修改。
2024-12-16 22:44:50
1480
1
原创 ZYNQ初识1(zynq_7010)_点亮小灯
上述是一款基于zynq_7010芯片的控制板,通过vivodo调试初步完成程序下载工作,通过定义GPIO引脚高低电平,并将板子拨码开关打到JTAG下载模式,完成板载的程序下载调试。
2024-12-14 21:23:43
187
原创 bme280传感器的IIC命令通信(学习汇总)
(3)再然后需要注意测量寄存器0xF4,此时测量寄存器可以测量温湿度气压三个值(如果跳过第2步则可测量温度和气压,湿度数据不会发生变化),而对应的数据位则是包含8bit,bit[7:5]表示温度的测量精度,bit[4:2]表示气压的测量精度,从000---111,设置的数据越大对应位数越高,精度也就越高,bit[1:0]则表示模式的设置,一般位11(NOMAL模式)。(1)首先是复位寄存器reset的地址0xE0,需要写入数据0xB6将除了身份编号寄存器的数据外的其他寄存器数据全部清零。
2024-12-10 10:31:54
723
原创 传统PID和模糊控制在matlab仿真效果的对比
PID控制器为两入三出,输入分别为误差e和误差变化率ec,输出则是对应的Kp、Ki、Kd三个参数,分别设置五条规则NB、NS、Z、PS、PB(常用的一般会设置为七条规则,即再加上NM和PM),输入输出的隶属函数分别设置为高斯函数和三角波;上图中红色信号为传统PID仿真信号,比直接作用到对象的信号拟合度好很多PID的积分和比例的作用,直接作用到对象相当于只通过了二阶函数的微分效果。由上图可以看出,相对于传统的PID控制,模糊PID控制消除了一些过冲现象,能更好的拟合原函数图像。
2024-12-04 10:34:35
403
原创 (笔记)简单了解ZYNQ
1、zynq首先是一个片上操作系统(Soc),结合了arm(PS)和fpga(PL)两部分组成2. PS的详细分析2.1 PS的架构组成2.1.1 ARM处理器核心2.1.2 内存和存储接口2.1.3 输入/输出接口2.2 PS的功能特点2.2.1 处理能力2.2.2 可扩展性2.2.3 低功耗设计3. PL的详细分析3.1 PL的架构组成3.1.1 可编程逻辑单元3.1.2 片上资源3.1.3 I/O引脚3.2 PL的功能特点3.2.1 定制化3.2.2 高性能计算3.2.3 快速原型开发
2024-11-24 16:07:17
608
原创 模糊控制系统的设计(取材bilibili_蓝天的季洁)
通过举例说明,将原有的[0,100]的参数通过隶属函数规则,(类似于归一化的方式)转化为[0,1]的隶属集合,在通过人工规定,设定好不同的模糊计算规则,,进而可以确定不同隶属度对应的蕴含关系(交集运算,取小),随后将不同隶属度对应的各个蕴含关系,取并集,获得总的蕴含关系,随后通过固定的运算公式获取到最终的清晰量输出。其中为了减少计算,可以将隶属度为0的有选择性的舍弃计算。PPT网盘链接:https://pan.baidu.com/s/11k3YJBDq0fU5MZAUFrx1cQ。
2024-11-22 17:05:00
214
原创 12706芯片的制冷效果汇总
使用12706半导体制冷芯片,结合散热板和风扇以及实心的导冷头,通过不同的实验对比得出:散热加风扇的制冷效果较好,对于4L左右的空间制冷效果可以从常温(24°左右)降低到7-8摄氏度,而实心的导冷头则可以降低至10摄氏度左右(有可能导冷头的连接方式和外壳保温效果不是最优的因素),而将尺寸匹配的小风扇接至导冷头的制冷端,制冷效果反倒变差了些,可将环境温度从常温拉低至12摄氏度左右。
2024-11-04 11:15:21
482
原创 Qt的几个函数方法
在Qt中,QString类提供了多种方法来处理字符串,包括查找子字符串的位置、检查字符串是否包含某个子字符串,以及截取字符串的一部分。下面是indexOf()contains()方法的示例,以及如何使用left()和mid()方法来截取字符串。
2024-10-24 09:16:02
188
原创 BME的两款气压传感器(BME280、BME390)一些相关参数(搜索汇总)
BME的两款气压传感器(BME280、BME390)一些相关参数(搜索汇总)
2024-10-14 10:36:47
572
原创 PID控制算法(六)
在上述代码中,相比之前的PID运算过程,本次在程序中添加并实现了PID算法的不完全微分过程,通过计算本次、上次以及上上次的误差,计算三者之间的差值来计算微分系数,并自行设置了滤波器系数来消除高频噪声所带来的误差,计算结果相比之前有所提升。通过修改设置的误差阈值和滤波器系数,可以一定程度上提高PID计算结果的精度。
2024-09-29 09:35:14
183
原创 PID控制算法(五)
上述代码存在一定问题:对于输入值( ≤ 200)时,整数可以较好的达到,而当输入数据到小数后1、2位则会出现波动,无法在最后精确达到所输入的数值。
2024-09-26 19:03:43
324
原创 PID控制算法(四)
积分饱和是指当系统存在持续的偏差时,积分项不断累积,可能导致控制器输出超出执行机构的最大或最小限制,从而引起系统超调和不稳定。1、PID算法之积分分离。
2024-09-26 18:59:13
365
原创 stm32f103,结合DS18B20测温,设置阈值对外界温度变化做出不同反应
通过设置温度阈值,当传感器测量到外界温度变化时有两个不同的引脚产生高电平,接到两个不同的小灯,从而可以观察变化。项目文件借鉴于正点原子资料源码。
2024-09-23 20:14:10
400
原创 C语言--结构体(学习笔记)
2、当结构体通过访问定义的指针变量,也就是访问地址的时候,则需要通过”->“操作来访问,但当结构体中还嵌套有其他结构体,当第一个结构体数据类型访问指针变量时,需要箭头"->"操作,但当访问第二层(嵌套在第一层结构体内)的结构体时则需要点操作”.“访问。3、只创建数据类型时不会占用内存,也就是说创建数据类型而不随后定义变量(创建了结构体但不通过其变量名访问其中的成员),此时是不占内存的。1、结构体的定义使用 typedef 可直接在下面的代码中通过结构体定义的变量名访问其中的成员函数,通过”.“来访问;
2024-09-18 09:51:20
575
原创 PID控制算法(二)
另外上述代码是根据提前确定好的值通过PID算法使之不断靠近,如何实现在代码运行时通过设定不同值来实现PID算法的问题还在解决中……以上核心部分为PID_relalize函数,PID_out实际上也就是比例部分、积分部分和微分部分三个之和的输出叠加。
2024-09-09 08:59:12
290
原创 PID控制算法(一)
积分调节效果:考虑历史误差效果的积累,也就是将一开始t0时刻的误差error0一直到现在时刻他t_k的误差error_k求和,仍然存在大于零和小于零的情况,大于0时则说明对于历史效果,实际输出的值其实整体上是没有达到目标值的,也就是欠调效果;而小于0则正好相反,说明对于历史的误差效果,实际输出的值整体上已经大于目标值,出现过调的效果。比例调节效果:考虑当前的误差效果,存在大于零和小于零的情况,大于0,则说明当前时刻的误差大于前一时刻的误差,小于0则相反,同时乘一个系数Kp。
2024-09-06 18:30:26
466
原创 espressif控制sht3x实现当前环境温湿度的测量
借鉴连接: ESP32开发之路(11)— ESP32读取SHT3X温湿度传感器的值_esp32 sht3-优快云博客。仍然存在一个问题就是:代码中printf,无法打印℃。
2024-08-26 22:19:14
231
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人