摘要
本文主要记录SMIE最后一次初级实训学习的主要内容。包括了大概是三个阶段:
- 准备阶段:学习测量仪器,回顾C语言编程;
- 熟悉阶段:在FPGA上运行HelloWorld,开发小应用,如跑马灯等,最后还了解了uc/os这样一个实时操作系统;
- 开发阶段:使用PWM波以及H桥控制车轮,使用超声模块控制让小车感知外界状况,从而进行控制,最后可以使用PID控制理论优化小车的控制。
学习仪器
- 学会使用示波器,可以用来观察从ADC,PWM波等等信号。
- 学会使用万用表测电压,电阻,电流。
回顾c语言编程
- 条件判断
- 循环:for loop & while loop
- 数组:
- 使用下标访问
- 使用指针访问
- 函数使用:
- 递归
- 迭代
- 链表:
- 结构体声明和使用
- 指针使用
- 链表结构和基本操作
- 位操作
- 位操作将十进制表示成二进制数
- 位操作实现某一位的反转,或者某一位不变其它位反转等
C语言进阶
- 使用header file,source file以及main file。尝试尽可能的复用。
- C语言与安全性
- 数组越界
- 判断逻辑不全
- 变量没有初始化
- 内存泄露
- 没有考虑非法输入
FPGA编程
- FPGA:DE0-Nano board
- 使用自带软件测试FPGA完好
- 在FPGA上运行HelloWorld工程
- 实现LED Sliding Pattern(闪烁模式之类)
- 使用中断
- 中断的原理和运行机制
FPGA上编程进阶
- 在IDE:eclipse上进行Debug
- ADC:
- FPDA上有一个ADC的硬件模块
PWM(Pulse Width Modulation)
- Duty cycle 占空比
- Why PWM?
- Digital voltage control: 只能控制1和0
- 需要最大电压的x%则让占空比为x%
- 产生PWM的方法:
- 软件方法
- 使用计数器
- 使用中断?
- 硬件方法
- Hardware PWM IP <– NIOS core
- moto_setting(),能产生2个PWM波
- 软件方法
H桥
- 低电流做控制,产生大电流去驱动电机
- PWM波控制H桥驱动电机,使小车前进,后退,转弯等
超声模块
- 超声模块是:KS103
- VCC: Power Pin
- SDA/TX: data pin in I2C bus/TX pin in uart bus
- SCL/RX: clock pin in I2C bus/RX pin in uart bus
- GND: power ground pin
- Mode: Select the communication mode.
- High Level(VCC): I2C
- Low Level (GND): Uart
- 使用流程:
- 接线:
- 使用Uart模式:
- 超声TX接入FPGA的RX,超声的RX接入FPGA的TX
- 使用I2C模式:
- data pin & clock pin
- 使用Uart模式:
- 编程时的端口查找:
- 结合QSF文件以及FPGA用户手册
uc/OS 实时嵌入式操作系统
- 以上都是bare metal hardware(裸跑)上编程,然后编译我们需要的程序
- 如果需要完成复杂的多任务,可以考虑跑在一个操作系统上(嵌入式操作系统,如uc/OS)
- 多任务(线程)
- 信号量
- 临界区访问
PID控制
- p:比例系数,I:积分系数,D:微分系数
- 使用PI控制,因为高阶噪声,所以不使用D
- 如下图,其中e(t) = r(t) - y(t)