105

PWM是如何调节直流电机转速的?电机正反转的原理又是怎样的?

电机是重要的执行机构,可以将电转转化为机械能,从而驱动北控设备的转动或者移动,在我们的生活中应用非常广泛。例如,应用在电动工具、电动平衡车、电动园林工具、儿童玩具中。直流电机的实物图如下图所示。1-直流电机实物图对于普通的直流电机,在其两个电极上接上合适的直流电源后,电机就可以满速转动,电源反接后,电机就反向转动。但是在实际应用中,我们需要电机工作在不同的转速下,该如何操作呢?1 直流电机的调速原...

107

初学单片机,该如何选择单片机开发板?

单片机是可编程器件,可以通过编程来实现逻辑功能,这不仅降低了产品设计的复杂度,更丰富了产品的功能。现在的电子产品,多是以单片机为控制核心,再根据不同的用户需求来搭建不同的外设电路。所以,单片机在电子产品设计中非常重要,学会单片机在找工作时具有非常大的优势。1 以单片机为核心的产品框图那么,初学者在接触单片机之处,该如何学习呢?如何学习单片机才最有效?这就涉及到单片机开发板了。(此处已添加圈子卡片,...

14927

【STM32】STM32 MCU系列介绍

STM32-32 微控制器(MCU)家族 系列 MCU 主流级别MCU STM32 F0系列-ARM Cortex-M0入门级MCU STM32 F1系列-ARM Cortex-M3基础型MCU STM32 F2系列-ARM Cortex-M4混合信号MCU 高性能MCU STM32...

7

冒泡排序法(C语言)

冒泡排序(Bubble Sort) 一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 这个算法的名字由来是因为越小的元素会经由交换慢慢浮到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶...

23

选择排序法(C语言)

基本思路 在每一次的排序中选出最小(或最大)的数,将其放在数组最前端,然后在后面的数中重复此步骤,最终达到排序的目的. 算法描述 将存于数组首位数与后面的数依次比较,将其中的较小的数放到数组放到数组首位 将除存于第二位的数视作首位,重复第一步的操作 以此类推 代码实现 这里以从小到大排序为例 # include void swap(int *p, int *q) { int tem...

30

二分法查找(C语言)

二分法是一种高效的查找方法,其适用于已经排好序的数组 基本思路 从数组最中间的数开始查找判断,若不是需要查找的数字,则比较大小,之后则在从中间分开的两边中的一边从最中间开始查找判断,以此类推 算法描述 这里以升序数组为例,降序数组类似 记录数组最中间数的下标,将其中的数与要查找的数进行比较 若相等,停止查找,若大于要查找的数,则将数组下标上限换为较大半区的最小下标;若小于要查找的数,则将数组...

114

IMX6UL定时器按键消抖实验

用到按键就要处理因为机械结构带来的按键抖动问题,也就是按键消抖。前面的实验中都是直接使用了延时函数来实现消抖,因为简单,但是直接用延时函数来实现消抖会浪费 CPU 性能,因为在延时函数里面 CPU 什么都做不了。如果按键使用中断的话更不能在中断里面使用延时函数,因为中断服务函数要快进快出!我们学习如何使用定时器来实现按键消抖,使用定时器既可以实现按键消抖,而且也不会浪费CPU 性能,这个也是 Li...

117

IMX6UL 裸机C语言IO 输入中断编程

将 SDK  包中的文件 core_ca7.h  拷贝到本章试验工程中的imx6ul文件夹中,参考试验9_int中 core_ca7.h 进行修改。主要留下和GIC 相关的内容,我们重点是需要 core_ca7.h 中的 10 个API 函数,这 10 个函数如表所示: GIC 相关 API 操作函数移植好 core_ca7.h 以后,修改文件 imx6ul.h,在里面加上如下一行代码:   #i...

119

Cortex-A7 IO 输入中断系统分析

Cortex-A7中断向量表是在代码的最前面,Cortex-A7 内核有 8 个异常中断,这 8 个异常中断的中断向量表如表所示:Cortex-A7 中断向量表中断向量表里面都是中断服务函数的入口地址,因此一款芯片有什么中断都是可以从中断向量表看出来的。从表中可以看出,Cortex-A7 一共有 8 个中断,而且还有一个中断向量未使用,实际只有 7 个中断。和示例代码 17.1.1.1中的 STM...

124

IMX6UL裸机实现C语言按键输入实验

按键就两个状态:按下或弹起,将按键连接到一个 IO 上,通过读取这个 IO 的值就知道按键是按下的还是弹起的。至于按键按下的时候是高电平还是低电平要根据实际电路来判断。当 GPIO 连接按键的时候就要做为输入使用。我们的主要工作就是配置按键所连接的 IO 为输入功能,然后读取这个 IO 的值来判断按键是否按下。I.MX6U-ALPHA 开发板上有一个按键KEY0,我们将会编写代码通过这个 KEY0...

140

IMX6UL裸机实现C语言蜂鸣器实验

蜂鸣器常用于计算机、打印机、报警器、电子玩具等电子产品中,常用的蜂鸣器有两种:有源蜂鸣器和无源蜂鸣器,这里的有源不是电源,而是震荡源,有源蜂鸣器内部带有震荡源,所以有源蜂鸣器只要通电就会叫。无源蜂鸣器内部不带震荡源,直接用直流电是驱动不起来的,需要 2K-5K 的方波去驱动。 I.MX6U-ALPHA 开发板使用的是有源蜂鸣器,因此只要给其供电就会工作, I.MX6U-ALPHA 开发板所使用的有...

11235

如何编写一个工程文件夹下通用的Makefile

新建工程文件夹,在里面新建 bsp、imx6ul、obj 和project 这 3 个文件夹,完成以后如图所示:新建的工程根目录文件夹其中 bsp 用来存放驱动文件;imx6ul 用来存放跟芯片有关的文件,比如 NXP 官方的 SDK库文件;obj 用来存放编译生成的.o 文件;project 存放 start.S 和 main.c 文件,也就是应用文件;将十二章实验中的 cc.h、fsl_com...

12931

通过结构体的方式来定义和使用寄存器地址

在上一篇文章《IMX6UL裸机实现C语言LED实验》中,我们通过给每个寄存器宏定义一个地址的方式来使用寄存器地址,但是这种给每个寄存器定义一个值的方式太繁琐了,所以今天我们就来把他改成结构体的形式。1、编写外设结构体先将同属于一个外设的所有寄存器编写到一个结构体里面,如 IO 复用寄存器组的结构体如下:/* * IOMUX 寄存器组 */ 1 typedef struct  ...

14802

IMX6UL裸机实现C语言LED点亮与闪烁

C 语言部分有两个文件 main.c 和 main.h,main.h 里面主要是定义的寄存器地址,在 main.h里面输入代码:#ifndef MAIN_H #define MAIN_H 1 /* 2 * CCM 相关寄存器地址 3 */ 4 #define CCM_CCGR0 *((volatile unsigned int *)0X020C4068) 5 ...

17356

设备树在Linux系统内核中的体现

Linux 内核启动的时候会解析设备树中各个节点的信息,并且在根文件系统的/proc/device-tree 目录下根据节点名字创建不同文件夹,如图所示:根节点/的属性以及子节点上图就是目录/proc/device-tree 目录下的内容,/proc/device-tree 目录下是根节点/的所有属性和子节点,我们依次来看一下这些属性和子节点。1、根节点/各个属性在图中,根节点属性属性表现为一个个...

18003

手把手创建一个小型模板Linux设备树

本文我们从头到尾编写一个小型的设备树文件。当然了,这个小型设备树没有实际的意义,做这个对的目的是为了掌握设备树的语法。在实际产品开发中,我们是不需要完完全全的重写一个.dts 设备树文件,一般都是使用SOC 厂商提供好的.dts 文件,我们只需要在上面根据自己的实际情况做相应的修改即可。在编写设备树之前要先定义一个设备,我们就以 I.MX6ULL 这个 SOC 为例,我们需要在设备树里面描述的内容...

9205

Linux设备树专有名词及语法规则详解(下)

每个节点都有 compatible 属性,根节点/也不例外,imx6ull-alientek-emmc.dts 文件中根节点的 compatible 属性内容如下所示:14 / { 15 model = Freescale i.MX6 ULL 14x14 EVK Board; 16 compatible = fsl,imx6ull-14x14-evk, fsl,imx6ull; ...

发布经验,赚取声望值,帮助更多的技术开发者!

写经验

热门作者