博客
LED的亮度变化,我们是通过对LED的电流进行脉宽调制(PWM)控制;所产生的脉冲电流波形便是产生EMI的罪魁祸首。LED调光需要采用PWM控制,但它产生的EMI也必须予以抑制。
嗯,你的新设计很牛,它差不多能满足EMI要求,但又不完全如此。令你吃惊的是,电路产生的传导EMI刚好超出你必须满足的限制,而这个EMI当中至少有部分来自于可调光LED。
LED的亮度变化,我们是通过对LED的电流进行脉宽调制(PWM)控制;所产生的脉冲电流波形便是产生EMI的罪魁祸首。LED调光需要采用PWM控制,但它产生的EMI也必须予以抑制。
下面的原理图显示了一种抑制EMI的简单方法。
中断的优先级有两个:查询优先级和执行优先级。
外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断
或 int0,timer0,int1,timer1,serial port 或 INT0、T0、INT1、T1、UART
或 PX0>PT0>PX1>PT1>PS>......
前言
孔无铜属于pcb功能性问题,随着科技的发展PCB精度(纵横比)要求亦越来越来高,它不但给PCB制造者带来的麻烦(成本与品质的矛盾),而且给下游客户埋下了严重的品质隐患!下面就此做简单分析,希望能对相关同仁有所启示和帮助!
前面介绍了点亮第一个LED的全过程,很多人可能很幸运的点亮了LED,然而也很可能不少人非常不幸没有把程序下载进去。初学者常会遇到程序无法下载的情况,很多人在尝试多次未果后比较受打击,因此放弃了学习,实在太可惜了。鉴于此,这里列举了单片机程序下载失败的各种出错原因、判断方法和解决方法,是前人所遇到的种种原因的总结。
STC单片机下载程序主要分为三部分:单片机最小系统、下载电路、计算机端。下载失败一般主要就从这三个方面来解决问题。
<strong>快速排错方法</strong>
如果你有或者能向别人借到一套可以正常下载程序的电脑、单片机下载线、开发板全套装备,依次换用别人的下载线,电脑,和单片机系统板进行下载。如果换别人电脑下载就成功了,说明问题在于你的电脑。通过这种控制变量的方法,就能快速判断出问题出在哪个环节。
随着我国经济的高速发展,工业对环境的污染问题不减,资源化残水和无回收价值污水的达标排放的政府监督日趋严厉PCB生产污水资源化势在必行。
PCB制作产生的高浓度有机废液(非清洗水),国内迄今没有权威的污染物调查统计资料。本文给大家讲述高浓度有机废水处理的难点。主要有以下四个:
1、废水的来源广泛
线路板生产过程中经显影、黑/棕氧化、除胶渣、PTH镀通孔、镀铜、退膜等工序来完成。其中在显影及退膜、剥废板绿漆、酸性除油等工序中,将产生高浓度有机废水。
2、废水的水质成分处理难度较大
从cortex开始,分为三个系列,a系列,r系列,m系列。
m系列与arm7相似,不能跑操作系统(只能跑ucos2),偏向于控制方面,说白了就是一个高级的单片机。
a系列主要应用在人机互动要求较高的场合,比如pda,手机,平板电脑等。a系列类似于cpu,与arm9和arm11相对应,都是可以跑草错系统的。linux等。
r系列,是实时控制。主要应用在对实时性要求高的场合。
arm7和m3,m4是同一类型。这三个里面,arm7是最早的arm产品。m3是cortex m系列的过渡品,其低端市场被cortex m0的高端替代, 其高端市场又被cortex m4的低端取代。现在m系列,是m4内核的。典型的芯片是st公司和飞思卡尔公司的。
三极管在我们数字电路和模拟电路中都有大量的应用,在我们开发板上也用了多个三极管。在我们板子上的 LED 小灯部分,就有这个三极管的应用了,下图的 LED 电路中的 Q16就是一个 PNP 型的三极管。
<center><img src="http://mcu.eetrend.com/files/2018-01/博客/100009971-34096-1.png" alt="三极管工作原理"></center>
<strong>三极管的初步认识</strong>
总线上的数据的传递有两种形式。一种为程控输入/输出(PIO)另一种为直接存储器访问(DMA)。
<font size="3"><strong>1、PIO</strong></font>
使用PIO时,CPU是主模块,总线上数据的读取由CPU上运行的软件程序直接发起,传递的数据一定进过CPU(如下面的一、二所述)。
一、软件指令或者将已经存放在CPU数据寄存器中的数据发送到目标被控模块;
二、或者将目标被控模块里的一个数据读入,放到CPU的数据寄存器中。
例如:需要将数据从模块A---转移到----模块B,软件将这个任务分解为两个PIO操作:
第一步:从模块A读取数据,并存放到CPU的数据寄存器中;
本篇我们将分析<a href="http://mcu.eetrend.com/blog/2018/100009803.html">上一篇</a>所写的程序代码。未来学习单片机的大部分精力,我们也将放在程序代码的编写上。但是不用担心,我会非常详细的介绍每个程序的编写思路和各种注意事项等。
之前我们写的程序如下:
#include
sbit LED = P1^0;
void main()
{
LED = 0;
while(1);
}
<strong>地址总线</strong>
地址总线(Address Bus)是一种计算机总线,是CPU或有DMA能力的单元,用来沟通这些单元想要访问(读取/写入)计算机内存组件/地方的物理地址。它是单向的,只能从CPU传向外部存储器或I/O端口,地址总线上使得地址的64线路处于开合状态下,在该状态下,对应地址里面的数据可以获取或者存入
<strong>控制总线</strong>
控制总线,英文名称:ControlBus,简称:CB。控制总线主要用来传送控制信号和时序信号。控制信号中,有的是微处理器送往存储器和输入输出设备接口电路的,如读/写信号,片选信号、中断响应信号等;也有是其它部件反馈给CPU的
<strong>数据总线</strong>
它是由常用的电路结构所决定的,低电平时电路往往有较高电平时更低的环路阻抗,而低阻抗则意味着抗干扰能力更强。
结合实际讲一个有用的例子来加深印象:
有的同学可能已经学习了这样的一条PCB布线规则-----在条件许可的情况下,高电平有效线要尽量缩短,低电平有效的线则尽量延长----这一条规则的存在基础就是基于低电平时环路阻抗比较低,抗干扰能力比较强才起来的。
如OC或OD电路要控制一个电平就是通过它这个开关的通断来实现的。
有在上拉电阻的情况下,开关接通,得低电平;开关切断,得高电平。这样,为了防止电路失控的情况下仍然是有效电平,那么当然是低电平有效才更“保险”了。结构上,象OC电路那样,由于集电极更难击穿,所以,也更不容易损坏。
STM8S105的低功耗模式总的来说有四种:分别是等待模式,停机模式,快速活跃停机模式和慢速活跃停机模式
<font color="#33b1c8">1、等待模式:</font>
可执行指令wif()进入等待模式,该模式下主CPU停止工作,但其外设不停,严格来说只能算是降低功耗而不能算低功耗,该模式可由AMU或外部中断唤醒
<font color="#33b1c8"> 2、停机模式:</font>
可执行指令half()进入停机模式,该模式下主cpu和外设全部停止,达到最低功耗,只能由外部中断进行唤醒。
<font color="#33b1c8">原则:</font>有硬件I2C、SPI时尽量用硬件操作,省去IO模拟繁琐的时序调试。但在内部资源不够时就要用IO模拟总线了。
<font color="#33b1c8">关于短延时:</font>
模拟时序时是否需要延时要看MCU与device的相对速度。比如I2C如果400K的速率和MCU动辄几十M的速率不再一个量级,肯定要通过延时调整时序;但对于SPI因为其速度很高,甚至有的比单片机的速度还高,这时就没必要延时了。
<font color="#33b1c8">关于IO模拟的收发函数是否要合并成一个:</font>
一直不明白有STM32中AHB总线、APB2总线、APB1总线这些是是什么??
所谓地址映射,就是将芯片上的存储器 甚至I/O等资源与地址建立一一对应的关系。如果某地址
对应着某寄存器,我们就可以运用C语言的指针来寻址并修改这个地址上的内容,从而实现修改该寄存器的内容。
正是因为头文件中有了对于各种寄存器和I/O端口的地址映射,我们才可以在51单片机
程序中方便地使用P2^0 =0xFF; TMOD =0xFF等赋值句子对寄存器进行配置,从而控制单片机。
其实地址总线就是就是用来存放地址的,Cortex-M3的地址映射也是类似的,Cortex-M3有32根地址线,所以它的寻址空间大小为2^32
bit=4GB。(这里什么32跟地址线不需要去纠结了,只要知道配置成了4G的地址就行)
1、IIC EEPROM------容量小,采用的是IIC通信协议;用于在掉电时,存系统配置参数,比如屏幕亮度等。常用芯片型号有 AT24C02、FM24C02、CAT24C02等,其常见的封装多为DIP8,SOP8,TSSOP8等;
2、SPI NorFlash------容量略大,采用的是SPI 通信协议;用于存放程序和数据。程序和数据可存放在同一芯片上,拥有独立的数据总线和地址总线,能快速随机读取,允许系统直接从Flash中读取代码执行;可以单字节或单字编程,但
不能单字节擦除,必须以Sector为单位或对整片执行擦除操作。常见到的S25FL128、MX25L1605、W25Q64等型号都是SPI NorFlash。
前面介绍了很多概念知识,做了很多准备工作,从这一节开始,我们正式开始单片机的学习。我们将使用单片机完成一项非常简单的工作:点亮一个发光二极管(即LED:Light-Emitting Diode)。
<strong>LED简介</strong>
8位、16位、32位是指单片机的“字长”,也就是一次运算中参与运算的数据长度,这个位是指二进制位。以8位为例,8位二进制的表达范围是0000,0000~1111,1111即十进制的0~255,即每次参与运算的数据最大不能超过255。而16位机的字长是16位,其数据表达范围是0~65535,即每次参与运算的数据最大不能超过65535;32位单片机的字长是32位,其数据表达范围是0~4294967295,即每次参与运算的数据最大不能超过4294967295。
8位、16位、32位与单片机的性能密切相关,通常32位机的性能要高于16位机,而16位机的性能又要高于8位机。
为什么会这样呢?这要从2个方面来分析。
(1)点亮第一盏灯:
<span style="font-family:Microsoft YaHei;font-size:18px;">#include<reg52.h>
sbit D1=P1^0;
void main()
{
D1=0;
}
</span>
若要点亮第二盏。改为sbit D2=P1^0;
(2)在reg52.h文件里加入:sbit D1=P1^0;
用于点亮第一盏灯,若要点亮第二盏灯。sbit D2=P1^1;以此类推
<strong>GPIO即通用输入/输出 (General Purpose Input Output)</strong>
包括:
两个32位的配置寄存器 GPIOx->CRL,GPIOx->CRH
两个32位的数据寄存器 GPIOx->IDR,GPIOx->ODR
一个32位的 set/reset 寄存器 GPIOx->BSRR
一位16位的 reset 寄存器 GPIOx->BRR
一位32位的锁定寄存器 GPIOx->LCKR
端口的模式包括:
浮空输入(Input floating)—— 即没有上拉电阻和下拉电阻,电压呈不确定性,一般用来做ADC输入用,这样可以减少上下拉电阻对结果的影响