AVR单片机熔丝位的设置和详细的拯救方法

发布者:DreamySerenity最新更新时间:2019-11-29 来源: eefocus关键字:AVR单片机  熔丝位  拯救方法 手机看文章 扫描二维码
随时随地手机看文章

熔丝位是ATMEL公司AVR单片机比较独到的特征。在每一种型号的AVR单片机内部都有一些特定含义的熔丝位,其特性表现为多次擦写的E²PROM。用户通过配置(编程)这些熔丝位,可以固定地设置AVR的一些特性,参数以及I/O配置等,当然也包括对片内运行代码的锁定(加密)。


用户使用并行编程方式、ISP编程方式、JTAG编程方式都可以对AVR的熔丝位进行配置,但不同的编程工具软件提供对熔丝位的配置方式(指人机界面)也是不同的。有的是通过直接填写熔丝位位值(如:CVAVR、PonyProg2000和SLISP等),有的是通过列出表格选择(如AVR STUDIO、BASCOM-AVR)。前者程序界面比较简单,但是需要用户在仔细查询操作,会引起一些意想不到的后果,如造成芯片无法正常运行,无法再次定入ISP编程模式等。建议用户对AVR的熔丝位进行配置时,选择用户表格选择方式界面的编程软件,如BASCOM-AVR。不过版主使用的是前者PonyProg2000。 对AVR熔丝位的配置操作是比较细致的工作,用户往往忽视其重要性,或感到不易掌握。看到这么多的人对AVR的熔丝位不会使用和误操作,结合本人的使用实践,给出以下方面的意见和参考。 下面给出对AVR熔丝位的配置操作时的一些要点和需要注意的相关事项以及相应的拯救方法。


(一)设置方法 1.1.1 正确配置AVR熔丝位 对AVR熔丝位的配置是比较细致的工作,用户往往忽视其重要性,或感到不易掌握。下面给出对AVR熔丝位的配置操作时的一些要点和需要注意的相关事项。有关ATmega128熔丝位的具体定义和功能请查看本书相关章节,在附录中将给出一个完整的汇总表。


