单片机
新一代AVR MCU系列搭载独立于内核的外设、具备先进模拟和片上通信功能
随着物联网(IoT)为工业和家庭应用提供更强的连接性,以及车联网提升了驾驶室和操控功能,业界需要更高性能的单片机来实现更好的实时控制以及增强的人机接口应用。Microchip Technology Inc.(美国微芯科技公司)今日宣布推出下一代AVR® DA系列单片机(MCU),是其首款带有外设触摸控制器(PTC)的功能安全型AVR MCU系列。
Microchip 8位单片机事业部助理营销副总裁Greg Robinson表示:“新推出的AVR DA单片机系列继承了Microchip高性能和高代码效率器件的优势,通过搭载先进模拟和独立于内核的外设,以及比现有器件更多的电容式触摸通道,满足了多个行业的新需求。新的单片机系列产品广泛应用于智能家居安全、楼宇自动化、传感器系统等应用,以及汽车和工业自动化等领域,助力开发人员设计出更加强大、精确和响应灵敏的各类应用。”
Microchip的功能安全认证适用于具有最新安全特性的器件,这些器件同时还带有安全手册、故障模式、影响与诊断分析(FMEDA)报告,在某些情况下,还具备诊断软件,从而减少终端应用安全认证的时间和成本。AVR DA MCU系列包括多个集成的安全功能,以确保稳健的运行,诸如上电复位、欠压检测器和电压水平监控器,可确保充足的电源电压。循环冗余校验(CRC)扫描确保闪存中的应用程序代码有效。通过确保代码的完整性,可避免应用程序的意外和潜在的不安全行为。
Microchip的新型AVR DA系列MCU可在全电源电压范围内实现24 MHz的CPU速度、存储密度高达128 KB的闪存、16 KB SRAM和512 字节EEPROM,具备12位差分ADC、10位DAC、模拟比较器和过零检测器。PTC支持电容式触摸接口设计,支持按钮、滑动条、滚轮、触摸板、较小型触摸屏及广泛应用于消费和工业产品和车辆的手势控制。AVR DA系列支持多达46个自电容和529个互电容触摸通道,并采用最新一代增强型驱动屏蔽PTC和升压模式技术,提供增强的抗噪性、耐水性、触摸灵敏度和响应时间。
此外,AVR DA 系列MCU为嵌入式实时控制系统带来了额外的价值。集成事件系统支持外设间无需CPU即可进行通信。事件无延迟,信息不会丢失,为进行可靠和安全的设计提供了增强的实时性能和可预测性。通过减少CPU需要激活的时间,应用程序的总功耗得以降低。
可配置的自定义逻辑外设支持内部逻辑功能设置,无需外部元件,减少电路板空间和材料成本。凭借12位差分ADC等先进模拟特性,AVR DA系列MCU可在嘈杂环境中测量小幅度信号,非常适合于哈希环境中的传感器节点应用。
AVR DA系列MCU的高存储密度和SRAM与闪存的比率使AVR DA系列产品对无线和有线连接的传感器节点以及其他协议栈密集型应用都具有吸引力。
开发工具
Microchip AVR DA系列提供多种软硬件支持选项。软件支持包括Microchip MPLAB® X、MPLAB Xpress和Atmel Studio,代码配置工具包括MCC和START,编译器包括GCC、XC8和IAR嵌入式工作台(IAR Embedded Workbench)。XC8编译器的功能安全认证版本可通过Microchip功能安全程序获得。硬件支持包含在调试器/编程器中,包括MPLAB PICkit™ 4、MPLAB SNAP、Atmel ICE和AVR128DA48 Curiosity Nano评估工具包。
供货与定价
AVR DA系列单片机现已实现量产,10,000枚起售,单价为0.87美元。如需了解更多信息,请联系Microchip销售代表、全球授权分销商或访问Microchip网站。如需购买上述产品,请访问“Microchip直销网站”或联系Microchip授权分销商。
资源
可通过Flickr或联系编辑获取高分辨率图片(可免费发布):
应用图:https://www.flickr.com/photos/microchiptechnology/49584374872
模块图标:https://www.flickr.com/photos/microchiptechnology/49584047206
Microchip Technology Inc. 简介
Microchip Technology Inc.是致力于智能、互联和安全的嵌入式控制解决方案的领先供应商。 其易于使用的开发工具和丰富的产品组合让客户能够创建最佳设计,从而在降低风险的同时减少系统总成本,缩短上市时间。Microchip的解决方案为工业、汽车、消费、航天和国防、通信以及计算市场中12万多家客户提供服务。Microchip总部位于美国亚利桑那州Chandler市,提供出色的技术支持、可靠的产品交付和卓越的质量。详情请访问公司网站www.microchip.com。
1、采用短变量
一个提高代码效率的最基本的方式就是减小变量的长度。使用 C 编程时,我们都习惯于对循环控制变量使用 int 类型,这对 8 位的单片机来说是一种极大的浪费,你应该仔细考虑你所声明的变量值可能的范围,然后选择合适的变量类型,很明显,经常使用的变量应该是unsigned char,只占用一个字节。
2、使用无符号类型
为什么要使用无符号类型呢?原因是8051不支持符号运算,程序中也不要使用含有带符号变量的外部代码,除了根据变量长度来选择变量类型外,你还要考虑是否变量是否会用于负数的场合。如果你的程序中可以不需要负数那么把变量都定义成无符号类型的。
3、避免使用浮点指针
在 8 位操作系统上使用 32 位浮点数是得不偿失的。你可以这样做,但会浪费大量的时间,所以当你要在系统中使用浮点数的时候,你要问问自己这是否一定需要,可以通过提高数值数量级和使用整型运算来消除浮点指针,处理ints和longs比处理doubles和floats要方便得多,你的代码执行起来会更快,也不用连接处理浮点指针的模块。如果你一定要,采用浮点指针的话,你应该采用西门子 80517 和达拉斯半导体公司的 80320 这些已经对数,处理进行过优化的单片机。如果你不得不在你的代码中加入浮点指针,那么你的代码长度会增加程序执行速度也会比较慢。如果浮点指针运算能被中断的话,你必须确保要么中断中不会使用浮点指针运算,要么在中断程序前使用 fpsave 指令把中断指针推入堆栈,在中断程序执行后使用 fprestore 指令把指针恢复,还有一种方法是,当你要使用像 sin()这样的浮点运算程序时,禁止使用中断,在运算程序执行完之后再使能它。
4、使用位变量
对于某些标志位应使用位变量而不是 unsigned char,这将节省你的内存,你不用多浪费7位存储区,而且位变量在RAM中访问他们只需要一个处理周期。
5、用局部变量代替全局变量
把变量定义成局部变量比全局变量更有效率,编译器为局部变量在内部存储区中分配存储空间,而为全局变量在外部存储区中分配存储空间,这会降低你的访问速度,另一个避免使用全局变量的原因是你必须在你系统的处理过程中调节使用全局变量,因为在中断系统和多任务系统中,不止一个过程会使用全局变量。
6、为变量分配内部存储区
局部变量和全局变量可被定义在你想要的存储区中,根据先前的讨论,当你把经常使用的变量放在内部 RAM 中时,可使你的程序的速度得到提高,除此之外,你还缩短了你的代码,因为外部存储区寻址的指令相对要麻烦一些考虑到存储速度,按下面的顺序使用存储器DATA IDATA PDATA XDATA,当然你要记得留出足够的堆栈空间。
7、使用特定指针
当你在程序中使用指针时,你应指定指针的类型确定它们指向哪个区域如 XDATA 或CODE 区,这样你的代码会更加紧凑,因为编译器不必去确定指针所指向的存储区,因为你已经进行了说明。
8、使用调令
对于一些简单的操作,如变量循环位移,编译器提供了一些调令供用户使用,许多调令直接对应着汇编指令,而另外一些比较复杂并兼容 ANSI 所有这些调令都是再入函数,你可在任何地方安全的调用他们和单字节循环位移指令 RL A 和 RR A 相对应的调令是_crol_ 循环左移 和_cror_(循环右移)。如果你想对 int 或 long 类型的变量进行循环位移,调令将更加复杂而且执行的时间会更长 对于 int 类型调令为_irol_,_iror_ ,对于 long 类型调令为_lrol_,_lror_。在 C 中也提供了像汇编中 JBC 指令那样的调令_testbit_ ,如果参数位置位他将返回1,否则将返回 0 这条调令在检查标志位时十分有用,而且使 C 的代码更具有可读性调令将直接转换成 JBC 指令。
#include <instrins.h> void serial_intr(void) interrupt 4 { if (!_testbit_(TI)) { // 是否是发送中断 P0=1; // 翻转 P0.0 _nop_(); // 等待一个指令周期 P0=0; ... } if (!_testbit_(RI)) { test=_cror_(SBUF, 1); // 将SBUF中的数据循环 // 右移一位 ... } }
9、使用宏替代函数
对于小段代码,像使能某些电路或从锁存器中读取数据,你可通过使用宏来替代函数使得程序有更好的可读性你可把代码定义在宏中,这样看上去更像函数。编译器在碰到宏时,按照事先定义的代码去替代宏,宏的名字应能够描述宏的操作,当需要改变宏时,你只要修该宏定义处。
#define led_on() {\ led_state=LED_ON; \ XBYTE[LED_CNTRL] = 0x01;} #define led_off() {\ led_state=LED_OFF; \ XBYTE[LED_CNTRL] = 0x00;} #define checkvalue(val) \ ( (val < MINVAL || val > MAXVAL) ? 0 : 1 )
宏能够使得访问多层结构和数组更加容易,可以用宏来替代程序中经常使用的复杂语句以减少你打字的工作量且有更好的可读性和可维护性。
10、存储器模式
C51提供了 3 种存储器模式来存储变量、过程参数和分配再入函数堆栈。你应该尽量使用小存储器模式,很少应用系统需要使用其它两种模式,像有大的再入函数堆栈系统那样。一般来说如果系统所需要的内存数小于内部RAM 数时,都应以小存储模式进行编译。在这种模式下 DATA 段是所有内部变量和全局变量的默认存储段,所有参数传递都发生在DATA 段中,如果有函数被声明为再入函数,编译器会在内部 RAM 中为他们分配空间,这种模式的优势就是数据的存取速度很快,但只有120个字节的存储空间供你使用,总共有128个字节,但至少有8个字节被寄存器组使用,你还要为程序调用开辟足够的堆栈。如果你的系统有 256 字节或更少的外部 RAM 你可以使用压缩存储模式。这样一来,如果不加说明,变量将被分配在 PDATA 段中,这种模式将扩充你能够使用的 RAM 数量,对XDATA 段以外的数据存储仍然是很快的,变量的参数传递将在内部 RAM 中进行,这样存储速度会比较快,对 PDATA 段的数据的寻址是通过 R0 和R1进行间接寻址,比使用 DPTR 要快一些在大存储模式中,所有变量的默认存储区是 XDATA 段 Keil C 尽量使用内部寄存器组进行参数传递,在寄存器组中可以传递参数的数量和和压缩存储模式一样,再入函数的模拟栈将在 XDATA中 对 XDATA 段数据的访问是最慢的,所以要仔细考虑变量应存储的位置使数据的存储速度得到优化。
11、混合存储模式
Keil 允许使用混合的存储模式,这点在大存储模式中是非常有用的。在大存储器模式下,有些过程对数据传递的速度要求很高。我就把过程定义在小存储模式寄存器中,这使得编译器为该过程的局部变量在内部 RAM中分配存储空间,并保证所有参数都通过内部 RAM进行传递。尽管采用混合模式后编译的代码长度不会有很大的改变,但这种努力是值得的就像能在大模式下把过程声明为小模式一样,你像能在小模式下把过程声明为压缩模或大模式,这一般使用在需要大量存储空间的过程上,这样过程中的局部变量将被存储在外部存储区中,你也可以通过过程中的变量声明,把变量分配在 XDATA 段中。
12、运行库
运行库中提供了很多短小精悍的函数,你可以很方便的使用他们,你自己很难写出更好的代码了。值得注意的是库中有些函数不是再入函数,如果在执行这些函数的时候被中断,而在中断程序中又调用了该函数,将得到意想不到的结果。而且这种错误很难找出来,最好禁止使用这些函数的中断。
来源:http://www.cnblogs.com/51-mcu/articles/4135544.html
转载此文目的在于传递更多信息,版权归原作者所有。
电源技术的发展方向之一是并联运行分布电源系统,以便通过N+1 冗余获得故障容错及冗余功率,并且建立模块式分布电源系统,以增大总负载电流。采用双端驱动集成芯片TL494 输出PWM 脉冲控制主开关的导通来控制电压输出,以ATmega128 单片机为核心,实现大电流时自动由单电源供电投切到双电源并联均流供电,增强了开关电源的带负载能力和提高电源的供电效率。模块化是开关电源发展的总体趋势,可以采用模块化电源组成分布式电源系统,可以设计成N+1冗余电源系统,并实现并联方式的容量扩展,使整个电源体积重量下降,模块中半导体器件的电流应力小,提高了系统的可靠性。本研究的开关电源在带小负载时为单电源供电,带大负载时(电流超过1.7A)自动投切为双电源并联供电,采用外特性下垂方法实现各电源均流,增强了开关电源的带负载能力和提高电源的供电效率。
1 系统设计
1.1 DC-DC 变换器电路拓扑结构
本设计选择了升压斩波电路, 其电路原理图如图1所示。选择升压轨波电路作为DC -DC 变换的主拓扑结构。
1.2 系统性能指标
本设计采用双端驱动集成芯片TL494 输出PWM 脉冲控制主开关的导通来控制电压输出,以ATmega128 单片机为核心,实现大电流时自动由单电源供电投切到双电源并联均流供电,增强了开关电源的带负载能力和提高电源的供电效率。系统硬件主要由单片机最小系统,PWM 控制芯片TL494, 开关电源升压主电路,电流检测回路,D/A 转换电路组成。系统输出直流电压18~45V 可调,可通过键盘设定调整,最大输出电流达到4A,能对输出电压和输出电流进行测量和显示,具有调节速度快、电压调整率低、负载调整率低、效率高,输出纹波小等优点。
1.3 系统实现结构框图
综合方案比较, 最终选择以ATmega128 为主控芯片,经D/A 转换后提供参考电压,与输出反馈电压进行比较,使TL494产生相应PWM 方波, 采用图腾柱驱动对Boost 升压电路进行控制,实现输出电压可调。利用INA169 进行电流采样、光耦和IRF9540 组成自动投切电路。系统设计总框图如图2.
2 理论分析与计算
2.1 储能元件电感的选择
计算出正确的电感值对选用合适的电感和输出电容以获得最小的输出电压纹波而言非常重要。本设计采用的电感是铁硅铝双线绕电感,它的磁芯损耗远低于铁粉芯及高磁通,具有低磁致伸缩(低噪音)的特点,是低成本的储能材料,在高温下性能稳定。
2.2 开关管的选择
本课题设计系统选用MOSFET 的型号是IRF540,使用沟渠工艺封装的N 通道增强型场效应功率晶体管,常用于DC 到DC转换器、开关电源、电视及电脑显示器电源等领域中,具有低导通内阻、快速开关、低热敏电阻等显着优点,其漏源电压V_DSS 最大可达100V, 导通电流I_D 最大可达23A, 其导通电阻R_DS(on)<77mΩ,允许最大管耗PCM 可达50W,满足电路要求。
2.3 续流二极管的选择
开关电源输出整流二极管通常采用肖特基二极管或者快速恢复二极管。因为它正向压降低,又几乎没有反向恢复时间,所以在本设计中选用的整流二极管是SS35,是低功耗肖特基二极管,其反向电压达到50V,正向压降只有0.6V 左右,具有高浪涌电流能力。
2.4 PWM 脉宽调制电路
PWM 控制器电路其核心采用专用集成芯片TL494,通过适当的外接电路,不但可以产生PWM 信号输出,而且还有多种保护功能。TL494 含有振荡器、误差放大器、PWM 比较器及输出级电路等部分。本设计外接电路如图3 所示。
TL494 引脚1、2 脚是误差放大器1 的同相和反相输入端,1接输出电压反馈端IN1,引脚2 接D/A 端口,反馈信号与预设信号经误差放大器进行比较放大,控制脉冲宽度,由8 脚输出,再经图腾柱电路,控制开关管IRF540 导通。为保护TL494 的输出三极管,经R30 和R31 分压,在4 脚加接近0.3V 的间歇调整电压,整机电源取16V 单电源。
2.5 MOSFET 驱动电路
系统中开关管选用N 沟道MOSFET 型号为IRF540N,其开启电压为2~4V.但为了保证它的充分导通,一般要提供10V左右的栅极电压。为此,本设计采用一个简单可靠、成本低廉的图腾柱电路作为MOSFET 的驱动电路(如图4 所示)。PWM 信号经过第一个三极管9014 放大,再经后级NPN 型三极管9014和PNP 型三极管9015 组成的互补电路保持后可给MOS 管的栅极G 极提供11V 左右电压。该电路在开关管的导通和关断期间有较好的性能:能快速可靠开通, 且不存在上升沿的高频振荡;在关断瞬间,驱动电路能提供一个低阻抗的通路供MOSFET栅源极间电容电压的快速泄放。该电路输入和输出刚好反向。即当PWM 为低电平时,栅极得到高电压,MOS 管充分导通;当PWM 为高电平时,栅极电压几乎为0,MOS管关断。
2.6 电源投切开关电路
电路如图5 所示,Q5 型号为IRF9540, 是P 沟道MOSFET,U2 为光耦,型号为P521.当光耦不工作时,Q5 的源极电位比栅极电位高,Q5 导通,电源导通;当光耦工作时,源极的电位拉到了栅极,Q5 截止,电源截止。光耦不仅起到开关的作用,而且其光电隔离的特性能够很好地保护单片机的IO 端口。
3 软件设计及其功能
ATmega128单片机能够根据键盘的输入值而输送不同的D/A 值给TL494 控制芯片,以实现键盘控制电源系统输出电压的大小;对输出电流进行A/D 采集,并且能够根据电流的大小判断是否投切为双电源供电和显示相应的工作状态;在液晶5110上显示输出电压和输出电流。具体软件流程图如图6 所示。
4 实验数据测试及分析
4.1 效率及负载调整率测试(单电源供电)
当Uin=16V 时, 改变负载, 测量输出电流Io,输出电压Uo,输入电流Iin,输入电压Uin.计算其效率η,负载调整率SI.
数据可以计算出负载调整率为:SI =(20.00-19.27)/20.00*100%=2.65%, 电源具有比较强的带负载能力,最大电流接近2A,具有比较高的转换效率,平均效率达到84.34%.
4.2 双电源供电效率测试(负载10Ω)
由表2 的数据可以看出,并联供电时电源的转换效率得到了明显的提高,功率也达到了92W,大大地提高了电源的供电能力。
本文转自:畅学单片机,转载此文目的在于传递更多信息,版权归原作者所有。