(1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态,“Unprogrammed”表示熔丝状态为“1”(禁止);“Programmed”表示熔丝状态为“0”(允许)。因此,配置熔丝位的过程实际上是“配置熔丝位成为未编程状态“1”或成为已编程状态“0””。

(2)在使用通过选择打钩“√”方式确定熔丝位状态值的编程工具软件时,请首先仔细阅读软件的使用说明,弄清楚“√”表示设置熔丝位状态为“0”还是为“1”。

(3)使用CVAVR中的编程下载程序时应特别注意,由于CVAVR编程下载界面初始打开时,大部分熔丝位的初始状态定义为“1”,因此不要使用其编程菜单选项中的“all”选项。此时的“all”选项会以熔丝位的初始状态定义来配置芯片的熔丝位,而实际上其往往并不是用户所需要的配置结果。如果要使用“all”选项,应先使用“read->fuse bits”读取芯片中熔丝位实际状态后,再使用“all” 选项。

(4)新的AVR芯片在使用前,应首先查看它熔丝位的配置情况,再根据实际需要,进行熔丝位的配置,并将各个熔丝位的状态记录备案。

(5)AVR芯片加密以后仅仅是不能读取芯片内部Flash和E2PROM中的数据,熔丝位的状态仍然可以读取但不能修改配置。芯片擦除命令是将Flash和E2PROM中的数据清除,并同时将两位锁定位状态配置成“11”,处于无锁定状态。但芯片擦除命令并不改变其它熔丝位的状态。

(6)正确的操作程序是:在芯片无锁定状态下,下载运行代码和数据,配置相关的熔丝位,最后配置芯片的锁定位。芯片被锁定后,如果发现熔丝位配置不对,必须使用芯片擦除命令,清除芯片中的数据,并解除锁定。然后重新下载运行代码和数据,修改配置相关的熔丝位,最后再次配置芯片的锁定位。

(7)使用ISP串行方式下载编程时,应配置SPIEN熔丝位为“0”。芯片出厂时SPIEN位的状态默认为“0”,表示允许ISP串行方式下载数据。只有该位处于编程状态“0”,才可以通过AVR的SPI口进行ISP下载,如果该位被配置为未编程“1”后,ISP串行方式下载数据立即被禁止,此时只能通过并行方式或JTAG编程方式才能将SPIEN的状态重新设置为“0”,开放ISP。通常情况下,应保持SPIEN的状态为“0”,允许ISP编程不会影响其引脚的I/O功能,只要在硬件电路设计时,注意ISP接口与其并接的器件进行必要的隔离,如使用串接电阻或断路跳线等。

(8)当你的系统中,不使用JTAG接口下载编程或实时在线仿真调试,且JTAG接口的引脚需要作为I/O口使用时,必须设置熔丝位JTAGEN的状态为“1”。芯片出厂时JTAGEN的状态默认为“0”,表示允许JTAG接口,JTAG的外部引脚不能作为I/O口使用。当JTAGEN的状态设置为“1”后,JTAG接口立即被禁止,此时只能通过并行方式或ISP编程方式才能将JTAG重新设置为“0”,开放JTAG。

(9)一般情况下不要设置熔丝位把RESET引脚定义成I/O使用(如设置ATmega8熔丝位RSTDISBL的状态为“0”),这样会造成ISP的下载编程无法进行,因为在进入ISP方式编程时前,需要将RESET引脚拉低,使芯片先进入复位状态。

(10)使用内部有RC振荡器的AVR芯片时,要特别注意熔丝位CKSEL的配置。一般情况下,芯片出厂时CKSEL位的状态默认为使用内部1MHz的RC振荡器作为系统的时钟源。如果你使用了外部振荡器作为系统的时钟源时,不要忘记首先正确配置CKSEL熔丝位,否则你整个系统的定时都会出现问题。而当在你的设计中没有使用外部振荡器(或某钟特定的振荡源)作为系统的时钟源时,千万不要误操作或错误的把CKSEL熔丝位配置成使用外部振荡器(或其它不同类型的振荡源)。一旦这种情况产生,使用ISP编程方式则无法对芯片操作了(因为ISP方式需要芯片的系统时钟工作并产生定时控制信号),芯片看上去“坏了”。此时只有使用取下芯片使用并行编程方式,或使用JTAG方式(如果JTAG为允许时且目标板上留有JTAG接口)来解救了。另一种解救的方式是:尝试在芯片的晶体引脚上临时人为的叠加上不同类型的振荡时钟信号,一旦ISP可以对芯片操作,立即将CKSEL配置成使用内部1MHz的RC振荡器作为系统的时钟源,然后再根据实际情况重新正确配置CKSEL。

(11)使用支持IAP的AVR芯片时,如果你不使用BOOTLOADER功能,注意不要把熔丝位BOOTRST设置为“0”状态,它会使芯片在上电时不是从Flash的0x0000处开始执行程序。芯片出厂时BOOTRST位的状态默认为“1”。关于BOOTRST的配置以及BOOTLOADER程序的设计与IAP的应用请参考本章相关内容。


1.1.2 ATmega128中重要熔丝位的配置 上一小节介绍了配置AVR熔丝位的要点和注意事项,本小节把在一般情况下使用ATmega128时,几个重要的熔丝位配置情况进行说明。

(1)熔丝位M103C。M103C的配置将设定ATmega128是以ATmega103兼容方式工作运行还是以ATmega128本身的方式工作运行。ATmega128在出厂时M103C默认状态为“0”,即默认以ATmega103兼容方式工作。当用户系统设计使芯片以ATmega128方式工作时,应首先将M103C的状态配置为“1”。

(2)CLKSEL0..3。CLKSEL0、CLKSEL1、CLKSEL2、CLKSEL3用于选择系统的时钟源。有五种不同类型的时钟源可供选择(每种类型还有细的划分)。芯片出厂时的默认情况为CLKSEL3..0和SUT1..0分别是“0001”和“10”。即使用内部1MHz RC振荡器,使用最长的启动延时。这保证了无论外部振荡电路是否工作,都可以进行最初的ISP下载。对于CLKSEL3..0熔丝位的改写需要十分慎重,因为一旦改写错误,会造成芯片无法启动,见上一小节第10点说明。

(3)JTAGEN。如果不使用JTAG接口,应将JTAGEN的状态设置为“1”,即禁止JTAG,JTAG引脚用于I/O口。

(4)SPIEN。SPI方式下载数据和程序允许,默认状态为允许“0”。一般保留其状态。

(5)WDTON。看门狗的定时器始终开启。WDTON默认为“1”,即禁止看门狗的定时器始终开启。如果该位设置为“0”后,看门狗的定时器就会始终打开,不能被内部程序控制了,这是为了防止当程序跑飞时,未知代码通过写寄存器将看门狗定时器关断而设计的(尽管关断看门狗定时器需要特殊的方式,但它保证了更高的可靠行)。

(6)EESAVE。执行擦除命令时是否保留E2PROM中的内容,默认状态为“1”,表示E2PROM中的内容同Flash中的内容一同擦除。如果该位设置为“0”,对程序进行下载前的擦除命令只会对FLASH代码区有效,而对E2PROM区无效。这对于希望在系统更新程序时,需要保留E2PROM中数据的情况下是十分有用的。

(7)BOOTRST。决定芯片上电起动时,第一条执行指令的地址。默认状态为“1”,表示起动时从0x0000开始执行。如果BOOTRST设置为“0”,则起动时从BOOTLOADER区的起始地址处开始执行程序。BOOTLOADER区的大小由BOOTSZ1和BOOTSZ0决定,因此其首地址也随之变化。

(8)BOOTSZ1和BOOTSZ0:这两位确定了BOOTLOADER区的大小以及其起始的首地址。默认的状态为“00”,表示BOOTLOADER区为4096字,起始首地址为0xF000。

(9)推荐用户使用ISP方式配置熔丝位。配置工具选用BASCOM-AVR (网上下载试用版,它对ISP下载无限制),和STK200/STK300兼容的下载电缆(见第四章内容)。

注:不同AVR的熔丝也不同,使用前必须仔细查看芯片手册。 要重视手册学习,不仅是掌握如何使用,也是从根本上认识和掌握原理和结构。对于硬件工程师来将,数据手册是真正的“经书”,其它都是“修练经验”。不熟读“经书”,你无法修炼成“仙”的。这也是《M128》、《M8》的目的之一!


(二)AVR熔丝位拯救方法详细攻略

1.1.3 AVR芯片的ISP全攻略 当然你在配置熔丝位时要小心从事,防止芯片锁死。有不少网友屡屡遭此不幸。其实你在熔丝位配置时,只要方法正确,一般是不会出错的。如果当你改动了AVR的熔丝位配置,重新加电后,想再用ISP下载,提示:“进入编程模式失败”等,极有可能是你搞错了熔丝位,导致芯片不知道使用何种外部主频而无法正常工作(仅限于使用内部RC振荡的情况)。不过,不用太担心,其实拯救的办法还是有很多的,操作起来也是很容易的,具体解决方法为:

1。进入JTAG模式修改SPIEN熔丝位 需要使用JTAGICE调试器,不过一般情况下调试模式也进不去,JTAGEN(值为1)锁死了。

2。并行编程器恢复 需要你有USB或COM1口制作的并行HVPROG编程器,STK200/STK300

3。通过外加有源晶振 需要你有外部有源振荡晶体(石英或晶振1-4M) 这个方法最简单,速度最快(强烈推荐)

4。使用通用编程器将芯片恢复到出厂状态 这个方法,需要你有市场上的通用编程器,可以修改三个熔丝位寄存器数据。

5。寄回给芯片服务商,让他们帮忙将芯片恢复 这是最省事,但是最费时间,最无可奈何的方法。 先介绍一下基本恢复理论 ISP(In System Programmability) 在系统编程,简称为 串行下载 IAP(In Application Programing) 在应用编程,BootLoader也是类似的意思


1. ISP虽然利用了SPI接口(例外:M64/M128为UASRT0接口,Tiny13等没有SPI接口)的引脚,但只在复位时起作用,而且下载完成后合格的下载器会自动断开端口的连接,对正常工作时没有影响的( 在产品应用中,下载器一定是不会一直粘在上面的)。

2. 虽然高压并行下载能修复任何熔丝位,但对于贴片封装来说是很不现实的,所以添加ISP10标准插座接口后就是最常用的ISP下载方式了

3. 虽然IAP是一种新的升级方法,但IAP程序本身也是要先用高压并行下载或ISP来烧进芯片里面才行

4. Tiny13等少管脚AVR芯片因为管脚实在太少了,有ISP,但没有[高压并行编程]而特制了[高压串行编程] 所以,产品上一般都留有ISP10标准接口插座,或更省位置的ISP6标准插座----留6个焊盘就行了


ISP的工作前提 1. 芯片没有物理损坏

2. 芯片的SPIEN熔丝位=0 使能ISP功能

3. 芯片的RSTDISBL熔丝位=1 RESET引脚有效 (假如芯片有这个熔丝位)

4. 线路正常--接错线? 短路?

5. ISP下载器正常-------特别要考虑 连线的接触不良问题

6. 电源正常 (一) 并行编程器恢复,最早的编程方法, 功能最强大,通常需要12V~24V的高压,以示区别,下面称为 高压并行编程。制作方式也有:

1.USB或COM1口制作的并行HVPROG编程器,软件例如USBASP的ISP上位机软件AVR_fighter.exe(zhb2000)和USBAVRISP(ZHIFENG),但需要AVR MCU连接较多的引脚 (一般20脚);

2.并行编程器STK200/STK300,串行编程器软件PonyProg2000. 但需要电脑留有LPT打印机接口,AVR MCU留有ISP6-10标准烧写口。

1.以我们常用的小马PonyProg2000串行编程器下载软件为例,在Command菜单中选Security and Configuration Bits,(或者点Security and Configuration Bits按钮)在接着出现的熔丝位配置窗口的下面,有几个按钮,千万不要乱按。正确的方法是先按“Read”按钮,读出原来芯片中熔丝位的配置,然后再以此为基础,按你的需要进行局部修改,确定无误后再按“Write”按钮,就OK了。一般不会出现锁死的问题。如果万一由于操作不当,出现锁死也不必惊慌。

2.除了用并行编程器恢复的方法以外,对于没有并行编程器的朋友,还可以用外接有源振荡器的方法解锁,方法是用一个1MHz的振荡信号接到ATmega16L的 13脚XTAL1,接通单片机的电源,正常的话你会看到原来单片机中的程序已经可以正常运行了。说明外接振荡器已经使单片机恢复工作了。这下来就好办了,仍然用PonyProg2000,点Security and Configuration Bits按钮,进入熔丝位配置窗口,这时你会看到所有的熔丝位都没打√,连灰色的SPIEN前面那个模糊不清的√也没了,不过没关系Don’t worry,你只要按照下图中ATmega16L出厂时熔丝位的设置打√,然后按“Write”按钮,如果屏幕轻轻的闪一下,OK,恭喜你已经好了,再按“Read”按钮,你会看到除了你打√的地方以外,SPIEN前面那个模糊不清的√也出来了。锁死的芯片已经解锁了。

要注意的是外接的信号幅度不可太大,以免损毁芯片,我开始用一个51单片机的震荡信号接过来,结果不行,可能是驱动能力不够。后来换了一个信号发生器输出的1MHz的信号,就成功了。也可以用NE555芯片搭个振荡器做信号源。 (二)外加有源晶振

运行时钟 ISP时钟(必须低于运行时钟的1/4) 4096Hz <1024Hz //很变态的用法,外接32.768KHz晶体+CKDIV8 ,不过AVRISP还是提供了603Hz这个速度了 //另一简易解决办法是 下载时在32.768KHz晶体并联一个1MHz晶体,双龙的下载线就配有一个8MHz的石英晶体 32768Hz <8192Hz 128KHz < 32KHz //内部RC128KHz 1.0MHz <250KHz //默认值(包括8MHz+CKDIV8),所以AVRISP的ISP速度多为230KHz 8.0MHz <2000KHz 16.0MHz <4000KHz 运行时钟不等于震荡器的频率,因为部分AVR芯片有系统时钟预分频器,可以对震荡器进行1~256分频


CKDIV8熔丝位决定CLKPS位的初始值。 若CKDIV8未编程,CLKPS位复位为“0000”;若CKDIV8 已编程,CLKPS 位复位为“0011”,给出启动时分频因子为8 AVRISP可提供的ISP时钟 921.6KHz,230.4KHz, 57.6KHz,28.8KHz,4.0KHz, 603Hz STK500可提供的ISP时钟 1.845MHz,460.8KHz,115.2KHz,57.6KHz,4.0KHz,1206Hz 时钟设定 ISP方案 内部RC 选择合适的ISP速度 外部RC 接上合适的电阻和电容,选择合适的ISP速度。------补救: 外部时钟源接到XTAL1 外部RC 根本就没有什么意义,频率精度/稳定度不高,成本也没有降低,所以新的AVR芯片已经没有这个选项了。

 

各位网友要注意的是错误设定后补救方法 外部晶体 接上合适的晶体,选择合适的ISP速度。 ------补救: 外部时钟源接到XTAL1 外部时钟 接上合适的时钟源,选择合适的ISP速度。 ------补救: 外部时钟源接到XTAL1 外部时钟源可以是 外部(4MHz)有源晶体输出,其他MCU的XTAL2脚,各种方波振荡电路(NE555)输出等 大部分AVR芯片的ISP端口是 SCK,MOSI,MISO,RESET 而M64/M128的ISP端口是 SCK, PDI, PDO,RESET 而且M64/M128出厂默认兼容M103----熔丝位M103C=0,很多新特性不能使用,程序也可能不能正常运行 ----因为C编译器通常默认自动把SP指向SRAM的末端,M103=0x0FFFH, M64/M128=0x10FFH,必然出错! AVR的所有熔丝位均是: 1 未编程,多为不起作用的意思。 0 编程,多为 起作用的意思。 基于可编程工艺的都是这样: PROM/EEPROM/FLASH都是出厂时和擦除后变为全1(0xFF)的,要编程才能变成0。 反过来就是了,跟CE/OE/INT都是[低电平有效]一样,都是很常见。 在ISP模式下永远不能访问(修改)SPIEN位,这是AVR芯片的硬件保护 有独立RESET脚的M16/M32/M64/M128等,在ISP模式下根本就就不会令ISP无效,无论如何修改熔丝位,都能恢复正常。 M8/M48/M88/M168/Tiny系列有RSTDISBL熔丝位可以令导致RESET失效而令ISP无法工作外,其他情况都能恢复正常。

 

一般来说,只要满足ISP的工作前提,再把XTAL1接到一个4MHz有源晶体的输出,基本是万试万灵的。 通过外加有源晶振的办法,让其恢复, 这个方法最可行。它可以恢复大部分熔丝位搞错的芯片。(重点推荐) 接法如下

打点的口子对应1号脚依次逆时针1 NC2 GND3 CLK4 VCC 1脚不接,2脚接地,3脚接输出,4脚接电源。恢复方法:


接上上图的有源晶振,重新通电,可以看到芯片又重新正常工作了,这时就能用ISP或JTAG下载线修改错误的熔丝位了。修改完成后,断电,将有源晶振拆走,看看是否已经恢复正常。


还有一个办法,如果没有有源晶振的话可以用其他工作正常的单片机的时钟作为外部晶振,只要将工作正常的单片机的XTAL2脚连接熔丝设置错误的单片机的XTAL1引脚即可。像我使用AVR910下载线的可直接把AT90S2313的时钟输出连到被设置错的芯片就可恢复了,很方便。


不要忘记,并行高压编程的时钟信号也是从XTAL1导入方波信号的。 如果有源晶振的方法不行(除了ISPEN=0,RSTDISBL=0情况外),恐怕高压编程也未必能奏效。 其他一些功能操作对ISP熔丝位的影响

1. JTAG的影响(M16,M32,M128等): JTAG能访问 SPIEN 和 JTAGEN,要是不小心同时改成SPIEN=1,JTAGEN=1,将会导致MCU锁死,需要高压并行编程才能恢复。

2. DebugWIRE的影响:(M48,M88,M168,T2313等,数据手册里面的资料不是很详细) 由于DebugWIRE使用RESET脚来通讯,所以跟ISP有所冲突 可以通过ISP或并行高压编程来使能DebugWIRE功能[即DWEN=0],使能DebugWIRE功能后,ISP功能失效。 可以通过DebugWIRE来关闭DebugWIRE功能[即DWEN=1],关闭DebugWIRE功能后,如果RSTDISBL=1,SPIEN=0,ISP功能有效。 比较特殊的是 DebugWIRE调试中,断点的使用会降低Flash 数据记忆时间 DebugWIRE调试用的器件不能发给最终客户。

3.JTAG MKII同时具备JTAG/DeubgWIRE/ISP三种功能,可以轻松实现DebugWIRE/ISP的切换。 (软件需要升级到1.09版以后 即对应AVRstudio 4.12以后版本) 最新版本 JTAG MK2使用说明中文pdf(20051125) 设计使用debugWIRE 的系统时,必须进行下面的检查: • dW/(RESET) 的上拉电阻不得小于10kΩ。debugWIRE 并不需要上拉电阻 • 将 RESET 引脚与 VCC 直接连接将无法工作 • 使用debugWIRE 时必须断开与RESET 引脚连接的电容 • 必须断开所有的外部复位源

end

关键字:AVR单片机  熔丝位  拯救方法 引用地址:AVR单片机熔丝位的设置和详细的拯救方法

上一篇:AVR定时器溢出时间的计算
下一篇:AVR单片机入门+使用keil-MDK裸奔TQ2440

推荐阅读最新更新时间:2024-11-20 10:59

缺少仿真器时AVR单片机的开发方法
对FLASH存贮器单片机,不要仿真机也能方便快速地开发程序。具体可以从以下几方面入手: 一、尽量使用高级语言开发系统程序 您有没有在写汇编程序时,标错一个标号而浪费您大把时间找错或跳转偏移量过大而不得不改动程序结构的经历。其实您如果使用高级语言开发程序,就不会有这样的痛苦。 在开发程序时,除了建立一个良好的开发文档外,使用语言的选择也很重要。有许多人认为使用汇编写程序比较精简,而用高级语言开发会浪费很多程序空间,其实这是一种误解。对一个有经验的,而且非常熟悉某种单片机的汇编高手而言,他是能写出比高级语言更精简的代码。而对汇编不是很熟的开发者、或突然更换了一种新的单片机,您能保证一定可以写出比高级语言更简练的代码吗? 高级语言的优越
[单片机]
ATmega熔丝位设置详解
初学者对熔丝经常不解,AVR芯片使用熔丝来设定时钟、启动时间、一些功能的使能、BOOT区设定、当然还有最让初学者头疼的保密位,设不好锁了芯片很麻烦。要想使MCU功耗最小也要了解一些位的设定。 1:未编程 0:编程 1、BOD(Brown-out Detection) 掉电检测电路 BODLEVEL(BOD电平选择): 1: 2.7V电平; 0:4.0V电平 BODEN(BOD功能控制): 1:BOD功能禁止;0:BOD功能允许 使用方法:如果BODEN使能(复选框选中)启动掉电检测,则检测电平由BODLEVEL决定。一旦VCC下降到触发电平(2.7v或4.0v)以下,MCU复位;当VCC电平大于触发电平后,经过tTOU
[单片机]
ATmega8 外部时钟
为了从外部时钟源驱动芯片, XTAL1 必须如 Figure 13 所示的进行连接。同时,熔丝位 CKSEL必须编程为“0000”。若熔丝位CKOPT也被编程,用户就可以使用内部的XTAL1和 GND 之间的36 pF 电容。 选择了这个振荡器之后,启动时间由熔丝位SUT 确定,如Table 12 所示。 为了保证MCU 能够稳定工作,不能突然改变外部时钟源的振荡频率。工作频率突变超过2% 将会产生异常现象。应该在MCU 保持复位状态时改变外部时钟的振荡频率
[单片机]
ATmega8 外部时钟
AVR单片机定时/计数器学习笔记(二)
定时/计数器1(16位)有普通模式、CTC模式、快速PWM模式、相位修正PWM模式等工作模式。 2.CTC模式(需要用到OC1A、OC1B两个引脚) 应用:用于产生占空比为50%的方波信号 ( N为分频系数 ) 需要配置的寄存器:T/C1控制寄存器A(TCCR1A)、T/C1控制寄存器B(TCCR1B)、输出比较寄存器1A(OCR1A)。 (1)TCCR1A的bit7、bit6用于设置OC1A脚的比较输出模式,bit5、bit4用于设置OC1B脚的比较输出模式。(此处我们都设为,比较匹配时OC1A、OC1B电平取反) (2)TCCR1B的bit4、
[单片机]
<font color='red'>AVR单片机</font>定时/计数器学习笔记(二)
AVR单片机实现对步进电机的细分控制及其应用
需求分析 本方案中使用的仪表具有如下特点和设计参数: ●指针响应灵敏、走位准确,即收到驱动脉冲后不能丢步; ●指针转动平稳,即指针从当前位置到目标位置之间的走位要平稳,正、反转都不能出现抖动; ●两相、步距角10o、转动范围300o。 根据技术参数可知,采用两相四拍和两相八拍时的步距角为10o和5o,在300o的范围内只能作30和60个刻度划分,在实际应用中,会发现指针步距角不能满足要求而且抖动不可避免。为了实现指针高精度的准确走位和平稳运转,要对步进电机步距进行高分辨率细分,这也是设计的难点所在。 步进电机 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机转速、停止的位
[单片机]
<font color='red'>AVR单片机</font>实现对步进电机的细分控制及其应用
avr单片机读写时钟芯片DS3231程序(通过测试)
实时时钟芯片DS3231,该款芯片是目前世界上精度最高的集成,也是业内最先推出、采用简单音叉晶体和集成电路即可提供±2分钟/年时间保持精度的芯片。 //程序由AT24C系列的读写程序改写而来,不同点只在于器件地址的不同 /span #include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int void DelayUs(uchar i); void CLK(uchar PD);//设置SCL的电平 void IO(uchar PD);//设置IO的电平 void SetIO(uchar i);//设置IO
[单片机]
基于AVR单片机和GPRS的矿区铁路道口监测系统
1 引言   矿区铁路是衔接国家铁路与矿区的中间环节,是铁路运输网的重要组成部分。据有关资料统计,目前国内矿区铁路超过2万公里且其沿线附近通常分布着多个道口。由于道口大多分布在远离市区的矿山企业内部,并且其数量多、分散以及道口之间的距离长,加上矿区内各种运输工具的交叉作业及车辆、人员的不固定的流动,使矿区铁路道口的安全管理成为十分突出的问题。为使各级矿区管理部门能及时、准确掌握各个道口的的安全情况,本文以 Atmega128和MC55为核心,设计一套铁路道口监测系统,实现对铁路道口监测管理的自动化、数字化和网络化。这对保证矿区正常生产、提高矿山企业经济效益和通过道口车辆、行人安全具有重要意义。   2 系统组成   整
[单片机]
基于<font color='red'>AVR单片机</font>和GPRS的矿区铁路道口监测系统
AVR单片机的TWI总线的原理及应用
  AVR系列的单片机内部集成了TWI(Two-wire SerialInterface)总线。该总线具有I2C总线的特点,即接线简单,外部硬件只需两个上拉电阻,使用时钟线SCL和数据线SDA就可以将128个不同的设备互连到一起;而且支持主机和从机操作,器件可以工作于发送器模式或接收器模式,数据传输率高达400 kHz。正因为TWI总线具有这么多的优点,因此受到了使用者的青睐。   由于该总线与传统的I2C总线极其相似。因此不少人误以为TWI总线就是I2C总线,其实这只是一种简单化的理解。TWI总线是对I2C总线的继承和发展。它定义了自已的功能模块和寄存器,寄存器各位功能的定义与I2C总线并不相同;而且TWI总线引入了状奁寄
[单片机]
<font color='red'>AVR单片机</font>的TWI总线的原理及应用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved